summaryrefslogtreecommitdiffstats
path: root/sigmodr/SigmodrUI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sigmodr/SigmodrUI.cpp')
-rw-r--r--sigmodr/SigmodrUI.cpp44
1 files changed, 27 insertions, 17 deletions
diff --git a/sigmodr/SigmodrUI.cpp b/sigmodr/SigmodrUI.cpp
index 7a0afc9b..98dfdf5a 100644
--- a/sigmodr/SigmodrUI.cpp
+++ b/sigmodr/SigmodrUI.cpp
@@ -355,6 +355,29 @@ void SigmodrUI::uploadGame(const Game* game)
}
}
+bool SigmodrUI::closeWidget()
+{
+ bool closed = true;
+ if (formPanel->widget() && boxButtons->isEnabled())
+ {
+ switch (KMessageBox::questionYesNoCancel(this, "You have unsaved changes, would you like to save them?", QString("Unsaved %1").arg(qobject_cast<ObjectUI*>(formPanel->widget())->object()->className())))
+ {
+ case KMessageBox::Yes:
+ qobject_cast<ObjectUI*>(formPanel->widget())->apply();
+ break;
+ case KMessageBox::No:
+ qobject_cast<ObjectUI*>(formPanel->widget())->discard();
+ break;
+ case KMessageBox::Cancel:
+ closed = false;
+ break;
+ }
+ }
+ if (closed)
+ delete formPanel->takeWidget();
+ return closed;
+}
+
void SigmodrUI::closeGame()
{
closeGame(treeSigmod->currentGame());
@@ -365,6 +388,9 @@ bool SigmodrUI::closeGame(const Game* game, const bool force)
{
if (game)
{
+ const ObjectUI* widget = qobject_cast<ObjectUI*>(formPanel->widget());
+ if (widget && (game == widget->object()->game()) && !closeWidget())
+ return false;
if (treeSigmod->dirty(game))
{
int result;
@@ -383,8 +409,6 @@ bool SigmodrUI::closeGame(const Game* game, const bool force)
}
}
treeSigmod->deleteGame(game);
- if (formPanel->widget())
- delete formPanel->takeWidget();
}
return true;
}
@@ -446,22 +470,8 @@ void Sigmodr::SigmodrUI::on_treeSigmod_clicked(const QModelIndex& index)
if (!(treeSigmod->model()->flags(index) & Qt::ItemIsSelectable))
return;
ObjectUI* widget = treeSigmod->editorWidget(index);
- if (widget)
+ if (widget && closeWidget())
{
- if (formPanel->widget() && boxButtons->isEnabled())
- {
- switch (KMessageBox::questionYesNoCancel(this, "You have unsaved changes, would you like to save them?", QString("Unsaved %1").arg(qobject_cast<ObjectUI*>(formPanel->widget())->object()->className())))
- {
- case KMessageBox::Yes:
- qobject_cast<ObjectUI*>(formPanel->widget())->apply();
- break;
- case KMessageBox::No:
- qobject_cast<ObjectUI*>(formPanel->widget())->discard();
- break;
- case KMessageBox::Cancel:
- return;
- }
- }
boxButtons->setEnabled(false);
connect(widget, SIGNAL(changed(bool)), boxButtons, SLOT(setEnabled(bool)));
connect(widget, SIGNAL(saved()), this, SLOT(setDirty()));