all repos — openbox @ 515f8d8760f614b127b4435dca7881a32b5b6207

openbox fork - make it a bit more like ryudo

otk/messagedialog.hh (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
#ifndef __messagedialog_hh
#define __messagedialog_hh

#include "widget.hh"
#include "ustring.hh"

#include <vector>

namespace otk {

class Button;
class Label;

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

  bool operator==(const DialogButton &o) const { return  _label == o._label;  }
  bool operator!=(const DialogButton &o) const { return!(_label == o._label); }
};

class MessageDialog : public Widget {
public:
  MessageDialog(int screen, EventDispatcher *ed, ustring title,
		ustring caption);
  MessageDialog(EventDispatcher *ed, ustring title, ustring caption);
  MessageDialog(Widget *parent, ustring title, ustring caption);
  virtual ~MessageDialog();

  virtual void addButton(const DialogButton &b);

  virtual const DialogButton& run();

  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 void keyPressHandler(const XKeyEvent &e);
  virtual void clientMessageHandler(const XClientMessageEvent &e);

private:
  void init(const ustring &title, const ustring &caption);

protected:
  std::vector<Button *> _button_widgets;
  Label *_label;
  Widget *_button_holder;
  KeyCode _return;
  KeyCode _escape;
  DialogButton _result;
};

}

#endif // __messagedialog_hh