mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-19 12:06:07 +08:00
First version of the SOurce SDK 2013
This commit is contained in:
297
public/vgui_controls/RichText.h
Normal file
297
public/vgui_controls/RichText.h
Normal file
@ -0,0 +1,297 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef RICHTEXT_H
|
||||
#define RICHTEXT_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include <vgui_controls/Panel.h>
|
||||
#include <utlvector.h>
|
||||
|
||||
namespace vgui
|
||||
{
|
||||
|
||||
class ClickPanel;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Non-editable display of a rich text control
|
||||
//-----------------------------------------------------------------------------
|
||||
class RichText : public Panel
|
||||
{
|
||||
DECLARE_CLASS_SIMPLE( RichText, Panel );
|
||||
|
||||
public:
|
||||
RichText(Panel *parent, const char *panelName);
|
||||
~RichText();
|
||||
|
||||
// text manipulation
|
||||
virtual void SetText(const char *text);
|
||||
virtual void SetText(const wchar_t *text);
|
||||
void GetText(int offset, OUT_Z_BYTECAP(bufLenInBytes) wchar_t *buf, int bufLenInBytes);
|
||||
void GetText(int offset, OUT_Z_BYTECAP(bufLenInBytes) char *pch, int bufLenInBytes);
|
||||
|
||||
// configuration
|
||||
void SetFont(HFont font);
|
||||
|
||||
// inserts characters at the end of the stream
|
||||
void InsertChar(wchar_t ch);
|
||||
void InsertString(const char *text);
|
||||
void InsertString(const wchar_t *wszText);
|
||||
|
||||
// selection
|
||||
void SelectNone();
|
||||
void SelectAllText();
|
||||
void SelectNoText();
|
||||
MESSAGE_FUNC( CutSelected, "DoCutSelected" );
|
||||
MESSAGE_FUNC( CopySelected, "DoCopySelected" );
|
||||
|
||||
// sets the RichText control interactive or not (meaning you can select/copy text in the window)
|
||||
void SetPanelInteractive( bool bInteractive ){ m_bInteractive = bInteractive; }
|
||||
|
||||
// sets the RichText scrollbar invisible if it's not going to be used
|
||||
void SetUnusedScrollbarInvisible( bool bInvis ){ m_bUnusedScrollbarInvis = bInvis; }
|
||||
|
||||
// cursor movement
|
||||
void GotoTextStart(); // go to start of text buffer
|
||||
void GotoTextEnd(); // go to end of text buffer
|
||||
|
||||
// configuration
|
||||
// sets visibility of scrollbar
|
||||
void SetVerticalScrollbar(bool state);
|
||||
// sets limit of number of characters insertable into field; set to -1 to remove maximum
|
||||
// only works with if rich-edit is NOT enabled
|
||||
void SetMaximumCharCount(int maxChars);
|
||||
|
||||
// rich edit commands
|
||||
void InsertColorChange(Color col);
|
||||
// IndentChange doesn't take effect until the next newline character
|
||||
void InsertIndentChange(int pixelsIndent);
|
||||
// clickable text
|
||||
// notification that text was clicked is through "TextClicked" message
|
||||
void InsertClickableTextStart( const char *pchClickAction = NULL );
|
||||
void InsertClickableTextEnd();
|
||||
// inserts a string that needs to be scanned for urls/mailto commands to be made clickable
|
||||
void InsertPossibleURLString(const char *text, Color URLTextColor, Color normalTextColor);
|
||||
|
||||
void InsertFade( float flSustain, float flLength );
|
||||
|
||||
void ResetAllFades( bool bHold, bool bOnlyExpired = false, float flNewSustain = -1.0f );
|
||||
|
||||
// sets the height of the window so all text is visible.
|
||||
// used by tooltips
|
||||
void SetToFullHeight();
|
||||
int GetNumLines();
|
||||
|
||||
/* CUSTOM MESSAGE HANDLING
|
||||
"SetText"
|
||||
input: "text" - text is set to be this string
|
||||
*/
|
||||
|
||||
/* MESSAGE SENDING (to action signal targets)
|
||||
"TextChanged" - sent when the text is edited by the user
|
||||
|
||||
|
||||
"TextClicked" - sent when clickable text has been clicked on
|
||||
"text" - the text that was clicked on
|
||||
*/
|
||||
|
||||
virtual bool RequestInfo(KeyValues *outputData);
|
||||
/* INFO HANDLING
|
||||
"GetText"
|
||||
returns:
|
||||
"text" - text contained in the text box
|
||||
*/
|
||||
virtual void SetFgColor( Color color );
|
||||
virtual void SetDrawOffsets( int ofsx, int ofsy );
|
||||
bool IsScrollbarVisible();
|
||||
|
||||
// sets how URL's are handled
|
||||
// if set, a "URLClicked" "url" "<data>" message will be sent to that panel
|
||||
void SetURLClickedHandler( Panel *pPanelToHandleClickMsg );
|
||||
|
||||
void SetUnderlineFont( HFont font );
|
||||
|
||||
bool IsAllTextAlphaZero() const;
|
||||
bool HasText() const;
|
||||
|
||||
void SetDrawTextOnly();
|
||||
|
||||
protected:
|
||||
virtual void OnThink();
|
||||
virtual void PerformLayout(); // layout the text in the window
|
||||
virtual void ApplySchemeSettings(IScheme *pScheme);
|
||||
virtual void Paint();
|
||||
|
||||
virtual void ApplySettings( KeyValues *inResourceData );
|
||||
virtual void GetSettings( KeyValues *outResourceData );
|
||||
virtual const char *GetDescription( void );
|
||||
MESSAGE_FUNC_WCHARPTR( OnSetText, "SetText", text );
|
||||
MESSAGE_FUNC( OnSliderMoved, "ScrollBarSliderMoved" ); // respond to scroll bar events
|
||||
virtual void OnKillFocus();
|
||||
virtual void OnMouseWheeled(int delta); // respond to mouse wheel events
|
||||
virtual void OnKeyCodeTyped(KeyCode code); //respond to keyboard events
|
||||
|
||||
MESSAGE_FUNC_INT( OnClickPanel, "ClickPanel", index);
|
||||
|
||||
virtual void OnCursorMoved(int x, int y); // respond to moving the cursor with mouse button down
|
||||
virtual void OnMousePressed(MouseCode code); // respond to mouse down events
|
||||
virtual void OnMouseDoublePressed(MouseCode code);
|
||||
virtual void OnMouseReleased(MouseCode code); // respond to mouse up events
|
||||
|
||||
virtual void OnMouseFocusTicked(); // do while window has mouse focus
|
||||
virtual void OnCursorEntered(); // handle cursor entering window
|
||||
virtual void OnCursorExited(); // handle cursor exiting window
|
||||
|
||||
virtual void OnMouseCaptureLost();
|
||||
virtual void OnSizeChanged(int newWide, int newTall);
|
||||
virtual void OnSetFocus();
|
||||
|
||||
// clickable url handling
|
||||
int ParseTextStringForUrls(const char *text, int startPos, char *pchURLText, int cchURLText, char *pchURL, int cchURL, bool &clickable);
|
||||
virtual void OnTextClicked(const wchar_t *text);
|
||||
|
||||
#ifdef DBGFLAG_VALIDATE
|
||||
virtual void Validate( CValidator &validator, char *pchName );
|
||||
#endif // DBGFLAG_VALIDATE
|
||||
|
||||
protected:
|
||||
ScrollBar *_vertScrollBar; // the scroll bar used in the window
|
||||
|
||||
private:
|
||||
int GetLineHeight();
|
||||
HFont GetDefaultFont();
|
||||
|
||||
const wchar_t *ResolveLocalizedTextAndVariables( char const *pchLookup, OUT_Z_BYTECAP(outbufsizeinbytes) wchar_t *outbuf, size_t outbufsizeinbytes );
|
||||
void CheckRecalcLineBreaks();
|
||||
|
||||
void GotoWordRight(); // move cursor to start of next word
|
||||
void GotoWordLeft(); // move cursor to start of prev word
|
||||
|
||||
void TruncateTextStream();
|
||||
bool GetSelectedRange(int& cx0,int& cx1);
|
||||
void CursorToPixelSpace(int cursorPos, int &cx, int &cy);
|
||||
int PixelToCursorSpace(int cx, int cy);
|
||||
void AddAnotherLine(int &cx, int &cy);
|
||||
void RecalculateDefaultState(int startIndex);
|
||||
|
||||
void LayoutVerticalScrollBarSlider();
|
||||
void OpenEditMenu();
|
||||
void FinishingURL(int x, int y);
|
||||
// Returns the character index the drawing should Start at
|
||||
int GetStartDrawIndex(int &lineBreakIndexIndex);
|
||||
int GetCursorLine();
|
||||
int GetClickableTextIndexStart(int startIndex);
|
||||
void CreateEditMenu(); // create copy/cut/paste menu
|
||||
|
||||
MESSAGE_FUNC_INT( MoveScrollBar, "MoveScrollBar", delta );
|
||||
MESSAGE_FUNC_INT( MoveScrollBarDirect, "MoveScrollBarDirect", delta );
|
||||
|
||||
// linebreak stream functions
|
||||
void InvalidateLineBreakStream();
|
||||
void RecalculateLineBreaks();
|
||||
|
||||
struct TFade
|
||||
{
|
||||
float flFadeStartTime;
|
||||
float flFadeLength;
|
||||
float flFadeSustain;
|
||||
int iOriginalAlpha;
|
||||
};
|
||||
|
||||
// format stream - describes changes in formatting for the text stream
|
||||
struct TFormatStream
|
||||
{
|
||||
// render state
|
||||
Color color;
|
||||
int pixelsIndent;
|
||||
bool textClickable;
|
||||
CUtlSymbol m_sClickableTextAction;
|
||||
|
||||
TFade fade;
|
||||
|
||||
// position in TextStream that these changes take effect
|
||||
int textStreamIndex;
|
||||
};
|
||||
|
||||
bool m_bResetFades;
|
||||
bool m_bInteractive;
|
||||
bool m_bUnusedScrollbarInvis;
|
||||
bool m_bAllTextAlphaIsZero;
|
||||
|
||||
// data
|
||||
CUtlVector<wchar_t> m_TextStream; // the text in the text window is stored in this buffer
|
||||
CUtlVector<int> m_LineBreaks; // an array that holds the index in the buffer to wrap lines at
|
||||
CUtlVector<TFormatStream> m_FormatStream; // list of format changes
|
||||
|
||||
bool m_bRecalcLineBreaks;
|
||||
|
||||
int _recalculateBreaksIndex; // tells next linebreakindex index to Start recalculating line breaks
|
||||
bool _invalidateVerticalScrollbarSlider;
|
||||
int _cursorPos; // the position in the text buffer of the blinking cursor
|
||||
bool _mouseSelection; // whether we are highlighting text or not (selecting text)
|
||||
bool _mouseDragSelection; // tells weather mouse is outside window and button is down so we select text
|
||||
int _select[2]; // select[1] is the offset in the text to where the cursor is currently
|
||||
// select[0] is the offset to where the cursor was dragged to. or -1 if no drag.
|
||||
int _pixelsIndent;
|
||||
int _maxCharCount; // max number of chars that can be in the text buffer
|
||||
HFont _font; // font of chars in the text buffer
|
||||
HFont m_hFontUnderline;
|
||||
Color _selectionColor;
|
||||
Color _selectionTextColor; // color of the highlighted text
|
||||
bool _currentTextClickable;
|
||||
CUtlVector<ClickPanel *> _clickableTextPanels;
|
||||
int _clickableTextIndex;
|
||||
Color _defaultTextColor;
|
||||
int _drawOffsetX;
|
||||
int _drawOffsetY;
|
||||
|
||||
Panel *m_pInterior;
|
||||
PHandle m_hPanelToHandleClickingURLs;
|
||||
|
||||
|
||||
// sub-controls
|
||||
Menu *m_pEditMenu; // cut/copy/paste popup
|
||||
|
||||
char *m_pszInitialText; // initial text
|
||||
|
||||
// saved state
|
||||
bool _recalcSavedRenderState;
|
||||
|
||||
struct TRenderState
|
||||
{
|
||||
// rendering positions
|
||||
int x, y;
|
||||
|
||||
// basic state
|
||||
Color textColor;
|
||||
int pixelsIndent;
|
||||
bool textClickable;
|
||||
|
||||
// index into our current position in the formatting stream
|
||||
int formatStreamIndex;
|
||||
};
|
||||
TRenderState m_CachedRenderState; // cached render state for the beginning of painting
|
||||
|
||||
// updates a render state based on the formatting and color streams
|
||||
// returns true if any state changed
|
||||
bool UpdateRenderState(int textStreamPos, TRenderState &renderState);
|
||||
void CalculateFade( TRenderState &renderState );
|
||||
|
||||
void GenerateRenderStateForTextStreamIndex(int textStreamIndex, TRenderState &renderState);
|
||||
int FindFormatStreamIndexForTextStreamPos(int textStreamIndex);
|
||||
|
||||
// draws a string of characters with the same formatting using the current render state
|
||||
int DrawString(int iFirst, int iLast, TRenderState &renderState, HFont font);
|
||||
};
|
||||
|
||||
} // namespace vgui
|
||||
|
||||
|
||||
#endif // RICHTEXT_H
|
Reference in New Issue
Block a user