libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
splitter.h
Go to the documentation of this file.
1
8#pragma once
9
10#include <promeki/namespace.h>
11#include <promeki/tui/widget.h>
12
13PROMEKI_NAMESPACE_BEGIN
14
22class TuiSplitter : public TuiWidget {
23 PROMEKI_OBJECT(TuiSplitter, TuiWidget)
24 public:
25 enum Orientation {
26 Horizontal,
27 Vertical
28 };
29
30 TuiSplitter(Orientation orientation = Horizontal, ObjectBase *parent = nullptr);
31 ~TuiSplitter() override;
32
33 void setFirstWidget(TuiWidget *widget);
34 void setSecondWidget(TuiWidget *widget);
35
36 TuiWidget *firstWidget() const { return _first; }
37 TuiWidget *secondWidget() const { return _second; }
38
40 void setSplitRatio(double ratio);
41 double splitRatio() const { return _splitRatio; }
42
43 Orientation orientation() const { return _orientation; }
44
45 Size2Di32 sizeHint() const override;
46
47 protected:
48 void paintEvent(PaintEvent *e) override;
49 void resizeEvent(ResizeEvent *e) override;
50 void keyPressEvent(KeyEvent *e) override;
51 void mouseEvent(MouseEvent *e) override;
52
53 private:
54 Orientation _orientation;
55 TuiWidget *_first = nullptr;
56 TuiWidget *_second = nullptr;
57 double _splitRatio = 0.5;
58 bool _dragging = false;
59
60 void updateChildGeometry();
61};
62
63PROMEKI_NAMESPACE_END
Resizable split between two child widgets.
Definition splitter.h:22
void setSplitRatio(double ratio)
Sets the split position (0.0 to 1.0).
TUI-specific widget base class.
Definition widget.h:33