1 /********************************************************************************
2 *                                                                               *
3 *                     T h e   A d i e   T e x t   E d i t o r                   *
4 *                                                                               *
5 *********************************************************************************
6 * Copyright (C) 1998,2021 by Jeroen van der Zijp.   All Rights Reserved.        *
7 *********************************************************************************
8 * This program is free software: you can redistribute it and/or modify          *
9 * it under the terms of the GNU General Public License as published by          *
10 * the Free Software Foundation, either version 3 of the License, or             *
11 * (at your option) any later version.                                           *
12 *                                                                               *
13 * This program is distributed in the hope that it will be useful,               *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of                *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                 *
16 * GNU General Public License for more details.                                  *
17 *                                                                               *
18 * You should have received a copy of the GNU General Public License             *
19 * along with this program.  If not, see <http://www.gnu.org/licenses/>.         *
20 ********************************************************************************/
21 #ifndef TEXTWINDOW_H
22 #define TEXTWINDOW_H
23 
24 
25 
26 class Adie;
27 class Syntax;
28 class HelpWindow;
29 class Preferences;
30 class ShellCommand;
31 
32 // Array of styles
33 typedef FXArray<FXHiliteStyle> FXHiliteArray;
34 
35 
36 // Editor main window
37 class TextWindow : public FXMainWindow {
38   FXDECLARE(TextWindow)
39 protected:
40   FXToolBarShell      *dragshell1;              // Shell for floating menubar
41   FXToolBarShell      *dragshell2;              // Shell for floating toolbar
42   FXToolBarShell      *dragshell3;              // Shell for floating search bar
43   FXDockSite          *topdock;                 // Topmost dock area
44   FXDockSite          *bottomdock;              // Bottom dock area
45   FXDockSite          *leftdock;                // Left dock area
46   FXDockSite          *rightdock;               // Bottom dock area
47   FXMenuPane          *filemenu;                // File menu
48   FXMenuPane          *editmenu;                // Edit menu
49   FXMenuPane          *gotomenu;                // Goto menu
50   FXMenuPane          *searchmenu;              // Search menu
51   FXMenuPane          *shellmenu;               // Shell menu
52   FXMenuPane          *optionmenu;              // Option menu
53   FXMenuPane          *viewmenu;                // View menu
54   FXMenuPane          *windowmenu;              // Window menu
55   FXMenuPane          *helpmenu;                // Help menu
56   FXMenuPane          *syntaxmenu;              // Syntax menu
57   FXMenuPane          *tabsmenu;                // Tab selection menu
58   FXVerticalFrame     *treebox;                 // Tree box containing directories/files
59   FXHorizontalFrame   *undoredoblock;           // Undo/redo block on status line
60   FXHorizontalFrame   *editorframe;             // Editor frame
61   FXHorizontalFrame   *loggerframe;             // Logger frame
62   FXText              *editor;                  // Editor text widget
63   FXText              *logger;                  // Logger text widget
64   FXDirList           *dirlist;                 // Directory view
65   FXComboBox          *filter;                  // Combobox for pattern list
66   FXTextField         *clock;                   // Time
67   FXMenuBar           *menubar;                 // Menu bar
68   FXToolBar           *toolbar;                 // Tool bar
69   FXToolBar           *searchbar;               // Incremental search bar
70   FXTextField         *searchtext;              // Incremental search text field
71   FXStatusBar         *statusbar;               // Status bar
72   FXFont              *font;                    // Text window font
73   FXint                bookmark[10];            // Book marks
74   Syntax              *syntax;                  // Syntax highlighter
75   FXUndoList           undolist;                // Undo list
76   FXRecentFiles        mrufiles;                // Recent files list
77   FXString             filename;                // File being edited
78   FXTime               filetime;                // Original modtime of file
79   FXbool               filenameset;             // Filename is set
80   FXString             delimiters;              // Text delimiters
81   FXString             searchpaths;             // Search paths for files
82   FXHiliteArray        styles;                  // Highlight styles
83   ShellCommand        *shellCommand;            // Running shell command, if any
84   FXint                replaceStart;            // Start of text to be replaced
85   FXint                replaceEnd;              // End of text to be replaced
86   FXint                initialwidth;            // Initial width
87   FXint                initialheight;           // Initial height
88   FXbool               initialsize;             // New window is initialwidth x initialheight
89   FXString             isearchString[20];       // Incremental search strings
90   FXuint               isearchOption[20];       // Incremental search options
91   FXbool               isearchReplace;          // Replace new entry
92   FXint                isearchIndex;            // Incremental search index
93   FXint                isearchpos;              // Incremental search position
94   FXString             searchstring;            // String of last search
95   FXuint               searchflags;             // Incremental search flags
96   FXbool               searching;               // Incremental search in effect
97   FXbool               showsearchbar;           // Showing incremental search bar
98   FXbool               modeline;                // Set modes from modeline
99   FXbool               autoindent;              // Autoindent mode
100   FXint                wrapcols;                // Wrap lines at this column if fixed wrap
101   FXbool               wrapping;                // Wrapping lines
102   FXbool               fixedwrap;               // Wrap lines at fixed column
103   FXint                tabcols;                 // Tab indents this many columns
104   FXbool               hardtabs;                // Insert hard tabs
105   FXint                barcols;                 // Number of columns for line numbers
106   FXbool               showlogger;              // Showing error logger
107   FXbool               colorize;                // Syntax coloring on if possible
108   FXbool               stripcr;                 // Strip carriage returns
109   FXbool               stripsp;                 // Strip trailing spaces
110   FXbool               appendcr;                // Append carriage returns
111   FXbool               appendnl;                // Append missing newline at end of text
112   FXbool               saveviews;               // Save views of files
113   FXbool               savemarks;               // Save bookmarks of files
114   FXbool               warnchanged;             // Warn if changed by other program
115 protected:
116   void createMenubar();
117   void createToolbar();
118   void createSearchbar();
119   void createStatusbar();
120   void readRegistry();
121   void writeRegistry();
122   FXint findRestylePoint(FXint pos,FXint& style) const;
123   FXint backwardByContext(FXint pos) const;
124   FXint forwardByContext(FXint pos) const;
125   void restyleText();
126   void restyleText(FXint pos,FXint del,FXint ins);
127   FXint restyleRange(FXint beg,FXint end,FXint& head,FXint& tail,FXint rule);
128   FXHiliteStyle readStyleForRule(const FXString& group,const FXString& name,const FXString& style);
129   void writeStyleForRule(const FXString& group,const FXString& name,const FXHiliteStyle& style);
130   FXbool matchesSelection(const FXString& string,FXint* beg,FXint* end,FXuint flgs,FXint npar) const;
131   void updateBookmarks(FXint pos,FXint nd,FXint ni);
132   void addSearchHistory(const FXString& pat,FXuint opt,FXbool rep);
133   void loadSearchHistory();
134   void saveSearchHistory();
135   FXbool saveChanges();
136 protected:
137   static FXbool loadBuffer(const FXString& file,FXString& buffer,FXuint bits=0);
138   static FXbool saveBuffer(const FXString& file,FXString& buffer,FXuint bits=0);
139 protected:
140   enum{
141     MAXUNDOSIZE  = 1000000,     // Don't let the undo buffer get out of hand
142     KEEPUNDOSIZE = 500000       // When MAXUNDOSIZE was exceeded, trim down to this size
143     };
144 private:
TextWindow()145   TextWindow(){}
146   TextWindow(const TextWindow&);
147   TextWindow& operator=(const TextWindow&);
148 public:
149   long onUpdate(FXObject*,FXSelector,void*);
150   long onFocusIn(FXObject*,FXSelector,void*);
151   long onCmdAbout(FXObject*,FXSelector,void*);
152   long onCmdHelp(FXObject*,FXSelector,void*);
153   long onUpdIsEditable(FXObject*,FXSelector,void*);
154   long onUpdHasSelection(FXObject*,FXSelector,void*);
155 
156   // File management
157   long onCmdNew(FXObject*,FXSelector,void*);
158   long onCmdOpen(FXObject*,FXSelector,void*);
159   long onCmdOpenRecent(FXObject*,FXSelector,void*);
160   long onCmdOpenTree(FXObject*,FXSelector,void*);
161   long onCmdOpenSelected(FXObject*,FXSelector,void*);
162   long onCmdSwitch(FXObject*,FXSelector,void*);
163   long onCmdReopen(FXObject*,FXSelector,void*);
164   long onUpdReopen(FXObject*,FXSelector,void*);
165   long onCmdSave(FXObject*,FXSelector,void*);
166   long onUpdSave(FXObject*,FXSelector,void*);
167   long onCmdSaveAs(FXObject*,FXSelector,void*);
168   long onCmdSaveTo(FXObject*,FXSelector,void*);
169   long onCmdFont(FXObject*,FXSelector,void*);
170   long onCmdPrint(FXObject*,FXSelector,void*);
171   long onCmdSaveSettings(FXObject*,FXSelector,void*);
172   long onCmdReplaceFile(FXObject*,FXSelector,void*);
173   long onCmdExtractFile(FXObject*,FXSelector,void*);
174 
175   // Text display
176   long onCmdTextBackColor(FXObject*,FXSelector,void*);
177   long onUpdTextBackColor(FXObject*,FXSelector,void*);
178   long onCmdTextForeColor(FXObject*,FXSelector,void*);
179   long onUpdTextForeColor(FXObject*,FXSelector,void*);
180   long onCmdTextSelBackColor(FXObject*,FXSelector,void*);
181   long onUpdTextSelBackColor(FXObject*,FXSelector,void*);
182   long onCmdTextSelForeColor(FXObject*,FXSelector,void*);
183   long onUpdTextSelForeColor(FXObject*,FXSelector,void*);
184   long onCmdTextHiliteBackColor(FXObject*,FXSelector,void*);
185   long onUpdTextHiliteBackColor(FXObject*,FXSelector,void*);
186   long onCmdTextHiliteForeColor(FXObject*,FXSelector,void*);
187   long onUpdTextHiliteForeColor(FXObject*,FXSelector,void*);
188   long onCmdTextCursorColor(FXObject*,FXSelector,void*);
189   long onUpdTextCursorColor(FXObject*,FXSelector,void*);
190   long onCmdTextActBackColor(FXObject*,FXSelector,void*);
191   long onUpdTextActBackColor(FXObject*,FXSelector,void*);
192   long onCmdTextBarColor(FXObject*,FXSelector,void*);
193   long onUpdTextBarColor(FXObject*,FXSelector,void*);
194   long onCmdTextNumberColor(FXObject*,FXSelector,void*);
195   long onUpdTextNumberColor(FXObject*,FXSelector,void*);
196   long onCmdDirBackColor(FXObject*,FXSelector,void*);
197   long onUpdDirBackColor(FXObject*,FXSelector,void*);
198   long onCmdDirForeColor(FXObject*,FXSelector,void*);
199   long onUpdDirForeColor(FXObject*,FXSelector,void*);
200   long onCmdDirSelBackColor(FXObject*,FXSelector,void*);
201   long onUpdDirSelBackColor(FXObject*,FXSelector,void*);
202   long onCmdDirSelForeColor(FXObject*,FXSelector,void*);
203   long onUpdDirSelForeColor(FXObject*,FXSelector,void*);
204   long onCmdDirLineColor(FXObject*,FXSelector,void*);
205   long onUpdDirLineColor(FXObject*,FXSelector,void*);
206   long onCmdShowActive(FXObject*,FXSelector,void*);
207   long onUpdShowActive(FXObject*,FXSelector,void*);
208   long onCmdLineNumbers(FXObject*,FXSelector,void*);
209   long onUpdLineNumbers(FXObject*,FXSelector,void*);
210   long onCmdTabColumns(FXObject*,FXSelector,void*);
211   long onUpdTabColumns(FXObject*,FXSelector,void*);
212   long onCmdTabSelect(FXObject*,FXSelector,void*);
213   long onUpdTabSelect(FXObject*,FXSelector,void*);
214   long onCmdBraceMatch(FXObject*,FXSelector,void*);
215   long onUpdBraceMatch(FXObject*,FXSelector,void*);
216   long onCmdBraceMatchTime(FXObject*,FXSelector,void*);
217   long onUpdBraceMatchTime(FXObject*,FXSelector,void*);
218   long onCmdBraceMatchStay(FXObject*,FXSelector,void*);
219   long onUpdBraceMatchStay(FXObject*,FXSelector,void*);
220   long onCmdModeline(FXObject*,FXSelector,void*);
221   long onUpdModeline(FXObject*,FXSelector,void*);
222   long onCmdAutoIndent(FXObject*,FXSelector,void*);
223   long onUpdAutoIndent(FXObject*,FXSelector,void*);
224   long onCmdInsertTabs(FXObject*,FXSelector,void*);
225   long onUpdInsertTabs(FXObject*,FXSelector,void*);
226   long onCmdWrapColumns(FXObject*,FXSelector,void*);
227   long onUpdWrapColumns(FXObject*,FXSelector,void*);
228   long onCmdWrapFixed(FXObject*,FXSelector,void*);
229   long onUpdWrapFixed(FXObject*,FXSelector,void*);
230   long onCmdWrap(FXObject*,FXSelector,void*);
231   long onUpdWrap(FXObject*,FXSelector,void*);
232 
233   // Text changes
234   long onTextFocus(FXObject*,FXSelector,void*);
235   long onTextInserted(FXObject*,FXSelector,void*);
236   long onTextReplaced(FXObject*,FXSelector,void*);
237   long onTextDeleted(FXObject*,FXSelector,void*);
238   long onTextDNDDrop(FXObject*,FXSelector,void*);
239   long onTextDNDMotion(FXObject*,FXSelector,void*);
240   long onTextRightMouse(FXObject*,FXSelector,void*);
241 
242   // Miscellaneous
243   long onCmdStripReturns(FXObject*,FXSelector,void*);
244   long onUpdStripReturns(FXObject*,FXSelector,void*);
245   long onCmdStripSpaces(FXObject*,FXSelector,void*);
246   long onUpdStripSpaces(FXObject*,FXSelector,void*);
247   long onCmdAppendNewline(FXObject*,FXSelector,void*);
248   long onUpdAppendNewline(FXObject*,FXSelector,void*);
249   long onCmdAppendCarriageReturn(FXObject*,FXSelector,void*);
250   long onUpdAppendCarriageReturn(FXObject*,FXSelector,void*);
251   long onCmdFilter(FXObject*,FXSelector,void*);
252   long onUpdOverstrike(FXObject*,FXSelector,void*);
253   long onUpdReadOnly(FXObject*,FXSelector,void*);
254   long onUpdTabMode(FXObject*,FXSelector,void*);
255   long onUpdNumRows(FXObject*,FXSelector,void*);
256   long onClock(FXObject*,FXSelector,void*);
257   long onCmdPreferences(FXObject*,FXSelector,void*);
258   long onCmdDelimiters(FXObject*,FXSelector,void*);
259   long onUpdDelimiters(FXObject*,FXSelector,void*);
260   long onCmdWheelAdjust(FXObject*,FXSelector,void*);
261   long onUpdWheelAdjust(FXObject*,FXSelector,void*);
262   long onCmdSetMark(FXObject*,FXSelector,void*);
263   long onUpdSetMark(FXObject*,FXSelector,void*);
264   long onCmdNextMark(FXObject*,FXSelector,void*);
265   long onUpdNextMark(FXObject*,FXSelector,void*);
266   long onCmdPrevMark(FXObject*,FXSelector,void*);
267   long onUpdPrevMark(FXObject*,FXSelector,void*);
268   long onCmdGotoMark(FXObject*,FXSelector,void*);
269   long onUpdGotoMark(FXObject*,FXSelector,void*);
270   long onCmdDelMark(FXObject*,FXSelector,void*);
271   long onUpdDelMark(FXObject*,FXSelector,void*);
272   long onUpdClearMarks(FXObject*,FXSelector,void*);
273   long onCmdClearMarks(FXObject*,FXSelector,void*);
274   long onCmdSaveMarks(FXObject*,FXSelector,void*);
275   long onUpdSaveMarks(FXObject*,FXSelector,void*);
276   long onCmdSaveViews(FXObject*,FXSelector,void*);
277   long onUpdSaveViews(FXObject*,FXSelector,void*);
278   long onCmdWarnChanged(FXObject*,FXSelector,void*);
279   long onUpdWarnChanged(FXObject*,FXSelector,void*);
280   long onCmdSyntax(FXObject*,FXSelector,void*);
281   long onUpdSyntax(FXObject*,FXSelector,void*);
282   long onCmdRestyle(FXObject*,FXSelector,void*);
283   long onUpdRestyle(FXObject*,FXSelector,void*);
284   long onCmdWindow(FXObject*,FXSelector,void*);
285   long onUpdWindow(FXObject*,FXSelector,void*);
286   long onCmdSyntaxSwitch(FXObject*,FXSelector,void*);
287   long onUpdSyntaxSwitch(FXObject*,FXSelector,void*);
288   long onCmdUseInitialSize(FXObject*,FXSelector,void*);
289   long onUpdUseInitialSize(FXObject*,FXSelector,void*);
290   long onCmdSetInitialSize(FXObject*,FXSelector,void*);
291   long onCmdToggleBrowser(FXObject*,FXSelector,void*);
292   long onUpdToggleBrowser(FXObject*,FXSelector,void*);
293   long onCmdToggleHidden(FXObject*,FXSelector,void*);
294   long onUpdToggleHidden(FXObject*,FXSelector,void*);
295   long onCmdSearchPaths(FXObject*,FXSelector,void*);
296   long onUpdSearchPaths(FXObject*,FXSelector,void*);
297   long onCmdFindInFiles(FXObject*,FXSelector,void*);
298   long onQueryTextTip(FXObject*,FXSelector,void*);
299 
300   // Shell commands
301   long onCmdShellDialog(FXObject*,FXSelector,void*);
302   long onUpdShellDialog(FXObject*,FXSelector,void*);
303   long onCmdShellFilter(FXObject*,FXSelector,void*);
304   long onUpdShellFilter(FXObject*,FXSelector,void*);
305   long onCmdShellCancel(FXObject*,FXSelector,void*);
306   long onUpdShellCancel(FXObject*,FXSelector,void*);
307   long onCmdShellOutput(FXObject*,FXSelector,void*);
308   long onCmdShellError(FXObject*,FXSelector,void*);
309   long onCmdShellDone(FXObject*,FXSelector,void*);
310 
311   // Evaluate expression
312   long onCmdExpression(FXObject*,FXSelector,void*);
313   long onUpdExpression(FXObject*,FXSelector,void*);
314 
315   // URL encode/decode
316   long onCmdURLEncode(FXObject*,FXSelector,void*);
317   long onCmdURLDecode(FXObject*,FXSelector,void*);
318   long onUpdURLCoding(FXObject*,FXSelector,void*);
319 
320   // Jumping around
321   long onCmdGotoLine(FXObject*,FXSelector,void*);
322   long onCmdGotoSelected(FXObject*,FXSelector,void*);
323 
324   // Search
325   long onCmdSearch(FXObject*,FXSelector,void*);
326   long onCmdReplace(FXObject*,FXSelector,void*);
327   long onCmdSearchSel(FXObject*,FXSelector,void*);
328   long onCmdSearchNext(FXObject*,FXSelector,void*);
329 
330   // Incremental search
331   long onChgISearchText(FXObject*,FXSelector,void*);
332   long onCmdISearchText(FXObject*,FXSelector,void*);
333   long onKeyISearchText(FXObject*,FXSelector,void*);
334   long onCmdISearchPrev(FXObject*,FXSelector,void*);
335   long onCmdISearchNext(FXObject*,FXSelector,void*);
336   long onCmdISearchStart(FXObject*,FXSelector,void*);
337   long onCmdISearchFinish(FXObject*,FXSelector,void*);
338   long onCmdISearchHistUp(FXObject*,FXSelector,void*);
339   long onCmdISearchHistDn(FXObject*,FXSelector,void*);
340   long onUpdISearchCase(FXObject*,FXSelector,void*);
341   long onCmdISearchCase(FXObject*,FXSelector,void*);
342   long onUpdISearchDir(FXObject*,FXSelector,void*);
343   long onCmdISearchDir(FXObject*,FXSelector,void*);
344   long onUpdISearchRegex(FXObject*,FXSelector,void*);
345   long onCmdISearchRegex(FXObject*,FXSelector,void*);
346 
347   // Style changes
348   long onCmdStyleNormalFG(FXObject*,FXSelector,void*);
349   long onUpdStyleNormalFG(FXObject*,FXSelector,void*);
350   long onCmdStyleNormalBG(FXObject*,FXSelector,void*);
351   long onUpdStyleNormalBG(FXObject*,FXSelector,void*);
352   long onCmdStyleSelectFG(FXObject*,FXSelector,void*);
353   long onUpdStyleSelectFG(FXObject*,FXSelector,void*);
354   long onCmdStyleSelectBG(FXObject*,FXSelector,void*);
355   long onUpdStyleSelectBG(FXObject*,FXSelector,void*);
356   long onCmdStyleHiliteFG(FXObject*,FXSelector,void*);
357   long onUpdStyleHiliteFG(FXObject*,FXSelector,void*);
358   long onCmdStyleHiliteBG(FXObject*,FXSelector,void*);
359   long onUpdStyleHiliteBG(FXObject*,FXSelector,void*);
360   long onCmdStyleActiveBG(FXObject*,FXSelector,void*);
361   long onUpdStyleActiveBG(FXObject*,FXSelector,void*);
362   long onCmdStyleUnderline(FXObject*,FXSelector,void*);
363   long onUpdStyleUnderline(FXObject*,FXSelector,void*);
364   long onCmdStyleStrikeout(FXObject*,FXSelector,void*);
365   long onUpdStyleStrikeout(FXObject*,FXSelector,void*);
366   long onCmdStyleBold(FXObject*,FXSelector,void*);
367   long onUpdStyleBold(FXObject*,FXSelector,void*);
368 public:
369   enum{
370     ID_ABOUT=FXMainWindow::ID_LAST,
371     ID_FILEFILTER,
372     ID_NEW,
373     ID_OPEN,
374     ID_OPEN_TREE,
375     ID_OPEN_SELECTED,
376     ID_OPEN_RECENT,
377     ID_SWITCH,
378     ID_REOPEN,
379     ID_SAVE,
380     ID_SAVEAS,
381     ID_SAVETO,
382     ID_FONT,
383     ID_HELP,
384     ID_WINDOW,
385     ID_PRINT,
386     ID_TEXT_BACK,
387     ID_TEXT_FORE,
388     ID_TEXT_SELBACK,
389     ID_TEXT_SELFORE,
390     ID_TEXT_HILITEBACK,
391     ID_TEXT_HILITEFORE,
392     ID_TEXT_ACTIVEBACK,
393     ID_TEXT_CURSOR,
394     ID_TEXT_NUMBACK,
395     ID_TEXT_NUMFORE,
396     ID_TEXT_LINENUMS,
397     ID_DIR_BACK,
398     ID_DIR_FORE,
399     ID_DIR_SELBACK,
400     ID_DIR_SELFORE,
401     ID_DIR_LINES,
402     ID_TOGGLE_WRAP,
403     ID_FIXED_WRAP,
404     ID_SAVE_SETTINGS,
405     ID_TEXT,
406     ID_LOGGER,
407     ID_STRIP_CR,
408     ID_STRIP_SP,
409     ID_APPEND_NL,
410     ID_APPEND_CR,
411     ID_OVERSTRIKE,
412     ID_READONLY,
413     ID_TABMODE,
414     ID_CLOCKTIME,
415     ID_PREFERENCES,
416     ID_TABCOLUMNS,
417     ID_WRAPCOLUMNS,
418     ID_DELIMITERS,
419     ID_INSERTTABS,
420     ID_AUTOINDENT,
421     ID_MODELINE,
422     ID_BRACEMATCH,
423     ID_BRACEMATCHTIME,
424     ID_BRACEMATCHSTAY,
425     ID_NUM_ROWS,
426     ID_REPLACE_FILE,
427     ID_EXTRACT_FILE,
428     ID_WHEELADJUST,
429     ID_SET_MARK,
430     ID_NEXT_MARK,
431     ID_PREV_MARK,
432     ID_MARK_0,
433     ID_MARK_1,
434     ID_MARK_2,
435     ID_MARK_3,
436     ID_MARK_4,
437     ID_MARK_5,
438     ID_MARK_6,
439     ID_MARK_7,
440     ID_MARK_8,
441     ID_MARK_9,
442     ID_DEL_MARK,
443     ID_CLEAR_MARKS,
444     ID_SAVEMARKS,
445     ID_SAVEVIEWS,
446     ID_SHOWACTIVE,
447     ID_WARNCHANGED,
448     ID_SYNTAX,
449     ID_RESTYLE,
450     ID_WINDOW_1,
451     ID_WINDOW_2,
452     ID_WINDOW_3,
453     ID_WINDOW_4,
454     ID_WINDOW_5,
455     ID_WINDOW_6,
456     ID_WINDOW_7,
457     ID_WINDOW_8,
458     ID_WINDOW_9,
459     ID_WINDOW_10,
460     ID_SYNTAX_FIRST,
461     ID_SYNTAX_LAST=ID_SYNTAX_FIRST+100,
462     ID_STYLE_NORMAL_FG_FIRST,
463     ID_STYLE_NORMAL_FG_LAST=ID_STYLE_NORMAL_FG_FIRST+100,
464     ID_STYLE_NORMAL_BG_FIRST,
465     ID_STYLE_NORMAL_BG_LAST=ID_STYLE_NORMAL_BG_FIRST+100,
466     ID_STYLE_SELECT_FG_FIRST,
467     ID_STYLE_SELECT_FG_LAST=ID_STYLE_SELECT_FG_FIRST+100,
468     ID_STYLE_SELECT_BG_FIRST,
469     ID_STYLE_SELECT_BG_LAST=ID_STYLE_SELECT_BG_FIRST+100,
470     ID_STYLE_HILITE_FG_FIRST,
471     ID_STYLE_HILITE_FG_LAST=ID_STYLE_HILITE_FG_FIRST+100,
472     ID_STYLE_HILITE_BG_FIRST,
473     ID_STYLE_HILITE_BG_LAST=ID_STYLE_HILITE_BG_FIRST+100,
474     ID_STYLE_ACTIVE_BG_FIRST,
475     ID_STYLE_ACTIVE_BG_LAST=ID_STYLE_ACTIVE_BG_FIRST+100,
476     ID_STYLE_UNDERLINE_FIRST,
477     ID_STYLE_UNDERLINE_LAST=ID_STYLE_UNDERLINE_FIRST+100,
478     ID_STYLE_STRIKEOUT_FIRST,
479     ID_STYLE_STRIKEOUT_LAST=ID_STYLE_STRIKEOUT_FIRST+100,
480     ID_STYLE_BOLD_FIRST,
481     ID_STYLE_BOLD_LAST=ID_STYLE_BOLD_FIRST+100,
482     ID_USE_INITIAL_SIZE,
483     ID_SET_INITIAL_SIZE,
484     ID_TOGGLE_BROWSER,
485     ID_TOGGLE_DOTFILES,
486     ID_FINDFILES,
487     ID_SEARCHPATHS,
488     ID_EXPRESSION,
489     ID_GOTO_LINE,
490     ID_GOTO_SELECTED,
491     ID_SEARCH,
492     ID_REPLACE,
493     ID_SEARCH_SEL_FORW,
494     ID_SEARCH_SEL_BACK,
495     ID_SEARCH_NXT_FORW,
496     ID_SEARCH_NXT_BACK,
497     ID_ISEARCH_TEXT,
498     ID_ISEARCH_REVERSE,
499     ID_ISEARCH_IGNCASE,
500     ID_ISEARCH_REGEX,
501     ID_ISEARCH_PREV,
502     ID_ISEARCH_NEXT,
503     ID_ISEARCH_START,
504     ID_ISEARCH_FINISH,
505     ID_ISEARCH_HIST_UP,
506     ID_ISEARCH_HIST_DN,
507     ID_TABSELECT_0,
508     ID_TABSELECT_1,
509     ID_TABSELECT_2,
510     ID_TABSELECT_3,
511     ID_TABSELECT_4,
512     ID_TABSELECT_5,
513     ID_TABSELECT_6,
514     ID_TABSELECT_7,
515     ID_TABSELECT_8,
516     ID_SHELL_DIALOG,
517     ID_SHELL_FILTER,
518     ID_SHELL_CANCEL,
519     ID_SHELL_OUTPUT,
520     ID_SHELL_ERROR,
521     ID_SHELL_DONE,
522     ID_URL_ENCODE,
523     ID_URL_DECODE,
524     ID_LAST
525     };
526 public:
527 
528   // Create new text window
529   TextWindow(Adie* a);
530 
531   // Create window
532   virtual void create();
533 
534   // Detach window
535   virtual void detach();
536 
537   // Close the window, return true if actually closed
538   virtual FXbool close(FXbool notify=false);
539 
540   // Return Adie application
getApp()541   Adie* getApp() const { return (Adie*)FXMainWindow::getApp(); }
542 
543   // Set current file of directory browser
544   void setBrowserCurrentFile(const FXString& file);
545 
546   // Get current file of directory browser
547   FXString getBrowserCurrentFile() const;
548 
549   // Change this window's filename
setFilename(const FXString & file)550   void setFilename(const FXString& file){ filename=file; }
551 
552   // Return this window's filename
getFilename()553   const FXString& getFilename() const { return filename; }
554 
555   // Change file time
setFiletime(FXTime t)556   void setFiletime(FXTime t){ filetime=t; }
557 
558   // Get file time
getFiletime()559   FXTime getFiletime() const { return filetime; }
560 
561   // Set filename is set flag
setFilenameSet(FXbool set)562   void setFilenameSet(FXbool set){ filenameset=set; }
563 
564   // Has a filename been set
isFilenameSet()565   FXbool isFilenameSet() const { return filenameset; }
566 
567   // Is it modified
568   FXbool isModified() const;
569 
570   // Set editable flag
571   void setEditable(FXbool edit=true);
572 
573   // Is it editable
574   FXbool isEditable() const;
575 
576   // Load text from file
577   FXbool loadFile(const FXString& file);
578 
579   // Save text to file
580   FXbool saveFile(const FXString& file);
581 
582   // Save text to file
583   FXbool saveToFile(const FXString& file);
584 
585   // Insert file at cursor
586   FXbool replaceByFile(const FXString& file,FXint startpos,FXint endpos,FXint startcol=-1,FXint endcol=-1);
587 
588   // Extract selection to file
589   FXbool extractToFile(const FXString& file,FXint startpos,FXint endpos,FXint startcol=-1,FXint endcol=-1);
590 
591   // Change pattern list
592   void setPatternList(const FXString& patterns);
593 
594   // Get pattern list
595   FXString getPatternList() const;
596 
597   // Set search paths
598   void setSearchPaths(const FXString& paths);
599 
600   // Get search paths
601   FXString getSearchPaths() const;
602 
603   // Change current file pattern
604   void setCurrentPattern(FXint n);
605 
606   // Return current file pattern
607   FXint getCurrentPattern() const;
608 
609   // Goto position
610   void gotoPosition(FXint pos);
611 
612   // Add bookmark at given position pos
613   void setBookmark(FXint pos);
614 
615   // Clear bookmarks
616   void clearBookmarks();
617 
618   // Read/write bookmarks
619   void readBookmarks(const FXString& file);
620   void writeBookmarks(const FXString& file);
621 
622   // Remove bookmark at given position pos
623   void clearBookmark(FXint pos);
624 
625   // Visit given line, and column
626   void visitLine(FXint line,FXint column=0);
627 
628   // Read/write view
629   void readView(const FXString& file);
630   void writeView(const FXString& file);
631 
632   // Start incremental search
633   void startISearch();
634 
635   // Finish incremental search
636   void finishISearch();
637 
638   // Search next incremental text
639   FXbool performISearch(const FXString& text,FXuint opts,FXbool advance=false,FXbool notify=false);
640 
641   // Start shell command
642   FXbool startCommand(const FXString& command,const FXString& input=FXString::null);
643 
644   // Done with command
645   FXbool doneCommand();
646 
647   // Stop shell command
648   FXbool stopCommand();
649 
650   // Set syntax
651   void setSyntax(Syntax* syn);
652 
653   // Get syntax
getSyntax()654   Syntax* getSyntax() const { return syntax; }
655 
656   // Determine syntax
657   void determineSyntax();
658 
659   // Parse modeline
660   void parseModeline();
661 
662   // Set status message
663   void setStatusMessage(const FXString& msg);
664 
665   // Delete text window
666   virtual ~TextWindow();
667   };
668 
669 
670 typedef FXObjectListOf<TextWindow> TextWindowList;
671 
672 #endif
673