diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/public/vgui_controls/RichText.h | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/public/vgui_controls/RichText.h')
| -rw-r--r-- | mp/src/public/vgui_controls/RichText.h | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/mp/src/public/vgui_controls/RichText.h b/mp/src/public/vgui_controls/RichText.h new file mode 100644 index 00000000..ea54285a --- /dev/null +++ b/mp/src/public/vgui_controls/RichText.h @@ -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
|