feat(framework): add TUWidgetLayoutViewBase template class to make implementing TULayoutView easier
This commit is contained in:
parent
848c0e1c81
commit
958b566751
@ -29,9 +29,7 @@ function(link_libs_and_set_properties target_name)
|
|||||||
target_include_directories(${target_name} PUBLIC "${QT6_ROOT_DIR}/include")
|
target_include_directories(${target_name} PUBLIC "${QT6_ROOT_DIR}/include")
|
||||||
target_include_directories(${target_name} PUBLIC "${QT6_ROOT_DIR}/include/QtGui")
|
target_include_directories(${target_name} PUBLIC "${QT6_ROOT_DIR}/include/QtGui")
|
||||||
|
|
||||||
target_include_directories(${target_name} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include/toon_boom")
|
target_include_directories(${target_name} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include/public")
|
||||||
target_include_directories(${target_name} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include/framework")
|
|
||||||
target_include_directories(${target_name} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include/hooks")
|
|
||||||
target_include_directories(${target_name} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include/internal")
|
target_include_directories(${target_name} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include/internal")
|
||||||
|
|
||||||
target_link_directories(${target_name} PUBLIC "${QT6_ROOT_DIR}/lib")
|
target_link_directories(${target_name} PUBLIC "${QT6_ROOT_DIR}/lib")
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#include "../include/hooks/toon_boom_hooks.hpp"
|
#include "../include/public/hooks/toon_boom_hooks.hpp"
|
||||||
#include "../include/internal/harmony_signatures.hpp"
|
#include "../include/internal/harmony_signatures.hpp"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|||||||
73
framework/include/public/toon_boom/ext/layout.hpp
Normal file
73
framework/include/public/toon_boom/ext/layout.hpp
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "../PLUG_Services.hpp"
|
||||||
|
#include "../toon_boom_layout.hpp"
|
||||||
|
#include "QtXml/qdom.h"
|
||||||
|
#include <QtCore/QObject>
|
||||||
|
#include <QtCore/QPointer>
|
||||||
|
#include <QtCore/Qt>
|
||||||
|
#include <QtWidgets/QWidget>
|
||||||
|
#include <iostream>
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
concept isQWidget = std::is_base_of<QWidget, T>::value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Simple base class for implementing TULayoutView with a QWidget, with
|
||||||
|
all the ugly parts abstracted away.
|
||||||
|
|
||||||
|
* @tparam T The QWidget type to use
|
||||||
|
*/
|
||||||
|
template <isQWidget T> class TUWidgetLayoutViewBase : public TULayoutView {
|
||||||
|
public:
|
||||||
|
TUWidgetLayoutViewBase() { m_widget = nullptr; };
|
||||||
|
TUWidgetLayoutViewBase(T *widget) { m_widget = widget; };
|
||||||
|
virtual ~TUWidgetLayoutViewBase() {
|
||||||
|
};
|
||||||
|
virtual void triggerMenuChanged() override {}
|
||||||
|
QWidget *widget() override {
|
||||||
|
return reinterpret_cast<QWidget *>(static_cast<TULayoutView *>(this));
|
||||||
|
}
|
||||||
|
const QWidget *getWidget() const override {
|
||||||
|
return m_widget;
|
||||||
|
}
|
||||||
|
QWidget *getWidget() override {
|
||||||
|
ensureWidget();
|
||||||
|
return m_widget;
|
||||||
|
}
|
||||||
|
TULayoutView *initiate(QWidget *parent) override {
|
||||||
|
ensureWidget();
|
||||||
|
if (parent && m_widget) {
|
||||||
|
m_widget->setParent(parent);
|
||||||
|
}
|
||||||
|
QObject::connect(
|
||||||
|
parent, &QObject::destroyed, m_widget,
|
||||||
|
[this]() {
|
||||||
|
if (m_widget) {
|
||||||
|
m_widget->setParent(nullptr); // Prevent Qt from deleting us
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Qt::DirectConnection); // DirectConnection ensures this runs BEFORE
|
||||||
|
// deletion
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void isTULayoutView() override {}
|
||||||
|
void disconnectView() override {}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
QPointer<T> m_widget;
|
||||||
|
void ensureWidget() {
|
||||||
|
if (!m_widget) {
|
||||||
|
m_widget = createWidget();
|
||||||
|
m_widget->setAttribute(Qt::WA_DeleteOnClose, false);
|
||||||
|
m_widget->setAttribute(Qt::WA_QuitOnClose, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void isTULayoutView() override {}
|
||||||
|
void disconnectView() override {
|
||||||
|
|
||||||
|
}
|
||||||
|
virtual T *createWidget() = 0;
|
||||||
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user