ntk-chtheme: Add new color scheme. Save/restore selection color.
[ntk.git] / FL / Fl_Text_Editor.H
blob40f9e6be23f4ab864b1c74c2c4728d491632cd5a
1 //
2 // "$Id: Fl_Text_Editor.H 7903 2010-11-28 21:06:39Z matt $"
3 //
4 // Header file for Fl_Text_Editor class.
5 //
6 // Copyright 2001-2010 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.
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.
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.
25 // Please report all bugs and problems on the following page:
27 //     http://www.fltk.org/str.php
30 /* \file
31    Fl_Text_Editor widget . */
34 #ifndef FL_TEXT_EDITOR_H
35 #define FL_TEXT_EDITOR_H
37 #include "Fl_Text_Display.H"
39 // key will match in any state
40 #define FL_TEXT_EDITOR_ANY_STATE  (-1L)
42 /**
43   This is the FLTK text editor widget. It allows the user to
44   edit multiple lines of text and supports highlighting and
45   scrolling. The buffer that is displayed in the widget is managed
46   by the Fl_Text_Buffer
47   class.
49 class FL_EXPORT Fl_Text_Editor : public Fl_Text_Display {
50   public:
51     /** Key function binding callback type */
52     typedef int (*Key_Func)(int key, Fl_Text_Editor* editor);
54     /** Simple linked list associating a key/state to a function */
55     struct Key_Binding {
56       int          key;         ///< the key pressed
57       int          state;       ///< the state of key modifiers
58       Key_Func     function;    ///< associated function
59       Key_Binding* next;        ///< next key binding in the list
60     };
62     Fl_Text_Editor(int X, int Y, int W, int H, const char* l = 0);
63     ~Fl_Text_Editor() { remove_all_key_bindings(); }
64     virtual int handle(int e);
65     /**
66         Sets the current insert mode; if non-zero, new text
67         is inserted before the current cursor position. Otherwise, new
68         text replaces text at the current cursor position.
69     */
70     void insert_mode(int b) { insert_mode_ = b; }
71     /**
72         Gets the current insert mode; if non-zero, new text
73         is inserted before the current cursor position. Otherwise, new
74         text replaces text at the current cursor position.
75     */
76     int insert_mode() { return insert_mode_; }
78     void add_key_binding(int key, int state, Key_Func f, Key_Binding** list);
79     /** Adds a key of state "state" with the function "function" */
80     void add_key_binding(int key, int state, Key_Func f)
81       { add_key_binding(key, state, f, &key_bindings); }
82     void remove_key_binding(int key, int state, Key_Binding** list);
83     /** Removes the key binding associated with the key "key" of state "state". */
84     void remove_key_binding(int key, int state)
85       { remove_key_binding(key, state, &key_bindings); }
86     void remove_all_key_bindings(Key_Binding** list);
87     /** Removes all of the key bindings associated with the text editor or list. */
88     void remove_all_key_bindings() { remove_all_key_bindings(&key_bindings); }
89     void add_default_key_bindings(Key_Binding** list);
90     Key_Func bound_key_function(int key, int state, Key_Binding* list);
91     /**  Returns the function associated with a key binding. */
92     Key_Func bound_key_function(int key, int state)
93       { return bound_key_function(key, state, key_bindings); }
94     /**  Sets the default key function for unassigned keys. */
95     void default_key_function(Key_Func f) { default_key_function_ = f; }
97     // functions for the built in default bindings
98     static int kf_default(int c, Fl_Text_Editor* e);
99     static int kf_ignore(int c, Fl_Text_Editor* e);
100     static int kf_backspace(int c, Fl_Text_Editor* e);
101     static int kf_enter(int c, Fl_Text_Editor* e);
102     static int kf_move(int c, Fl_Text_Editor* e);
103     static int kf_shift_move(int c, Fl_Text_Editor* e);
104     static int kf_ctrl_move(int c, Fl_Text_Editor* e);
105     static int kf_c_s_move(int c, Fl_Text_Editor* e);
106     static int kf_meta_move(int c, Fl_Text_Editor* e);
107     static int kf_m_s_move(int c, Fl_Text_Editor* e);
108     static int kf_home(int, Fl_Text_Editor* e);
109     static int kf_end(int c, Fl_Text_Editor* e);
110     static int kf_left(int c, Fl_Text_Editor* e);
111     static int kf_up(int c, Fl_Text_Editor* e);
112     static int kf_right(int c, Fl_Text_Editor* e);
113     static int kf_down(int c, Fl_Text_Editor* e);
114     static int kf_page_up(int c, Fl_Text_Editor* e);
115     static int kf_page_down(int c, Fl_Text_Editor* e);
116     static int kf_insert(int c, Fl_Text_Editor* e);
117     static int kf_delete(int c, Fl_Text_Editor* e);
118     static int kf_copy(int c, Fl_Text_Editor* e);
119     static int kf_cut(int c, Fl_Text_Editor* e);
120     static int kf_paste(int c, Fl_Text_Editor* e);
121     static int kf_select_all(int c, Fl_Text_Editor* e);
122     static int kf_undo(int c, Fl_Text_Editor* e);
124   protected:
125     int handle_key();
126     void maybe_do_callback();
128 #ifndef FL_DOXYGEN
129     int insert_mode_;
130     Key_Binding* key_bindings;
131     static Key_Binding* global_key_bindings;
132     Key_Func default_key_function_;
133 #endif
136 #endif
139 // End of "$Id: Fl_Text_Editor.H 7903 2010-11-28 21:06:39Z matt $".