Fixed quick mapping wizard

* preselect rows if data are already from DB
* guess simulator and filter distributors by simulator
* allow to override simulator data (checkboxes)
* improved validation messages
This commit is contained in:
Klaus Basan
2019-03-23 19:58:57 +01:00
committed by Mat Sutcliffe
parent 5eeb29bafe
commit de4adda779
3 changed files with 115 additions and 15 deletions

View File

@@ -16,8 +16,11 @@
#include "blackgui/uppercasevalidator.h" #include "blackgui/uppercasevalidator.h"
#include "blackgui/guiapplication.h" #include "blackgui/guiapplication.h"
#include "blackgui/guiutility.h" #include "blackgui/guiutility.h"
#include "blackcore/webdataservices.h" #include "blackcore/context/contextsimulator.h"
#include "blackcore/db/databasewriter.h" #include "blackcore/db/databasewriter.h"
#include "blackcore/webdataservices.h"
#include <QStringBuilder>
using namespace BlackCore; using namespace BlackCore;
using namespace BlackCore::Db; using namespace BlackCore::Db;
@@ -42,6 +45,8 @@ namespace BlackGui
ui->selector_AircraftIcaoCode->displayWithIcaoDescription(false); ui->selector_AircraftIcaoCode->displayWithIcaoDescription(false);
ui->selector_AircraftIcaoCode->displayMode(CDbAircraftIcaoSelectorComponent::DisplayCompleterString); ui->selector_AircraftIcaoCode->displayMode(CDbAircraftIcaoSelectorComponent::DisplayCompleterString);
ui->selector_AirlineIcaoCode->displayWithIcaoDescription(false); ui->selector_AirlineIcaoCode->displayWithIcaoDescription(false);
ui->selector_Simulator->setNoSelectionMeansAll(false);
ui->selector_Simulator->setRememberSelection(false);
ui->editor_AircraftModel->allowDrop(false); ui->editor_AircraftModel->allowDrop(false);
ui->editor_AircraftModel->setReadOnly(true); ui->editor_AircraftModel->setReadOnly(true);
CGuiUtility::checkBoxReadOnly(ui->cb_Military, true); CGuiUtility::checkBoxReadOnly(ui->cb_Military, true);
@@ -57,6 +62,11 @@ namespace BlackGui
ui->comp_Log->showFilterDialog(); // filter for log normally not needed, so dialog (not bar) ui->comp_Log->showFilterDialog(); // filter for log normally not needed, so dialog (not bar)
if (this->button(BackButton)) { this->button(BackButton)->setMinimumWidth(75); }
if (this->button(NextButton)) { this->button(NextButton)->setMinimumWidth(75); }
if (this->button(CancelButton)) { this->button(CancelButton)->setMinimumWidth(75); }
if (this->button(FinishButton)) { this->button(FinishButton)->setMinimumWidth(75); }
// init if data already available // init if data already available
this->onWebDataRead(); this->onWebDataRead();
} }
@@ -66,7 +76,7 @@ namespace BlackGui
const CLogCategoryList &CDbQuickMappingWizard::getLogCategories() const CLogCategoryList &CDbQuickMappingWizard::getLogCategories()
{ {
static const BlackMisc::CLogCategoryList cats { CLogCategory::mapping(), CLogCategory::guiComponent() }; static const CLogCategoryList cats { CLogCategory::mapping(), CLogCategory::guiComponent() };
return cats; return cats;
} }
@@ -84,19 +94,19 @@ namespace BlackGui
} }
} }
void CDbQuickMappingWizard::presetAircraftIcao(const BlackMisc::Aviation::CAircraftIcaoCode &aircraftIcao) void CDbQuickMappingWizard::presetAircraftIcao(const CAircraftIcaoCode &aircraftIcao)
{ {
this->clear(); this->clear();
ui->selector_AircraftIcaoCode->setAircraftIcao(aircraftIcao); ui->selector_AircraftIcaoCode->setAircraftIcao(aircraftIcao);
ui->selector_AircraftIcaoCode->setFocus(); ui->selector_AircraftIcaoCode->setFocus();
} }
void CDbQuickMappingWizard::presetModel(const BlackMisc::Simulation::CAircraftModel &model) void CDbQuickMappingWizard::presetModel(const CAircraftModel &model)
{ {
QString ms = model.getModelString(); QString ms = model.getModelString();
if (!model.getDescription().isEmpty()) if (!model.getDescription().isEmpty())
{ {
ms += " (" + model.getDescription() + ")"; ms += u" (" % model.getDescription() % u")";
} }
this->presetAircraftIcao(model.getAircraftIcaoCode()); this->presetAircraftIcao(model.getAircraftIcaoCode());
@@ -131,7 +141,7 @@ namespace BlackGui
{ {
ui->comp_AircraftIcao->view()->sortByPropertyIndex(CAircraftIcaoCode::IndexRank); ui->comp_AircraftIcao->view()->sortByPropertyIndex(CAircraftIcaoCode::IndexRank);
ui->comp_AircraftIcao->filter(icao); ui->comp_AircraftIcao->filter(icao);
ui->comp_AircraftIcao->view()->selectDbKey(icao.getDbKey()); ui->comp_AircraftIcao->selectAircraftIcao(icao);
} }
} }
@@ -156,19 +166,39 @@ namespace BlackGui
} }
} }
void CDbQuickMappingWizard::setDistributorFilter()
{
const CSimulatorInfo sims = this->guessSimulator();
ui->comp_Distributor->filterBySimulator(sims);
if (m_model.getDistributor().isLoadedFromDb())
{
const bool s = ui->comp_Distributor->selectDistributor(m_model.getDistributor());
Q_UNUSED(s);
}
}
CLivery CDbQuickMappingWizard::getFirstSelectedOrDefaultLivery() const CLivery CDbQuickMappingWizard::getFirstSelectedOrDefaultLivery() const
{ {
return ui->comp_Livery->view()->firstSelectedOrDefaultObject(); const CLivery l = ui->comp_Livery->view()->firstSelectedOrDefaultObject();
if (l.isLoadedFromDb()) { return l; }
if (m_model.getLivery().isLoadedFromDb()) { return m_model.getLivery(); }
return l;
} }
CAircraftIcaoCode CDbQuickMappingWizard::getFirstSelectedOrDefaultAircraftIcao() const CAircraftIcaoCode CDbQuickMappingWizard::getFirstSelectedOrDefaultAircraftIcao() const
{ {
return ui->comp_AircraftIcao->view()->firstSelectedOrDefaultObject(); const CAircraftIcaoCode icao = ui->comp_AircraftIcao->view()->firstSelectedOrDefaultObject();
if (icao.isLoadedFromDb()) { return icao; }
if (m_model.getAircraftIcaoCode().isLoadedFromDb()) { return m_model.getAircraftIcaoCode(); }
return icao;
} }
BlackMisc::Simulation::CDistributor CDbQuickMappingWizard::getFirstSelectedOrDefaultDistributor() const BlackMisc::Simulation::CDistributor CDbQuickMappingWizard::getFirstSelectedOrDefaultDistributor() const
{ {
return ui->comp_Distributor->view()->firstSelectedOrDefaultObject(); const CDistributor dist = ui->comp_Distributor->view()->firstSelectedOrDefaultObject();
if (dist.isLoadedFromDb()) { return dist; }
if (m_model.getDistributor().isLoadedFromDb()) { return m_model.getDistributor(); }
return dist;
} }
void CDbQuickMappingWizard::onWebDataRead() void CDbQuickMappingWizard::onWebDataRead()
@@ -226,8 +256,15 @@ namespace BlackGui
} }
} }
break; break;
case PageDistributorSelect:
{
this->setDistributorFilter();
}
break;
case PageConfirmation: case PageConfirmation:
{ {
const CSimulatorInfo sims = this->guessSimulator();
ui->selector_Simulator->setValue(sims);
ui->editor_AircraftModel->setLivery(this->getFirstSelectedOrDefaultLivery()); ui->editor_AircraftModel->setLivery(this->getFirstSelectedOrDefaultLivery());
ui->editor_AircraftModel->setDistributor(this->getFirstSelectedOrDefaultDistributor()); ui->editor_AircraftModel->setDistributor(this->getFirstSelectedOrDefaultDistributor());
ui->editor_AircraftModel->setAircraftIcao(this->getFirstSelectedOrDefaultAircraftIcao()); ui->editor_AircraftModel->setAircraftIcao(this->getFirstSelectedOrDefaultAircraftIcao());
@@ -237,7 +274,7 @@ namespace BlackGui
ui->fr_ConfirmationStillErrors->setVisible(!errorFree); ui->fr_ConfirmationStillErrors->setVisible(!errorFree);
if (!errorFree) if (!errorFree)
{ {
ui->editor_AircraftModel->showOverlayMessages(msgs); ui->wp6_Confirmation->showOverlayMessages(msgs);
} }
} }
break; break;
@@ -271,12 +308,20 @@ namespace BlackGui
case PageConfirmation: case PageConfirmation:
{ {
const CStatusMessageList msgs(this->validateData()); const CStatusMessageList msgs(this->validateData());
if (!msgs.isEmpty())
{
ui->wp6_Confirmation->showOverlayMessages(msgs);
}
ok = !msgs.hasWarningOrErrorMessages(); ok = !msgs.hasWarningOrErrorMessages();
} }
break; break;
case PageCredentials: case PageCredentials:
{ {
ok = ui->comp_DbLogin->isUserAuthenticated(); ok = ui->comp_DbLogin->isUserAuthenticated();
if (!ok)
{
ui->wp7_Credentials->showOverlayHTMLMessage("No user credentials, read login hints!", 10 * 1000);
}
} }
break; break;
default: default:
@@ -297,21 +342,45 @@ namespace BlackGui
const CStatusMessage error(this, CStatusMessage::SeverityError, u"Missing model string", true); const CStatusMessage error(this, CStatusMessage::SeverityError, u"Missing model string", true);
msgs.push_back(error); msgs.push_back(error);
} }
const CStatusMessage vMsg = ui->selector_Simulator->getValue().validateSimulatorsForModel();
if (vMsg.isWarningOrAbove())
{
msgs.push_back(vMsg);
}
return msgs; return msgs;
} }
void CDbQuickMappingWizard::consolidateModel() void CDbQuickMappingWizard::consolidateModelWithUIData()
{ {
CAircraftModel model = m_model; CAircraftModel model = m_model;
model.setAircraftIcaoCode(ui->editor_AircraftModel->getAircraftIcao()); model.setAircraftIcaoCode(ui->editor_AircraftModel->getAircraftIcao());
model.setDistributor(ui->editor_AircraftModel->getDistributor()); model.setDistributor(ui->editor_AircraftModel->getDistributor());
model.setLivery(ui->editor_AircraftModel->getLivery()); model.setLivery(ui->editor_AircraftModel->getLivery());
model.setSimulator(ui->selector_Simulator->getValue());
m_model = model; m_model = model;
} }
CSimulatorInfo CDbQuickMappingWizard::guessSimulator() const
{
CSimulatorInfo sims = m_model.getSimulator();
if (!sims.isAnySimulator() && m_model.hasModelString() && sGui && sGui->hasWebDataServices())
{
const CAircraftModel m = sGui->getWebDataServices()->getModelForModelString(m_model.getModelString());
if (m.isLoadedFromDb()) { sims = m.getSimulator(); }
}
if (sGui && !sGui->isShuttingDown() && sGui->getIContextSimulator() && sGui->getIContextSimulator()->isSimulatorAvailable())
{
sims.add(sGui->getIContextSimulator()->getSimulatorPluginInfo().getSimulator());
}
return sims;
}
void CDbQuickMappingWizard::writeModelToDb() void CDbQuickMappingWizard::writeModelToDb()
{ {
this->consolidateModel(); this->consolidateModelWithUIData();
const CStatusMessageList msgs = sGui->getWebDataServices()->getDatabaseWriter()->asyncPublishModel(m_model); const CStatusMessageList msgs = sGui->getWebDataServices()->getDatabaseWriter()->asyncPublishModel(m_model);
ui->comp_Log->appendStatusMessagesToList(msgs); ui->comp_Log->appendStatusMessagesToList(msgs);
} }
@@ -336,7 +405,7 @@ namespace BlackGui
{ {
ui->cb_Military->setChecked(icao.isMilitary()); ui->cb_Military->setChecked(icao.isMilitary());
// already trigger sorting, if sorting is already correct it does nothing // already trigger sorting, if sorting is already correct it does nothing
// avoids issue with later selection overridden by sorting/filtering // avoids issue with later selection overidden by sorting/filtering
this->setAircraftIcaoFilter(); this->setAircraftIcaoFilter();
} }
} }

