QtNovelUI/WordsIDE/message_view.h

88 lines
2.1 KiB
C++

#ifndef MESSAGE_VIEW_H
#define MESSAGE_VIEW_H
#include "DocsManager.h"
#include <QHash>
#include <QStandardItemModel>
#include <QTableView>
#include <SplitWindow.h>
#include "xapp.h"
namespace Components {
enum class ExtendType{
FEATURE_PRESENT,
VIEW_CONTAINTER
};
/**
* @brief 拓展视图
*/
class ExtendView {
public:
virtual ~ExtendView() = default;
/**
* @brief 创建新实例
* @param parent 父实例
* @param core 核心数据模型
* @return
*/
virtual ExtendView* newInst(QWidget *parent, XApp *core) = 0;
/**
* @brief 获取指定视图的绑定菜单
* @return
*/
virtual QMenu* bindMenu() const = 0;
/**
* @brief 视图类型名称
* @return
*/
virtual QString typeName() const = 0;
/**
* @brief 视图类型
* @return
*/
virtual ExtendType type() const = 0;
/**
* @brief 视图呈现组件
* @return
*/
virtual QWidget* presentWidget() const = 0;
/**
* @brief 保存操作
*/
virtual void saveProcess() = 0;
/**
* @brief 关闭操作
*/
virtual void closeProcess() = 0;
};
/**
* @brief 消息视图
*/
class MessageView : public QTableView, public ExtendView {
public:
MessageView();
MessageView(QWidget*parent = nullptr, XApp *core = nullptr);
virtual ~MessageView() = default;
// ExtendView interface
public:
virtual ExtendView *newInst(QWidget *parent, XApp *core) override;
virtual QMenu *bindMenu() const override;
virtual QString typeName() const override;
virtual ExtendType type() const override;
virtual QWidget* presentWidget() const override;
virtual void saveProcess() override;
virtual void closeProcess() override;
private:
QMenu *const menu;
};
} // namespace Components
#endif // MESSAGE_VIEW_H