Inherited by ComboBox::ComboInput, FileInput, MultiLineInput, NumericInput, Output, SecretInput, and WordwrapInput.
Public Types | |
enum | { NORMAL, FLOAT_INPUT, INT_INPUT, SECRET, MULTILINE, WORDWRAP } |
Public Member Functions | |
Input (int, int, int, int, const char *=0) | |
~Input () | |
void | draw () |
void | draw (const Rectangle &) |
int | handle (int) |
int | handle (int event, const Rectangle &) |
bool | handle_key () |
bool | text (const char *) |
bool | text (const char *, int) |
bool | static_text (const char *) |
bool | static_text (const char *, int) |
const char * | text () const |
char | at (int i) const |
bool | value (const char *v) |
bool | value (const char *v, int n) |
bool | static_value (const char *v) |
const char * | value () const |
int | size () const |
void | reserve (int newsize) |
int | position () const |
int | mark () const |
void | position (int p, int m) |
void | position (int p) |
void | up_down_position (int position, bool extend) |
void | mark (int m) |
virtual bool | replace (int, int, const char *, int) |
bool | cut () |
bool | cut (int n) |
bool | cut (int a, int b) |
bool | insert (const char *t) |
bool | insert (const char *t, int l) |
bool | replace (int a, int b, char c) |
bool | copy (bool clipboard=true) |
bool | undo () |
void | maybe_do_callback () |
int | word_start (int i) const |
int | word_end (int i) const |
int | line_start (int i) const |
int | line_end (int i) const |
int | mouse_position (const Rectangle &) const |
int | xscroll () const |
int | yscroll () const |
Static Public Attributes | |
NamedStyle * | default_style |
By default the callback() is done each time the text is changed by the user. Other values for when():
If you wish to restrict the text the user can type (such as limiting it to numbers, a particular length, etc), you should subclass this and override the replace() function with a version that rejects changes you don't want to allow.
If you don't like the keybindings you can override handle() to change them.
All arguments that are lengths or offsets into the strings are in bytes, not the UTF-8 characters they represent.
|
The constructor initializes:
|
|
The destructor destroys the memory used by text() |
|
Same as text()[n], but may be faster in plausible implementations. No bounds checking is done. |
|
Put the current selection between mark() and position() into the selection or clipboard by calling copy(). If position() and mark() are equal this does nothing (ie it does not clear the clipboard). If clipboard is true the text is put into the user-visible cut & paste clipboard (this is probably what you want). If clipboard is false it is put into the less-visible selection buffer that is used to do middle-mouse paste and drag & drop. To paste the clipboard, call paste(true) and fltk will send the widget a PASTE event with the text, which will cause it to be inserted. |
|
Wrapper around replace() this deletes the characters between a and b. The values are clamped to the ends of the string, and b can be less than a. |
|
Wrapper around replace() this deletes up to n characters after the point, or before the point if n is negative. N is bounds checked. |
|
Wrapper around replace(), this deletes the region between the point and the mark. It does nothing if they are equal. |
|
Draw the text, where the passed rectangle is the area the text is to be drawn into. This method is provided so a subclass can place the text into a subrectangle. If damage()&DAMAGE_ALL is true, this assummes the area has already been erased to color(). Otherwise it does minimal update and erases the area itself. |
|
The default version draws the box and calls draw(x,y,w,h) with the area inside the box. It also draws any inside labels at the left of the text. Reimplemented from Widget. |
|
Default handler for all event types, where the passed rectangle is the area the text is to be drawn into. This method is provided so a subclass can place the text into a subrectangle.
|
|
Calls handle(x,y,w,h) with the area inside the box(). Reimplemented from Widget. Reimplemented in NumericInput. |
|
Handle KEY events. The handle() method calls this. This provides an Emacs and Windows style of editing. Most Emacs commands are first run through try_shortcut() to test if they are menu items for the program.
For the (obsolete) MULTILINE mode you can also do these:
|
|
Wrapper around replace(). This inserts n characters from the text (including '\0' characters!) at the point and leaves the point after it. |
|
Wrapper around replace(). This inserts the string at the point and leaves the point after it. |
|
Returns the location of the next newline or wordwrap space at or after position. |
|
Returns the location of the start of the line containing the position. |
|
Same as position(position(),n) |
|
Figure out what character the most recent mouse event would be pointing at, assumming you drew the text by calling draw() with the same rectangle. Returns 0 if the mouse is before the first character, and size() if it is after the last one. |
|
Same as position(n,n) |
|
The input widget maintains two pointers into the string. The "position" is where the cursor is. The "mark" is the other end of the selected text. If they are equal then there is no selection. Changing this does not affect the X selection, call copy() if you want that. Changing these values causes a redraw(). The new values are bounds checked and limited to the size of the string. It is up to the caller to make sure the position and mark are at the borders of UTF-8 characters! Reimplemented from Widget. |
|
Wrapper around replace(). Deletes the characters between a and b and then inserts the single byte c. |
|
This call does all editing of the text. It deletes the region between b and e (either one may be less or equal to the other), and then inserts ilen (which may be zero) characters from the string text at that point and leaves the mark() and position() after the insertion. If the text is changed the callback is done if the when() flags indicate it should be done. Subclasses of Input can override this method to control what characters can be inserted into the text. A typical implementation will check the characters in the insertion for legality and then call Input::replace() only if they are all ok. b and e are bounds checked so don't worry about sending values outside the length of the string. Subclasses should return true if the keystroke that produced this call should be "eaten". If false is returned the keystroke is allowed to be tested as a shortcut for other widgets. In our experience it is best to return true even if you don't make changes. The base class version returns true always. |
|
Reserve the interal private buffer of at least len bytes, even if the current text() is not that long. Can be used to avoid unnecessary memory reallocations if you know you will be replacing the text() with a longer one later. |
|
Returns the number of characters in text(). This may be greater than strlen(text()) if there are NUL characters in it. |
|
Same as text(str,len), except it does not copy the string, instead it makes text() return a pointer to str (unless len is 0, in which case it makes it point to a zero-length string). str must point to static memory that will not be altered until at least the Input widget is destroyed or the text() is changed again. If the user attempts to edit the string it is then copied to the internal buffer and the editing done there. This can save a lot of time and memory if your program is changing the string to various constants a lot but the user rarely edits it. |
|
Same as static_text(str, str ? strlen(str) : 0) |
|
The current string, as edited by the user. There is an extra NUL character at the end, so this returned pointer can be used directly by C functions. size() returns how many bytes are in the string, which is useful if you want to look at embedded NUL characters. Pointer is to an internal buffer and is only value until the next event is handled by the Input widget. |
|
Change the text() to return the first len bytes of str and size() to return len, and set the position() to len and the mark() to zero (thus highlighting the entire value). Returns true if the bytes in the new string are different than the old string. |
|
Same as text(str, str ? strlen(str) : 0) |
|
If this is the most recent widget on which replace() was done on, this will undo that replace() and probably several others (ie if the user has typed a lot of text it will undo all of it even though that was probably many calls to replace()). Returns true if any change was made. |
|
Do the correct thing for arrow keys. i must be the location of the start of a line. Sets the position (and mark if keepmark is false) to somewhere after i, such that pressing the arrows repeatedly will cause the point to move up and down. |
|
Returns the location of the next word boundary at or after position. |
|
Returns the location of the first word boundary at or before position. |