From f98f63fa5589e1aeb2fa2dd917cd3bad81e861c6 Mon Sep 17 00:00:00 2001 From: Kelly Byrd Date: Fri, 3 Feb 2017 01:10:51 -0800 Subject: [PATCH] Issue #4224: Implement "duplicate model" in Companion (#4367) --- companion/src/mdichild.cpp | 24 +++++++++++++++++++++--- companion/src/mdichild.h | 1 + 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/companion/src/mdichild.cpp b/companion/src/mdichild.cpp index b4a76ad74..c46931cc2 100644 --- a/companion/src/mdichild.cpp +++ b/companion/src/mdichild.cpp @@ -128,7 +128,7 @@ void MdiChild::showModelsListContextMenu(const QPoint & pos) contextMenu.addAction(CompanionIcon("copy.png"), tr("&Copy"), this, SLOT(copy()), tr("Ctrl+C")); contextMenu.addAction(CompanionIcon("cut.png"), tr("&Cut"), this, SLOT(cut()), tr("Ctrl+X")); contextMenu.addAction(CompanionIcon("paste.png"), tr("&Paste"), this, SLOT(paste()), tr("Ctrl+V"))->setEnabled(hasData); - contextMenu.addAction(CompanionIcon("duplicate.png"), tr("D&uplicate"), this, SLOT(duplicate()), tr("Ctrl+U")); + contextMenu.addAction(CompanionIcon("duplicate.png"), tr("D&uplicate"), this, SLOT(modelDuplicate()), tr("Ctrl+U")); contextMenu.addSeparator(); contextMenu.addAction(CompanionIcon("currentmodel.png"), tr("&Use as default"), this, SLOT(setDefault())); contextMenu.addSeparator(); @@ -455,10 +455,15 @@ void MdiChild::modelAdd() ModelData model; model.category = categoryIndex; model.used = true; - sprintf(model.filename, "model%lu.bin", (long unsigned)radioData.models.size()+1); + strcpy(model.filename, radioData.getNextModelFilename().toStdString().c_str()); strcpy(model.name, qPrintable(tr("New model"))); radioData.models.push_back(model); - radioData.setCurrentModel(radioData.models.size() - 1); + + // Only set the default model if we just added the first one. + int newModelIndex = radioData.models.size() - 1; + if (newModelIndex == 0) { + radioData.setCurrentModel(newModelIndex); + } setModified(); } @@ -480,6 +485,19 @@ void MdiChild::modelEdit() gStopwatch.report("ModelEdit shown"); } +void MdiChild::modelDuplicate() +{ + int srcModelIndex = getCurrentRow(); + if (srcModelIndex < 0) { + return; + } + + ModelData model(radioData.models[srcModelIndex]); + strcpy(model.filename, radioData.getNextModelFilename().toStdString().c_str()); + radioData.models.push_back(model); + setModified(); +} + void MdiChild::setDefault() { int row = getCurrentModel(); diff --git a/companion/src/mdichild.h b/companion/src/mdichild.h index a39ffac81..bad5bc0e6 100644 --- a/companion/src/mdichild.h +++ b/companion/src/mdichild.h @@ -80,6 +80,7 @@ class MdiChild : public QWidget void categoryDelete(); void modelAdd(); void modelEdit(); + void modelDuplicate(); void wizardEdit(); void openModelEditWindow(); bool loadBackup();