提交当前开发进度
This commit is contained in:
parent
24a1bfa51a
commit
7dbba0a46a
|
@ -37,7 +37,7 @@ void views_state_store(Config::Configration *port, const QList<QString> &base_pa
|
|||
auto keys_path = base_path;
|
||||
keys_path << QString("rect_%1").arg(child.indexOf(it));
|
||||
|
||||
auto conv = dynamic_cast<SplitRect *>(it);
|
||||
auto conv = dynamic_cast<SplitView *>(it);
|
||||
if (conv) { // split
|
||||
QHash<QString, QString> values;
|
||||
values["rect-type"] = "split";
|
||||
|
@ -105,7 +105,7 @@ RectCom *ViewSession::views_state_restore(const QHash<QString, SplitFrame::RectC
|
|||
}
|
||||
|
||||
void ViewSession::relayout_cascade(SplitFrame::RectCom *root) {
|
||||
auto xinst = dynamic_cast<SplitRect *>(root);
|
||||
auto xinst = dynamic_cast<SplitView *>(root);
|
||||
if (!xinst)
|
||||
return;
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace Core {
|
|||
|
||||
typedef float split_pos;
|
||||
typedef float split_width;
|
||||
std::map<SplitFrame::SplitRect *, std::tuple<SplitFrame::SplitType, split_pos, split_width>> split_infos;
|
||||
std::map<SplitFrame::SplitView *, std::tuple<SplitFrame::SplitType, split_pos, split_width>> split_infos;
|
||||
|
||||
SplitFrame::RectCom *views_state_restore(const QHash<QString, SplitFrame::RectCom *> &cache, const QList<QString> &target_path,
|
||||
Config::Configration *port, SplitFrame::ViewPresent *host);
|
||||
|
|
|
@ -146,7 +146,7 @@ void BaseView::pRelease() {
|
|||
auto parent = parentRes();
|
||||
if (parent) {
|
||||
auto host_ptr = viewPanel();
|
||||
dynamic_cast<SplitRect *>(parent)->removeComp(this);
|
||||
dynamic_cast<SplitView *>(parent)->removeComp(this);
|
||||
host_ptr->markFreedom(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,8 +7,7 @@
|
|||
#include <libConfig.h>
|
||||
|
||||
namespace SplitFrame {
|
||||
class ViewPresent;
|
||||
class AttachPanel;
|
||||
class SplitView;
|
||||
|
||||
/**
|
||||
* @brief 面板分割方向
|
||||
|
@ -17,7 +16,7 @@ namespace SplitFrame {
|
|||
/**
|
||||
* @brief 临时视图贴附方位
|
||||
*/
|
||||
enum class DockType { LEFT = 0, RIGHT, TOP, BOTTOM };
|
||||
enum class DockType { LEFT = 0, RIGHT = 1, TOP = 2, BOTTOM = 3 };
|
||||
|
||||
/**
|
||||
* @brief 视图资源基类
|
||||
|
@ -25,86 +24,110 @@ namespace SplitFrame {
|
|||
class ViewRes {
|
||||
public:
|
||||
virtual ~ViewRes() = default;
|
||||
|
||||
virtual void registElement(QWidget *child) = 0;
|
||||
|
||||
virtual QWidget *bind() const = 0;
|
||||
virtual QString title() const = 0;
|
||||
virtual ViewPresent *viewPanel() const = 0;
|
||||
/**
|
||||
* @brief viewPanel
|
||||
* @return
|
||||
*/
|
||||
virtual SplitView *splitRoot() const = 0;
|
||||
|
||||
/**
|
||||
* @brief 关闭视图显示,转换视图为自由(闲置)状态
|
||||
* @brief 回收视图显示,转换视图为自由(闲置)状态
|
||||
*/
|
||||
virtual void pRelease() = 0;
|
||||
virtual void doRetrieve() = 0;
|
||||
/**
|
||||
* @brief 可以被回收
|
||||
*/
|
||||
virtual void canRetrieve() const = 0;
|
||||
|
||||
/**
|
||||
* @brief 回收视图,清除内存实例
|
||||
*/
|
||||
virtual void pClose() = 0;
|
||||
|
||||
virtual void setParentRes(ViewRes *inst) = 0;
|
||||
virtual ViewRes *parentRes() const = 0;
|
||||
};
|
||||
virtual void doClose() = 0;
|
||||
/**
|
||||
* @brief 可以被关闭
|
||||
*/
|
||||
virtual void canClose() const = 0;
|
||||
|
||||
/**
|
||||
* @brief 资源管理接口
|
||||
* @brief canReplace
|
||||
* @return
|
||||
*/
|
||||
class ResManager {
|
||||
public:
|
||||
virtual ~ResManager() = default;
|
||||
|
||||
virtual ViewPresent *viewPanel() const = 0;
|
||||
virtual void objsRelateRebuild() = 0;
|
||||
virtual void markFreedom(ViewRes *view, bool add = true) = 0;
|
||||
virtual void purge(ViewRes *target) = 0;
|
||||
virtual bool canReplace() const = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 视图展示接口
|
||||
*/
|
||||
class RectCom : public ViewRes {
|
||||
class ViewBase : public QWidget, public ViewRes {
|
||||
public:
|
||||
virtual ~RectCom() = default;
|
||||
|
||||
virtual bool canReplace() const = 0;
|
||||
virtual bool contains(QWidget *ptr) const = 0;
|
||||
|
||||
virtual QRectF outline() const = 0;
|
||||
virtual void relayout(const QRectF &outline) = 0;
|
||||
|
||||
virtual void paintEvent(QPaintEvent *ev) = 0;
|
||||
};
|
||||
virtual ~ViewBase() = default;
|
||||
|
||||
/**
|
||||
* @brief 功能视图基板
|
||||
* @brief 视图图标
|
||||
* @return
|
||||
*/
|
||||
template <class FnVType, bool _blank> class FnWrap : public QWidget {
|
||||
private:
|
||||
static bool type_blank_blank;
|
||||
ViewPresent *const host_store;
|
||||
virtual QIcon icon() const = 0;
|
||||
/**
|
||||
* @brief 视图标题
|
||||
* @return
|
||||
*/
|
||||
virtual QString title() const = 0;
|
||||
|
||||
public:
|
||||
explicit FnWrap(ViewPresent *bind) : QWidget(), host_store(bind) {}
|
||||
virtual ~FnWrap() { this->closeProcess(); }
|
||||
/**
|
||||
* @brief 获取外形尺寸
|
||||
* @return
|
||||
*/
|
||||
virtual QRectF outline() const = 0;
|
||||
/**
|
||||
* @brief 重新设置外形尺寸
|
||||
* @param outline
|
||||
*/
|
||||
virtual void relayout(const QRectF &outline) = 0;
|
||||
|
||||
ViewPresent *bindHost() const { return host_store; }
|
||||
|
||||
virtual void closeProcess(){};
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @brief 分裂视图规划和约束组件
|
||||
*/
|
||||
class SplitRect : public RectCom {
|
||||
class SplitView : public ViewBase {
|
||||
public:
|
||||
virtual ~SplitRect() = default;
|
||||
virtual ~SplitView() = default;
|
||||
|
||||
virtual std::pair<RectCom *, RectCom *> child() const = 0;
|
||||
virtual void removeComp(RectCom *child) = 0;
|
||||
virtual void replaceComp(RectCom *view, RectCom *old) = 0;
|
||||
/**
|
||||
* @brief 获取子视图列表和分割方式
|
||||
* @return
|
||||
*/
|
||||
virtual std::tuple<ViewBase *, ViewBase *, SplitType> child() const = 0;
|
||||
/**
|
||||
* @brief 移除子视图
|
||||
* @param child
|
||||
*/
|
||||
virtual void removeComp(ViewBase *child) = 0;
|
||||
/**
|
||||
* @brief 替换子视图
|
||||
* @param view
|
||||
* @param old
|
||||
*/
|
||||
virtual void replaceComp(ViewBase *view, ViewBase *old) = 0;
|
||||
/**
|
||||
* @brief 分隔符的宽度
|
||||
* @return
|
||||
*/
|
||||
virtual float splitterWidth() const = 0;
|
||||
/**
|
||||
* @brief 获取分隔符位置:百分比表示
|
||||
* @return
|
||||
*/
|
||||
virtual float splitterPos() const = 0;
|
||||
virtual SplitType splitType() const = 0;
|
||||
virtual void setSplitInfo(SplitType type, float pos, float width, bool relayout = true) = 0;
|
||||
|
||||
/**
|
||||
* @brief 设置分割信息
|
||||
* @param type
|
||||
* @param pos
|
||||
* @param width
|
||||
*/
|
||||
virtual void setSplitInfo(SplitType type, float pos, float width) = 0;
|
||||
};
|
||||
|
||||
class FreedomViewsListener {
|
||||
|
@ -114,18 +137,18 @@ namespace SplitFrame {
|
|||
* @brief 闲置视图增加
|
||||
* @param ins
|
||||
*/
|
||||
virtual void freedomAppended(RectCom *ins, const QIcon &icon, const QString &title) = 0;
|
||||
virtual void freedomAppended(ViewBase *ins) = 0;
|
||||
/**
|
||||
* @brief 闲置视图减少
|
||||
* @param ins
|
||||
*/
|
||||
virtual void freedomRemoved(RectCom *ins) = 0;
|
||||
virtual void freedomRemoved(ViewBase *ins) = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 分裂视图呈现组件
|
||||
*/
|
||||
class SPLITVIEW_EXPORT ViewPresent : private QWidget, public SplitRect, public ResManager {
|
||||
class SPLITVIEW_EXPORT ViewPresent : public SplitView {
|
||||
public:
|
||||
ViewPresent(QWidget *parent = nullptr);
|
||||
virtual ~ViewPresent();
|
||||
|
@ -148,7 +171,7 @@ namespace SplitFrame {
|
|||
bool adjustState() const;
|
||||
RectCom *adjustView() const;
|
||||
|
||||
SplitRect *createSplit(RectCom *first, RectCom *next);
|
||||
SplitView *createSplit(RectCom *first, RectCom *next);
|
||||
|
||||
template <class FnView, bool _blank> RectCom *appendView(FnWrap<FnView, _blank> *view_inst, const QIcon &icon, const QString &title) {
|
||||
if (view_inst->bindHost() != this)
|
||||
|
|
|
@ -95,7 +95,7 @@ void SplitView::removeComp(RectCom *child_inst) {
|
|||
if (child_inst == sib)
|
||||
sib = prev_childs.second;
|
||||
|
||||
static_cast<SplitRect *>(pinst)->replaceComp(sib, this);
|
||||
static_cast<SplitView *>(pinst)->replaceComp(sib, this);
|
||||
delete this;
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace SplitFrame {
|
|||
/**
|
||||
* @brief 分割视图
|
||||
*/
|
||||
class SPLITVIEW_EXPORT SplitView : private QWidget, public SplitRect {
|
||||
class SPLITVIEW_EXPORT SplitView : private QWidget, public SplitView {
|
||||
|
||||
public:
|
||||
SplitView(RectCom *first, RectCom *next, QWidget *parent = nullptr);
|
||||
|
|
Loading…
Reference in New Issue