#ifndef CMIND_H #define CMIND_H #include struct CNodeData { int id = -1; // 节点 id, 对应数据库节点表中的 id, 数据库自动生成 int projectId = -1; // 项目 id, 对应数据库项目表中的 id, 为脑图所属项目, 数据库自动生成 int evalType = 0; // 评估类型 int number = -1; // 节点编号, 作用域为当前脑图, 0 为根节点 int pNumber = -1; // 父节点编号 QString name; // 名称 QString remark; // 备注 CNodeData(int projId = -1, int evalType = 0, int number = -1, int pNumber = -1, int id = -1); bool isValid() const; bool isNull() const; bool isCached() const; bool hasParent() const; }; class CMind : public QObject { Q_OBJECT public: explicit CMind(int projId = -1, int evalType = 0, QObject *parent = nullptr); // 节点数据 QList nodeList() const; void setNodeList(QList list); bool isNodeValid(CNodeData n) const; CNodeData node(int number) const; bool containsNode(int number) const; /// 指定父节点, 创建节点 CNodeData createNode(int pNumber = -1) const; void addNode(CNodeData n); void removeNode(int number); bool hasAncestor(int childNumber, int ancestorNumber) const; private: QList numberList() const; // 节点编号列表 // 最大的节点编号, 创建节点时, 编号递增 int maxNumber() const; // 最小的节点编号, 由于创建节点时编号递增, 所以此为根节点 int minNumber() const; private: QList m_nodeList; // 节点列表 int m_projectId = -1; int m_evalType = 0; }; #endif // CMIND_H