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