101 bool isEmpty() const noexcept;
106 int leafCount() const noexcept;
112 int treeHeight() const noexcept;
119 const
SplitNode* leafForWindow(const QString& windowId) const;
126 QStringList leafOrder() const;
141 void insertAtFocused(const QString& windowId, const QString& focusedWindowId, qreal initialRatio = 0.0);
151 void insertAtEnd(const QString& windowId, qreal initialRatio = 0.0);
163 void insertAtPosition(const QString& windowId,
int position, qreal initialRatio = 0.0);
169 void remove(const QString& windowId);
180 void swap(const QString& windowId1, const QString& windowId2);
200 bool swapLeaves(const QString& a, const QString& b);
207 void resizeSplit(const QString& windowId, qreal newRatio);
260 QVector<QRect> applyGeometry(const QRect& area,
int innerGap) const;
271 bool rebuildFromOrder(const QStringList& tiledWindows,
272 qreal defaultSplitRatio = AutotileDefaults::DefaultSplitRatio);
275 enum class InsertReady {
283 static constexpr int MaxRuntimeTreeDepth = AutotileDefaults::MaxRuntimeTreeDepth;
285 InsertReady prepareInsert(
const QString& windowId);
288 void insertAtEndRaw(
const QString& windowId, qreal initialRatio);
291 void insertAtEndImpl(
const QString& windowId, qreal initialRatio);
293 std::unique_ptr<SplitNode> m_root;
296 const SplitNode* findLeaf(
const SplitNode* node,
const QString& windowId,
int depth = 0)
const;
297 SplitNode* leafAtIndex(
SplitNode* node,
int targetIndex,
int& currentIndex,
int depth = 0)
const;
298 const SplitNode* leafAtIndex(
const SplitNode* node,
int targetIndex,
int& currentIndex,
int depth = 0)
const;
301 void collectLeafOrder(
const SplitNode* node, QStringList& order,
int depth = 0)
const;
302 int countLeaves(
const SplitNode* node,
int depth = 0)
const;
303 void applyGeometryRecursive(
const SplitNode* node,
const QRect& rect,
int innerGap, QVector<QRect>& zones,
304 int depth = 0)
const;
306 static int subtreeHeight(
const SplitNode* node,
int depth = 0);
307 static void splitLeaf(
SplitNode* leaf,
const QString& newId, qreal ratio);