From 4f69c7766fedf62a186299beca9d25107a8f064f Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 18 Jan 2019 13:46:19 +0200 Subject: [PATCH] Refactoring. Reduce code repetition. --HG-- branch : develop --- .../valentina/dialogs/dialogincrements.cpp | 150 ++++++------------ src/app/valentina/dialogs/dialogincrements.h | 5 +- 2 files changed, 48 insertions(+), 107 deletions(-) diff --git a/src/app/valentina/dialogs/dialogincrements.cpp b/src/app/valentina/dialogs/dialogincrements.cpp index 21ceb98ed..4fc501513 100644 --- a/src/app/valentina/dialogs/dialogincrements.cpp +++ b/src/app/valentina/dialogs/dialogincrements.cpp @@ -117,8 +117,8 @@ DialogIncrements::DialogIncrements(VContainer *data, VPattern *doc, QWidget *par connect(ui->tableWidgetPC, &QTableWidget::itemSelectionChanged, this, &DialogIncrements::ShowIncrementDetails); - InitIncrementVarTypeMenu(); - InitPreviewCalculationVarTypeMenu(); + ui->toolButtonAdd->setMenu(InitVarTypeMenu(ui->toolButtonAdd->menu(), true /*increments tab*/)); + ui->toolButtonAddPC->setMenu(InitVarTypeMenu(ui->toolButtonAddPC->menu(), false /*preview calculations tab*/)); connect(ui->toolButtonAdd, &QToolButton::clicked, this, &DialogIncrements::AddIncrement); connect(ui->toolButtonAddPC, &QToolButton::clicked, this, &DialogIncrements::AddIncrement); @@ -723,51 +723,65 @@ void DialogIncrements::ShowTableIncrementDetails(QTableWidget *table) } //--------------------------------------------------------------------------------------------------------------------- -void DialogIncrements::InitIncrementVarTypeMenu() +QMenu *DialogIncrements::InitVarTypeMenu(QMenu *menu, bool incrementTab) { - auto varTypeMenu = ui->toolButtonAdd->menu(); - if (varTypeMenu == nullptr) + if (menu == nullptr) { - varTypeMenu = new QMenu(this); + menu = new QMenu(this); } else { - varTypeMenu->clear(); + menu->clear(); } - QAction *action = varTypeMenu->addAction(tr("Increment")); - action->setData(true); // Increments tab + QAction *action = menu->addAction(tr("Increment")); + action->setData(incrementTab); // Increments tab connect(action, &QAction::triggered, this, &DialogIncrements::AddIncrement); - action = varTypeMenu->addAction(tr("Separator")); - action->setData(true); // Increments tab + action = menu->addAction(tr("Separator")); + action->setData(incrementTab); // Increments tab connect(action, &QAction::triggered, this, &DialogIncrements::AddSeparator); - ui->toolButtonAdd->setMenu(varTypeMenu); + return menu; } //--------------------------------------------------------------------------------------------------------------------- -void DialogIncrements::InitPreviewCalculationVarTypeMenu() +void DialogIncrements::AddNewIncrement(IncrementType type) { - auto varTypeMenu = ui->toolButtonAddPC->menu(); - if (varTypeMenu == nullptr) + qCDebug(vDialog, "Add new increment"); + + auto *action = qobject_cast(sender()); + if (action == nullptr) { - varTypeMenu = new QMenu(this); + return; + } + + const bool incrementMode = action->data().toBool(); + + QTableWidget *table = incrementMode ? ui->tableWidgetIncrement : ui->tableWidgetPC; + + const QString name = GetCustomName(); + qint32 currentRow = -1; + + if (table->currentRow() == -1) + { + currentRow = table->rowCount(); + incrementMode ? doc->AddEmptyIncrement(name, type) : doc->AddEmptyPreviewCalculation(name, type); } else { - varTypeMenu->clear(); + currentRow = table->currentRow()+1; + const QTableWidgetItem *nameField = table->item(table->currentRow(), 0); + + incrementMode ? doc->AddEmptyIncrementAfter(nameField->text(), name, type) : + doc->AddEmptyPreviewCalculationAfter(nameField->text(), name, type); } - QAction *action = varTypeMenu->addAction(tr("Preview calculation")); - action->setData(false); // Preview calculation tab - connect(action, &QAction::triggered, this, &DialogIncrements::AddIncrement); + hasChanges = true; + LocalUpdateTree(); - action = varTypeMenu->addAction(tr("Separator")); - action->setData(false); // Preview calculation tab - connect(action, &QAction::triggered, this, &DialogIncrements::AddSeparator); - - ui->toolButtonAddPC->setMenu(varTypeMenu); + table->selectRow(currentRow); + table->repaint(); // Force repain to fix paint artifacts on Mac OS X } //--------------------------------------------------------------------------------------------------------------------- @@ -897,89 +911,13 @@ void DialogIncrements::FillIncrementsTable(QTableWidget *table, */ void DialogIncrements::AddIncrement() { - qCDebug(vDialog, "Add new increment"); - - auto *button = qobject_cast(sender()); - auto *action = qobject_cast(sender()); - bool incrementMode = true; - - if (button == ui->toolButtonAdd || ((action != nullptr) && action->data().toBool())) - { - incrementMode = true; - } - else if (button == ui->toolButtonAddPC || ((action != nullptr) && not action->data().toBool())) - { - incrementMode = false; - } - else - { - return; - } - - QTableWidget *table = incrementMode ? ui->tableWidgetIncrement : ui->tableWidgetPC; - - const QString name = GetCustomName(); - qint32 currentRow = -1; - - if (table->currentRow() == -1) - { - currentRow = table->rowCount(); - incrementMode ? doc->AddEmptyIncrement(name) : doc->AddEmptyPreviewCalculation(name); - } - else - { - currentRow = table->currentRow()+1; - const QTableWidgetItem *nameField = table->item(table->currentRow(), 0); - - incrementMode ? doc->AddEmptyIncrementAfter(nameField->text(), name) : - doc->AddEmptyPreviewCalculationAfter(nameField->text(), name); - } - - hasChanges = true; - LocalUpdateTree(); - - table->selectRow(currentRow); - table->repaint(); // Force repain to fix paint artifacts on Mac OS X + AddNewIncrement(IncrementType::Increment); } //--------------------------------------------------------------------------------------------------------------------- void DialogIncrements::AddSeparator() { - qCDebug(vDialog, "Add new increment"); - - auto *action = qobject_cast(sender()); - if (action == nullptr) - { - return; - } - - const bool incrementMode = action->data().toBool(); - - QTableWidget *table = incrementMode ? ui->tableWidgetIncrement : ui->tableWidgetPC; - - const QString name = GetCustomName(); - qint32 currentRow = -1; - const IncrementType type = IncrementType::Separator; - - if (table->currentRow() == -1) - { - currentRow = table->rowCount(); - incrementMode ? doc->AddEmptyIncrement(name, type) : doc->AddEmptyPreviewCalculation(name, type); - } - else - { - currentRow = table->currentRow()+1; - const QTableWidgetItem *nameField = table->item(table->currentRow(), 0); - - incrementMode ? doc->AddEmptyIncrementAfter(nameField->text(), name, type) : - doc->AddEmptyPreviewCalculationAfter(nameField->text(), name, type); - } - - hasChanges = true; - LocalUpdateTree(); - - table->selectRow(currentRow); - table->repaint(); // Force repain to fix paint artifacts on Mac OS X + AddNewIncrement(IncrementType::Separator); } //--------------------------------------------------------------------------------------------------------------------- @@ -1451,8 +1389,10 @@ void DialogIncrements::changeEvent(QEvent *event) { // retranslate designer form (single inheritance approach) ui->retranslateUi(this); - InitIncrementVarTypeMenu(); - InitPreviewCalculationVarTypeMenu(); + + ui->toolButtonAdd->setMenu(InitVarTypeMenu(ui->toolButtonAdd->menu(), true /*increments tab*/)); + ui->toolButtonAddPC->setMenu(InitVarTypeMenu(ui->toolButtonAddPC->menu(), false /*preview calculations tab*/)); + FullUpdateFromFile(); } // remember to call base class implementation diff --git a/src/app/valentina/dialogs/dialogincrements.h b/src/app/valentina/dialogs/dialogincrements.h index 23e57d31c..56721fee8 100644 --- a/src/app/valentina/dialogs/dialogincrements.h +++ b/src/app/valentina/dialogs/dialogincrements.h @@ -141,8 +141,9 @@ private: void ShowTableIncrementDetails(QTableWidget *table); - void InitIncrementVarTypeMenu(); - void InitPreviewCalculationVarTypeMenu(); + QMenu *InitVarTypeMenu(QMenu *menu, bool incrementTab); + + void AddNewIncrement(IncrementType type); }; #endif // DIALOGINCREMENTS_H