#ifndef XMLPROJECTMANAGER_H #define XMLPROJECTMANAGER_H #include "libProjectManager_global.h" #include #include #include "libProjectManager.h" namespace Project { enum class NodeType{ ROOT, 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 Project::FilesOperate, public Project::FilesQuery { public: XMLProjectManager(QObject *parent = nullptr); virtual ~XMLProjectManager(); // FilesQuery interface public: virtual QList filesGather(const QModelIndex &node) const override; virtual QList> filesWithEnds(const QString &suffix) const override; virtual QFileInfo queryInfo(const QModelIndex &path) override; virtual QModelIndex queryIndex(const QFileInfo &file) override; virtual QStringList packagePath(const QModelIndex &path) const override; // FilesOperate interface public: virtual QModelIndex newPackage(const QList &path_defs) override; virtual QModelIndex newFile(const QModelIndex &package_appoint, const QString &node, const QString &suffix) override; virtual void rename(const QModelIndex &node, const QString &name) override; virtual void moveTo(const QModelIndex &node_frompath, const QModelIndex &target_group, int index) override; virtual void deleteT(const QModelIndex &node_path) override; // ProjectManager interface public: virtual void addListener(ManagerListener *inst) override; virtual void removeListener(ManagerListener *inst) override; virtual QStandardItemModel *model() const override; virtual Config::Configration *configraions() const override; virtual FilesOperate *operateAccess() const override; virtual FilesQuery *queryAccess() const override; virtual QString suffix() const override; virtual void openProject(const QString &project_file) override; virtual void newProject(const QDir &project_dir, const QString &name) override; virtual void closeProject() override; virtual void save() override; virtual QString name() const override; virtual void resetName(const QString &name) override; virtual QDir directory() const override; virtual bool isOpenning() const noexcept override; private: QList listeners_list; Config::Configration *const project_config; QStandardItemModel*const project_structure; QString filepath_store; bool open_status, unsaved_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; QModelIndex groups_rebuild(ProjectNode *pnode, const QList &path_remains); virtual QModelIndex query_index(const QFileInfo &file, const QModelIndex &base); void notify_all(std::function proc); }; } #endif // XMLPROJECTMANAGER_H