summaryrefslogtreecommitdiff
path: root/fluid
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2008-04-23 14:19:58 +0000
committerMatthias Melcher <fltk@matthiasm.com>2008-04-23 14:19:58 +0000
commit8683ea2c810a3d689e436a8d13abbbba50efc4f5 (patch)
tree07f4dd10cee8d33ca9b94b900ff15c056662526e /fluid
parent8d6b757bfe1579c1c09d627329bbf15875d52cc5 (diff)
Adding keyboard shortcut to Fl_Value_Input and Fl_Text_Editor
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6111 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'fluid')
-rw-r--r--fluid/Fl_Menu_Type.cxx26
-rw-r--r--fluid/Fl_Type.cxx2
-rw-r--r--fluid/Fl_Type.h2
-rw-r--r--fluid/Fl_Widget_Type.cxx62
-rw-r--r--fluid/factory.cxx3
5 files changed, 67 insertions, 28 deletions
diff --git a/fluid/Fl_Menu_Type.cxx b/fluid/Fl_Menu_Type.cxx
index 8055bf312..9cf128c50 100644
--- a/fluid/Fl_Menu_Type.cxx
+++ b/fluid/Fl_Menu_Type.cxx
@@ -37,6 +37,8 @@
#include <FL/fl_message.H>
#include <FL/Fl_Menu_.H>
#include <FL/Fl_Button.H>
+#include <FL/Fl_Value_Input.H>
+#include <FL/Fl_Text_Display.H>
#include "../src/flstring.h"
#include <stdio.h>
#include <stdlib.h>
@@ -589,14 +591,19 @@ int Shortcut_Button::handle(int e) {
void shortcut_in_cb(Shortcut_Button* i, void* v) {
if (v == LOAD) {
- if ( !current_widget->is_button() && !current_widget->is_input() ) {
- i->hide(); return;
- }
- i->show();
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();
+ else if (current_widget->is_value_input())
+ i->svalue = ((Fl_Value_Input*)(current_widget->o))->shortcut();
+ else if (current_widget->is_text_display())
+ i->svalue = ((Fl_Text_Display*)(current_widget->o))->shortcut();
+ else {
+ i->hide();
+ return;
+ }
+ i->show();
i->redraw();
} else {
int mod = 0;
@@ -606,11 +613,18 @@ void shortcut_in_cb(Shortcut_Button* i, void* v) {
if (b->shortcut()!=i->svalue) mod = 1;
b->shortcut(i->svalue);
if (o->is_menu_item()) ((Fl_Widget_Type*)o)->redraw();
- }
- else if (o->selected && o->is_input()) {
+ } 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);
+ } else if (o->selected && o->is_value_input()) {
+ Fl_Value_Input* b = (Fl_Value_Input*)(((Fl_Widget_Type*)o)->o);
+ if (b->shortcut()!=i->svalue) mod = 1;
+ b->shortcut(i->svalue);
+ } else if (o->selected && o->is_text_display()) {
+ Fl_Text_Display* b = (Fl_Text_Display*)(((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 621650f82..1ce2fb99f 100644
--- a/fluid/Fl_Type.cxx
+++ b/fluid/Fl_Type.cxx
@@ -629,6 +629,8 @@ 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_value_input() const {return 0;}
+int Fl_Type::is_text_display() 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 04c159c13..a3bf02490 100644
--- a/fluid/Fl_Type.h
+++ b/fluid/Fl_Type.h
@@ -132,6 +132,8 @@ public:
virtual int is_widget() const;
virtual int is_button() const;
virtual int is_input() const;
+ virtual int is_value_input() const;
+ virtual int is_text_display() 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 c67bb6438..e1213008a 100644
--- a/fluid/Fl_Widget_Type.cxx
+++ b/fluid/Fl_Widget_Type.cxx
@@ -2162,30 +2162,26 @@ 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);
- }
- }
+
+ // write shortcut command if needed
+ int shortcut = 0;
+ if (is_button()) shortcut = ((Fl_Button*)o)->shortcut();
+ else if (is_input()) shortcut = ((Fl_Input_*)o)->shortcut();
+ else if (is_value_input()) shortcut = ((Fl_Value_Input*)o)->shortcut();
+ else if (is_text_display()) shortcut = ((Fl_Text_Display*)o)->shortcut();
+ if (shortcut) {
+ if (use_FL_COMMAND && (shortcut & (FL_CTRL|FL_META))) {
+ write_c("%s%s->shortcut(FL_COMMAND|0x%x);\n", indent(), var, shortcut & ~(FL_CTRL|FL_META));
+ } else {
+ write_c("%s%s->shortcut(0x%x);\n", indent(), var, shortcut);
+ }
}
+
if (is_button()) {
Fl_Button* b = (Fl_Button*)o;
if (b->down_box()) write_c("%s%s->down_box(FL_%s);\n", indent(), var,
boxname(b->down_box()));
if (b->value()) write_c("%s%s->value(1);\n", indent(), var);
- 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);
- }
- }
} else if (!strcmp(type_name(), "Fl_Input_Choice")) {
Fl_Input_Choice* b = (Fl_Input_Choice*)o;
if (b->down_box()) write_c("%s%s->down_box(FL_%s);\n", indent(), var,
@@ -2348,6 +2344,14 @@ void Fl_Widget_Type::write_properties() {
Fl_Input_* b = (Fl_Input_*)o;
if (b->shortcut()) write_string("shortcut 0x%x", b->shortcut());
}
+ if (is_value_input()) {
+ Fl_Value_Input* b = (Fl_Value_Input*)o;
+ if (b->shortcut()) write_string("shortcut 0x%x", b->shortcut());
+ }
+ if (is_text_display()) {
+ Fl_Text_Display* b = (Fl_Text_Display*)o;
+ if (b->shortcut()) write_string("shortcut 0x%x", b->shortcut());
+ }
if (is_button()) {
Fl_Button* b = (Fl_Button*)o;
if (b->down_box()) {
@@ -2537,10 +2541,12 @@ void Fl_Widget_Type::read_property(const char *c) {
hotspot(1);
} else if (!strcmp(c,"class")) {
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 (!strcmp(c,"shortcut")) {
+ int shortcut = strtol(read_word(),0,0);
+ if (is_button()) ((Fl_Button*)o)->shortcut(shortcut);
+ else if (is_input()) ((Fl_Input_*)o)->shortcut(shortcut);
+ else if (is_value_input()) ((Fl_Value_Input*)o)->shortcut(shortcut);
+ else if (is_text_display()) ((Fl_Text_Display*)o)->shortcut(shortcut);
} else {
if (!strncmp(c,"code",4)) {
int n = atoi(c+4);
@@ -2717,6 +2723,18 @@ void Fl_Widget_Type::copy_properties() {
d->shortcut(s->shortcut());
}
+ // copy all attributes specific to widgets derived from Fl_Value_Input
+ if (is_value_input()) {
+ Fl_Value_Input* d = (Fl_Value_Input*)live_widget, *s = (Fl_Value_Input*)o;
+ d->shortcut(s->shortcut());
+ }
+
+ // copy all attributes specific to widgets derived from Fl_Text_Display
+ if (is_text_display()) {
+ Fl_Text_Display* d = (Fl_Text_Display*)live_widget, *s = (Fl_Text_Display*)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 ab1da8781..5e08c4ba1 100644
--- a/fluid/factory.cxx
+++ b/fluid/factory.cxx
@@ -533,6 +533,7 @@ public:
if (w < 50) w = 50;
}
virtual const char *type_name() {return "Fl_Text_Display";}
+ int is_text_display() const {return 1;}
Fl_Widget *widget(int x,int y,int w,int h) {
Fl_Text_Display *myo = new Fl_Text_Display(x,y,w,h);
return myo;
@@ -573,6 +574,7 @@ public:
if (w < 50) w = 50;
}
virtual const char *type_name() {return "Fl_Text_Editor";}
+ int is_text_display() const {return 1;}
Fl_Widget *widget(int x,int y,int w,int h) {
Fl_Text_Editor *myo = new Fl_Text_Editor(x,y,w,h);
return myo;
@@ -793,6 +795,7 @@ public:
virtual const char *type_name() {return "Fl_Value_Input";}
int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
int is_valuator() const {return 1;}
+ int is_value_input() const {return 1;}
Fl_Widget *widget(int x,int y,int w,int h) {
Fl_Value_Input *myo = new Fl_Value_Input(x,y,w,h,"value:");
return myo;