129 lines
2.4 KiB
C++
129 lines
2.4 KiB
C++
#include "tycho.h"
|
|
#include "project.h"
|
|
|
|
#include <QCloseEvent>
|
|
#include <QMessageBox>
|
|
|
|
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
|