Document Fl_Text_Editor::global_key_bindings and related methods.

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10830 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Albrecht Schlosser 2015-08-13 10:07:17 +00:00
parent 9bedf7ab8f
commit 0650563c7b
2 changed files with 34 additions and 10 deletions

View File

@ -31,18 +31,18 @@
#define FL_TEXT_EDITOR_ANY_STATE (-1L) #define FL_TEXT_EDITOR_ANY_STATE (-1L)
/** /**
This is the FLTK text editor widget. It allows the user to This is the FLTK text editor widget.
edit multiple lines of text and supports highlighting and
scrolling. The buffer that is displayed in the widget is managed It allows the user to edit multiple lines of text and supports highlighting
by the Fl_Text_Buffer and scrolling. The buffer that is displayed in the widget is managed
class. by the Fl_Text_Buffer class.
*/ */
class FL_EXPORT Fl_Text_Editor : public Fl_Text_Display { class FL_EXPORT Fl_Text_Editor : public Fl_Text_Display {
public: public:
/** Key function binding callback type */ /** Key function binding callback type. */
typedef int (*Key_Func)(int key, Fl_Text_Editor* editor); typedef int (*Key_Func)(int key, Fl_Text_Editor* editor);
/** Simple linked list associating a key/state to a function */ /** Simple linked list item associating a key/state to a function. */
struct Key_Binding { struct Key_Binding {
int key; ///< the key pressed int key; ///< the key pressed
int state; ///< the state of key modifiers int state; ///< the state of key modifiers
@ -67,7 +67,7 @@ class FL_EXPORT Fl_Text_Editor : public Fl_Text_Display {
int insert_mode() { return insert_mode_; } int insert_mode() { return insert_mode_; }
void add_key_binding(int key, int state, Key_Func f, Key_Binding** list); void add_key_binding(int key, int state, Key_Func f, Key_Binding** list);
/** Adds a key of state "state" with the function "function" */ /** Adds a \p key of state \p state with the function \p f. */
void add_key_binding(int key, int state, Key_Func f) void add_key_binding(int key, int state, Key_Func f)
{ add_key_binding(key, state, f, &key_bindings); } { add_key_binding(key, state, f, &key_bindings); }
void remove_key_binding(int key, int state, Key_Binding** list); void remove_key_binding(int key, int state, Key_Binding** list);
@ -119,7 +119,18 @@ class FL_EXPORT Fl_Text_Editor : public Fl_Text_Display {
#ifndef FL_DOXYGEN #ifndef FL_DOXYGEN
int insert_mode_; int insert_mode_;
Key_Binding* key_bindings; Key_Binding* key_bindings;
#endif
/** Global key binding list.
Derived classes can add key bindings for all Fl_Text_Editor widgets
by adding a Key_Binding to this list.
\see add_key_binding(int key, int state, Key_Func f, Key_Binding** list);
*/
static Key_Binding* global_key_bindings; static Key_Binding* global_key_bindings;
#ifndef FL_DOXYGEN
Key_Func default_key_function_; Key_Func default_key_function_;
#endif #endif
}; };

View File

@ -192,7 +192,13 @@ void Fl_Text_Editor::remove_all_key_bindings(Key_Binding** list) {
*list = 0; *list = 0;
} }
/** Removes the key binding associated with the key "key" of state "state" */ /** Removes the key binding associated with the key \p key of state \p state
from the Key_Binding list \p list.
This can be used in derived classes to remove global key bindings
by using the global (static) Key_Binding list
Fl_Text_Editor::global_key_bindings.
*/
void Fl_Text_Editor::remove_key_binding(int key, int state, Key_Binding** list) { void Fl_Text_Editor::remove_key_binding(int key, int state, Key_Binding** list) {
Key_Binding *cur, *last = 0; Key_Binding *cur, *last = 0;
for (cur = *list; cur; last = cur, cur = cur->next) for (cur = *list; cur; last = cur, cur = cur->next)
@ -202,7 +208,14 @@ void Fl_Text_Editor::remove_key_binding(int key, int state, Key_Binding** list)
else *list = cur->next; else *list = cur->next;
delete cur; delete cur;
} }
/** Adds a key of state "state" with the function "function" */
/** Adds a \p key of state \p state with the function \p function to an
arbitrary key binding list \p list.
This can be used in derived classes to add global key bindings
by using the global (static) Key_Binding list
Fl_Text_Editor::global_key_bindings.
*/
void Fl_Text_Editor::add_key_binding(int key, int state, Key_Func function, void Fl_Text_Editor::add_key_binding(int key, int state, Key_Func function,
Key_Binding** list) { Key_Binding** list) {
Key_Binding* kb = new Key_Binding; Key_Binding* kb = new Key_Binding;