6 #include <QDragEnterEvent> 15 #include <pajlada/signals/signal.hpp> 16 #include <pajlada/signals/signalholder.hpp> 17 #include <unordered_map> 47 : relativeNode_(relativeNode)
48 , direction_(direcion)
60 struct DropRect final {
64 DropRect(
const QRect &_rect,
const Position &_position)
71 struct ResizeRect final {
76 ResizeRect(
const QRect &_rect,
Node *_node,
bool _vertical)
91 qreal getHorizontalFlex();
92 qreal getVerticalFlex();
93 const std::vector<std::unique_ptr<Node>> &getChildren();
99 bool isOrContainsNode(
Node *_node);
100 Node *findNodeContainingSplit(
Split *_split);
102 void nestSplitIntoCollection(
Split *_split,
Direction _direction);
104 void setSplit(
Split *_split);
106 qreal getFlex(
bool isVertical);
107 qreal getSize(
bool isVertical);
108 qreal getChildrensTotalFlex(
bool isVertical);
109 void layout(
bool addSpacing,
float _scale,
110 std::vector<DropRect> &dropRects_,
111 std::vector<ResizeRect> &resizeRects);
117 Node *preferedFocusTarget_;
122 std::vector<std::unique_ptr<Node>> children_;
128 class DropOverlay final :
public QWidget
133 void setRects(std::vector<SplitContainer::DropRect> _rects);
135 pajlada::Signals::NoArgSignal dragEnded;
140 void dragMoveEvent(QDragMoveEvent *event)
override;
141 void dragLeaveEvent(QDragLeaveEvent *event)
override;
142 void dropEvent(QDropEvent *event)
override;
145 std::vector<DropRect> rects_;
146 QPoint mouseOverPoint_;
150 class ResizeHandle final :
public QWidget
156 void setVertical(
bool isVertical);
159 void mousePressEvent(QMouseEvent *event)
override;
162 void mouseDoubleClickEvent(QMouseEvent *event)
override;
170 bool isMouseDown_ =
false;
181 Node *relativeTo =
nullptr);
190 const std::vector<Split *>
getSplits()
const;
221 void applyFromDescriptorRecursively(
const NodeDescriptor &rootNode,
226 void focusSplitRecursive(
Node *node);
227 void setPreferedTargetRecursive(
Node *node);
229 void addSplit(
Split *split);
233 void refreshTabTitle();
234 void refreshTabLiveStatus();
238 std::pair<int, int> position;
240 DropRegion(QRect rect, std::pair<int, int> position)
243 this->position = position;
247 std::vector<DropRect> dropRects_;
248 std::vector<DropRegion> dropRegions_;
249 DropOverlay overlay_;
250 std::vector<std::unique_ptr<ResizeHandle>> resizeHandles_;
251 QPoint mouseOverPoint_;
256 bool disableLayouting_{};
259 std::vector<Split *> splits_;
261 std::unordered_map<Split *, pajlada::Signals::SignalHolder>
262 connectionsPerSplit_;
264 pajlada::Signals::SignalHolder signalHolder_;
266 bool isDragging_ =
false;
Definition: SplitContainer.hpp:41
Node * getBaseNode()
Definition: SplitContainer.cpp:752
void appendSplit(Split *split)
Definition: SplitContainer.cpp:138
Definition: SplitContainer.hpp:43
Split * getSelectedSplit() const
Definition: SplitContainer.cpp:191
const std::vector< Split * > getSplits() const
Definition: SplitContainer.cpp:747
static Split * draggingSplit
Definition: SplitContainer.hpp:202
Definition: SplitContainer.hpp:86
friend class SplitContainer
Definition: SplitContainer.hpp:56
Definition: SplitContainer.hpp:33
void hideResizeHandles()
Definition: SplitContainer.cpp:102
NotebookTab * getTab() const
Definition: SplitContainer.cpp:88
void selectNextSplit(Direction direction)
Definition: SplitContainer.cpp:356
void leaveEvent(QEvent *event) override
Definition: SplitContainer.cpp:716
Definition: Application.cpp:48
void mouseReleaseEvent(QMouseEvent *event) override
Definition: SplitContainer.cpp:570
Split * appendNewSplit(bool openChannelNameDialog)
Definition: SplitContainer.cpp:118
void popup()
Definition: SplitContainer.cpp:767
Direction
Definition: SplitContainer.hpp:41
std::variant< ContainerNodeDescriptor, SplitNodeDescriptor > NodeDescriptor
Definition: WindowDescriptors.hpp:58
Definition: SplitContainer.hpp:85
void paintEvent(QPaintEvent *event) override
Definition: SplitContainer.cpp:597
Definition: SplitContainer.hpp:41
void focusInEvent(QFocusEvent *event) override
Definition: SplitContainer.cpp:722
Definition: NotebookTab.hpp:21
void mouseMoveEvent(QMouseEvent *event) override
Definition: SplitContainer.cpp:705
void refreshTab()
Definition: SplitContainer.cpp:736
Type
Definition: SplitContainer.hpp:86
friend struct Node
Definition: SplitContainer.hpp:55
Position deleteSplit(Split *split)
Definition: SplitContainer.cpp:344
Definition: SplitContainer.hpp:41
static bool isDraggingSplit
Definition: SplitContainer.hpp:201
void dragEnterEvent(QDragEnterEvent *event) override
Definition: SplitContainer.cpp:689
Definition: Notebook.hpp:22
void applyFromDescriptor(const NodeDescriptor &rootNode)
Definition: SplitContainer.cpp:757
void insertSplit(Split *split, const Position &position)
Definition: SplitContainer.cpp:143
Definition: SplitContainer.hpp:41
void setTab(NotebookTab *tab_)
Definition: SplitContainer.cpp:93
void resetMouseStatus()
Definition: SplitContainer.cpp:112
void setSelected(Split *selected_)
Definition: SplitContainer.cpp:287
void resizeEvent(QResizeEvent *event) override
Definition: SplitContainer.cpp:563
int getSplitCount()
Definition: SplitContainer.cpp:742
Position releaseSplit(Split *split)
Definition: SplitContainer.cpp:315