diff --git a/src/blackgui/views/viewbase.cpp b/src/blackgui/views/viewbase.cpp index aff2eb050..d15de7ee5 100644 --- a/src/blackgui/views/viewbase.cpp +++ b/src/blackgui/views/viewbase.cpp @@ -206,14 +206,14 @@ namespace BlackGui return CGuiUtility::mainApplicationWidget(); } - CStatusMessage CViewBaseNonTemplate::showFileLoadDialog() + CStatusMessage CViewBaseNonTemplate::showFileLoadDialog(const QString &directory) { - return this->ps_loadJson(); + return this->ps_loadJson(directory); } - CStatusMessage CViewBaseNonTemplate::showFileSaveDialog() + CStatusMessage CViewBaseNonTemplate::showFileSaveDialog(const QString &directory) { - return this->ps_saveJson(); + return this->ps_saveJson(directory); } IMenuDelegate *CViewBaseNonTemplate::setCustomMenu(IMenuDelegate *menu, bool nestPreviousMenu) @@ -1587,19 +1587,21 @@ namespace BlackGui } template - CStatusMessage CViewBase::ps_loadJson() + CStatusMessage CViewBase::ps_loadJson(const QString &directory) { const QString fileName = QFileDialog::getOpenFileName(nullptr, - tr("Load data file"), this->getFileDialogFileName(true), + tr("Load data file"), + directory.isEmpty() ? this->getFileDialogFileName(true) : directory, tr("swift (*.json *.txt)")); return this->loadJsonFile(fileName); } template - CStatusMessage CViewBase::ps_saveJson() + CStatusMessage CViewBase::ps_saveJson(const QString &directory) { const QString fileName = QFileDialog::getSaveFileName(nullptr, - tr("Save data file"), getFileDialogFileName(false), + tr("Save data file"), + directory.isEmpty() ? this->getFileDialogFileName(false) : directory, tr("swift (*.json *.txt)")); if (fileName.isEmpty()) { return CStatusMessage(this, CStatusMessage::SeverityDebug, "Save canceled", true); } const QString json(this->toJsonString()); // save as CVariant JSON diff --git a/src/blackgui/views/viewbase.h b/src/blackgui/views/viewbase.h index 9ddbf38d5..253781aef 100644 --- a/src/blackgui/views/viewbase.h +++ b/src/blackgui/views/viewbase.h @@ -273,10 +273,10 @@ namespace BlackGui QWidget *mainApplicationWindowWidget() const; //! Show file load dialog - BlackMisc::CStatusMessage showFileLoadDialog(); + BlackMisc::CStatusMessage showFileLoadDialog(const QString &directory = {}); //! Show file save dialog - BlackMisc::CStatusMessage showFileSaveDialog(); + BlackMisc::CStatusMessage showFileSaveDialog(const QString &directory = {}); //! Save file name (optional) void setSaveFileName(const QString &saveName) { m_saveFileName = saveName; } @@ -529,10 +529,10 @@ namespace BlackGui virtual void ps_rowSelected(const QModelIndex &index) = 0; //! Load JSON - virtual BlackMisc::CStatusMessage ps_loadJson() = 0; + virtual BlackMisc::CStatusMessage ps_loadJson(const QString &directory = {}) = 0; //! Save JSON - virtual BlackMisc::CStatusMessage ps_saveJson() = 0; + virtual BlackMisc::CStatusMessage ps_saveJson(const QString &directory = {}) = 0; //! Trigger reload from backend by signal requestUpdate(); void ps_triggerReload(); @@ -763,8 +763,8 @@ namespace BlackGui virtual void ps_clicked(const QModelIndex &index) override; virtual void ps_doubleClicked(const QModelIndex &index) override; virtual void ps_rowSelected(const QModelIndex &index) override; - virtual BlackMisc::CStatusMessage ps_loadJson() override; - virtual BlackMisc::CStatusMessage ps_saveJson() override; + virtual BlackMisc::CStatusMessage ps_loadJson(const QString &directory = {}) override; + virtual BlackMisc::CStatusMessage ps_saveJson(const QString &directory = {}) override; //! @} }; } // namespace diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index 4c6a259ef..2424e3656 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -506,10 +506,12 @@ namespace BlackMisc return d; } - int CAircraftModelList::removeModelWithString(const QString &modelString, Qt::CaseSensitivity sensitivity) + bool CAircraftModelList::removeModelWithString(const QString &modelString, Qt::CaseSensitivity sensitivity) { - if (modelString.isEmpty()) { return 0; } - return this->removeIf([&](const CAircraftModel & model) { return model.matchesModelString(modelString, sensitivity); }); + if (modelString.isEmpty()) { return false; } + if (this->isEmpty()) { return false; } + const int r = this->removeIf([&](const CAircraftModel & model) { return model.matchesModelString(modelString, sensitivity); }); + return r > 0; } int CAircraftModelList::removeModelsWithString(const QStringList &modelStrings, Qt::CaseSensitivity sensitivity) @@ -570,6 +572,14 @@ namespace BlackMisc return diff; } + bool CAircraftModelList::replaceOrAddModelWithString(const CAircraftModel &addOrReplaceModel, Qt::CaseSensitivity sensitivity) + { + bool r = false; + if (!this->isEmpty()) { r = this->removeModelWithString(addOrReplaceModel.getModelString(), sensitivity); } + this->push_back(addOrReplaceModel); + return r; + } + int CAircraftModelList::replaceOrAddModelsWithString(const CAircraftModelList &addOrReplaceList, Qt::CaseSensitivity sensitivity) { if (addOrReplaceList.isEmpty()) { return 0; } diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index 84868c38b..7d68df9c7 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -229,7 +229,7 @@ namespace BlackMisc //! Remove those models with given model strings //! \return number of elements removed - int removeModelWithString(const QString &modelString, Qt::CaseSensitivity sensitivity); + bool removeModelWithString(const QString &modelString, Qt::CaseSensitivity sensitivity); //! Remove those models with given model strings //! \return number of elements removed @@ -247,6 +247,10 @@ namespace BlackMisc //! \return number of elements removed int removeIfExcluded(); + //! Replace or add based on model string + //! \return element removed? + bool replaceOrAddModelWithString(const CAircraftModel &addOrReplaceModel, Qt::CaseSensitivity sensitivity); + //! Replace or add based on model string //! \return number of elements removed int replaceOrAddModelsWithString(const CAircraftModelList &addOrReplaceList, Qt::CaseSensitivity sensitivity);