QtNovelUI/libSplitView/splitview.h

70 lines
2.3 KiB
C
Raw Normal View History

2023-08-26 12:40:57 +00:00
#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;
// 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;
// QObject interface
public:
virtual bool eventFilter(QObject *watched, QEvent *event) 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 press_flags = false, drags_flag = false;
virtual void relayout();
std::pair<QRectF, QRectF> view_rects();
QRectF handle_rect() const;
};
} // namespace SplitFrame
#endif // SPLITVIEW_H