]> Dogcows Code - chaz/openbox/commitdiff
cleanup
authorDana Jansens <danakj@orodu.net>
Sun, 16 Feb 2003 19:48:54 +0000 (19:48 +0000)
committerDana Jansens <danakj@orodu.net>
Sun, 16 Feb 2003 19:48:54 +0000 (19:48 +0000)
otk/messagedialog.cc
otk/messagedialog.hh

index 2c06e63ae020422e286c0c318bdc7a36aeae6d7e..ac468cb3768b3450fc2186225aca1a52567c47bb 100644 (file)
 
 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 @@ public:
       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 @@ void MessageDialog::init(const ustring &title, const ustring &caption)
   _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 @@ const DialogButton& MessageDialog::run()
     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::focus()
 
 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::hide()
 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;
       }
index bc8cea5ee241b15b4c6aaf3d0789f57989afa9dd..818946242a676a4a8fb3812f4f9dd0d4ce732340 100644 (file)
@@ -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 @@ public:
   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 @@ public:
   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;
 };
 
 }
This page took 0.028935 seconds and 4 git commands to generate.