libpromeki main
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
menu.h
Go to the documentation of this file.
1
8#pragma once
9
11#include <promeki/core/string.h>
12#include <promeki/core/list.h>
13#include <promeki/tui/widget.h>
14
16
22class TuiAction : public ObjectBase {
23 PROMEKI_OBJECT(TuiAction, ObjectBase)
24 public:
25 TuiAction(const String &text, ObjectBase *parent = nullptr)
26 : ObjectBase(parent), _text(text) {}
27
28 const String &text() const { return _text; }
29 void setText(const String &text) { _text = text; }
30
31 bool isEnabled() const { return _enabled; }
32 void setEnabled(bool enabled) { _enabled = enabled; }
33
34 PROMEKI_SIGNAL(triggered)
35
36 private:
37 String _text;
38 bool _enabled = true;
39};
40
44class TuiMenu : public TuiWidget {
45 PROMEKI_OBJECT(TuiMenu, TuiWidget)
46 public:
47 TuiMenu(const String &title = String(), ObjectBase *parent = nullptr);
48 ~TuiMenu() override;
49
50 const String &title() const { return _title; }
51 void setTitle(const String &title) { _title = title; update(); }
52
53 TuiAction *addAction(const String &text);
54 void addSeparator();
55
56 const List<TuiAction *> &actions() const { return _actions; }
57
58 int currentIndex() const { return _currentIndex; }
59 void setCurrentIndex(int index);
60
61 bool isOpen() const { return _open; }
62 void open();
63 void close();
64
65 Size2Di32 sizeHint() const override;
66
67 protected:
68 void paintEvent(TuiPaintEvent *e) override;
69 void keyEvent(KeyEvent *e) override;
70
71 private:
72 String _title;
73 List<TuiAction *> _actions;
74 List<int> _separators; // 1 = separator at this index
75 int _currentIndex = 0;
76 bool _open = false;
77};
78
82class TuiMenuBar : public TuiWidget {
83 PROMEKI_OBJECT(TuiMenuBar, TuiWidget)
84 public:
85 TuiMenuBar(ObjectBase *parent = nullptr);
86 ~TuiMenuBar() override;
87
88 TuiMenu *addMenu(const String &title);
89 const List<TuiMenu *> &menus() const { return _menus; }
90
91 int currentIndex() const { return _currentIndex; }
92
93 Size2Di32 sizeHint() const override;
94
95 protected:
96 void paintEvent(TuiPaintEvent *e) override;
97 void keyEvent(KeyEvent *e) override;
98
99 private:
100 List<TuiMenu *> _menus;
101 int _currentIndex = 0;
102 bool _active = false;
103};
104
Event delivered when a key is pressed or released.
Definition keyevent.h:22
Dynamic array container wrapping std::vector.
Definition list.h:40
Base object for promeki.
Definition objectbase.h:129
ObjectBase * parent() const
Returns the parent object, if one. nullptr if none.
Definition objectbase.h:258
Encoding-aware string class with copy-on-write semantics.
Definition string.h:35
A menu action item.
Definition menu.h:22
Top-of-screen menu bar with dropdown menus.
Definition menu.h:82
Size2Di32 sizeHint() const override
Returns the preferred size. Override in subclasses.
void keyEvent(KeyEvent *e) override
Called on keyboard input. Override in subclasses.
void paintEvent(TuiPaintEvent *e) override
Called to paint the widget. Override in subclasses.
Dropdown menu.
Definition menu.h:44
void keyEvent(KeyEvent *e) override
Called on keyboard input. Override in subclasses.
void paintEvent(TuiPaintEvent *e) override
Called to paint the widget. Override in subclasses.
Size2Di32 sizeHint() const override
Returns the preferred size. Override in subclasses.
Event delivered when a TUI widget needs to repaint.
Definition widget.h:28
Base class for all TUI widgets.
Definition widget.h:88
void update()
Marks the widget as needing a repaint.
#define PROMEKI_NAMESPACE_BEGIN
Starts a promeki namespace block.
Definition namespace.h:14
#define PROMEKI_NAMESPACE_END
Ends a promeki namespace block.
Definition namespace.h:19