#ifndef VISUABLE_PROJECT_CONTROLLER #define VISUABLE_PROJECT_CONTROLLER #include "appcore.h" #include "route.h" #include #include #include #include namespace Components { class PresentContainer { public: virtual ~PresentContainer() = default; /** * @brief 添加内容展示实例 * @param ins */ virtual void append(MakeTools::ContentPresent *ins) = 0; /** * @brief 激活内容展示实例 * @param ins */ virtual void active(MakeTools::ContentPresent *ins) = 0; /** * @brief 移除内容展示实例 * @param ins */ virtual void remove(MakeTools::ContentPresent *ins) = 0; }; /** * @brief 文档管理器,根据项目配置文件,打开、查询、关闭文档实例 */ class DocumentsManager : public Schedule::AccessibleObject { public: DocumentsManager(Core::AppCore *src, Project::ProjectManager *project, PresentContainer *con); virtual ~DocumentsManager() = default; Project::ProjectManager* projectManager() const; /** * @brief 提供完整路径创建新包 * @param path [/x_name]+ */ void newPackage(const Core::Route &link); /** * @brief 提供父节点Index,创建新包 * @param group * @param name * @throw SimpleException */ void newPackage(const Core::Route &group, const QString &name); /** * @brief 获取支持的文件类型 * @return {txt, storychain, ……} */ QList fileTypes() const; /** * @brief 在指定的包节点下,创建指定类型的新文件 * @param group 包节点 * @param name 文件名称 * @param suffix 通过后缀名,指定文件类型 * @throw SimpleException */ void newFile(const Core::Route &group_path, const QString &name, const QString &suffix); QModelIndex converter(const Core::Route &path); Core::Route converter(const QModelIndex &index); /** * @brief 移除指定节点(必须非根节点) * @param node 文件节点或者包节点 * @throw SimpleException */ void removeNode(const Core::Route &node_path); /** * @brief 修改指定节点的名称 * @param node 节点Index * @param name 新名称 * @throw SimpleException */ void renameNode(const Core::Route &node_path, const QString &name); /** * @brief 打开文件节点 * @param path_node * @throw SimpleException */ void openFile(const Core::Route &path_node); /** * @brief 获取打开的活跃文档 * @return */ QList actives() const; /** * @brief 获取打开的内容展示实例,如果指向未打开的节点或无效文件节点,返回null * @param node * @return null或打开的展示实例 */ MakeTools::ContentPresent* activePresentOf(const Core::Route &node_path); /** * @brief 保存指定的文档节点集合 * @param docs */ void save(const QList &docs = QList()); /** * @brief 关闭定制的文档节点集合 * @param docs */ void close(const QList &doc_paths = QList()); /** * @brief 查询指定实例(打开的)关联的ModelIndex * @param ins */ Core::Route pathOf(MakeTools::ContentPresent *ins) const; Core::Route pathOf(const QModelIndex &p) const; /** * @brief 构建所有源代码 * @param disk */ void build(bool disk); // AccessibleObject interface public: virtual QString name() const override; private: Core::AppCore *const rtcore; Project::ProjectManager *pjtins; PresentContainer *present_ui; QHash doc_openning; }; } #endif // VISUABLE_PROJECT_CONTROLLER