all repos — openbox @ 6354e77144a8c5dc6dbfa8b313967ee434bf5b7e

openbox fork - make it a bit more like ryudo

cleanup
Dana Jansens danakj@orodu.net
commit

6354e77144a8c5dc6dbfa8b313967ee434bf5b7e

parent

93ea4c4d2ea2b1ff3dfee40fb114f3080001e4ce

2 files changed, 26 insertions(+), 29 deletions(-)

jump to
M otk/messagedialog.ccotk/messagedialog.cc

@@ -15,17 +15,13 @@ #include <algorithm>

namespace otk { -DialogButton MessageDialog::_default_result("", false); - class DialogButtonWidget : public Button { MessageDialog *_dia; - const DialogButton &_res; public: DialogButtonWidget(Widget *parent, MessageDialog *dia, const DialogButton &b) : Button(parent), - _dia(dia), - _res(b) + _dia(dia) { assert(dia); setBevel(1);

@@ -41,27 +37,30 @@ if (e.button == Button1)

Button::buttonPressHandler(e); } virtual void clickHandler(unsigned int) { - _dia->setResult(_res); + _dia->setResult(DialogButton(text(), isHighlighted())); _dia->hide(); } }; MessageDialog::MessageDialog(int screen, EventDispatcher *ed, ustring title, ustring caption) - : Widget(screen, ed, Widget::Vertical) + : Widget(screen, ed, Widget::Vertical), + _result("", false) { init(title, caption); } MessageDialog::MessageDialog(EventDispatcher *ed, ustring title, ustring caption) - : Widget(DefaultScreen(**display), ed, Widget::Vertical) + : Widget(DefaultScreen(**display), ed, Widget::Vertical), + _result("", false) { init(title, caption); } MessageDialog::MessageDialog(Widget *parent, ustring title, ustring caption) - : Widget(parent, Widget::Vertical) + : Widget(parent, Widget::Vertical), + _result("", false) { init(title, caption); }

@@ -75,7 +74,6 @@ _button_holder = new Widget(this, Widget::Horizontal);

_button_holder->show(); _return = XKeysymToKeycode(**display, XStringToKeysym("Return")); _escape = XKeysymToKeycode(**display, XStringToKeysym("Escape")); - _result = &_default_result; setEventMask(eventMask() | KeyPressMask); _label->setText(caption);

@@ -109,7 +107,13 @@ dispatcher()->dispatchEvents();

if (visible()) Timer::dispatchTimers(); // fire pending events } - return *_result; + return _result; +} + +void MessageDialog::addButton(const DialogButton &b) +{ + _button_widgets.push_back(new DialogButtonWidget(_button_holder, + this, b)); } void MessageDialog::focus()

@@ -120,11 +124,6 @@ }

void MessageDialog::show() { - std::vector<DialogButton>::const_iterator it, end = _buttons.end(); - for (it = _buttons.begin(); it != end; ++it) - _button_widgets.push_back(new DialogButtonWidget(_button_holder, - this, *it)); - Rect r; if (parent())

@@ -165,10 +164,10 @@

void MessageDialog::keyPressHandler(const XKeyEvent &e) { if (e.keycode == _return) { - std::vector<DialogButton>::const_iterator it, end = _buttons.end(); - for (it = _buttons.begin(); it != end; ++it) - if (it->isDefault()) { - _result = &(*it); + std::vector<Button *>::const_iterator it, end = _button_widgets.end(); + for (it = _button_widgets.begin(); it != end; ++it) + if ((*it)->isHighlighted()) { + _result = DialogButton((*it)->text(), true); hide(); break; }
M otk/messagedialog.hhotk/messagedialog.hh

@@ -16,9 +16,9 @@ class DialogButton {

ustring _label; bool _default; public: - DialogButton(char *label) : _label(label), _default(false) + DialogButton(ustring label) : _label(label), _default(false) {} - DialogButton(char *label, bool def) : _label(label), _default(def) + DialogButton(ustring label, bool def) : _label(label), _default(def) {} inline const ustring& label() const { return _label; } inline const bool& isDefault() const { return _default; }

@@ -35,7 +35,7 @@ MessageDialog(EventDispatcher *ed, ustring title, ustring caption);

MessageDialog(Widget *parent, ustring title, ustring caption); virtual ~MessageDialog(); - virtual void addButton(const DialogButton &b) { _buttons.push_back(b); } + virtual void addButton(const DialogButton &b); virtual const DialogButton& run();

@@ -43,24 +43,22 @@ virtual void show();

virtual void hide(); virtual void focus(); - virtual const DialogButton& result() const { return *_result; } - virtual void setResult(const DialogButton &result) { _result = &result; } + virtual const DialogButton& result() const { return _result; } + virtual void setResult(const DialogButton &result) { _result = result; } virtual void keyPressHandler(const XKeyEvent &e); virtual void clientMessageHandler(const XClientMessageEvent &e); private: - static DialogButton _default_result; - void init(const ustring &title, const ustring &caption); - std::vector<DialogButton> _buttons; +protected: std::vector<Button *> _button_widgets; Label *_label; Widget *_button_holder; KeyCode _return; KeyCode _escape; - const DialogButton *_result; + DialogButton _result; }; }