Maraiah/tycho/cc/project.cc

92 lines
1.8 KiB
C++
Raw Normal View History

2019-07-02 14:57:10 -07:00
#include "tycho.h"
static
2019-07-03 17:51:38 -07:00
IProjectModel *makeModel(Project *proj)
{
switch(proj->type()) {
case Project::Map: return new MapModel(proj);
}
}
static
2019-07-03 17:51:38 -07:00
IProjectView *makeView(Project *proj)
{
switch(proj->type()) {
case Project::Map: return new MapView(proj);
}
}
Project::Project(Type type) :
2019-07-02 18:16:34 -07:00
QMdiSubWindow(),
m_type(type),
m_model(makeModel(this)),
m_view(makeView(this))
2019-07-02 14:57:10 -07:00
{
auto widget = new QWidget(this);
setupUi(widget);
setWidget(widget);
setAttribute(Qt::WA_DeleteOnClose);
listView->setModel(m_model);
verticalLayout->insertWidget(0, dynamic_cast<QWidget *>(m_view));
2019-07-02 18:16:34 -07:00
connect(listView,
SIGNAL(doubleClicked(QModelIndex const &)),
m_model,
SLOT(select(QModelIndex const &)));
2019-07-02 14:57:10 -07:00
dbgPrintFunc();
}
Project::~Project()
{
dbgPrintFunc();
}
Project::Type Project::type() const
{
return m_type;
}
IProjectModel *Project::model() const
{
return m_model;
}
MapModel *Project::mapModel() const
{
2019-07-03 20:22:15 -07:00
return qobject_cast<MapModel *>(m_model);
}
2019-07-02 14:57:10 -07:00
void Project::closeEvent(QCloseEvent *event)
{
if(m_model->dirty()) {
2019-07-02 14:57:10 -07:00
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:
m_model->save();
2019-07-02 14:57:10 -07:00
break;
case QMessageBox::Discard:
break;
case QMessageBox::Cancel:
event->ignore();
return;
default:
Q_UNREACHABLE();
}
}
event->accept();
}
// EOF