提交当前开发进度

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

View File

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

View File

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

View File

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

View File

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

View File

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