QtNovelUI/libSplitView/splitview_interface.h

199 lines
4.5 KiB
C
Raw Normal View History

2023-12-30 05:04:51 +00:00
#ifndef SPLITVIEW_INTERFACE_H
#define SPLITVIEW_INTERFACE_H
#include <QtCore/qglobal.h>
#if defined(SPLITVIEW_LIBRARY)
# define SPLITVIEW_EXPORT Q_DECL_EXPORT
#else
# define SPLITVIEW_EXPORT Q_DECL_IMPORT
#endif
#include <QWidget>
namespace split_frame {
class SplitView;
class ResManager;
/**
* @brief
*/
enum class SplitType { SPLIT_H = 0, SPLIT_V = 1 };
/**
* @brief
*/
enum class DockType { LEFT = 0, RIGHT = 1, TOP = 2, BOTTOM = 3 };
/**
* @brief
*/
class ViewRes {
public:
virtual ~ViewRes() = default;
/**
* @brief
* @return
*/
virtual ResManager *splitManager() const = 0;
/**
* @brief
* @return
*/
virtual ViewRes *parentRes() const = 0;
2024-01-24 04:58:19 +00:00
virtual void setParentRes(ViewRes *inst) = 0;
2023-12-30 05:04:51 +00:00
/**
* @brief
* @return
*/
virtual QWidget *widget() const = 0;
/**
* @brief
*/
virtual bool canRetrieve() const = 0;
/**
* @brief
*/
virtual bool canClose() const = 0;
/**
* @brief canReplace
* @return
*/
virtual bool canReplace() const = 0;
};
/**
* @brief
*/
class ViewBase : public ViewRes {
public:
virtual ~ViewBase() = default;
/**
* @brief
* @return
*/
virtual QIcon icon() const = 0;
/**
* @brief
* @return
*/
virtual QString title() const = 0;
/**
* @brief
* @return
*/
virtual QSizeF viewSize() const = 0;
/**
* @brief
* @param outline
*/
virtual void resizeView(const QSizeF &outline) = 0;
};
/**
* @brief
*/
class SplitView : public ViewBase {
public:
virtual ~SplitView() = default;
/**
* @brief
* @param view
* @param old
*/
virtual void replaceComp(ViewBase *view, ViewBase *old) = 0;
2024-01-24 04:58:19 +00:00
/**
* @brief
* @param type
* @param pos
* @param width
*/
virtual void setSplitInfo(SplitType type, float pos, float width) = 0;
/**
* @brief
* @return
*/
virtual std::tuple<ViewBase *, ViewBase *, SplitType> child() const = 0;
2023-12-30 05:04:51 +00:00
/**
* @brief
* @return
*/
virtual float splitterWidth() const = 0;
/**
* @brief
* @return
*/
virtual float splitterPos() const = 0;
};
/**
* @brief
*/
class FreedomViewsListener {
public:
virtual ~FreedomViewsListener() = default;
/**
* @brief
* @param ins
*/
virtual void freedomAppended(ViewBase *ins) = 0;
/**
* @brief
* @param ins
*/
virtual void freedomRemoved(ViewBase *ins) = 0;
};
/**
* @brief
*/
class ResManager {
public:
virtual ~ResManager() = default;
virtual void addListener(FreedomViewsListener *lsn) = 0;
virtual void removeListener(FreedomViewsListener *lsn) = 0;
2024-01-24 04:58:19 +00:00
/**
* @brief
* @param inst
*/
virtual void removePresentView(ViewBase *inst) = 0;
/**
* @brief
* @param inst
*/
virtual void appendPresentView(ViewBase *inst) = 0;
2023-12-30 05:04:51 +00:00
/**
* @brief
* @param inst
*/
virtual void doRetrieve(ViewRes *inst);
/**
* @brief
*/
virtual void doClose(ViewRes *inst) = 0;
/**
* @brief
* @param view
* @param old
*/
virtual void doReplace(ViewRes *view, ViewRes *old) = 0;
};
} // namespace SplitFrame
#endif // SPLITVIEW_INTERFACE_H