This commit is contained in:
玉宇清音 2024-01-24 12:58:19 +08:00
parent a97829ddd2
commit 3fbef9cd4e
10 changed files with 99 additions and 83 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.15.0, 2023-12-29T18:05:56. --> <!-- Written by QtCreator 4.15.0, 2024-01-21T09:38:32. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>

View File

@ -1,41 +0,0 @@
#include "baseview.h"
#include <QApplication>
#include <QDebug>
#include <QDrag>
#include <QHBoxLayout>
#include <QMimeData>
#include <QMouseEvent>
#include <QPushButton>
using namespace base_view;
BaseView::BaseView(bool replace, bool retrieve, bool close) : QWidget(nullptr), m_replace(replace), m_retrieve(retrieve), m_close(close) {}
void BaseView::setParent(ViewRes *pinst) { this->parent_res = pinst; }
split_frame::ResManager *BaseView::splitManager() const {
if(this->parent_res)
return this->parent_res->splitManager();
return nullptr;
}
split_frame::ViewRes *BaseView::parentRes() const { return this->parent_res; }
QWidget *BaseView::widget() const { return const_cast<BaseView *>(this); }
bool BaseView::canRetrieve() const { return m_retrieve; }
bool BaseView::canClose() const { return m_close; }
bool BaseView::canReplace() const { return m_replace; }
QIcon BaseView::icon() const { return QWidget::windowIcon(); }
QString BaseView::title() const { return QWidget::windowTitle(); }
QSizeF BaseView::viewSize() const { return this->size(); }
void BaseView::resizeView(const QSizeF &outline) { QWidget::resize(outline.toSize()); }
DragHeader::DragHeader(BaseView *bind) : QLabel(bind->widget()), view_core(bind) {}

View File

@ -0,0 +1,40 @@
#include "dockpanel.h"
#include <QApplication>
#include <QDebug>
#include <QDrag>
#include <QHBoxLayout>
#include <QMimeData>
#include <QMouseEvent>
#include <QPushButton>
using namespace base_view;
split_frame::ResManager *DockPanel::splitManager() const {
if(this->parent_res)
return this->parent_res->splitManager();
return nullptr;
}
split_frame::ViewRes *DockPanel::parentRes() const { return this->parent_res; }
QWidget *DockPanel::widget() const { return const_cast<DockPanel *>(this); }
bool DockPanel::canRetrieve() const { return m_retrieve; }
bool DockPanel::canClose() const { return m_close; }
bool DockPanel::canReplace() const { return m_replace; }
QIcon DockPanel::icon() const { return QWidget::windowIcon(); }
QString DockPanel::title() const { return QWidget::windowTitle(); }
QSizeF DockPanel::viewSize() const { return this->size(); }
void DockPanel::resizeView(const QSizeF &outline) { QWidget::resize(outline.toSize()); }
DragHeader::DragHeader(const QString &title, DockPanel *bind_core) : QFrame(bind_core->widget()) {
setWindowTitle(title);
}

View File

