aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gui/dialog.cpp5
-rw-r--r--gui/widget.cpp5
-rw-r--r--gui/widget.h7
3 files changed, 13 insertions, 4 deletions
diff --git a/gui/dialog.cpp b/gui/dialog.cpp
index 850c490702..682a36fb2c 100644
--- a/gui/dialog.cpp
+++ b/gui/dialog.cpp
@@ -56,9 +56,8 @@ void Dialog::handleKey(char key, int modifiers)
Widget *w = _firstWidget;
key = toupper(key);
while (w) {
- ButtonWidget *b = dynamic_cast<ButtonWidget *>(w);
- if (b && key == toupper(b->_hotkey)) {
- b->handleClick(1);
+ if (w->_type == kButtonWidget && key == toupper(((ButtonWidget *)w)->_hotkey)) {
+ w->handleClick(1);
break;
}
w = w->_next;
diff --git a/gui/widget.cpp b/gui/widget.cpp
index 1975001733..cb3fce0ed5 100644
--- a/gui/widget.cpp
+++ b/gui/widget.cpp
@@ -25,7 +25,7 @@
Widget::Widget (Dialog *boss, int x, int y, int w, int h)
- : _boss(boss), _x(x), _y(y), _w(w), _h(h), _id(0), _flags(0)
+ : _type(0), _boss(boss), _x(x), _y(y), _w(w), _h(h), _id(0), _flags(0)
{
// Insert into the widget list of the boss
_next = _boss->_firstWidget;
@@ -78,6 +78,7 @@ StaticTextWidget::StaticTextWidget(Dialog *boss, int x, int y, int w, int h, con
{
// FIXME - maybe we should make a real copy of the string?
_text = text;
+ _type = kStaticTextWidget;
}
void StaticTextWidget::drawWidget(bool hilite)
@@ -94,6 +95,7 @@ ButtonWidget::ButtonWidget(Dialog *boss, int x, int y, int w, int h, const char
: StaticTextWidget(boss, x, y, w, h, label), _cmd(cmd), _hotkey(hotkey)
{
_flags = WIDGET_ENABLED | WIDGET_BORDER /* | WIDGET_CLEARBG */ ;
+ _type = kButtonWidget;
}
void ButtonWidget::handleClick(int button)
@@ -122,6 +124,7 @@ CheckboxWidget::CheckboxWidget(Dialog *boss, int x, int y, int w, int h, const c
: ButtonWidget(boss, x, y, w, h, label, cmd, hotkey), _state(false)
{
_flags = WIDGET_ENABLED;
+ _type = kCheckboxWidget;
}
void CheckboxWidget::handleClick(int button)
diff --git a/gui/widget.h b/gui/widget.h
index aed1e5590b..0e8e15cce7 100644
--- a/gui/widget.h
+++ b/gui/widget.h
@@ -35,10 +35,17 @@ enum {
WIDGET_WANT_TICKLE = 1 << 5,
};
+enum {
+ kStaticTextWidget = 'TEXT',
+ kButtonWidget = 'BTTN',
+ kCheckboxWidget = 'CHKB',
+};
+
/* Widget */
class Widget {
friend class Dialog;
protected:
+ int _type;
Dialog *_boss;
Widget *_next;
int16 _x, _y;