82 lines
2.5 KiB
C++
82 lines
2.5 KiB
C++
#ifndef SPLITPANEL
|
|
#define SPLITPANEL
|
|
|
|
#include "SplitWindow.h"
|
|
|
|
#include <QFrame>
|
|
|
|
namespace split_panel {
|
|
/**
|
|
* @brief 分割边栏
|
|
*/
|
|
class SPLITVIEW_EXPORT DragSplitter : public QFrame{
|
|
Q_OBJECT
|
|
signals:
|
|
void adjustRequest(const QPoint&);
|
|
|
|
public:
|
|
DragSplitter(split_frame::SplitType split, split_frame::ViewRes *parent);
|
|
|
|
// QWidget interface
|
|
protected:
|
|
virtual void mouseMoveEvent(QMouseEvent *event) override;
|
|
};
|
|
|
|
/**
|
|
* @brief 分割视图
|
|
*/
|
|
class SPLITVIEW_EXPORT SplitPanel : public QWidget, public split_frame::SplitView
|
|
{
|
|
typedef float split_pos;
|
|
typedef float split_width;
|
|
|
|
private:
|
|
split_frame::ResManager *const manager_inst;
|
|
SplitView *parent_inst;
|
|
DragSplitter *const splitter_inst;
|
|
std::pair<split_frame::ViewRes*, split_frame::ViewRes*> split_member;
|
|
// type, pos, width
|
|
std::tuple<split_frame::SplitType, split_pos, split_width> split_info;
|
|
|
|
void sync_status();
|
|
void splitter_adjust(const QPoint &pos);
|
|
|
|
|
|
public:
|
|
SplitPanel(split_frame::ResManager *mgr,split_frame::SplitType split);
|
|
virtual ~SplitPanel();
|
|
|
|
protected:
|
|
void resizeEvent(QResizeEvent *e) override;
|
|
|
|
|
|
// ViewRes interface
|
|
public:
|
|
virtual split_frame::ResManager *splitManager() const override;
|
|
virtual split_frame::SplitView *parentRes() const override;
|
|
virtual void setParentRes(SplitView *inst) override;
|
|
virtual QWidget* widget() const override;
|
|
virtual QSizeF stiffSize() const override;
|
|
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;
|
|
|
|
// SplitView interface
|
|
public:
|
|
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;
|
|
virtual float splitterWidth() const override;
|
|
virtual float splitterPos() const override;
|
|
virtual split_frame::SplitType splitType() const override;
|
|
|
|
};
|
|
|
|
} // namespace SplitFrame
|
|
|
|
#endif // SPLITPANEL
|