@ -8,17 +8,18 @@
#include <QString> #include <QString>
namespace base_view { namespace base_view {
class BaseView; class DockPanel;
/** /**
* @brief * @brief
*/ */
class SPLITVIEW_EXPORT DragHeader : public QLabel { class SPLITVIEW_EXPORT DragHeader : public QFrame {
public: public:
DragHeader(BaseView *bind); DragHeader(const QString &title, DockPanel *bind_core);
DragHeader(const QString &title, const QIcon &icon, DockPanel *bind_core);
private: private:
BaseView *view_core; DockPanel *bind_core;
std::tuple<bool, QPointF> press_flag = std::make_tuple(false, QPointF()); std::tuple<bool, QPointF> press_flag = std::make_tuple(false, QPointF());
// QWidget interface // QWidget interface
@ -31,17 +32,26 @@ namespace base_view {
/** /**
* @brief * @brief
*/ */
class SPLITVIEW_EXPORT BaseView : public QWidget, public split_frame::ViewBase { class SPLITVIEW_EXPORT DockPanel : public QWidget, public split_frame::ViewBase {
signals:
void close_request(QWidget*);
void adjust_request(QWidget*);
void retrieve_request(QWidget*);
public: public:
BaseView(bool replace, bool retrieve, bool close); DockPanel(const QString &title, QWidget *present, bool custom_header = false);
void setParent(ViewRes *pinst); void setModify(bool replace, bool close, bool retrieve);
private:
ViewRes *parent_res = nullptr;
bool m_replace = false, m_retrieve = false, m_close = false;
// ViewRes interface // ViewRes interface
public: public:
virtual split_frame::ResManager *splitManager() const override; virtual split_frame::ResManager *splitManager() const override;
virtual split_frame::ViewRes *parentRes() const override; virtual split_frame::ViewRes *parentRes() const override;
virtual void setParentRes(ViewRes *inst) override;
virtual QWidget *widget() const override; virtual QWidget *widget() const override;
virtual bool canRetrieve() const override; virtual bool canRetrieve() const override;
virtual bool canClose() const override; virtual bool canClose() const override;
@ -53,10 +63,6 @@ namespace base_view {
virtual QString title() const override; virtual QString title() const override;
virtual QSizeF viewSize() const override; virtual QSizeF viewSize() const override;
virtual void resizeView(const QSizeF &outline) override; virtual void resizeView(const QSizeF &outline) override;
private:
ViewRes *parent_res = nullptr;
bool m_replace = false, m_retrieve = false, m_close = false;
}; };
} // namespace SplitFrame } // namespace SplitFrame

View File

@ -15,12 +15,12 @@ msvc{
} }
SOURCES += \ SOURCES += \
baseview.cpp \ dockpanel.cpp \
splitpanel.cpp \ splitpanel.cpp \
splitwindow.cpp splitwindow.cpp
HEADERS += \ HEADERS += \
baseview.h \ dockpanel.h \
splitpanel.h \ splitpanel.h \
splitview_interface.h \ splitview_interface.h \
splitwindow.h splitwindow.h

View File

@ -1,5 +1,5 @@
#include "splitpanel.h" #include "splitpanel.h"
#include "baseview.h" #include "dockpanel.h"
#include <QPainter> #include <QPainter>
#include <libConfig.h> #include <libConfig.h>
@ -10,7 +10,8 @@ using namespace Config;
SplitPanel::SplitPanel(ViewBase *first, ViewBase *next, ViewRes *parent) SplitPanel::SplitPanel(ViewBase *first, ViewBase *next, ViewRes *parent)
: QWidget(parent->widget()), parent_inst(parent) : QWidget(parent->widget()), parent_inst(parent)
{ {
this->split_member = std::make_tuple(first, next, SplitType::SPLIT_H); this->split_member = std::make_tuple(first, next);
this->split_info_value = std::make_tuple(SplitType::SPLIT_H, 0.5, 8);
} }
SplitPanel::~SplitPanel() SplitPanel::~SplitPanel()
@ -96,7 +97,7 @@ void SplitPanel::resizeView(const QSizeF &outline)
std::tuple<ViewBase *, ViewBase *, SplitType> SplitPanel::child() const std::tuple<ViewBase *, ViewBase *, SplitType> SplitPanel::child() const
{ {
return this->split_member; return std::make_tuple(std::get<0>(split_member), std::get<1>(split_member), std::get<0>(split_info_value));
} }
void SplitPanel::replaceComp(ViewBase *view, ViewBase *old) void SplitPanel::replaceComp(ViewBase *view, ViewBase *old)
@ -105,14 +106,15 @@ void SplitPanel::replaceComp(ViewBase *view, ViewBase *old)
if(!mbrs.contains(view) && mbrs.contains(old)){ if(!mbrs.contains(view) && mbrs.contains(old)){
if(std::get<1>(split_member) == old){ if(std::get<1>(split_member) == old){
this->split_member = std::make_tuple(std::get<0>(split_member), view, std::get<2>(split_member)); this->split_member = std::make_tuple(std::get<0>(split_member), view);
} }
else if(std::get<0>(split_member) == old){ else if(std::get<0>(split_member) == old){
this->split_member = std::make_tuple(view, std::get<1>(split_member), std::get<2>(split_member)); this->split_member = std::make_tuple(view, std::get<1>(split_member));
} }
old->widget()->setParent(nullptr); view->setParentRes(this);
view->widget()->setParent(this); view->widget()->setParent(this);
old->widget()->setParent(nullptr);
this->resizeView(this->viewSize()); this->resizeView(this->viewSize());
} }
} }
@ -124,13 +126,12 @@ float SplitPanel::splitterWidth() const
float SplitPanel::splitterPos() const float SplitPanel::splitterPos() const
{ {
return std::get<0>(split_info_value); return std::get<1>(split_info_value);
} }
void SplitPanel::setSplitInfo(split_frame::SplitType type, float pos, float width) void SplitPanel::setSplitInfo(split_frame::SplitType type, float pos, float width)
{ {
this->split_member = std::make_tuple(std::get<0>(split_member), std::get<1>(split_member), type); this->split_info_value = std::make_tuple(type, pos, width);
this->split_info_value = std::make_tuple(pos, width);
} }

View File

@ -42,9 +42,9 @@ namespace split_panel {
private: private:
ViewRes *parent_inst; ViewRes *parent_inst;
std::tuple<split_frame::ViewBase*, split_frame::ViewBase*, split_frame::SplitType> split_member; std::tuple<split_frame::ViewBase*, split_frame::ViewBase*> split_member;
// type, pos, width // type, pos, width
std::tuple<split_pos, split_width> split_info_value; std::tuple<split_frame::SplitType, split_pos, split_width> split_info_value;
QList<split_frame::ViewBase*> view_list() const; QList<split_frame::ViewBase*> view_list() const;
}; };

View File

@ -41,6 +41,7 @@ namespace split_frame {
* @return * @return
*/ */
virtual ViewRes *parentRes() const = 0; virtual ViewRes *parentRes() const = 0;
virtual void setParentRes(ViewRes *inst) = 0;
/** /**
* @brief * @brief
@ -102,17 +103,26 @@ namespace split_frame {
public: public:
virtual ~SplitView() = default; virtual ~SplitView() = default;
/**
* @brief
* @return
*/
virtual std::tuple<ViewBase *, ViewBase *, SplitType> child() const = 0;
/** /**
* @brief * @brief
* @param view * @param view
* @param old * @param old
*/ */
virtual void replaceComp(ViewBase *view, ViewBase *old) = 0; virtual void replaceComp(ViewBase *view, ViewBase *old) = 0;
/**
* @brief
* @param type
* @param pos
* @param width
*/
virtual void setSplitInfo(SplitType type, float pos, float width) = 0;
/**
* @brief
* @return
*/
virtual std::tuple<ViewBase *, ViewBase *, SplitType> child() const = 0;
/** /**
* @brief * @brief
* @return * @return
@ -123,14 +133,6 @@ namespace split_frame {
* @return * @return
*/ */
virtual float splitterPos() const = 0; virtual float splitterPos() const = 0;
/**
* @brief
* @param type
* @param pos
* @param width
*/
virtual void setSplitInfo(SplitType type, float pos, float width) = 0;
}; };
/** /**
@ -161,8 +163,16 @@ namespace split_frame {
virtual void addListener(FreedomViewsListener *lsn) = 0; virtual void addListener(FreedomViewsListener *lsn) = 0;
virtual void removeListener(FreedomViewsListener *lsn) = 0; virtual void removeListener(FreedomViewsListener *lsn) = 0;
virtual void setAdjustView(ViewBase *inst) = 0; /**
virtual ViewBase* adjustView() const = 0; * @brief
* @param inst
*/
virtual void removePresentView(ViewBase *inst) = 0;
/**
* @brief
* @param inst
*/
virtual void appendPresentView(ViewBase *inst) = 0;
/** /**
* @brief * @brief

View File

@ -1,5 +1,5 @@
#include "splitwindow.h" #include "splitwindow.h"
#include "baseview.h" #include "dockpanel.h"
#include "splitpanel.h" #include "splitpanel.h"
#include <QApplication> #include <QApplication>
#include <QDebug> #include <QDebug>

View File

@ -10,7 +10,7 @@
#include <QStackedWidget> #include <QStackedWidget>
#include <QStyle> #include <QStyle>
#include <QToolBar> #include <QToolBar>
#include <baseview.h> #include <dockpanel.h>
#include <splitwindow.h> #include <splitwindow.h>
#include <splitpanel.h> #include <splitpanel.h>