diff --git a/tycho/cc/mapmodel.cc b/tycho/cc/mapmodel.cc index 59a13e3..e25607b 100644 --- a/tycho/cc/mapmodel.cc +++ b/tycho/cc/mapmodel.cc @@ -17,26 +17,6 @@ ProjectModel::Type MapModel::type() const return ProjectModel::Map; } -QAbstractItemModel const *MapModel::getAbstract() const -{ - return this; -} - -QAbstractItemModel *MapModel::getAbstract() -{ - return this; -} - -MapModel const *MapModel::getMap() const -{ - return this; -} - -MapModel *MapModel::getMap() -{ - return this; -} - bool MapModel::isDirty() const { return AbstractMapModel::isDirty(); diff --git a/tycho/cc/mapprops.cc b/tycho/cc/mapprops.cc index d33d011..6a4e0de 100644 --- a/tycho/cc/mapprops.cc +++ b/tycho/cc/mapprops.cc @@ -1,6 +1,6 @@ #include "tycho.h" -MapProps::MapProps(MapModel *_mapModel, QWidget *parent) : +MapProps::MapProps(std::weak_ptr _mapModel, QWidget *parent) : QDialog(parent), mapModel(_mapModel) { diff --git a/tycho/cc/mapview.cc b/tycho/cc/mapview.cc index 3d22db9..c7617e8 100644 --- a/tycho/cc/mapview.cc +++ b/tycho/cc/mapview.cc @@ -1,7 +1,8 @@ #include "tycho.h" -MapView::MapView(MapModel *mapModel, QWidget *parent) : - QWidget(parent) +MapView::MapView(std::weak_ptr _mapModel, QWidget *parent) : + QWidget(parent), + mapModel(_mapModel) { setupUi(this); diff --git a/tycho/cc/menu.cc b/tycho/cc/menu.cc index ae82e2a..52024fd 100644 --- a/tycho/cc/menu.cc +++ b/tycho/cc/menu.cc @@ -42,7 +42,7 @@ void Menu::mapOpen() if(!fname.isEmpty()) { QScopedPointer proj{new Project(new MapModel)}; - if(proj->model->open(fname)) { + if(proj->getModel()->open(fname)) { addProject(proj.take()); } } @@ -98,8 +98,8 @@ void Menu::openMapProperties() { auto proj = activeProject(); - if(proj && proj->model->type() == ProjectModel::Map) { - MapProps props{proj->model->getMap(), proj}; + if(proj && proj->getModel()->type() == ProjectModel::Map) { + MapProps props{proj->getMapModel(), proj}; props.exec(); } } diff --git a/tycho/cc/project.cc b/tycho/cc/project.cc index 06daab4..bf88258 100644 --- a/tycho/cc/project.cc +++ b/tycho/cc/project.cc @@ -11,7 +11,7 @@ Project::Project(ProjectModel *_model, QWidget *parent) : setWidget(widget); setAttribute(Qt::WA_DeleteOnClose); - listView->setModel(model->getAbstract()); + listView->setModel(dynamic_cast(model.get())); dbgPrintFunc(); } @@ -21,6 +21,16 @@ Project::~Project() dbgPrintFunc(); } +std::shared_ptr Project::getModel() +{ + return model; +} + +std::shared_ptr Project::getMapModel() +{ + return std::dynamic_pointer_cast(model); +} + void Project::closeEvent(QCloseEvent *event) { if(model->isDirty()) { diff --git a/tycho/cc/tycho.h b/tycho/cc/tycho.h index 65881bb..7ae7592 100644 --- a/tycho/cc/tycho.h +++ b/tycho/cc/tycho.h @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -29,42 +30,6 @@ class MapProps; class MapView; class Menu; class Project; -class ProjectModel; - -class MapProps : public QDialog, private Ui::MapProps -{ - Q_OBJECT - -public: - explicit MapProps(MapModel *mapModel, QWidget *parent = nullptr); - ~MapProps(); - -private: - MapModel *mapModel; -}; - -class MapView : public QWidget, private Ui::MapView -{ - Q_OBJECT - -public: - explicit MapView(MapModel *mapModel, QWidget *parent = nullptr); - ~MapView(); -}; - -class Project : public QMdiSubWindow, private Ui::Project -{ - Q_OBJECT - -public: - explicit Project(ProjectModel *model, QWidget *parent = nullptr); - ~Project(); - - QSharedPointer model; - -protected: - void closeEvent(QCloseEvent *event) override; -}; class ProjectModel { @@ -78,18 +43,13 @@ public: virtual Type type() const = 0; - virtual QAbstractItemModel const *getAbstract() const = 0; - virtual QAbstractItemModel *getAbstract() = 0; - virtual MapModel const *getMap() const = 0; - virtual MapModel *getMap() = 0; - virtual bool isDirty() const = 0; virtual bool open(QString const &path) = 0; virtual bool save() const = 0; virtual bool saveAs(QString const &path) const = 0; }; -class MapModel final : private AbstractMapModel, public ProjectModel +class MapModel final : public AbstractMapModel, public ProjectModel { Q_OBJECT @@ -99,11 +59,6 @@ public: ProjectModel::Type type() const override; - QAbstractItemModel const *getAbstract() const override; - QAbstractItemModel *getAbstract() override; - MapModel const *getMap() const override; - MapModel *getMap() override; - bool isDirty() const override; bool open(QString const &path) override; bool save() const override; @@ -114,7 +69,33 @@ private: const override; }; -class Menu : public QMainWindow, private Ui::Menu +class MapProps final : public QDialog, private Ui::MapProps +{ + Q_OBJECT + +public: + explicit MapProps(std::weak_ptr mapModel, + QWidget *parent = nullptr); + ~MapProps(); + +private: + std::weak_ptr mapModel; +}; + +class MapView final : public QWidget, private Ui::MapView +{ + Q_OBJECT + +public: + explicit MapView(std::weak_ptr mapModel, + QWidget *parent = nullptr); + ~MapView(); + +private: + std::weak_ptr mapModel; +}; + +class Menu final : public QMainWindow, private Ui::Menu { Q_OBJECT @@ -140,6 +121,25 @@ private: void addProject(Project *proj); }; +class Project final : public QMdiSubWindow, private Ui::Project +{ + Q_OBJECT + +public: + explicit Project(ProjectModel *model, QWidget *parent = nullptr); + ~Project(); + + std::shared_ptr getModel(); + std::shared_ptr getMapModel(); + std::shared_ptr getAbstractModel(); + +protected: + void closeEvent(QCloseEvent *event) override; + +private: + std::shared_ptr model; +}; + template static inline void dbgPrint([[maybe_unused]] char const *fmt, [[maybe_unused]] VA &&...va)