#include "tycho.h" #include "project.h" #include #include ProjectModel::ProjectModel(MapModel *ptr) : modelType(Map), modelMap(ptr) { Q_ASSERT(modelMap != nullptr); } ProjectModel::ProjectModel(ProjectModel &&o) : modelType(o.modelType), modelMap(o.modelMap) { o.modelType = Invalid; } ProjectModel::~ProjectModel() { switch(modelType) { case Map: delete modelMap; break; } } ProjectModel::Type ProjectModel::type() const { return modelType; } QAbstractItemModel *ProjectModel::getAbstract() const { switch(modelType) { case Map: return modelMap; } Q_UNREACHABLE(); } MapModel *ProjectModel::getMap() const { return modelType == Map ? modelMap : nullptr; } bool ProjectModel::isDirty() const { switch(modelType) { case Map: return modelMap->isDirty(); } Q_UNREACHABLE(); } bool ProjectModel::open(QString const &path) { switch(modelType) { case Map: return modelMap->open(path); } Q_UNREACHABLE(); } bool ProjectModel::saveAs(QString const &path) const { switch(modelType) { case Map: return modelMap->saveAs(path); } Q_UNREACHABLE(); } bool ProjectModel::save() const { switch(modelType) { case Map: return modelMap->save(); } Q_UNREACHABLE(); } Project::Project(ProjectModel &&_model, QWidget *parent) : QMdiSubWindow(parent), model(std::move(_model)) { auto widget = new QWidget(this); setupUi(widget); setWidget(widget); setAttribute(Qt::WA_DeleteOnClose); treeView->setModel(model.getAbstract()); dbgPrintFunc(); } Project::~Project() { dbgPrintFunc(); } void Project::closeEvent(QCloseEvent *event) { if(model.isDirty()) { QMessageBox msg; msg.setText(tr("Do you want to save your changes to this project before closing it?")); msg.setInformativeText(tr("Unsaved changes will be lost unless you save.")); msg.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); msg.setDefaultButton(QMessageBox::Save); switch(msg.exec()) { case QMessageBox::Save: model.save(); break; case QMessageBox::Discard: break; case QMessageBox::Cancel: event->ignore(); return; default: assert(true); break; } } event->accept(); } // EOF