From ed6c72bda93ccad6ab679003e8abea71f0e1084d Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sun, 19 Jun 2016 20:31:24 +0300 Subject: [PATCH] Fixed Tape crash. (grafted from 47b3aaf84786a338bc7c31284bef0bd5017a0c67) --HG-- branch : develop --- src/app/tape/tmainwindow.cpp | 91 ++++++++++++++---------------------- src/app/tape/tmainwindow.h | 5 +- 2 files changed, 40 insertions(+), 56 deletions(-) diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp index 9d67b8f03..352f168ca 100644 --- a/src/app/tape/tmainwindow.cpp +++ b/src/app/tape/tmainwindow.cpp @@ -104,7 +104,8 @@ TMainWindow::TMainWindow(QWidget *parent) dockDiagramVisible(true), isInitialized(false), recentFileActs(), - separatorAct(nullptr) + separatorAct(nullptr), + hackedWidgets() { ui->setupUi(this); @@ -1869,39 +1870,23 @@ void TMainWindow::InitWindow() // Because Qt Designer doesn't know about our deleting we will create empty objects for correct // working the retranslation UI // Tab Measurements - delete ui->horizontalLayoutValue; - delete ui->plainTextEditFormula; - delete ui->toolButtonExpr; - - delete ui->labelFormula; - ui->labelFormula = new QLabel(this); - - delete ui->pushButtonGrow; - ui->pushButtonGrow = new QPushButton(this); + HackWidget(&ui->horizontalLayoutValue); + HackWidget(&ui->plainTextEditFormula); + HackWidget(&ui->toolButtonExpr); + HackWidget(&ui->labelFormula); + HackWidget(&ui->pushButtonGrow); // Tab Information - delete ui->lineEditGivenName; - delete ui->lineEditFamilyName; - delete ui->comboBoxGender; - delete ui->lineEditEmail; - - delete ui->labelGivenName; - ui->labelGivenName = new QLabel(this); - - delete ui->labelFamilyName; - ui->labelFamilyName = new QLabel(this); - - delete ui->labelBirthDate; - ui->labelBirthDate = new QLabel(this); - - delete ui->dateEditBirthDate; - ui->dateEditBirthDate = new QDateEdit(this); - - delete ui->labelGender; - ui->labelGender = new QLabel(this); - - delete ui->labelEmail; - ui->labelEmail = new QLabel(this); + HackWidget(&ui->lineEditGivenName); + HackWidget(&ui->lineEditFamilyName); + HackWidget(&ui->comboBoxGender); + HackWidget(&ui->lineEditEmail); + HackWidget(&ui->labelGivenName); + HackWidget(&ui->labelFamilyName); + HackWidget(&ui->labelBirthDate); + HackWidget(&ui->dateEditBirthDate); + HackWidget(&ui->labelGender); + HackWidget(&ui->labelEmail); const QStringList listHeights = VMeasurement::WholeListHeights(mUnit); const QStringList listSizes = VMeasurement::WholeListSizes(mUnit); @@ -1941,31 +1926,18 @@ void TMainWindow::InitWindow() ui->lineEditEmail->setEnabled(true); // Tab Measurements - delete ui->doubleSpinBoxBaseValue; - delete ui->doubleSpinBoxInSizes; - delete ui->doubleSpinBoxInHeights; - - delete ui->labelBaseValue; - ui->labelBaseValue = new QLabel(this); - - delete ui->labelInSizes; - ui->labelInSizes = new QLabel(this); - - delete ui->labelInHeights; - ui->labelInHeights = new QLabel(this); + HackWidget(&ui->doubleSpinBoxBaseValue); + HackWidget(&ui->doubleSpinBoxInSizes); + HackWidget(&ui->doubleSpinBoxInHeights); + HackWidget(&ui->labelBaseValue); + HackWidget(&ui->labelInSizes); + HackWidget(&ui->labelInHeights); // Tab Information - delete ui->labelBaseSize; - ui->labelBaseSize = new QLabel(this); - - delete ui->labelBaseSizeValue; - ui->labelBaseSizeValue = new QLabel(this); - - delete ui->labelBaseHeight; - ui->labelBaseHeight = new QLabel(this); - - delete ui->labelBaseHeightValue; - ui->labelBaseHeightValue = new QLabel(this); + HackWidget(&ui->labelBaseSize); + HackWidget(&ui->labelBaseSizeValue); + HackWidget(&ui->labelBaseHeight); + HackWidget(&ui->labelBaseHeightValue); ui->lineEditGivenName->setText(m->GivenName()); ui->lineEditFamilyName->setText(m->FamilyName()); @@ -3003,3 +2975,12 @@ void TMainWindow::InitGender(QComboBox *gender) gender->addItem(tr("male", "gender"), QVariant(static_cast(GenderType::Male))); gender->addItem(tr("female", "gender"), QVariant(static_cast(GenderType::Female))); } + +//--------------------------------------------------------------------------------------------------------------------- +template +void TMainWindow::HackWidget(T **widget) +{ + delete *widget; + *widget = new T(); + hackedWidgets.append(*widget); +} diff --git a/src/app/tape/tmainwindow.h b/src/app/tape/tmainwindow.h index e65d0e2a0..93fd342e5 100644 --- a/src/app/tape/tmainwindow.h +++ b/src/app/tape/tmainwindow.h @@ -153,7 +153,7 @@ private: enum { MaxRecentFiles = 5 }; QAction *recentFileActs[MaxRecentFiles]; QAction *separatorAct; - + QVector hackedWidgets; void SetupMenu(); void InitWindow(); @@ -205,6 +205,9 @@ private: void CreateWindowMenu(QMenu *menu); bool IgnoreLocking(int error, const QString &path); + + template + void HackWidget(T **widget); }; #endif // TMAINWINDOW_H