Added new tab_nav() control for Fl_Multiline_Input tab navigation behavior.

New default behavior is what most users expect; hitting Tab navigates over the widget.
Fl_Input modified to support the new flag.



git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8068 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Greg Ercolano 2010-12-20 07:48:59 +00:00
parent df6de286e7
commit 4a883a2e81
4 changed files with 50 additions and 2 deletions

View File

@ -120,6 +120,11 @@ class FL_EXPORT Fl_Input_ : public Fl_Widget {
\p mark_, no text is selected */
int mark_;
/** \internal Behavior of Tab key in multiline input widget.
If enabled (default) Tab causes focus nav, otherwise Tab is inserted
as a character. */
int tab_nav_;
/** \internal Offset to text origin within widget bounds */
int xscroll_, yscroll_;
@ -446,6 +451,43 @@ public:
void wrap(int b) { if (b) type((uchar)(type() | FL_INPUT_WRAP));
else type((uchar)(type() & ~FL_INPUT_WRAP)); }
/**
Sets whether the Tab key does focus navigation,
or inserts tab characters into Fl_Multiline_Input.
By default this flag is enabled to provide the 'normal' behavior
most users expect; Tab navigates focus to the next widget.
To inserting an actual Tab character, users can use Ctrl-I
or copy/paste.
Disabling this flag gives the old FLTK behavior where Tab
inserts a tab character into the text field, in which case
only the mouse can be used to navigate to the next field.
History: This flag was provided for backwards support of FLTK's old 1.1.x
behavior where Tab inserts a tab character instead of navigating
focus to the next widget. This behavior was unique to Fl_Multiline_Input.
With the advent of Fl_Text_Editor, this old behavior has been deprecated.
\param [in] val If \p val is 1, Tab advances focus (default).<BR>
If \p val is 0, Tab inserts a tab character (old FLTK behavior).
*/
void tab_nav(int val) {
tab_nav_ = val;
}
/**
Gets whether the Tab key causes focus navigation in multiline input fields or not.
If enabled (default), hitting Tab causes focus navigation to the next widget.
If disabled, hitting Tab inserts a tab character into the text field.
\returns 1 if Tab advances focus (default), 0 if Tab inserts tab characters.
\see tab_nav(int)
*/
int tab_nav() const {
return tab_nav_;
}
};
#endif

View File

@ -46,6 +46,11 @@
If you are presenting large amounts of text and need scrollbars
or full color control of characters, you probably want Fl_Text_Editor
instead.
In FLTK 1.3.x, the default behavior of the 'Tab' key was changed
to support consistent focus navigation. To get the older FLTK 1.1.x
behavior, set Fl_Input_::tab_nav() to 0. Newer programs should consider using
Fl_Text_Editor.
*/
class FL_EXPORT Fl_Multiline_Input : public Fl_Input {
public:

View File

@ -538,7 +538,7 @@ int Fl_Input::handle_key() {
// tab handled as a normal insertable character.
//
if (mods==0 && !shift // Tab?
//// PROPOSED && !tab_nav() // old tab behavior enabled?
&& !tab_nav() // old tab behavior enabled?
&& multiline) { // multiline input?
break; // insert tab character
}
@ -614,7 +614,7 @@ int Fl_Input::handle(int event) {
//
if (Fl::event_key() == FL_Tab // Tab key?
&& !Fl::event_state(FL_SHIFT) // no shift?
//// PROPOSED && !tab_nav() // with tab navigation disabled?
&& !tab_nav() // with tab navigation disabled?
&& input_type() == FL_MULTILINE_INPUT // with a multiline input?
&& (mark()==0 && position()==size())) { // while entire field selected?
// Set cursor to the end of the selection...

View File

@ -1059,6 +1059,7 @@ Fl_Input_::Fl_Input_(int X, int Y, int W, int H, const char* l)
maximum_size_ = 32767;
shortcut_ = 0;
set_flag(SHORTCUT_LABEL);
tab_nav(1);
}
/**