libpromeki main
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
tabwidget.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 TuiTabWidget : public TuiWidget {
23 PROMEKI_OBJECT(TuiTabWidget, TuiWidget)
24 public:
25 TuiTabWidget(ObjectBase *parent = nullptr);
26 ~TuiTabWidget() override;
27
28 void addTab(TuiWidget *widget, const String &title);
29 void removeTab(int index);
30
31 int currentIndex() const { return _currentIndex; }
32 void setCurrentIndex(int index);
33
34 TuiWidget *currentWidget() const;
35 int count() const { return static_cast<int>(_tabs.size()); }
36
37 Size2Di32 sizeHint() const override;
38
39 PROMEKI_SIGNAL(currentChanged, int)
40
41 protected:
42 void paintEvent(TuiPaintEvent *e) override;
43 void keyEvent(KeyEvent *e) override;
44 void mouseEvent(MouseEvent *e) override;
45 void resizeEvent(TuiResizeEvent *e) override;
46 void focusInEvent(Event *e) override;
47 void focusOutEvent(Event *e) override;
48
49 private:
50 struct Tab {
51 TuiWidget *widget;
52 String title;
53 };
54 struct TabPos {
55 int startX;
56 int endX;
57 };
58 List<Tab> _tabs;
59 List<TabPos> _tabPositions;
60 int _currentIndex = -1;
61
62 void updateTabGeometry();
63};
64
Base class for the event system.
Definition event.h:29
Event delivered when a key is pressed or released.
Definition keyevent.h:22
Dynamic array container wrapping std::vector.
Definition list.h:40
size_t size() const noexcept
Returns the number of elements in the list.
Definition list.h:301
Event delivered for mouse input.
Definition mouseevent.h:23
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
Event delivered when a TUI widget needs to repaint.
Definition widget.h:28
Event delivered when a TUI widget is resized.
Definition widget.h:37
Tabbed container with keyboard-switchable tabs.
Definition tabwidget.h:22
void resizeEvent(TuiResizeEvent *e) override
Called when the widget is resized. Override in subclasses.
void focusOutEvent(Event *e) override
Called when the widget loses focus.
Size2Di32 sizeHint() const override
Returns the preferred size. Override in subclasses.
void paintEvent(TuiPaintEvent *e) override
Called to paint the widget. Override in subclasses.
void focusInEvent(Event *e) override
Called when the widget gains focus.
void mouseEvent(MouseEvent *e) override
Called on mouse input. Override in subclasses.
void keyEvent(KeyEvent *e) override
Called on keyboard input. Override in subclasses.
Base class for all TUI widgets.
Definition widget.h:88
#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