QtNovelUI/libSplitView/SplitWindow.h

88 lines
3.0 KiB
C
Raw Normal View History

2023-12-30 05:04:51 +00:00
#ifndef SPLITWINDOW_H
#define SPLITWINDOW_H
2024-02-10 07:09:02 +00:00
#include "libSplitView.h"
#include "AcceptPanel.h"
2023-12-30 05:04:51 +00:00
#include <QMainWindow>
#include <QWidget>
#include <libConfig.h>
#include <QToolBar>
2023-12-30 05:04:51 +00:00
2024-02-08 13:12:45 +00:00
namespace split_window {
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
*/
class SPLITVIEW_EXPORT SplitWindow : public QMainWindow, public split_frame::ResManager, public split_frame::FreedomViewsListener {
2024-02-14 05:27:15 +00:00
Q_OBJECT
2024-02-08 13:12:45 +00:00
private:
2024-02-10 07:28:19 +00:00
bool active = false;
QToolBar *const unused_stack;
2024-02-08 13:12:45 +00:00
QList<split_frame::FreedomViewsListener*> listener_list;
QHash<qulonglong, split_frame::ViewBase*> presents_store;
2024-02-08 13:12:45 +00:00
accept_panel::AcceptPanel *const accept_port;
split_frame::ViewRes *view_root = nullptr, *temp_show = nullptr;
2024-02-08 13:12:45 +00:00
split_frame::ViewBase *adjust_target = nullptr;
2024-02-11 13:24:02 +00:00
// freedom-recordstuple<IDtuple<ptr,replace,close,retrieve>>
QHash<qulonglong, std::tuple<split_frame::ViewBase*, bool, bool, bool>> freedom_records;
2024-02-08 13:12:45 +00:00
2023-12-30 05:04:51 +00:00
public:
SplitWindow(QWidget *parent = nullptr);
virtual ~SplitWindow();
//======================================================
/**
2024-02-08 13:12:45 +00:00
* @brief
2023-12-30 05:04:51 +00:00
* @param t
* @param target
*/
2024-02-11 13:24:02 +00:00
void tempShow(split_frame::ViewBase *target);
2023-12-30 05:04:51 +00:00
2024-02-11 13:24:02 +00:00
void freedomHasBeenRemoved(split_frame::ViewBase *inst);
void freedomHasBeenAppended(split_frame::ViewBase *inst);
2023-12-30 05:04:51 +00:00
/**
2024-02-14 05:27:15 +00:00
* @brief
* @param inst
*/
void setPresentTarget(split_frame::ViewRes *inst = nullptr);
2024-02-08 13:12:45 +00:00
bool eventFilter(QObject *sender, QEvent *ev) override;
2024-02-14 05:27:15 +00:00
signals:
void windowActived(split_window::SplitWindow *inst);
2024-02-08 13:12:45 +00:00
// ResManager interface
public:
virtual void addListener(split_frame::FreedomViewsListener *lsn) override;
virtual void removeListener(split_frame::FreedomViewsListener *lsn) override;
virtual void appendPresentView(split_frame::ViewBase *inst) override;
virtual void removePresentView(split_frame::ViewBase *inst) override;
virtual bool isPresented(split_frame::ViewBase *inst) const override;
2024-02-08 13:12:45 +00:00
virtual void doRetrieve(split_frame::ViewBase *inst) override;
virtual void doClose(split_frame::ViewBase *inst) override;
virtual void siblingAttach(split_frame::ViewBase *view, split_frame::ViewBase *pos, split_frame::SplitType ori) override;
2024-02-08 13:12:45 +00:00
virtual split_frame::ViewBase *adjustView() const override;
virtual void setAdjustView(split_frame::ViewBase *target) override;
// FreedomViewsListener interface
public:
virtual void freedomAppend(split_frame::ViewBase *ins) override;
virtual void freedomRemove(split_frame::ViewBase *ins) override;
virtual void aboutToBeDelete(split_frame::ViewBase *inst) override;
virtual void hasBeenAppend(split_frame::ViewBase *inst) override;
2024-02-14 05:27:15 +00:00
// QWidget interface
protected:
virtual void focusInEvent(QFocusEvent *event) override;
2023-12-30 05:04:51 +00:00
};
} // namespace split_panel
#endif // SPLITWINDOW_H