refactor: SplitOverlay (#5082)

This commit is contained in:
pajlada
2024-01-14 13:09:07 +01:00
committed by GitHub
parent c4c62f2796
commit 13ff11ea75
9 changed files with 294 additions and 222 deletions
+11 -14
View File
@@ -2,6 +2,7 @@
#include "common/WindowDescriptors.hpp"
#include "widgets/BaseWidget.hpp"
#include "widgets/splits/SplitCommon.hpp"
#include <pajlada/signals/signal.hpp>
#include <pajlada/signals/signalholder.hpp>
@@ -35,21 +36,17 @@ class SplitContainer final : public BaseWidget
public:
struct Node;
// fourtf: !!! preserve the order of left, up, right and down
// It's important to preserve since we cast from an int to this enum, so 0 = left, 1 = above etc
enum Direction { Left, Above, Right, Below };
struct Position final {
private:
Position() = default;
Position(Node *relativeNode, Direction direcion)
Position(Node *relativeNode, SplitDirection direction)
: relativeNode_(relativeNode)
, direction_(direcion)
, direction_(direction)
{
}
Node *relativeNode_{nullptr};
Direction direction_{Direction::Right};
SplitDirection direction_{SplitDirection::Right};
friend struct Node;
friend class SplitContainer;
@@ -102,9 +99,9 @@ public:
bool isOrContainsNode(Node *_node);
Node *findNodeContainingSplit(Split *_split);
void insertSplitRelative(Split *_split, Direction _direction);
void nestSplitIntoCollection(Split *_split, Direction _direction);
void insertNextToThis(Split *_split, Direction _direction);
void insertSplitRelative(Split *_split, SplitDirection _direction);
void nestSplitIntoCollection(Split *_split, SplitDirection _direction);
void insertNextToThis(Split *_split, SplitDirection _direction);
void setSplit(Split *_split);
Position releaseSplit();
qreal getFlex(bool isVertical);
@@ -117,7 +114,7 @@ public:
// Clamps the flex values ensuring they're never below 0
void clamp();
static Type toContainerType(Direction _dir);
static Type toContainerType(SplitDirection _dir);
Type type_;
Split *split_;
@@ -190,7 +187,7 @@ public:
Split *relativeSplit{nullptr};
Node *relativeNode{nullptr};
std::optional<Direction> direction{};
std::optional<SplitDirection> direction{};
};
// Insert split into the base node of this container
@@ -209,7 +206,7 @@ public:
Position releaseSplit(Split *split);
Position deleteSplit(Split *split);
void selectNextSplit(Direction direction);
void selectNextSplit(SplitDirection direction);
void setSelected(Split *split);
std::vector<Split *> getSplits() const;
@@ -244,7 +241,7 @@ private:
Node *baseNode);
void layout();
void selectSplitRecursive(Node *node, Direction direction);
void selectSplitRecursive(Node *node, SplitDirection direction);
void focusSplitRecursive(Node *node);
void setPreferedTargetRecursive(Node *node);