121 lines
3.6 KiB
C++
121 lines
3.6 KiB
C++
#ifndef BASEVIEW_H
|
|
#define BASEVIEW_H
|
|
|
|
#include "libSplitView.h"
|
|
#include <QFrame>
|
|
#include <QIcon>
|
|
#include <QLabel>
|
|
#include <QPushButton>
|
|
#include <QString>
|
|
|
|
namespace dock_panel {
|
|
class DockableView;
|
|
|
|
/**
|
|
* @brief 视图拖拽标题栏
|
|
*/
|
|
class SPLITVIEW_EXPORT DragHeader : public QFrame {
|
|
Q_OBJECT
|
|
private:
|
|
DockableView *const bind_core;
|
|
QLabel *const title_holder;
|
|
QPushButton *const close_btn, *const minimal_btn;
|
|
std::tuple<bool, QPointF> press_flag = std::make_tuple(false, QPointF());
|
|
|
|
signals:
|
|
/**
|
|
* @brief 关闭请求
|
|
*/
|
|
void closeRequest();
|
|
/**
|
|
* @brief 回收请求
|
|
*/
|
|
void retrieveRequest();
|
|
/**
|
|
* @brief 排版调整请求
|
|
* @param pos 信号源上的位置
|
|
*/
|
|
void adjustRequest(const QPoint &pos);
|
|
|
|
public:
|
|
DragHeader(const QString &title, DockableView *bind_core);
|
|
DragHeader(const QString &title, const QIcon &icon, DockableView *bind_core);
|
|
|
|
void setTitle(const QString &title);
|
|
void setTitle(const QString &title, const QIcon &icon);
|
|
|
|
void optConfig(bool retrieve, bool close);
|
|
|
|
// QWidget interface
|
|
protected:
|
|
virtual void mousePressEvent(QMouseEvent *event) override;
|
|
virtual void mouseReleaseEvent(QMouseEvent *event) override;
|
|
virtual void mouseMoveEvent(QMouseEvent *event) override;
|
|
};
|
|
|
|
/**
|
|
* @brief 基础内容视图组件
|
|
*/
|
|
class SPLITVIEW_EXPORT DockableView : public QWidget, public split_frame::ViewBase {
|
|
public:
|
|
/**
|
|
* @brief 构建新的呈现视图实例
|
|
* @param present 内容视图实例
|
|
* @param custom_header 是否添加标题栏
|
|
*/
|
|
DockableView(split_frame::ResManager*mgr, QWidget *present);
|
|
virtual ~DockableView();
|
|
/**
|
|
* @brief 配置视图基本特性
|
|
* @param replace 可以被隐藏和替换
|
|
* @param close 可以被关闭
|
|
* @param retrieve 可以被隐藏
|
|
*/
|
|
void viewConfig(bool replace, bool close, bool retrieve);
|
|
|
|
/**
|
|
* @brief 设置标题栏内容
|
|
* @param title
|
|
*/
|
|
void setTitle(const QString &title);
|
|
void setTitle(const QIcon &icon, const QString &title);
|
|
|
|
|
|
void adjustAccept(const QPoint &pos);
|
|
void closeAccept();
|
|
void retrieveAccept();
|
|
|
|
private:
|
|
DragHeader *const title_header;
|
|
QWidget *const present_cube;
|
|
split_frame::ResManager *const manager_inst;
|
|
QIcon icon_store;
|
|
split_frame::SplitView *parent_res = nullptr;
|
|
bool m_replace = false, m_retrieve = false, m_close = false;
|
|
|
|
// ViewRes interface
|
|
public:
|
|
virtual split_frame::ResManager *splitManager() const override;
|
|
virtual split_frame::SplitView *parentRes() const override;
|
|
virtual void setParentRes(split_frame::SplitView *inst) override;
|
|
virtual QWidget *widget() const override;
|
|
virtual QSizeF stiffSize() const override;
|
|
virtual QRectF outlineRect() const override;
|
|
virtual void setOutline(const QRectF &rect) override;
|
|
virtual qulonglong hashCode() const override;
|
|
virtual void setVisible(bool state) override;
|
|
virtual bool isVisible() const override;
|
|
|
|
// ViewBase interface
|
|
public:
|
|
virtual QIcon icon() const override;
|
|
virtual QString title() const override;
|
|
virtual bool canRetrieve() const override;
|
|
virtual bool canClose() const override;
|
|
virtual bool canReplace() const override;
|
|
|
|
};
|
|
}
|
|
|
|
#endif // BASEVIEW_H
|