diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2008-04-22 23:33:17 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2008-04-22 23:33:17 +0000 |
| commit | 8198e51799ba715d27e82b276b93cb39918d3361 (patch) | |
| tree | b21114724d43324e86450d6d43ca56527b14ff7c /fluid | |
| parent | 6a143b1f61533c03ef20a8f2b82d2c90180055bc (diff) | |
Added support for keyboard shortcuts to Fl_Input_ derived widgets (STR #1770). Code added for Fluid. Documentation updated.
This commit must be considered partial because there is no shortcut handling for Fl_Text_Display derived widgets or Fl_Value_Input which is derived form Fl_Valuator.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6109 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'fluid')
| -rw-r--r-- | fluid/Fl_Menu_Type.cxx | 14 | ||||
| -rw-r--r-- | fluid/Fl_Type.cxx | 1 | ||||
| -rw-r--r-- | fluid/Fl_Type.h | 1 | ||||
| -rw-r--r-- | fluid/Fl_Widget_Type.cxx | 23 | ||||
| -rw-r--r-- | fluid/factory.cxx | 4 |
5 files changed, 41 insertions, 2 deletions
diff --git a/fluid/Fl_Menu_Type.cxx b/fluid/Fl_Menu_Type.cxx index 94bd160e7..8055bf312 100644 --- a/fluid/Fl_Menu_Type.cxx +++ b/fluid/Fl_Menu_Type.cxx @@ -589,9 +589,14 @@ int Shortcut_Button::handle(int e) { void shortcut_in_cb(Shortcut_Button* i, void* v) { if (v == LOAD) { - if (!current_widget->is_button()) {i->hide(); return;} + if ( !current_widget->is_button() && !current_widget->is_input() ) { + i->hide(); return; + } i->show(); - i->svalue = ((Fl_Button*)(current_widget->o))->shortcut(); + if (current_widget->is_button()) + i->svalue = ((Fl_Button*)(current_widget->o))->shortcut(); + else if (current_widget->is_input()) + i->svalue = ((Fl_Input_*)(current_widget->o))->shortcut(); i->redraw(); } else { int mod = 0; @@ -602,6 +607,11 @@ void shortcut_in_cb(Shortcut_Button* i, void* v) { b->shortcut(i->svalue); if (o->is_menu_item()) ((Fl_Widget_Type*)o)->redraw(); } + else if (o->selected && o->is_input()) { + Fl_Input_* b = (Fl_Input_*)(((Fl_Widget_Type*)o)->o); + if (b->shortcut()!=i->svalue) mod = 1; + b->shortcut(i->svalue); + } if (mod) set_modflag(1); } } diff --git a/fluid/Fl_Type.cxx b/fluid/Fl_Type.cxx index d2ae60ca7..621650f82 100644 --- a/fluid/Fl_Type.cxx +++ b/fluid/Fl_Type.cxx @@ -628,6 +628,7 @@ int Fl_Type::is_widget() const {return 0;} int Fl_Type::is_valuator() const {return 0;} int Fl_Type::is_spinner() const {return 0;} int Fl_Type::is_button() const {return 0;} +int Fl_Type::is_input() const {return 0;} int Fl_Type::is_menu_item() const {return 0;} int Fl_Type::is_menu_button() const {return 0;} int Fl_Type::is_group() const {return 0;} diff --git a/fluid/Fl_Type.h b/fluid/Fl_Type.h index a35fc6201..04c159c13 100644 --- a/fluid/Fl_Type.h +++ b/fluid/Fl_Type.h @@ -131,6 +131,7 @@ public: virtual int is_parent() const; virtual int is_widget() const; virtual int is_button() const; + virtual int is_input() const; virtual int is_valuator() const; virtual int is_spinner() const; virtual int is_menu_item() const; diff --git a/fluid/Fl_Widget_Type.cxx b/fluid/Fl_Widget_Type.cxx index cae00ab0c..c67bb6438 100644 --- a/fluid/Fl_Widget_Type.cxx +++ b/fluid/Fl_Widget_Type.cxx @@ -2162,6 +2162,17 @@ void Fl_Widget_Type::write_widget_code() { write_c("%s%s->type(%d);\n", indent(), var, o->type()); if (o->box() != tplate->box() || subclass()) write_c("%s%s->box(FL_%s);\n", indent(), var, boxname(o->box())); + if (is_input()) { + Fl_Input_* b = (Fl_Input_*)o; + if (b->shortcut()) { + int s = b->shortcut(); + if (use_FL_COMMAND && (s & (FL_CTRL|FL_META))) { + write_c("%s%s->shortcut(FL_COMMAND|0x%x);\n", indent(), var, s & ~(FL_CTRL|FL_META)); + } else { + write_c("%s%s->shortcut(0x%x);\n", indent(), var, s); + } + } + } if (is_button()) { Fl_Button* b = (Fl_Button*)o; if (b->down_box()) write_c("%s%s->down_box(FL_%s);\n", indent(), var, @@ -2333,6 +2344,10 @@ void Fl_Widget_Type::write_properties() { } if (o->box() != tplate->box()) { write_string("box"); write_word(boxname(o->box()));} + if (is_input()) { + Fl_Input_* b = (Fl_Input_*)o; + if (b->shortcut()) write_string("shortcut 0x%x", b->shortcut()); + } if (is_button()) { Fl_Button* b = (Fl_Button*)o; if (b->down_box()) { @@ -2524,6 +2539,8 @@ void Fl_Widget_Type::read_property(const char *c) { subclass(read_word()); } else if (is_button() && !strcmp(c,"shortcut")) { ((Fl_Button*)o)->shortcut(strtol(read_word(),0,0)); + } else if (is_input() && !strcmp(c,"shortcut")) { + ((Fl_Input_*)o)->shortcut(strtol(read_word(),0,0)); } else { if (!strncmp(c,"code",4)) { int n = atoi(c+4); @@ -2694,6 +2711,12 @@ void Fl_Widget_Type::copy_properties() { d->value(s->value()); } + // copy all attributes specific to widgets derived from Fl_Input_ + if (is_input()) { + Fl_Input_* d = (Fl_Input_*)live_widget, *s = (Fl_Input_*)o; + d->shortcut(s->shortcut()); + } + // copy all attributes specific to Fl_Valuator and derived classes if (is_valuator()) { Fl_Valuator* d = (Fl_Valuator*)live_widget, *s = (Fl_Valuator*)o; diff --git a/fluid/factory.cxx b/fluid/factory.cxx index 78723a167..6e061cc5a 100644 --- a/fluid/factory.cxx +++ b/fluid/factory.cxx @@ -442,6 +442,7 @@ public: if (w < 15) w = 15; } virtual const char *type_name() {return "Fl_Input";} + int is_input() const {return 1;} Fl_Widget *widget(int x,int y,int w,int h) { Fl_Input *myo = new Fl_Input(x,y,w,h,"input:"); myo->value("Text Input"); @@ -455,6 +456,7 @@ public: d->textfont(s->textfont()); d->textsize(s->textsize()); d->textcolor(s->textcolor()); + d->shortcut(s->shortcut()); } }; static Fl_Input_Type Fl_Input_type; @@ -489,6 +491,7 @@ public: if (w < 50) w = 50; } virtual const char *type_name() {return "Fl_File_Input";} + int is_input() const {return 1;} Fl_Widget *widget(int x,int y,int w,int h) { Fl_File_Input *myo = new Fl_File_Input(x,y,w,h,"file:"); myo->value("/now/is/the/time/for/a/filename.ext"); @@ -788,6 +791,7 @@ public: if (w < 15) w = 15; } virtual const char *type_name() {return "Fl_Value_Input";} + int is_input() const {return 1;} int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c); int is_valuator() const {return 1;} Fl_Widget *widget(int x,int y,int w,int h) { |
