#ifndef DOCSMANAGER_H #define DOCSMANAGER_H #include "ContentPresent.h" #include #include #include namespace MakeTools { /** * @brief 变化的文本视图 */ class TextView : public QObject { Q_OBJECT public: explicit TextView(); virtual ~TextView() = default; void initSource(Core::AppCore *core, const QFileInfo &src, const QString &name, QWidget *parent=nullptr); QString absoluteFilePath() const; void save() const; virtual void jumpTo(const QList &path) = 0; virtual QString docName() const; virtual QWidget* textView() const = 0; virtual QString textContent() const = 0; virtual void textContentReset(const QString &value) = 0; signals: void dataChanged(const QString &filePath); protected: virtual void initSource(Core::AppCore *core, const QFileInfo &src, QWidget *parent=nullptr); private: QString source_x; QString doc_name; }; enum class SensitiveType { DoNothing, CompileAtChanged }; /** * @brief 自动编译管理框架 */ class DocsManager : public QObject { Q_OBJECT public: /** * @brief 内容自动构建和管理核心 * @param tool */ DocsManager(StoryTool *tool, Core::AppCore *host, MainWindow *views); /** * @brief 保存当前所有文档内容 */ void saveAll() const; void closeAll(); /** * @brief 文档打开状态查询 * @param target * @return */ bool contains(const QFileInfo &target) const; /** * @brief 获取文档内存实例 * @param child_view * @return */ TextView *queryTextComponent(const QWidget *child_view) const; /** * @brief 获取文档内存实例 * @param target * @return */ TextView *queryTextComponent(const QFileInfo &target) const; /** * @brief 关闭文档内存实例,关闭之前保存内容 * @param target */ void closeTextComponent(const QFileInfo &target); /** * @brief 打开指定路径的文档 * @param src * @param name */ void openTextDocument(const QString &src, const QString &name); void addPerceptionList(TextView *ins, SensitiveType type = SensitiveType::CompileAtChanged); void addProcTrigger(std::function exc); private: Core::AppCore *const host_core; MainWindow *const views_holder; StoryTool *const make_core; QHash sourcecode_map; QHash plaintext_map; QList> trigger_list; void recompile(const QString &file_path, const QString &doc_name); }; } #endif // DOCSMANAGER_H