102 bool isEmpty() const noexcept;
107 int leafCount() const noexcept;
113 int treeHeight() const noexcept;
120 const
SplitNode* leafForWindow(const QString& windowId) const;
127 QStringList leafOrder() const;
142 void insertAtFocused(const QString& windowId, const QString& focusedWindowId, qreal initialRatio = 0.0);
152 void insertAtEnd(const QString& windowId, qreal initialRatio = 0.0);
164 void insertAtPosition(const QString& windowId,
int position, qreal initialRatio = 0.0);
170 void remove(const QString& windowId);
181 void swap(const QString& windowId1, const QString& windowId2);
201 bool swapLeaves(const QString& a, const QString& b);
208 void resizeSplit(const QString& windowId, qreal newRatio);
261 QVector<QRect> applyGeometry(const QRect& area,
int innerGap) const;
272 bool rebuildFromOrder(const QStringList& tiledWindows,
273 qreal defaultSplitRatio = AutotileDefaults::DefaultSplitRatio);
282 QJsonObject toJson() const;
289 static std::unique_ptr<
SplitTree> fromJson(const QJsonObject& json);
292 enum class InsertReady {
300 static constexpr int MaxRuntimeTreeDepth = AutotileDefaults::MaxRuntimeTreeDepth;
302 InsertReady prepareInsert(
const QString& windowId);
305 void insertAtEndRaw(
const QString& windowId, qreal initialRatio);
308 void insertAtEndImpl(
const QString& windowId, qreal initialRatio);
310 std::unique_ptr<SplitNode> m_root;
313 const SplitNode* findLeaf(
const SplitNode* node,
const QString& windowId,
int depth = 0)
const;
314 SplitNode* leafAtIndex(
SplitNode* node,
int targetIndex,
int& currentIndex,
int depth = 0)
const;
315 const SplitNode* leafAtIndex(
const SplitNode* node,
int targetIndex,
int& currentIndex,
int depth = 0)
const;
318 void collectLeafOrder(
const SplitNode* node, QStringList& order,
int depth = 0)
const;
319 int countLeaves(
const SplitNode* node,
int depth = 0)
const;
320 void applyGeometryRecursive(
const SplitNode* node,
const QRect& rect,
int innerGap, QVector<QRect>& zones,
321 int depth = 0)
const;
323 static int subtreeHeight(
const SplitNode* node,
int depth = 0);
324 static void splitLeaf(
SplitNode* leaf,
const QString& newId, qreal ratio);
326 static constexpr int MaxDeserializationDepth = AutotileDefaults::MaxRuntimeTreeDepth;
327 static constexpr int MaxDeserializationNodes = 1024;
329 static QJsonObject nodeToJson(
const SplitNode* node,
int depth = 0);
330 static std::unique_ptr<SplitNode> nodeFromJson(
const QJsonObject& json,
SplitNode* parent,
int depth,
331 int& nodeCount,
int& clampedRatios, QSet<QString>& seenIds);