From 262ab3712e986130d0ba4f8600efb9b211c03506 Mon Sep 17 00:00:00 2001 From: Alison Watson Date: Wed, 3 Jul 2019 23:34:57 -0400 Subject: [PATCH] tycho: fix MapView sucking (and also remove RTTI) --- tycho/CMakeLists.txt | 6 +++++- tycho/bindings.json | 1 + tycho/cc/interface.h | 9 ++++++++- tycho/cc/mapview.cc | 10 ++++++++-- tycho/cc/project.cc | 2 +- tycho/cc/tycho.h | 6 ++++-- 6 files changed, 27 insertions(+), 7 deletions(-) diff --git a/tycho/CMakeLists.txt b/tycho/CMakeLists.txt index a5f7119..e631214 100644 --- a/tycho/CMakeLists.txt +++ b/tycho/CMakeLists.txt @@ -9,7 +9,11 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Werror") + +if(NOT MSVC) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Werror") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti") +endif() find_package( Qt5 5.6.0 diff --git a/tycho/bindings.json b/tycho/bindings.json index 6c956b8..84985b0 100644 --- a/tycho/bindings.json +++ b/tycho/bindings.json @@ -57,6 +57,7 @@ }, "IMapView": { "type": "Object", + "baseClass": "IProjectView", "functions": { }, "properties": { diff --git a/tycho/cc/interface.h b/tycho/cc/interface.h index 5f97b0e..67b702c 100644 --- a/tycho/cc/interface.h +++ b/tycho/cc/interface.h @@ -3,6 +3,7 @@ #pragma clang diagnostic ignored "-Winconsistent-missing-override" #include +#include class IProjectModel : public QAbstractItemModel { @@ -31,10 +32,16 @@ signals: void selected(std::uint16_t index); }; -class IProjectView +class IProjectView : public QObject { + Q_OBJECT + public: + using QObject::QObject; + virtual ~IProjectView() {} + + virtual QWidget *widget() = 0; }; // EOF diff --git a/tycho/cc/mapview.cc b/tycho/cc/mapview.cc index fed3fd9..477a0ac 100644 --- a/tycho/cc/mapview.cc +++ b/tycho/cc/mapview.cc @@ -1,10 +1,11 @@ #include "tycho.h" MapView::MapView(Project *parent) : - QWidget(parent), + IMapView(parent), + m_internal(parent), m_mapModel(parent->mapModel()) { - setupUi(this); + setupUi(&m_internal); dbgPrintFunc(); } @@ -14,4 +15,9 @@ MapView::~MapView() dbgPrintFunc(); } +QWidget *MapView::widget() +{ + return &m_internal; +} + // EOF diff --git a/tycho/cc/project.cc b/tycho/cc/project.cc index 3c6ac40..99ac13e 100644 --- a/tycho/cc/project.cc +++ b/tycho/cc/project.cc @@ -30,7 +30,7 @@ Project::Project(Type type) : setAttribute(Qt::WA_DeleteOnClose); listView->setModel(m_model); - verticalLayout->insertWidget(0, dynamic_cast(m_view)); + verticalLayout->insertWidget(0, m_view->widget()); connect(listView, SIGNAL(doubleClicked(QModelIndex const &)), diff --git a/tycho/cc/tycho.h b/tycho/cc/tycho.h index 49976b5..3cd5165 100644 --- a/tycho/cc/tycho.h +++ b/tycho/cc/tycho.h @@ -47,8 +47,7 @@ private: QVariant data(const QModelIndex &index, int role) const override; }; -class MapView final : public QWidget, - public IProjectView, +class MapView final : public IMapView, private Ui::MapView { Q_OBJECT @@ -57,7 +56,10 @@ public: explicit MapView(Project *parent); ~MapView(); + QWidget *widget(); + private: + QWidget m_internal; MapModel *const m_mapModel; };