00001
00002
00003
00004
00005 #ifndef __GDOCVIEW_H
00006 #define __GDOCVIEW_H
00007
00008
00009
00011 #define TEXTED_WRAP_NONE 0
00012
00013 #define TEXTED_WRAP_REFLOW 1
00014
00015
00016
00018 #define GTVN_DOC_CHANGED 0x01
00019
00020 #define GTVN_CURSOR_CHANGED 0x02
00021
00022 #define GTVN_CODEPAGE_CHANGED 0x04
00023
00024 #define GTVN_FIXED_WIDTH_CHANGED 0x08
00025
00026 #define GTVN_SHOW_IMGS_CHANGED 0x10
00027
00028
00029
00031 #define IsWhiteSpace(c) (c < 256 AND strchr(GDocView::WhiteSpace, c) != 0)
00032
00033 #define IsDelimiter(c) (c < 256 AND strchr(GDocView::Delimiters, c) != 0)
00034
00035 #define IsDigit(c) ((c) >= '0' AND (c) <= '9')
00036
00037 #define IsAlpha(c) (((c) >= 'a' AND (c) <= 'z') OR ((c) >= 'A' AND (c) <= 'Z'))
00038
00039 #define IsText(c) (IsDigit(c) OR IsAlpha(c) OR (c) == '_')
00040
00041 #define IsWordBoundry(c) (strchr(GDocView::WhiteSpace, c) OR strchr(GDocView::Delimiters, c))
00042
00043 #define UrlChar(c) ( \
00044 strchr(GDocView::UrlDelim, (c)) OR \
00045 AlphaOrDigit((c)) OR \
00046 ((c) >= 256) \
00047 )
00048
00049 #define EmailChar(c) (strchr("._-:", (c)) OR AlphaOrDigit((c)))
00050
00051
00052 #define M_IMAGE_LOADED (M_USER + 0x500) // a=(char*)Uri, b=(GSurface*)pDC;
00053
00054 extern char16 *ConvertToCrLf(char16 *Text);
00055
00056
00057 class GDocView;
00058
00060 class GDocumentEnv
00061 {
00062 friend class GDocView;
00063
00064 protected:
00065 GDocView *Viewer;
00066
00067 public:
00068 GDocumentEnv(GDocView *v = 0) { Viewer = v; }
00069 virtual ~GDocumentEnv() {}
00070
00073 virtual bool AppendItems(GSubMenu *Menu, int Base = 1000) { return false; }
00074
00077 virtual bool OnMenu(GDocView *View, int Id) { return false; }
00078
00085 virtual bool GetImageUri(char *Uri, GSurface **pDC, char *FileName = 0, int FileBufSize = 0) { return 0; }
00086
00088 virtual bool OnNavigate(char *Uri) { return false; }
00089
00093 virtual char *OnDynamicContent(char *Code) { return 0; }
00094 };
00095
00101 class GDefaultDocumentEnv : public GDocumentEnv
00102 {
00103 public:
00104 bool GetImageUri(char *Uri, GSurface **pDC, char *FileName = 0, int FileBufSize = 0);
00105 bool OnNavigate(char *Uri);
00106 };
00107
00109 class GDocFindReplaceParams {};
00110
00112 class GDocView : public GLayout
00113 {
00114 protected:
00115 GDocumentEnv *Environment;
00116 char *Charset;
00117
00118 public:
00119
00120 static char *WhiteSpace;
00121 static char *Delimiters;
00122 static char *UrlDelim;
00123 static bool AlphaOrDigit(char c);
00124
00126
00127 #define _TvMenuProp(Type, Name) \
00128 protected: \
00129 Type Name; \
00130 public: \
00131 virtual void Set##Name(Type i) { Name=i; } \
00132 Type Get##Name() { return Name; }
00133
00134 _TvMenuProp(uint16, WrapAtCol)
00135 _TvMenuProp(bool, UrlDetect)
00136 _TvMenuProp(bool, ReadOnly)
00137 _TvMenuProp(uint8, WrapType)
00138 _TvMenuProp(uint8, TabSize)
00139 _TvMenuProp(uint8, IndentSize)
00140 _TvMenuProp(bool, HardTabs)
00141 _TvMenuProp(bool, ShowWhiteSpace)
00142 _TvMenuProp(bool, ObscurePassword)
00143 _TvMenuProp(bool, CrLf)
00144 _TvMenuProp(bool, AutoIndent)
00145 _TvMenuProp(bool, FixedWidthFont)
00146 _TvMenuProp(COLOUR, BackColour)
00147 _TvMenuProp(bool, LoadImages)
00148 _TvMenuProp(bool, OverideDocCharset)
00149 #undef _TvMenuProp
00150
00151 char *GetCharset() { return Charset; }
00152 void SetCharset(char *s) { char *cs = NewStr(s); DeleteArray(Charset); Charset = cs; }
00153 virtual char *GetMimeType() = 0;
00154
00156
00157 GDocView(GDocumentEnv *e = 0)
00158 {
00159 WrapAtCol = 0;
00160 UrlDetect = true;
00161 ReadOnly = false;
00162 WrapType = TEXTED_WRAP_REFLOW;
00163 TabSize = 4;
00164 IndentSize = 4;
00165 HardTabs = true;
00166 ShowWhiteSpace = false;
00167 ObscurePassword = false;
00168 CrLf = false;
00169 AutoIndent = true;
00170 FixedWidthFont = false;
00171 BackColour = Rgb24(255, 255, 255);
00172 LoadImages = false;
00173 Charset = 0;
00174 OverideDocCharset = false;
00175
00176 Environment = 0;
00177
00178 SetEnv(e);
00179 }
00180
00181 virtual ~GDocView()
00182 {
00183 SetEnv(0);
00184 }
00185
00187 virtual bool Open(char *Name, char *Cs = 0) { return false; }
00189 virtual bool Save(char *Name, char *Cs = 0) { return false; }
00190
00192
00194 virtual bool DoFind() { return false; }
00196 virtual bool DoReplace() { return false; }
00197 virtual GDocFindReplaceParams *CreateFindReplaceParams() { return 0; }
00198 virtual void SetFindReplaceParams(GDocFindReplaceParams *Params) { }
00199
00201
00203 virtual GDocumentEnv *GetEnv() { return Environment; }
00205 virtual void SetEnv(GDocumentEnv *e)
00206 {
00207 if (Environment)
00208 {
00209 Environment->Viewer = 0;
00210 }
00211 Environment = e;
00212 if (Environment)
00213 {
00214 Environment->Viewer = this;
00215 }
00216 }
00217
00219
00220
00223 virtual void SetCursor(int i, bool Select, bool ForceFullUpdate = false) {}
00224
00227 virtual int GetCursor(bool Cursor = true) { return 0; }
00228
00230 virtual bool HasSelection() { return false; }
00232 virtual void UnSelectAll() {}
00234 virtual void SelectWord(int From) {}
00236 virtual void SelectAll() {}
00238 virtual char *GetSelection() { return 0; }
00239
00241 virtual int IndexAt(int x, int y) { return 0; }
00242
00244 virtual void PositionAt(int &x, int &y, int Index = -1) { }
00245
00247 virtual bool IsDirty() { return false; }
00249 virtual int GetLines() { return 0; }
00251 virtual void GetTextExtent(int &x, int &y) {}
00252
00254
00256 virtual bool Cut() { return false; }
00258 virtual bool Copy() { return false; }
00260 virtual bool Paste() { return false; }
00261
00263
00265 virtual void OnEscape(GKey &K) {}
00267 virtual void OnEnter(GKey &k) {}
00269 virtual void OnUrl(char *Url) {}
00270 };
00271
00272 #endif