diff --git a/companion/src/mdichild.cpp b/companion/src/mdichild.cpp index b225a3c10f9..24fb61bf187 100644 --- a/companion/src/mdichild.cpp +++ b/companion/src/mdichild.cpp @@ -713,7 +713,6 @@ void MdiChild::updateTitle() void MdiChild::setModified() { - radioData.models[getCurrentModel()].modelUpdated = true; refresh(); setWindowModified(true); emit modified(); @@ -741,7 +740,6 @@ void MdiChild::checkAndInitModel(int row) { if (row < (int)radioData.models.size() && radioData.models[row].isEmpty()) { radioData.models[row].setDefaultValues(row, radioData.generalSettings); - setModified(); } } @@ -829,9 +827,8 @@ int MdiChild::newModel(int modelIndex) if (countUsedModels() == 1) { radioData.setCurrentModel(modelIndex); } - + setModelModified(modelIndex); setSelectedModel(modelIndex); - setModified(); if (isNewModel) { if (g.newModelAction() == AppData::MODEL_ACT_WIZARD) @@ -990,6 +987,7 @@ void MdiChild::pasteModelData(const QMimeData * mimeData, const QModelIndex row, strcpy(radioData.models[modelIdx].filename, radioData.getNextModelFilename().toStdString().c_str()); lastSelectedModel = modelIdx; // after refresh the last pasted model will be selected modified = true; + setModelModified(modelIdx, false); // avoid unnecessary refreshes if (doMove) { deletesList.append(origMdlIdx); removeModelFromCutList(origMdlIdx); @@ -1178,7 +1176,7 @@ void MdiChild::openModelWizard(int row) int res = wizard->exec(); if (res == QDialog::Accepted && wizard->mix.complete /*TODO rather test the exec() result?*/) { radioData.models[row] = wizard->mix; - setModified(); + setModelModified(row); setSelectedModel(row); } } @@ -1203,7 +1201,7 @@ void MdiChild::openModelEditWindow(int row) ModelEdit * t = new ModelEdit(this, radioData, (row), firmware); gStopwatch.report("ModelEdit created"); t->setWindowTitle(tr("Editing model %1: ").arg(row+1) + QString(model.name) + QString(" (%1)").arg(userFriendlyCurrentFile())); - connect(t, &ModelEdit::modified, this, &MdiChild::setModified); + connect(t, &ModelEdit::modified, this, &MdiChild::setCurrentModelModified); gStopwatch.report("STARTING MODEL EDIT"); t->show(); QApplication::restoreOverrideCursor(); @@ -1673,6 +1671,8 @@ void MdiChild::openModelTemplate(int row) for (int i = 0; i < CPN_MAX_MODULES; i++) { radioData.models[row].moduleData[i].modelId = row + 1; } + + setModelModified(row); } void MdiChild::openModelPrompt(int row) @@ -1827,3 +1827,17 @@ void MdiChild::exportSelectedModels() { exportModels(getSelectedModels()); } + +void MdiChild::setCurrentModelModified() +{ + setModelModified(getCurrentModel()); +} + +void MdiChild::setModelModified(const int modelIndex, bool cascade) +{ + if (modelIndex >= 0 && modelIndex < (int)radioData.models.size()) { + radioData.models[modelIndex].modelUpdated = true; + if (cascade) + setModified(); + } +} diff --git a/companion/src/mdichild.h b/companion/src/mdichild.h index e700a0d3a0e..76f3979b597 100644 --- a/companion/src/mdichild.h +++ b/companion/src/mdichild.h @@ -115,6 +115,7 @@ class MdiChild : public QWidget void updateNavigation(); void updateTitle(); void setModified(); + void setCurrentModelModified(); void retranslateUi(); void showModelsListContextMenu(const QPoint & pos); void showLabelsContextMenu(const QPoint & pos); @@ -228,6 +229,7 @@ class MdiChild : public QWidget const quint16 stateDataVersion; AbstractStaticItemModel* modelSortOrderItemModel; QComboBox* cboModelSortOrder; + void setModelModified(const int modelIndex, bool cascade = true); }; // This will draw the drop indicator across all columns of a model View (vs. in just one column), and lets us make the indicator more obvious.