refs #568, improved validation and handling

* invalid models can be highlighted on stash
* selection mode can be toggled between single/multi selection (where applicable)
* color for highlighting can be set
* finetuning of menus
This commit is contained in:
Klaus Basan
2016-01-10 02:53:12 +01:00
parent 11ee49a382
commit b4dc21eeb4
15 changed files with 188 additions and 63 deletions

View File

@@ -363,18 +363,18 @@ namespace BlackGui
void CDbMappingComponent::ps_onStashedModelsChanged()
{
bool hlvp = this->ui->tvp_AircraftModelsForVPilot->derivedModel()->highlightGivenModelStrings();
bool hlom = this->ui->tvp_OwnAircraftModels->derivedModel()->highlightGivenModelStrings();
bool hlvp = this->ui->tvp_AircraftModelsForVPilot->derivedModel()->highlightModelStrings();
bool hlom = this->ui->tvp_OwnAircraftModels->derivedModel()->highlightModelStrings();
bool highlight = hlom || hlvp;
if (!highlight) { return; }
const QStringList stashedModels(this->ui->comp_StashAircraft->getStashedModelStrings());
if (hlvp)
{
this->ui->tvp_AircraftModelsForVPilot->derivedModel()->setHighlightModelsStrings(stashedModels);
this->ui->tvp_AircraftModelsForVPilot->derivedModel()->setHighlightModelStrings(stashedModels);
}
if (hlom)
{
this->ui->tvp_OwnAircraftModels->derivedModel()->setHighlightModelsStrings(stashedModels);
this->ui->tvp_OwnAircraftModels->derivedModel()->setHighlightModelStrings(stashedModels);
}
}
@@ -537,9 +537,10 @@ namespace BlackGui
void CDbMappingComponent::CMappingSimulatorModelMenu::customMenu(QMenu &menu) const
{
CSimulatorInfo sims = CSimulatorInfo::getLocallyInstalledSimulators();
bool empty = sims.isNoSimulator() || sims.isUnspecified();
if (!empty)
bool noSims = sims.isNoSimulator() || sims.isUnspecified();
if (!noSims)
{
if (!menu.isEmpty()) { menu.addSeparator(); }
QMenu *load = menu.addMenu(CIcons::appModels16(), "Load installed models");
QAction *a = nullptr;
CDbMappingComponent *mapComp = qobject_cast<CDbMappingComponent *>(this->parent());
@@ -565,7 +566,6 @@ namespace BlackGui
a = load->addAction(CIcons::appModels16(), "XPlane models", mapComp, SLOT(ps_requestSimulatorModels()));
a->setData(QVariant(static_cast<int>(CSimulatorInfo::XPLANE)));
}
menu.addSeparator();
}
this->nestedCustomMenu(menu);
}
@@ -578,8 +578,8 @@ namespace BlackGui
bool canUseVPilot = mappingComponent()->withVPilot();
if (canUseVPilot)
{
if (!menu.isEmpty()) { menu.addSeparator(); }
menu.addAction(CIcons::appMappings16(), "Load vPilot Rules", mapComp, SLOT(ps_loadVPilotData()));
menu.addSeparator();
}
this->nestedCustomMenu(menu);
}

View File

@@ -40,7 +40,7 @@ namespace BlackGui
// configure view
this->ui->tvp_AircraftModel->setFilterWidget(this->ui->filter_AircraftModelFilter);
this->ui->tvp_AircraftModel->allowDragDropValueObjects(true, false);
this->ui->tvp_AircraftModel->menuAddItems(CAircraftModelView::MenuStashModels);
this->ui->tvp_AircraftModel->menuAddItems(CAircraftModelView::MenuCanStashModels);
}
CDbModelComponent::~CDbModelComponent()

View File

@@ -47,7 +47,9 @@ namespace BlackGui
connect(this->ui->pb_Livery, &QPushButton::pressed, this, &CDbStashComponent::ps_copyOverPartsToSelected);
connect(this->ui->pb_Distributor, &QPushButton::pressed, this, &CDbStashComponent::ps_copyOverPartsToSelected);
ui->tvp_StashAircraftModels->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows);
ui->tvp_StashAircraftModels->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows | CAircraftModelView::MenuHighlightInvalid);
ui->tvp_StashAircraftModels->setHighlightModelStrings(true);
ui->tvp_StashAircraftModels->setHighlightModelStringsColor(Qt::red);
this->enableButtonRow();
}
@@ -241,30 +243,41 @@ namespace BlackGui
Q_UNUSED(skippedModels);
}
CStatusMessageList CDbStashComponent::validate() const
CStatusMessageList CDbStashComponent::validate(CAircraftModelList &invalidModels) const
{
if (this->ui->tvp_StashAircraftModels->isEmpty()) {return CStatusMessageList(); }
CAircraftModelList models(getSelectedOrAllModels());
if (models.isEmpty()) { return CStatusMessageList(); }
const CStatusMessageList msgs(models.validateForPublishing());
if (!msgs.isEmpty()) { return msgs; }
return CStatusMessageList(
const CStatusMessageList msgs(models.validateForPublishing(invalidModels));
// OK?
if (msgs.isEmpty())
{
CStatusMessage(validationCats(), CStatusMessage::SeverityInfo, QString("No errors in %1 model(s)").arg(models.size()))
});
return CStatusMessageList(
{
CStatusMessage(validationCats(), CStatusMessage::SeverityInfo, QString("No errors in %1 model(s)").arg(models.size()))
});
}
else
{
return msgs;
}
}
bool CDbStashComponent::validateAndDisplay(bool displayInfo)
{
const CStatusMessageList msgs(this->validate());
CAircraftModelList invalidModels;
const CStatusMessageList msgs(this->validate(invalidModels));
if (msgs.hasWarningOrErrorMessages())
{
this->showMessages(msgs);
this->ui->tvp_StashAircraftModels->setHighlightModelStrings(invalidModels.getModelStrings(false));
return false;
}
else
{
this->ui->tvp_StashAircraftModels->setHighlightModelStrings(QStringList());
if (displayInfo)
{
QString no = QString::number(this->getStashedModelsCount());

View File

@@ -139,7 +139,7 @@ namespace BlackGui
bool showMessage(const BlackMisc::CStatusMessage &msg, int timeoutMs = -1);
//! Validate
BlackMisc::CStatusMessageList validate() const;
BlackMisc::CStatusMessageList validate(BlackMisc::Simulation::CAircraftModelList &invalidModels) const;
//! Validate and display info messages
bool validateAndDisplay(bool displayInfo = false);