QtNovelUI/libSplitView/libSplitView.h

253 lines
6.4 KiB
C
Raw Permalink Normal View History

2024-02-10 07:09:02 +00:00
#ifndef LIBSPLITVIEW_H
#define LIBSPLITVIEW_H
2023-12-30 05:04:51 +00:00
2024-02-10 07:09:02 +00:00
#include "libSplitView_Global.h"
2023-12-30 05:04:51 +00:00
#include <QWidget>
2024-02-10 07:09:02 +00:00
#include <QSizeF>
2023-12-30 05:04:51 +00:00
namespace split_frame {
class SplitView;
class ResManager;
/**
* @brief
*/
2024-02-08 13:12:45 +00:00
enum class SplitType { SPLIT_H_LFIRST = 0, SPLIT_H_RFIRST = 1, SPLIT_V_TFIRST = 2, SPLIT_V_BFIRST = 3 };
2023-12-30 05:04:51 +00:00
/**
* @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;
2024-02-08 13:12:45 +00:00
2023-12-30 05:04:51 +00:00
/**
* @brief
* @return
*/
2024-01-27 01:47:02 +00:00
virtual SplitView *parentRes() const = 0;
2024-02-08 13:12:45 +00:00
/**
* @brief
* @param inst
*/
2024-01-27 01:47:02 +00:00
virtual void setParentRes(SplitView *inst) = 0;
2023-12-30 05:04:51 +00:00
2024-02-08 13:12:45 +00:00
2023-12-30 05:04:51 +00:00
/**
* @brief
* @return
*/
virtual QWidget *widget() const = 0;
/**
2024-02-08 13:12:45 +00:00
* @brief
* @return
2023-12-30 05:04:51 +00:00
*/
2024-02-08 13:12:45 +00:00
virtual QSizeF stiffSize() const = 0;
2023-12-30 05:04:51 +00:00
/**
2024-02-08 13:12:45 +00:00
* @brief
* @return
2023-12-30 05:04:51 +00:00
*/
2024-02-08 13:12:45 +00:00
virtual QRectF outlineRect() const = 0;
2023-12-30 05:04:51 +00:00
/**
2024-02-08 13:12:45 +00:00
* @brief
* @param outline
2023-12-30 05:04:51 +00:00
*/
2024-02-08 13:12:45 +00:00
virtual void setOutline(const QRectF &rect) = 0;
/**
* @brief
* @param state
*/
virtual void setVisible(bool state) = 0;
virtual bool isVisible() const = 0;
2024-01-27 01:47:02 +00:00
/**
* @brief
* @return
*/
virtual qulonglong hashCode() const = 0;
2023-12-30 05:04:51 +00:00
};
/**
* @brief
*/
2024-02-08 13:12:45 +00:00
class ViewBase : public ViewRes {
2023-12-30 05:04:51 +00:00
public:
virtual ~ViewBase() = default;
/**
* @brief
* @return
*/
virtual QIcon icon() const = 0;
/**
* @brief
* @return
*/
virtual QString title() const = 0;
2024-01-27 01:47:02 +00:00
/**
2024-02-08 13:12:45 +00:00
* @brief
2024-01-27 01:47:02 +00:00
*/
2024-02-08 13:12:45 +00:00
virtual bool canRetrieve() const = 0;
2024-01-27 01:47:02 +00:00
2023-12-30 05:04:51 +00:00
/**
2024-02-08 13:12:45 +00:00
* @brief
2023-12-30 05:04:51 +00:00
*/
2024-02-08 13:12:45 +00:00
virtual bool canClose() const = 0;
2023-12-30 05:04:51 +00:00
/**
2024-02-08 13:12:45 +00:00
* @brief canReplace
* @return
2023-12-30 05:04:51 +00:00
*/
2024-02-08 13:12:45 +00:00
virtual bool canReplace() const = 0;
2023-12-30 05:04:51 +00:00
};
/**
* @brief
*/
2024-02-08 13:12:45 +00:00
class SplitView : public ViewRes {
2023-12-30 05:04:51 +00:00
public:
virtual ~SplitView() = default;
/**
2024-02-10 07:09:02 +00:00
* @brief
2024-02-08 13:12:45 +00:00
* @param a a
* @param b b
*/
virtual void initViews(ViewRes *a, ViewRes *b) = 0;
/**
2024-02-10 07:09:02 +00:00
* @brief * @param view * @param pos
2023-12-30 05:04:51 +00:00
*/
2024-02-08 13:12:45 +00:00
virtual void replaceView(ViewRes *_new, ViewRes *_old) = 0;
2024-01-24 04:58:19 +00:00
/**
* @brief
* @param type
* @param pos
* @param width
*/
2024-02-08 13:12:45 +00:00
virtual void setSplitInfo(float pos, float width) = 0;
2024-01-24 04:58:19 +00:00
/**
2024-02-08 13:12:45 +00:00
* @brief
* @return std::pair<ptr, index>
*/
virtual std::pair<ViewRes*, int> except(ViewRes *inst) const = 0;
/**
* @brief
* @param inst
2024-01-24 04:58:19 +00:00
* @return
*/
2024-02-08 13:12:45 +00:00
virtual bool contains(ViewRes *inst) const = 0;
2023-12-30 05:04:51 +00:00
/**
* @brief
* @return
*/
virtual float splitterWidth() const = 0;
/**
* @brief
* @return
*/
virtual float splitterPos() const = 0;
2024-02-08 13:12:45 +00:00
/**
* @brief
* @return
*/
virtual SplitType splitType() const = 0;
2023-12-30 05:04:51 +00:00
};
2024-01-27 01:47:02 +00:00
2023-12-30 05:04:51 +00:00
/**
* @brief
*/
class FreedomViewsListener {
public:
virtual ~FreedomViewsListener() = default;
/**
* @brief
* @param ins
*/
2024-02-08 13:12:45 +00:00
virtual void freedomAppend(ViewBase *ins) = 0;
2023-12-30 05:04:51 +00:00
/**
* @brief
* @param ins
*/
2024-02-08 13:12:45 +00:00
virtual void freedomRemove(ViewBase *ins) = 0;
/**
* @brief
* @param inst
*/
virtual void aboutToBeDelete(ViewBase *inst) = 0;
/**
* @brief
* @param inst
*/
virtual void hasBeenAppend(ViewBase *inst) = 0;
2023-12-30 05:04:51 +00:00
};
/**
* @brief
*/
class ResManager {
public:
virtual ~ResManager() = default;
virtual void addListener(FreedomViewsListener *lsn) = 0;
virtual void removeListener(FreedomViewsListener *lsn) = 0;
2024-02-08 13:12:45 +00:00
virtual ViewBase* adjustView() const = 0;
virtual void setAdjustView(ViewBase *target = nullptr) = 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
/**
2024-02-10 07:09:02 +00:00
* @brief
* @param inst
*/
virtual bool isPresented(ViewBase *inst) const = 0;
2023-12-30 05:04:51 +00:00
/**
2024-02-10 07:09:02 +00:00
* @brief * @param inst
2023-12-30 05:04:51 +00:00
*/
2024-02-08 13:12:45 +00:00
virtual void doRetrieve(ViewBase *inst) = 0;
2023-12-30 05:04:51 +00:00
/**
* @brief
*/
2024-02-08 13:12:45 +00:00
virtual void doClose(ViewBase *inst) = 0;
2023-12-30 05:04:51 +00:00
/**
2024-02-10 07:09:02 +00:00
* @brief
* @param view
* @param old
2023-12-30 05:04:51 +00:00
*/
virtual void siblingAttach(ViewBase *view, ViewBase *pos, SplitType ori) = 0;
2023-12-30 05:04:51 +00:00
};
} // namespace SplitFrame
2024-02-10 07:09:02 +00:00
#endif // LIBSPLITVIEW_H