#ifndef XMLPROJECTMANAGER_H #define XMLPROJECTMANAGER_H #include "libProjectManager_global.h" #include #include #include "libProjectManager.h" namespace Project { enum class NodeType{ GROUP, FILE, }; class ProjectNode : public QStandardItem { public: ProjectNode(NodeType t, const QString &name); virtual ~ProjectNode() = default; virtual NodeType nodeType() const; void setFile(const QString &name); QString file() const; private: NodeType type_indi; QString filename; }; class LIBPROJECTMANAGER_EXPORT XMLProjectManager : public QObject, public Project::ProjectManager { public: XMLProjectManager(QObject *parent = nullptr); virtual ~XMLProjectManager(); // ProjectManager interface public: virtual bool isOpen() const override; virtual void openProject(const QString &project_file) override; virtual void newProject(const QString &project_dir, const QString &name) override; virtual void closeProject() override; virtual void save() override; virtual QString projectName() const override; virtual Config::Configration *configraions() const override; virtual QStandardItemModel *model() const override; virtual int createFile(const QList &path, const QString &name, const QString &suffix) override; virtual bool deletePath(const QList &path) override; virtual QList> filesWithEnds(const QString &suffix) const override; virtual QStandardItem *newPath(const QList &path) override; virtual QFileInfo queryWith(const QList &path) override; virtual bool moveTo(const QList &item_path, const QList &target_group, int index) override; private: Config::Configration *const project_config; QStandardItemModel*const project_structure; QString filepath_store; bool open_status; void structure_parser(QDomElement struct_elm, ProjectNode *pnode); void structure_severlize(ProjectNode *pnode, QDomElement &elm); ProjectNode* node_follows(ProjectNode* pnode, const QList &path_remains); QList> nodes_search(ProjectNode *pnode, const QString &suffix) const; ProjectNode *groups_rebuild(ProjectNode *pnode, const QList &path_remains); }; } #endif // XMLPROJECTMANAGER_H