diff options
Diffstat (limited to 'sigmodr/SigmodrUI.cpp')
| -rw-r--r-- | sigmodr/SigmodrUI.cpp | 44 |
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())); |
