QtNovelUI/libSplitView/SplitPanel.h

82 lines
2.5 KiB
C
Raw Normal View History

2023-12-30 05:04:51 +00:00
#ifndef SPLITPANEL
#define SPLITPANEL
2023-08-26 12:40:57 +00:00
2024-02-10 07:09:02 +00:00
#include "SplitWindow.h"
2023-08-26 12:40:57 +00:00
2024-01-27 01:47:02 +00:00
#include <QFrame>
2023-12-30 05:04:51 +00:00
namespace split_panel {
2024-02-08 13:12:45 +00:00
/**
* @brief
*/
class SPLITVIEW_EXPORT DragSplitter : public QFrame{
2024-01-27 01:47:02 +00:00
Q_OBJECT
signals:
2024-02-08 13:12:45 +00:00
void adjustRequest(const QPoint&);
2024-01-27 01:47:02 +00:00
public:
DragSplitter(split_frame::SplitType split, split_frame::ViewRes *parent);
// QWidget interface
protected:
virtual void mouseMoveEvent(QMouseEvent *event) override;
};
2023-08-26 12:40:57 +00:00
/**
2023-12-30 05:04:51 +00:00
* @brief
2023-08-26 12:40:57 +00:00
*/
2024-02-08 13:12:45 +00:00
class SPLITVIEW_EXPORT SplitPanel : public QWidget, public split_frame::SplitView
2024-01-27 01:47:02 +00:00
{
2023-12-30 05:04:51 +00:00
typedef float split_pos;
typedef float split_width;
2023-08-26 12:40:57 +00:00
2024-01-27 01:47:02 +00:00
private:
split_frame::ResManager *const manager_inst;
2024-02-08 13:12:45 +00:00
SplitView *parent_inst;
DragSplitter *const splitter_inst;
std::pair<split_frame::ViewRes*, split_frame::ViewRes*> split_member;
2024-01-27 01:47:02 +00:00
// type, pos, width
2024-02-08 13:12:45 +00:00
std::tuple<split_frame::SplitType, split_pos, split_width> split_info;
void sync_status();
void splitter_adjust(const QPoint &pos);
2024-01-27 01:47:02 +00:00
2023-08-26 12:40:57 +00:00
public:
2024-02-08 13:12:45 +00:00
SplitPanel(split_frame::ResManager *mgr,split_frame::SplitType split);
2023-12-30 05:04:51 +00:00
virtual ~SplitPanel();
2023-08-26 12:40:57 +00:00
2024-02-08 13:12:45 +00:00
protected:
void resizeEvent(QResizeEvent *e) override;
2024-01-27 01:47:02 +00:00
2023-08-26 12:40:57 +00:00
// ViewRes interface
public:
2023-12-30 05:04:51 +00:00
virtual split_frame::ResManager *splitManager() const override;
2024-01-27 01:47:02 +00:00
virtual split_frame::SplitView *parentRes() const override;
virtual void setParentRes(SplitView *inst) override;
2023-12-30 05:04:51 +00:00
virtual QWidget* widget() const override;
2024-01-27 01:47:02 +00:00
virtual QSizeF stiffSize() const override;
2024-02-08 13:12:45 +00:00
virtual QRectF outlineRect() const override;
virtual void setOutline(const QRectF &outline) override;
virtual qulonglong hashCode() const override;
virtual void setVisible(bool state) override;
virtual bool isVisible() const override;
2023-08-26 12:40:57 +00:00
2023-12-30 05:04:51 +00:00
// SplitView interface
2023-08-26 12:40:57 +00:00
public:
2024-02-08 13:12:45 +00:00
virtual void initViews(ViewRes *a, ViewRes *b) override;
virtual std::pair<split_frame::ViewRes*, int> except(split_frame::ViewRes *inst) const override;
virtual bool contains(split_frame::ViewRes *inst) const override;
virtual void replaceView(split_frame::ViewRes *_new, split_frame::ViewRes *_old) override;
virtual void setSplitInfo(float pos, float width) override;
2023-08-26 12:40:57 +00:00
virtual float splitterWidth() const override;
virtual float splitterPos() const override;
2024-02-08 13:12:45 +00:00
virtual split_frame::SplitType splitType() const override;
2023-08-26 12:40:57 +00:00
};
} // namespace SplitFrame
2023-12-30 05:04:51 +00:00
#endif // SPLITPANEL