253 lines
6.4 KiB
C++
253 lines
6.4 KiB
C++
#ifndef LIBSPLITVIEW_H
|
|
#define LIBSPLITVIEW_H
|
|
|
|
#include "libSplitView_Global.h"
|
|
#include <QWidget>
|
|
#include <QSizeF>
|
|
|
|
namespace split_frame {
|
|
class SplitView;
|
|
class ResManager;
|
|
|
|
/**
|
|
* @brief 面板分割方向
|
|
*/
|
|
enum class SplitType { SPLIT_H_LFIRST = 0, SPLIT_H_RFIRST = 1, SPLIT_V_TFIRST = 2, SPLIT_V_BFIRST = 3 };
|
|
/**
|
|
* @brief 临时视图贴附方位
|
|
*/
|
|
enum class DockType { LEFT = 0, RIGHT = 1, TOP = 2, BOTTOM = 3 };
|
|
|
|
/**
|
|
* @brief 视图资源基类
|
|
*/
|
|
class ViewRes {
|
|
public:
|
|
virtual ~ViewRes() = default;
|
|
/**
|
|
* @brief 资源管理实例
|
|
* @return
|
|
*/
|
|
virtual ResManager *splitManager() const = 0;
|
|
|
|
|
|
/**
|
|
* @brief 父资源实例
|
|
* @return
|
|
*/
|
|
virtual SplitView *parentRes() const = 0;
|
|
/**
|
|
* @brief 设置父资源实例
|
|
* @param inst
|
|
*/
|
|
virtual void setParentRes(SplitView *inst) = 0;
|
|
|
|
|
|
/**
|
|
* @brief 视图组件
|
|
* @return
|
|
*/
|
|
virtual QWidget *widget() const = 0;
|
|
|
|
/**
|
|
* @brief 不可压缩的最小尺寸
|
|
* @return
|
|
*/
|
|
virtual QSizeF stiffSize() const = 0;
|
|
|
|
/**
|
|
* @brief 获取外形尺寸
|
|
* @return
|
|
*/
|
|
virtual QRectF outlineRect() const = 0;
|
|
/**
|
|
* @brief 重新设置外形尺寸
|
|
* @param outline
|
|
*/
|
|
virtual void setOutline(const QRectF &rect) = 0;
|
|
/**
|
|
* @brief 设置可见性
|
|
* @param state
|
|
*/
|
|
virtual void setVisible(bool state) = 0;
|
|
virtual bool isVisible() const = 0;
|
|
|
|
/**
|
|
* @brief 资源唯一标号
|
|
* @return
|
|
*/
|
|
virtual qulonglong hashCode() const = 0;
|
|
};
|
|
|
|
/**
|
|
* @brief 视图展示接口
|
|
*/
|
|
class ViewBase : public ViewRes {
|
|
public:
|
|
virtual ~ViewBase() = default;
|
|
|
|
/**
|
|
* @brief 视图图标
|
|
* @return
|
|
*/
|
|
virtual QIcon icon() const = 0;
|
|
/**
|
|
* @brief 视图标题
|
|
* @return
|
|
*/
|
|
virtual QString title() const = 0;
|
|
|
|
/**
|
|
* @brief 可以被回收
|
|
*/
|
|
virtual bool canRetrieve() const = 0;
|
|
|
|
/**
|
|
* @brief 可以被关闭
|
|
*/
|
|
virtual bool canClose() const = 0;
|
|
|
|
/**
|
|
* @brief canReplace
|
|
* @return
|
|
*/
|
|
virtual bool canReplace() const = 0;
|
|
};
|
|
|
|
/**
|
|
* @brief 分裂视图规划和约束组件
|
|
*/
|
|
class SplitView : public ViewRes {
|
|
public:
|
|
virtual ~SplitView() = default;
|
|
|
|
/**
|
|
* @brief 载入视图成员
|
|
* @param a 成员视图a
|
|
* @param b 成员视图b
|
|
*/
|
|
virtual void initViews(ViewRes *a, ViewRes *b) = 0;
|
|
|
|
/**
|
|
* @brief 浣跨敤鏂拌鍥炬浛鎹㈡寚瀹氳鍥撅紝閲嶆瀯鍛堢幇鏍 * @param view 瀹炰緥闇€瑕佸睘浜庨棽缃鍥撅紝璋冪敤瀹屾垚琚噸寤虹埗瀛愬紩鐢 * @param pos 瀹炰緥灞炰簬鍛堢幇鏍戯紝璋冪敤瀹屾垚灏嗚瑙i櫎鐖跺瓙寮曠敤
|
|
*/
|
|
virtual void replaceView(ViewRes *_new, ViewRes *_old) = 0;
|
|
|
|
/**
|
|
* @brief 设置分割信息
|
|
* @param type
|
|
* @param pos
|
|
* @param width
|
|
*/
|
|
virtual void setSplitInfo(float pos, float width) = 0;
|
|
|
|
/**
|
|
* @brief 获取本视图中的其他视图
|
|
* @return std::pair<ptr, index>
|
|
*/
|
|
virtual std::pair<ViewRes*, int> except(ViewRes *inst) const = 0;
|
|
/**
|
|
* @brief 测试是否包含指定视图
|
|
* @param inst
|
|
* @return
|
|
*/
|
|
virtual bool contains(ViewRes *inst) const = 0;
|
|
/**
|
|
* @brief 分隔符的宽度
|
|
* @return
|
|
*/
|
|
virtual float splitterWidth() const = 0;
|
|
/**
|
|
* @brief 获取分隔符位置:百分比表示
|
|
* @return
|
|
*/
|
|
virtual float splitterPos() const = 0;
|
|
/**
|
|
* @brief 分割方向
|
|
* @return 分割类型
|
|
*/
|
|
virtual SplitType splitType() const = 0;
|
|
};
|
|
|
|
|
|
/**
|
|
* @brief 视图自由状态监听器
|
|
*/
|
|
class FreedomViewsListener {
|
|
public:
|
|
virtual ~FreedomViewsListener() = default;
|
|
/**
|
|
* @brief 闲置视图增加
|
|
* @param ins
|
|
*/
|
|
virtual void freedomAppend(ViewBase *ins) = 0;
|
|
/**
|
|
* @brief 闲置视图减少
|
|
* @param ins
|
|
*/
|
|
virtual void freedomRemove(ViewBase *ins) = 0;
|
|
|
|
/**
|
|
* @brief 视图关闭
|
|
* @param inst
|
|
*/
|
|
virtual void aboutToBeDelete(ViewBase *inst) = 0;
|
|
/**
|
|
* @brief 视图增加
|
|
* @param inst
|
|
*/
|
|
virtual void hasBeenAppend(ViewBase *inst) = 0;
|
|
};
|
|
|
|
/**
|
|
* @brief 资源管理器接口
|
|
*/
|
|
class ResManager {
|
|
public:
|
|
virtual ~ResManager() = default;
|
|
|
|
virtual void addListener(FreedomViewsListener *lsn) = 0;
|
|
virtual void removeListener(FreedomViewsListener *lsn) = 0;
|
|
|
|
virtual ViewBase* adjustView() const = 0;
|
|
virtual void setAdjustView(ViewBase *target = nullptr) = 0;
|
|
|
|
/**
|
|
* @brief 在系统中移除指定视图
|
|
* @param inst
|
|
*/
|
|
virtual void removePresentView(ViewBase *inst) = 0;
|
|
/**
|
|
* @brief 在系统中添加指定视图
|
|
* @param inst
|
|
*/
|
|
virtual void appendPresentView(ViewBase *inst) = 0;
|
|
|
|
/**
|
|
* @brief 回收视图显示,转换视图为自由(闲置)状态
|
|
* @param inst
|
|
*/
|
|
virtual bool isPresented(ViewBase *inst) const = 0;
|
|
|
|
/**
|
|
* @brief 鍥炴敹瑙嗗浘鏄剧ず锛岃浆鎹㈣鍥句负鑷敱锛堥棽缃級鐘舵€ * @param inst 瑙嗗浘瀹炰緥闇€瑕佺‘瀹炲浜庡彲瑙嗙姸鎬侊紙涓存椂鏄剧ず鎴栦綅浜庡憟鐜版爲鍐咃級
|
|
*/
|
|
virtual void doRetrieve(ViewBase *inst) = 0;
|
|
|
|
/**
|
|
* @brief 回收视图,清除内存实例
|
|
*/
|
|
virtual void doClose(ViewBase *inst) = 0;
|
|
|
|
/**
|
|
* @brief 替换指定视图
|
|
* @param view
|
|
* @param old
|
|
*/
|
|
virtual void siblingAttach(ViewBase *view, ViewBase *pos, SplitType ori) = 0;
|
|
};
|
|
|
|
} // namespace SplitFrame
|
|
|
|
#endif // LIBSPLITVIEW_H
|