Skui 0.0.1
Build fast and easy to use control software with Skui.
 
Loading...
Searching...
No Matches
panel.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <QGuiApplication>
4#include <QLoggingCategory>
5#include <QMouseEvent>
6#include <QRubberBand>
7#include <QWidget>
8
11#include "resizeboundingbox.hpp"
12#include "visual_container.hpp"
13
15
16enum class DisplayMode { Run, Edit };
17
18static const int MAX_MOUSE_WIGGLE_TOLERANCE = 5; // px of size
19
20using RbbWidgetPair = std::pair<ResizeBoundingBox *, QWidget *>;
21class Panel : public QWidget
22{
23 Q_OBJECT
24
25public:
26 explicit Panel(QWidget *parent = nullptr);
27
36 void addVisual(Visual *visual);
37
38public slots:
47 void setMode(DisplayMode display_mode);
48
55 void triggeredAlign(AlignDirection direction);
56
58
59protected:
60 void mousePressEvent(QMouseEvent *) override;
61 void mouseMoveEvent(QMouseEvent *) override;
62 void mouseReleaseEvent(QMouseEvent *) override;
63
64 bool eventFilter(QObject *, QEvent *) override;
65 void childEvent(QChildEvent *) override;
66
67private:
76 void select(QWidget *child);
77
84 void deselectAll();
85
95 QList<QWidget *> childIn(QRect section);
96
106 QWidget *childAt(QPoint point);
107
118 bool inMouseWiggleTolerance(QSize size);
119
130 void selectSingle(QPoint position);
131
141 void selectMultiple(const QList<QWidget *> &found_visuals);
142
143 void alignChildToMinRect(AlignDirection direction, RbbWidgetPair rbbw_pair, QRect minimal_rect);
144 QRect minimalSelectedRect();
145
146 void installEventFilterRecursively(QObject *);
147 QMouseEvent *mapMouseEventToPanel(QMouseEvent *, QWidget *);
148
160 QRect calculateNewGeometry(
161 QPointF delta, QRect old_geometry, DragDirection active_direction, int min_w, int min_h);
162
163 QPoint m_origin;
164 QPointF m_last_global_position;
165 bool m_mouse_pressed = false;
166 QRubberBand *m_rubber_band;
167 DisplayMode m_display_mode;
168
169 QList<RbbWidgetPair> m_selection;
170};
@ Vertical
Definition cable.hpp:12
@ Horizontal
Definition cable.hpp:12
void triggeredAlign(AlignDirection direction)
Align selected to direction.
Definition panel.cpp:63
void addVisual(Visual *visual)
Adds a Visual to the Panel.
Definition panel.cpp:14
void childEvent(QChildEvent *) override
Definition panel.cpp:327
Panel(QWidget *parent=nullptr)
Definition panel.cpp:6
void mouseReleaseEvent(QMouseEvent *) override
Definition panel.cpp:292
void mousePressEvent(QMouseEvent *) override
Definition panel.cpp:262
void setMode(DisplayMode display_mode)
Sets the display mode of the panel.
Definition panel.cpp:58
void mouseMoveEvent(QMouseEvent *) override
Definition panel.cpp:285
void changeGeometryForSelected(DragDirection, QPointF)
Definition panel.cpp:168
bool eventFilter(QObject *, QEvent *) override
Definition panel.cpp:335
Definition visual.hpp:9
@ Right
Definition pad.hpp:15
@ Left
Definition pad.hpp:15
std::pair< ResizeBoundingBox *, QWidget * > RbbWidgetPair
Definition panel.hpp:20
DisplayMode
Definition panel.hpp:16
@ Edit
Definition panel.hpp:16
@ Run
Definition panel.hpp:16
AlignDirection
Definition panel.hpp:14
@ Bottom
Definition panel.hpp:14
@ Top
Definition panel.hpp:14
DragDirection
Definition resizeboundingbox.hpp:13