From de9534b6d50c829108eac73cbd55467d749679ff Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Tue, 3 Mar 2015 17:47:31 +0200 Subject: [PATCH] Fixed crash DialogUndo. After canceling fixing formula user will see again DialogUndo and can try again. Button cancel make pattern broken, but left posibility undo operation. --HG-- branch : release --- src/app/tools/drawTools/vdrawtool.cpp | 52 ++++++++++++++------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/src/app/tools/drawTools/vdrawtool.cpp b/src/app/tools/drawTools/vdrawtool.cpp index 944d06d9b..1281d8577 100644 --- a/src/app/tools/drawTools/vdrawtool.cpp +++ b/src/app/tools/drawTools/vdrawtool.cpp @@ -248,43 +248,45 @@ qreal VDrawTool::CheckFormula(const quint32 &toolId, QString &formula, VContaine delete cal; DialogUndo *dialogUndo = new DialogUndo(qApp->getMainWindow()); - if (dialogUndo->exec() == QDialog::Accepted) + forever { - UndoButton resultUndo = dialogUndo->Result(); - delete dialogUndo; - if (resultUndo == UndoButton::Fix) + if (dialogUndo->exec() == QDialog::Accepted) { - DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, qApp->getMainWindow()); - dialog->setWindowTitle(tr("Edit wrong formula")); - dialog->SetFormula(formula); - if (dialog->exec() == QDialog::Accepted) + const UndoButton resultUndo = dialogUndo->Result(); + if (resultUndo == UndoButton::Fix) { - formula = dialog->GetFormula(); - /* Need delete dialog here because parser in dialog don't allow use correct separator for parsing - * here. */ - delete dialog; - Calculator *cal1 = new Calculator(data); - result = cal1->EvalFormula(formula); - delete cal1; /* Here can be memory leak, but dialog already check this formula and probability - * very low. */ + DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, qApp->getMainWindow()); + dialog->setWindowTitle(tr("Edit wrong formula")); + dialog->SetFormula(formula); + if (dialog->exec() == QDialog::Accepted) + { + formula = dialog->GetFormula(); + /* Need delete dialog here because parser in dialog don't allow use correct separator for + * parsing here. */ + delete dialog; + Calculator *cal1 = new Calculator(data); + result = cal1->EvalFormula(formula); + delete cal1; /* Here can be memory leak, but dialog already check this formula and probability + * very low. */ + break; + } + else + { + delete dialog; + } } else { - delete dialog; - throw; + throw VExceptionUndo(QString("Undo wrong formula %1").arg(formula)); } } else { - QString what = QString("Undo wrong formula %1").arg(formula); - throw VExceptionUndo(what); + delete dialogUndo; + throw; } } - else - { - delete dialogUndo; - throw; - } + delete dialogUndo; } return result; }