00001 #ifndef __GTEXTVIEW_H
00002 #define __GTEXTVIEW_H
00003
00004
00005 #define TEXTED_WRAP_NONE 0 // no word wrap
00006 #define TEXTED_WRAP_REFLOW 1 // dynamically wrap line to editor width
00007
00008
00009 #define GTVN_DOC_CHANGED 0x0001
00010 #define GTVN_CURSOR_CHANGED 0x0002
00011 #define GTVN_CODEPAGE_CHANGED 0x0004
00012
00013
00014 #define IsWhiteSpace(c) (strchr(GTextView::WhiteSpace, c) != 0)
00015 #define IsDelimiter(c) (strchr(GTextView::Delimiters, c) != 0)
00016 #define IsDigit(c) ((c) >= '0' AND (c) <= '9')
00017 #define IsAlpha(c) (((c) >= 'a' AND (c) <= 'z') OR ((c) >= 'A' AND (c) <= 'Z'))
00018 #define IsText(c) (IsDigit(c) OR IsAlpha(c) OR (c) == '_')
00019 #define IsWordBoundry(c) (strchr(GTextView::WhiteSpace, c) OR strchr(GTextView::Delimiters, c))
00020 #define UrlChar(c) (strchr(GTextView::UrlDelim, (c)) OR AlphaOrDigit((c)))
00021
00022 extern char16 *ConvertToCrLf(char16 *Text);
00023
00024
00025 class GTextViewMenu
00026 {
00027 public:
00028 virtual bool AppendItems(GSubMenu *Menu, int Base = 1000) = 0;
00029 virtual bool OnMenu(class GTextView *View, int Id) = 0;
00030 };
00031
00032
00033 class GTextView : public GLayout
00034 {
00035 public:
00036
00037 static char *WhiteSpace;
00038 static char *Delimiters;
00039 static char *UrlDelim;
00040 static bool AlphaOrDigit(char c);
00041
00043
00044 #define _TvMenuProp(Type, Name) \
00045 protected: \
00046 Type Name; \
00047 public: \
00048 virtual void Set##Name(Type i) { Name=i; } \
00049 virtual Type Get##Name() { return Name; }
00050
00051 _TvMenuProp(uint16, WrapAtCol)
00052 _TvMenuProp(bool, UrlDetect)
00053 _TvMenuProp(bool, ReadOnly)
00054 _TvMenuProp(uint8, WrapType)
00055 _TvMenuProp(uint8, TabSize)
00056 _TvMenuProp(bool, CrLf)
00057 _TvMenuProp(bool, AutoIndent)
00058 _TvMenuProp(COLOUR, BackColour)
00059 #undef _TvMenuProp
00060
00062
00063 GTextView()
00064 {
00065 WrapAtCol = 0;
00066 UrlDetect = true;
00067 ReadOnly = false;
00068 WrapType = TEXTED_WRAP_REFLOW;
00069 CrLf = false;
00070 AutoIndent = true;
00071 BackColour = Rgb24(255, 255, 255);
00072 }
00073
00075
00076 virtual bool Open(char *Name, char *Cs = 0) { return false; }
00077 virtual bool Save(char *Name, char *Cs = 0) { return false; }
00078
00080
00081 virtual bool DoFind() { return false; }
00082 virtual bool DoReplace() { return false; }
00083
00085
00086 virtual GTextViewMenu *GetMenuCallback() { return 0; }
00087 virtual void SetMenuCallback(GTextViewMenu *c) {}
00088
00090
00091
00092
00093
00094 virtual void SetCursor(int i, bool Select, bool ForceFullUpdate = false) {}
00095
00096
00097
00098 virtual int GetCursor(bool Cursor = true) { return 0; }
00099
00100
00101 virtual bool HasSelection() { return false; }
00102 virtual void UnSelectAll() {}
00103 virtual void SelectWord(int From) {}
00104 virtual void SelectAll() {}
00105 virtual char *GetSelection() { return 0; }
00106
00107
00108 virtual int IndexAt(int x, int y) { return 0; }
00109
00110
00111 virtual void PositionAt(int &x, int &y, int Index = -1) { }
00112
00113 virtual bool IsDirty() { return false; }
00114 virtual int GetLines() { return 0; }
00115 virtual void GetTextExtent(int &x, int &y) {}
00116
00118
00119 virtual bool Cut() { return false; }
00120 virtual bool Copy() { return false; }
00121 virtual bool Paste() { return false; }
00122
00124
00125 virtual void OnEscape(GKey &K) {}
00126 virtual void OnEnter(GKey &k) {}
00127 virtual void OnUrl(char *Url) {}
00128 };
00129
00130 #endif