89 bool isEmpty() const noexcept;
94 int leafCount() const noexcept;
100 int treeHeight() const noexcept;
107 const
SplitNode* leafForWindow(const QString& windowId) const;
114 QStringList leafOrder() const;
129 void insertAtFocused(const QString& windowId, const QString& focusedWindowId, qreal initialRatio = 0.0);
139 void insertAtEnd(const QString& windowId, qreal initialRatio = 0.0);
151 void insertAtPosition(const QString& windowId,
int position, qreal initialRatio = 0.0);
157 void remove(const QString& windowId);
168 void swap(const QString& windowId1, const QString& windowId2);
188 bool swapLeaves(const QString& a, const QString& b);
195 void resizeSplit(const QString& windowId, qreal newRatio);
215 QVector<QRect> applyGeometry(const QRect& area,
int innerGap) const;
226 bool rebuildFromOrder(const QStringList& tiledWindows,
227 qreal defaultSplitRatio = AutotileDefaults::DefaultSplitRatio);
236 QJsonObject toJson() const;
243 static std::unique_ptr<
SplitTree> fromJson(const QJsonObject& json);
246 enum class InsertReady {
254 static constexpr int MaxRuntimeTreeDepth = AutotileDefaults::MaxRuntimeTreeDepth;
256 InsertReady prepareInsert(
const QString& windowId);
259 void insertAtEndRaw(
const QString& windowId, qreal initialRatio);
262 void insertAtEndImpl(
const QString& windowId, qreal initialRatio);
264 std::unique_ptr<SplitNode> m_root;
267 const SplitNode* findLeaf(
const SplitNode* node,
const QString& windowId,
int depth = 0)
const;
268 SplitNode* leafAtIndex(
SplitNode* node,
int targetIndex,
int& currentIndex,
int depth = 0)
const;
269 const SplitNode* leafAtIndex(
const SplitNode* node,
int targetIndex,
int& currentIndex,
int depth = 0)
const;
272 void collectLeafOrder(
const SplitNode* node, QStringList& order,
int depth = 0)
const;
273 int countLeaves(
const SplitNode* node,
int depth = 0)
const;
274 void applyGeometryRecursive(
const SplitNode* node,
const QRect& rect,
int innerGap, QVector<QRect>& zones,
275 int depth = 0)
const;
277 static int subtreeHeight(
const SplitNode* node,
int depth = 0);
278 static void splitLeaf(
SplitNode* leaf,
const QString& newId, qreal ratio);
280 static constexpr int MaxDeserializationDepth = AutotileDefaults::MaxRuntimeTreeDepth;
281 static constexpr int MaxDeserializationNodes = 1024;
283 static QJsonObject nodeToJson(
const SplitNode* node,
int depth = 0);
284 static std::unique_ptr<SplitNode> nodeFromJson(
const QJsonObject& json,
SplitNode* parent,
int depth,
285 int& nodeCount,
int& clampedRatios, QSet<QString>& seenIds);