#ifndef APPCORE_H #define APPCORE_H #include #include #include #include class MainWindow; namespace MakeTools { class StoryTool; class SensitiveCore; } 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 reload(QList configs) = 0; }; /** * @brief 文件相关功能拓展 */ class FileExtensionFactory : public ExtensionFactory { public: virtual ~FileExtensionFactory() = default; /** * @brief 可以处理的文件类型 * @return */ virtual QList suffixPeers() const = 0; }; class AppCore : public QObject { public: AppCore(MainWindow *win, QObject *parent = nullptr); virtual ~AppCore() = default; void save(); 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 *getMake_tool() const; MakeTools::SensitiveCore *getFramework() const; void openTextDocument(const QString &src, const QString &name); private: MainWindow *const views; Config::Configration *const global_config; Project::ProjectManager * current_project; QList extensions_list; Parse::Result::ParseCore *const parse_core; MakeTools::StoryTool *const make_tool; MakeTools::SensitiveCore *const framework; }; } #endif // APPCORE_H