#ifndef BASEVIEW_H #define BASEVIEW_H #include "libSplitView.h" #include #include #include #include #include namespace dock_panel { class DockableView; /** * @brief 视图拖拽标题栏 */ class SPLITVIEW_EXPORT DragHeader : public QFrame { Q_OBJECT private: DockableView *const bind_core; QLabel *const icon_holder; QLabel *const title_holder; QPushButton *const close_btn, *const minimal_btn; std::tuple press_flag = std::make_tuple(false, QPointF()); signals: /** * @brief 关闭请求 */ void closeRequest(); /** * @brief 回收请求 */ void retrieveRequest(); /** * @brief 排版调整请求 * @param pos 信号源上的位置 */ void adjustRequest(const QPoint &pos); public: DragHeader(const QString &title, DockableView *bind_core); DragHeader(const QString &title, const QIcon &icon, DockableView *bind_core); void setTitle(const QString &title); void setTitle(const QString &title, const QIcon &icon); void optConfig(bool retrieve, bool close); // QWidget interface protected: virtual void mousePressEvent(QMouseEvent *event) override; virtual void mouseReleaseEvent(QMouseEvent *event) override; virtual void mouseMoveEvent(QMouseEvent *event) override; }; /** * @brief 基础内容视图组件 */ class SPLITVIEW_EXPORT DockableView : public QWidget, public split_frame::ViewBase { public: /** * @brief 构建新的呈现视图实例 * @param present 内容视图实例 * @param custom_header 是否添加标题栏 */ DockableView(split_frame::ResManager*mgr, QWidget *present); virtual ~DockableView(); /** * @brief 配置视图基本特性 * @param replace 可以被隐藏和替换 * @param close 可以被关闭 * @param retrieve 可以被隐藏 */ void viewConfig(bool replace, bool close, bool retrieve); /** * @brief 设置标题栏内容 * @param title */ void setTitle(const QString &title); void setTitle(const QIcon &icon, const QString &title); void adjustAccept(const QPoint &pos); void closeAccept(); void retrieveAccept(); private: DragHeader *const title_header; QWidget *const present_cube; split_frame::ResManager *const manager_inst; QIcon icon_store; split_frame::SplitView *parent_res = nullptr; bool m_replace = false, m_retrieve = false, m_close = false; // ViewRes interface public: virtual split_frame::ResManager *splitManager() const override; virtual split_frame::SplitView *parentRes() const override; virtual void setParentRes(split_frame::SplitView *inst) override; virtual QWidget *widget() const override; virtual QSizeF stiffSize() const override; virtual QRectF outlineRect() const override; virtual void setOutline(const QRectF &rect) override; virtual qulonglong hashCode() const override; virtual void setVisible(bool state) override; virtual bool isVisible() const override; // ViewBase interface public: virtual QIcon icon() const override; virtual QString title() const override; virtual bool canRetrieve() const override; virtual bool canClose() const override; virtual bool canReplace() const override; }; } #endif // BASEVIEW_H