提交当前开发进度

This commit is contained in:
玉宇清音 2023-12-27 19:59:08 +08:00
parent 24a1bfa51a
commit 7dbba0a46a
6 changed files with 88 additions and 65 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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)

View File

@ -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;
}

View File

@ -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);