Ref T362, Ref T348 model/view adjustments

* remove model string
* start directory for file dialog
This commit is contained in:
Klaus Basan
2018-09-21 01:55:56 +02:00
parent ebc2ffe480
commit 5e99e557c6
4 changed files with 34 additions and 18 deletions

View File

@@ -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 <class ModelClass, class ContainerType, class ObjectType>
CStatusMessage CViewBase<ModelClass, ContainerType, ObjectType>::ps_loadJson()
CStatusMessage CViewBase<ModelClass, ContainerType, ObjectType>::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 <class ModelClass, class ContainerType, class ObjectType>
CStatusMessage CViewBase<ModelClass, ContainerType, ObjectType>::ps_saveJson()
CStatusMessage CViewBase<ModelClass, ContainerType, ObjectType>::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

View File

@@ -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

View File

@@ -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; }

View File

@@ -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);