QtNovelUI/libSplitView/splitview.h

68 lines
2.2 KiB
C++

#ifndef SPLITVIEW_H
#define SPLITVIEW_H
#include "splitpanel.h"
namespace SplitFrame {
/**
* @brief 分割视图
*/
class SPLITVIEW_EXPORT SplitView : private QWidget, public SplitRect {
public:
SplitView(RectCom *first, RectCom *next, QWidget *parent = nullptr);
virtual ~SplitView();
// ViewRes interface
public:
virtual QWidget *bind() const override;
virtual ViewPresent *viewPanel() const override;
virtual void setParentRes(ViewRes *inst) override;
virtual ViewRes *parentRes() const override;
virtual void registElement(QWidget *child) override;
virtual void pRelease() override;
virtual void pClose() override;
// RectCom interface
public:
virtual QRectF outline() const override;
virtual void relayout(const QRectF &outline) override;
virtual void paintEvent(QPaintEvent *ev) override;
virtual bool contains(QWidget *) const override;
virtual QString title() const override;
virtual bool canReplace() const override;
// SplitRect interface
public:
virtual std::pair<RectCom *, RectCom *> child() const override;
virtual void removeComp(RectCom *child) override;
virtual void replaceComp(RectCom *view, RectCom *old) override;
virtual float splitterWidth() const override;
virtual float splitterPos() const override;
virtual SplitType splitType() const override;
virtual void setSplitInfo(SplitType type, float pos, float width, bool relayout) override;
// QWidget interface
protected:
virtual void mousePressEvent(QMouseEvent *event) override;
virtual void mouseReleaseEvent(QMouseEvent *event) override;
virtual void mouseMoveEvent(QMouseEvent *event) override;
virtual void resizeEvent(QResizeEvent *event) override;
private:
ViewRes *parent_inst;
QList<RectCom *> child_store;
// type, pos, width
std::tuple<SplitType, float, float> split_info_value;
bool drags_state = false;
virtual void relayout();
std::pair<QRectF, QRectF> view_rects();
QRectF handle_rect() const;
};
} // namespace SplitFrame
#endif // SPLITVIEW_H