Files
HPPA/HPPA/LayerTree.h
tangchao0503 631216dc66 初步实现单独的图层管理器。
注意:没有和mapcavas通讯。
2026-02-05 15:32:34 +08:00

50 lines
1.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <QObject>
#include "LayerTreeNode.h"
/**
* LayerTree独立的目录树管理类
* - 管理 root
* - 提供插入/移除节点的 API
* - 提供可见性级联与父节点三态更新的静态工具
*
* 注意beginInsertRows/endInsertRows 等 Qt Model 变更通知应由 Model 驱动调用,
* LayerTree 只负责维护数据结构正确性。
*/
class LayerTree : public QObject
{
Q_OBJECT
public:
explicit LayerTree(QObject* parent = nullptr);
~LayerTree() override;
LayerTree(const LayerTree&) = delete;
LayerTree& operator=(const LayerTree&) = delete;
LayerTreeNode* root() const;
// 插入parent 为 nullptr 表示 rootrow=-1 表示 append
LayerTreeNode* insertNode(LayerTreeNode* parent, int row, LayerTreeNode* node);
// 移除:不 delete返回被移除节点调用者负责 delete 或重新插入)
LayerTreeNode* removeNode(LayerTreeNode* parent, int row);
// 可见性逻辑(供 Model 调用)
static void setChildrenVisible(LayerTreeNode* n, Qt::CheckState state);
static void updateParentVisibleFromChildren(LayerTreeNode* parent);
static inline bool isLayer(LayerTreeNode* node)
{
return node && node->type() == LayerTreeNode::Type::Layer;
}
static inline bool isGroup(LayerTreeNode* node)
{
return node && node->type() == LayerTreeNode::Type::Group;
}
private:
LayerTreeNode* m_root = nullptr; // owned
};