#ifndef APPCORE_H #define APPCORE_H #include #include #include #include class MainWindow; namespace MakeTools { class StoryTool; class DocsManager; } namespace Core { class Extension; class AppCore; enum class Scale { Global, Project, File, }; /** * @brief 功能拓展生成入口 */ class ExtensionFactory { public: virtual ~ExtensionFactory() = default; /** * @brief 生成新插件内容实例 * @param core * @return */ virtual Extension* newInstance(AppCore *core) = 0; /** * @brief 获取所有指定的配置端口类型 * @return */ virtual QList configs() const = 0; /** * @brief getPanel 获取配置面板,配置内容 * @param config * @return */ virtual QWidget* getNewPanel(Config::Configration* config) = 0; /** * @brief 拓展插件名称 * @return */ virtual QString extensionName() const = 0; }; /** * @brief 功能拓展基类 */ class Extension { public: virtual ~Extension() = default; /** * @brief 获取唯一的关联工厂类 * @return */ virtual ExtensionFactory* factory() const = 0; /** * @brief 通过后缀名设置处理模式 * @param suffix */ virtual void resetProcsType(const QString &suffix) = 0; /** * @brief 载入指定的配置端口实例 * @param configs */ virtual void reloadConfigrations(QList configs) = 0; }; /** * @brief 文件相关功能拓展 */ class FileExtensionFactory : public ExtensionFactory { public: virtual ~FileExtensionFactory() = default; /** * @brief 可以处理的文件类型 * @return */ virtual QList suffixPeers() const = 0; }; /** * @brief 软件内核类型 */ class AppCore : public QObject { public: AppCore(MainWindow *win, QObject *parent = nullptr); virtual ~AppCore() = default; /** * @brief 全局保存操作 */ void save(); /** * @brief 全局配置端口 * @return */ Config::Configration * globalConfig() const; void setCurrentProject(Project::ProjectManager *project); Project::ProjectManager* currentProject() const; QList getConfigs(QList types) const; Parse::Result::ParseCore * parseCore() const; QList extensions(const QString &suffix = QString()) const; MakeTools::StoryTool *getMakeCore() const; MakeTools::DocsManager *getDocsManager() const; private: MainWindow *const views_holder; Config::Configration *const global_config; Project::ProjectManager * current_project; QList extensions_list; MakeTools::StoryTool *const makes_core; MakeTools::DocsManager *const docs_manager; }; } #endif // APPCORE_H