View File

@@ -82,6 +82,9 @@ namespace BlackGui
//! Set color filter //! Set color filter
void setColorFilter(); void setColorFilter();
//! Set distributor filter
void setDistributorFilter();
//! Livery assigned //! Livery assigned
BlackMisc::Aviation::CLivery getFirstSelectedOrDefaultLivery() const; BlackMisc::Aviation::CLivery getFirstSelectedOrDefaultLivery() const;
@@ -95,7 +98,10 @@ namespace BlackGui
BlackMisc::CStatusMessageList validateData() const; BlackMisc::CStatusMessageList validateData() const;
//! Consolidate model data //! Consolidate model data
void consolidateModel(); void consolidateModelWithUIData();
//! Guess simulator
BlackMisc::Simulation::CSimulatorInfo guessSimulator() const;
//! Write the model to DB //! Write the model to DB
void writeModelToDb(); void writeModelToDb();

View File

@@ -427,7 +427,7 @@
<string>Distributor / package</string> <string>Distributor / package</string>
</property> </property>
<property name="subTitle"> <property name="subTitle">
<string>Select the correct package / distributor</string> <string>Select the correct package / distributor. HINT: Use 'ZZZZ' if there is no corresponding simulator-</string>
</property> </property>
<layout class="QVBoxLayout" name="vl_DistributorPage"> <layout class="QVBoxLayout" name="vl_DistributorPage">
<item> <item>
@@ -450,6 +450,25 @@
<string>Check if the data are correct</string> <string>Check if the data are correct</string>
</property> </property>
<layout class="QVBoxLayout" name="vl_ConfirmationPage"> <layout class="QVBoxLayout" name="vl_ConfirmationPage">
<item>
<widget class="QGroupBox" name="gb_SupportedSimulators">
<property name="title">
<string>Supported simulators</string>
</property>
<layout class="QHBoxLayout" name="hl_SupportedSimulators">
<item alignment="Qt::AlignLeft">
<widget class="BlackGui::Components::CSimulatorSelector" name="selector_Simulator">
<property name="minimumSize">
<size>
<width>175</width>
<height>20</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item> <item>
<widget class="BlackGui::Editors::CAircraftModelForm" name="editor_AircraftModel"> <widget class="BlackGui::Editors::CAircraftModelForm" name="editor_AircraftModel">
<property name="minimumSize"> <property name="minimumSize">
@@ -658,6 +677,12 @@
<header>blackgui/overlaymessagesframe.h</header> <header>blackgui/overlaymessagesframe.h</header>
<container>1</container> <container>1</container>
</customwidget> </customwidget>
<customwidget>
<class>BlackGui::Components::CSimulatorSelector</class>
<extends>QFrame</extends>
<header>blackgui/components/simulatorselector.h</header>
<container>1</container>
</customwidget>
</customwidgets> </customwidgets>
<tabstops> <tabstops>
<tabstop>le_ModelString</tabstop> <tabstop>le_ModelString</tabstop>