source: rtems-graphics-toolkit/fltk-1.1.10/FL/Fl_Text_Buffer.H @ 513eea1

Last change on this file since 513eea1 was 513eea1, checked in by Joel Sherrill <joel.sherrill@…>, on 01/09/10 at 22:43:24

2010-01-08 Joel Sherrill <joel.sherrill@…>

fltk 1.1.10. imported

  • ORIGIN: Updated.
  • Property mode set to 100644
File size: 11.2 KB
Line 
1//
2// "$Id$"
3//
4// Header file for Fl_Text_Buffer class.
5//
6// Copyright 2001-2005 by Bill Spitzak and others.
7// Original code Copyright Mark Edel.  Permission to distribute under
8// the LGPL for the FLTK library granted by Mark Edel.
9//
10// This library is free software; you can redistribute it and/or
11// modify it under the terms of the GNU Library General Public
12// License as published by the Free Software Foundation; either
13// version 2 of the License, or (at your option) any later version.
14//
15// This library is distributed in the hope that it will be useful,
16// but WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18// Library General Public License for more details.
19//
20// You should have received a copy of the GNU Library General Public
21// License along with this library; if not, write to the Free Software
22// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
23// USA.
24//
25// Please report all bugs and problems on the following page:
26//
27//     http://www.fltk.org/str.php
28//
29
30#ifndef FL_TEXT_BUFFER_H
31#define FL_TEXT_BUFFER_H
32
33/* Maximum length in characters of a tab or control character expansion
34   of a single buffer character */
35#define FL_TEXT_MAX_EXP_CHAR_LEN 20
36
37#include "Fl_Export.H"
38
39class FL_EXPORT Fl_Text_Selection {
40  friend class Fl_Text_Buffer;
41
42  public:
43    void set(int start, int end);
44    void set_rectangular(int start, int end, int rectStart, int rectEnd);
45    void update(int pos, int nDeleted, int nInserted);
46    char rectangular() { return mRectangular; }
47    int start() { return mStart; }
48    int end() { return mEnd; }
49    int rect_start() { return mRectStart; }
50    int rect_end() { return mRectEnd; }
51    char selected() { return mSelected; }
52    void selected(char b) { mSelected = b; }
53    int includes(int pos, int lineStartPos, int dispIndex);
54    int position(int* start, int* end);
55    int position(int* start, int* end, int* isRect, int* rectStart, int* rectEnd);
56
57
58  protected:
59    char mSelected;
60    char mRectangular;
61    int mStart;
62    int mEnd;
63    int mRectStart;
64    int mRectEnd;
65};
66
67typedef void (*Fl_Text_Modify_Cb)(int pos, int nInserted, int nDeleted,
68                                  int nRestyled, const char* deletedText,
69                                  void* cbArg);
70typedef void (*Fl_Text_Predelete_Cb)(int pos, int nDeleted, void* cbArg);
71
72class FL_EXPORT Fl_Text_Buffer {
73  public:
74    Fl_Text_Buffer(int requestedSize = 0);
75    ~Fl_Text_Buffer();
76
77    int length() { return mLength; }
78    char* text();
79    void text(const char* text);
80    char* text_range(int start, int end);
81    char character(int pos);
82    char* text_in_rectangle(int start, int end, int rectStart, int rectEnd);
83    void insert(int pos, const char* text);
84    void append(const char* t) { insert(length(), t); }
85    void remove(int start, int end);
86    void replace(int start, int end, const char *text);
87    void copy(Fl_Text_Buffer* fromBuf, int fromStart, int fromEnd, int toPos);
88    int undo(int *cp=0);
89    void canUndo(char flag=1);
90    int insertfile(const char *file, int pos, int buflen = 128*1024);
91    int appendfile(const char *file, int buflen = 128*1024)
92      { return insertfile(file, length(), buflen); }
93    int loadfile(const char *file, int buflen = 128*1024)
94      { select(0, length()); remove_selection(); return appendfile(file, buflen); }
95    int outputfile(const char *file, int start, int end, int buflen = 128*1024);
96    int savefile(const char *file, int buflen = 128*1024)
97      { return outputfile(file, 0, length(), buflen); }
98
99    void insert_column(int column, int startPos, const char* text,
100                       int* charsInserted, int* charsDeleted);
101
102    void replace_rectangular(int start, int end, int rectStart, int rectEnd,
103                             const char* text);
104
105    void overlay_rectangular(int startPos, int rectStart, int rectEnd,
106                             const char* text, int* charsInserted,
107                             int* charsDeleted);
108
109    void remove_rectangular(int start, int end, int rectStart, int rectEnd);
110    void clear_rectangular(int start, int end, int rectStart, int rectEnd);
111    int tab_distance() { return mTabDist; }
112    void tab_distance(int tabDist);
113    void select(int start, int end);
114    int selected() { return mPrimary.selected(); }
115    void unselect();
116    void select_rectangular(int start, int end, int rectStart, int rectEnd);
117    int selection_position(int* start, int* end);
118
119    int selection_position(int* start, int* end, int* isRect, int* rectStart,
120                           int* rectEnd);
121
122    char* selection_text();
123    void remove_selection();
124    void replace_selection(const char* text);
125    void secondary_select(int start, int end);
126    int secondary_selected() { return mSecondary.selected(); }
127    void secondary_unselect();
128
129    void secondary_select_rectangular(int start, int end, int rectStart,
130                                      int rectEnd);
131
132    int secondary_selection_position(int* start, int* end);
133    int secondary_selection_position(int* start, int* end, int* isRect,
134                                     int* rectStart, int* rectEnd);
135
136    char* secondary_selection_text();
137    void remove_secondary_selection();
138    void replace_secondary_selection(const char* text);
139    void highlight(int start, int end);
140    int highlight() { return mHighlight.selected(); }
141    void unhighlight();
142    void highlight_rectangular(int start, int end, int rectStart, int rectEnd);
143
144    int highlight_position(int* start, int* end);
145    int highlight_position(int* start, int* end, int* isRect, int* rectStart,
146                           int* rectEnd);
147
148    char* highlight_text();
149    void add_modify_callback(Fl_Text_Modify_Cb bufModifiedCB, void* cbArg);
150    void remove_modify_callback(Fl_Text_Modify_Cb bufModifiedCB, void* cbArg);
151
152    void call_modify_callbacks() { call_modify_callbacks(0, 0, 0, 0, 0); }
153
154    void add_predelete_callback(Fl_Text_Predelete_Cb bufPredelCB, void* cbArg);
155    void remove_predelete_callback(Fl_Text_Predelete_Cb predelCB, void* cbArg);
156
157    void call_predelete_callbacks() { call_predelete_callbacks(0, 0); }
158
159    char* line_text(int pos);
160    int line_start(int pos);
161    int line_end(int pos);
162    int word_start(int pos);
163    int word_end(int pos);
164    int expand_character(int pos, int indent, char *outStr);
165
166    static int expand_character(char c, int indent, char* outStr, int tabDist,
167                                char nullSubsChar);
168
169    static int character_width(char c, int indent, int tabDist, char nullSubsChar);
170    int count_displayed_characters(int lineStartPos, int targetPos);
171    int skip_displayed_characters(int lineStartPos, int nChars);
172    int count_lines(int startPos, int endPos);
173    int skip_lines(int startPos, int nLines);
174    int rewind_lines(int startPos, int nLines);
175    int findchar_forward(int startPos, char searchChar, int* foundPos);
176    int findchar_backward(int startPos, char searchChar, int* foundPos);
177    int findchars_forward(int startPos, const char* searchChars, int* foundPos);
178    int findchars_backward(int startPos, const char* searchChars, int* foundPos);
179
180    int search_forward(int startPos, const char* searchString, int* foundPos,
181                       int matchCase = 0);
182
183    int search_backward(int startPos, const char* searchString, int* foundPos,
184                        int matchCase = 0);
185
186    int substitute_null_characters(char* string, int length);
187    void unsubstitute_null_characters(char* string);
188    char null_substitution_character() { return mNullSubsChar; }
189    Fl_Text_Selection* primary_selection() { return &mPrimary; }
190    Fl_Text_Selection* secondary_selection() { return &mSecondary; }
191    Fl_Text_Selection* highlight_selection() { return &mHighlight; }
192
193  protected:
194    void call_modify_callbacks(int pos, int nDeleted, int nInserted,
195                               int nRestyled, const char* deletedText);
196    void call_predelete_callbacks(int pos, int nDeleted);
197
198    int insert_(int pos, const char* text);
199    void remove_(int start, int end);
200
201    void remove_rectangular_(int start, int end, int rectStart, int rectEnd,
202                             int* replaceLen, int* endPos);
203
204    void insert_column_(int column, int startPos, const char* insText,
205                        int* nDeleted, int* nInserted, int* endPos);
206
207    void overlay_rectangular_(int startPos, int rectStart, int rectEnd,
208                              const char* insText, int* nDeleted,
209                              int* nInserted, int* endPos);
210
211    void redisplay_selection(Fl_Text_Selection* oldSelection,
212                             Fl_Text_Selection* newSelection);
213
214    void move_gap(int pos);
215    void reallocate_with_gap(int newGapStart, int newGapLen);
216    char* selection_text_(Fl_Text_Selection* sel);
217    void remove_selection_(Fl_Text_Selection* sel);
218    void replace_selection_(Fl_Text_Selection* sel, const char* text);
219
220    void rectangular_selection_boundaries(int lineStartPos, int rectStart,
221                                          int rectEnd, int* selStart,
222                                          int* selEnd);
223
224    void update_selections(int pos, int nDeleted, int nInserted);
225
226    Fl_Text_Selection mPrimary; /* highlighted areas */
227    Fl_Text_Selection mSecondary;
228    Fl_Text_Selection mHighlight;
229    int mLength;                /* length of the text in the buffer (the length
230                                   of the buffer itself must be calculated:
231                                   gapEnd - gapStart + length) */
232    char* mBuf;                 /* allocated memory where the text is stored */
233    int mGapStart;              /* points to the first character of the gap */
234    int mGapEnd;                /* points to the first char after the gap */
235    // The hardware tab distance used by all displays for this buffer,
236    // and used in computing offsets for rectangular selection operations.
237    int mTabDist;               /* equiv. number of characters in a tab */
238    int mUseTabs;               /* True if buffer routines are allowed to use
239                                   tabs for padding in rectangular operations */
240    int mNModifyProcs;          /* number of modify-redisplay procs attached */
241    Fl_Text_Modify_Cb*          /* procedures to call when buffer is */
242    mNodifyProcs;               /* modified to redisplay contents */
243    void** mCbArgs;             /* caller arguments for modifyProcs above */
244    int mNPredeleteProcs;       /* number of pre-delete procs attached */
245    Fl_Text_Predelete_Cb*       /* procedure to call before text is deleted */
246         mPredeleteProcs;       /* from the buffer; at most one is supported. */
247    void **mPredeleteCbArgs;    /* caller argument for pre-delete proc above */
248    int mCursorPosHint;         /* hint for reasonable cursor position after
249                                   a buffer modification operation */
250    char mNullSubsChar;         /* NEdit is based on C null-terminated strings,
251                                   so ascii-nul characters must be substituted
252                                   with something else.  This is the else, but
253                                   of course, things get quite messy when you
254                                   use it */
255    char mCanUndo;              /* if this buffer is used for attributes, it must
256                                   not do any undo calls */
257};
258
259#endif
260
261//
262// End of "$Id$".
263//
Note: See TracBrowser for help on using the repository browser.