QtNovelUI/WordsIDE/DocsManager.h

117 lines
3.0 KiB
C++

#ifndef DOCSMANAGER_H
#define DOCSMANAGER_H
#include "ContentPresent.h"
#include <QHash>
#include <QObject>
#include <StoryTool.h>
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<QString> &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<void()> exc);
private:
Core::AppCore *const host_core;
MainWindow *const views_holder;
StoryTool *const make_core;
QHash<QString, TextView*> sourcecode_map;
QHash<QString, TextView*> plaintext_map;
QList<std::function<void()>> trigger_list;
void recompile(const QString &file_path, const QString &doc_name);
};
}
#endif // DOCSMANAGER_H