libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
tabwidget.h
Go to the documentation of this file.
1
8#pragma once
9
10#include <promeki/namespace.h>
11#include <promeki/string.h>
12#include <promeki/list.h>
13#include <promeki/tui/widget.h>
14
15PROMEKI_NAMESPACE_BEGIN
16
24class TuiTabWidget : public TuiWidget {
25 PROMEKI_OBJECT(TuiTabWidget, TuiWidget)
26 public:
27 TuiTabWidget(ObjectBase *parent = nullptr);
28 ~TuiTabWidget() override;
29
30 void addTab(TuiWidget *widget, const String &title);
31 void removeTab(int index);
32
33 int currentIndex() const { return _currentIndex; }
34 void setCurrentIndex(int index);
35
36 TuiWidget *currentWidget() const;
37 int count() const { return static_cast<int>(_tabs.size()); }
38
39 Size2Di32 sizeHint() const override;
40
41 PROMEKI_SIGNAL(currentChanged, int)
42
43 protected:
44 void paintEvent(PaintEvent *e) override;
45 void keyPressEvent(KeyEvent *e) override;
46 void mouseEvent(MouseEvent *e) override;
47 void resizeEvent(ResizeEvent *e) override;
48 void focusInEvent(Event *e) override;
49 void focusOutEvent(Event *e) override;
50
51 private:
52 struct Tab {
53 TuiWidget *widget;
54 String title;
55 };
56 struct TabPos {
57 int startX;
58 int endX;
59 };
60 List<Tab> _tabs;
61 List<TabPos> _tabPositions;
62 int _currentIndex = -1;
63
64 void updateTabGeometry();
65};
66
67PROMEKI_NAMESPACE_END
Tabbed container with keyboard-switchable tabs.
Definition tabwidget.h:24
TUI-specific widget base class.
Definition widget.h:33