6 #include <QStringBuilder>
8 #include "ui_dbquickmappingwizard.h"
25 using namespace swift::config;
27 using namespace swift::misc::aviation;
28 using namespace swift::misc::simulation;
32 CDbQuickMappingWizard::CDbQuickMappingWizard(QWidget *parent) : QWizard(parent), ui(new Ui::
CDbQuickMappingWizard)
34 Q_ASSERT_X(
sGui, Q_FUNC_INFO,
"Missing sGui");
39 ui->selector_AircraftIcaoCode->setFocus();
40 ui->selector_AircraftIcaoCode->displayWithIcaoDescription(
false);
41 ui->selector_AircraftIcaoCode->displayMode(CDbAircraftIcaoSelectorComponent::DisplayCompleterString);
42 ui->selector_AirlineIcaoCode->displayWithIcaoDescription(
false);
43 ui->selector_Simulator->setNoSelectionMeansAll(
false);
44 ui->selector_Simulator->setRememberSelection(
false);
45 ui->editor_AircraftModel->allowDrop(
false);
46 ui->editor_AircraftModel->setReadOnly(
true);
51 &CDbQuickMappingWizard::onWebDataRead, Qt::QueuedConnection);
53 &CDbQuickMappingWizard::onPublishedModels, Qt::QueuedConnection);
55 connect(
this, &CDbQuickMappingWizard::currentIdChanged,
this, &CDbQuickMappingWizard::currentWizardPageChanged);
57 &CDbQuickMappingWizard::onAircraftSelected, Qt::QueuedConnection);
59 &CDbQuickMappingWizard::onAirlineSelected, Qt::QueuedConnection);
61 &CDbQuickMappingWizard::onAirlineSelected, Qt::QueuedConnection);
63 ui->comp_Log->showFilterDialog();
67 this->onWebDataRead();
74 static const QStringList cats { CLogCategories::mapping(), CLogCategories::guiComponent() };
80 Qt::Key key =
static_cast<Qt::Key
>(
event->key());
81 if (key == Qt::Key_Enter || key == Qt::Key_Return)
86 else { QWizard::keyPressEvent(event); }
92 ui->selector_AircraftIcaoCode->setAircraftIcao(aircraftIcao);
93 ui->selector_AircraftIcaoCode->setFocus();
105 ui->le_ModelString->setText(model.
hasModelString() ? ms :
"<no model string>");
106 ui->selector_AircraftIcaoCode->setFocus();
111 ui->comp_ColorSearch->presetColorLivery(livery);
112 ui->rb_ColorLivery->setChecked(
true);
121 ui->editor_AircraftModel->clear();
122 ui->comp_Log->clear();
126 void CDbQuickMappingWizard::setAircraftIcaoFilter()
129 if (icao.isLoadedFromDb())
131 ui->comp_AircraftIcao->view()->sortByPropertyIndex(CAircraftIcaoCode::IndexRank);
132 ui->comp_AircraftIcao->filter(icao);
133 ui->comp_AircraftIcao->selectAircraftIcao(icao);
137 void CDbQuickMappingWizard::setAirlineIcaoFilter()
139 const CAirlineIcaoCode icao(ui->selector_AirlineIcaoCode->getAirlineIcao());
140 if (icao.isLoadedFromDb())
142 ui->comp_Livery->view()->sortByPropertyIndex(CLivery::IndexDbIntegerKey);
143 ui->comp_Livery->filterByAirline(icao);
144 ui->comp_Livery->view()->selectRow(0);
148 void CDbQuickMappingWizard::setColorFilter()
150 const CLivery colorLivery(ui->comp_ColorSearch->getLivery());
151 if (colorLivery.isLoadedFromDb())
153 ui->comp_Livery->filter(colorLivery);
154 ui->comp_Livery->view()->selectRow(0);
158 void CDbQuickMappingWizard::setDistributorFilter()
161 ui->comp_Distributor->filterBySimulator(sims);
164 const bool s = ui->comp_Distributor->selectDistributor(m_model.
getDistributor());
169 CLivery CDbQuickMappingWizard::getFirstSelectedOrDefaultLivery()
const
171 const CLivery l = ui->comp_Livery->view()->firstSelectedOrDefaultObject();
177 CAircraftIcaoCode CDbQuickMappingWizard::getFirstSelectedOrDefaultAircraftIcao()
const
179 const CAircraftIcaoCode icao = ui->comp_AircraftIcao->view()->firstSelectedOrDefaultObject();
187 const CDistributor dist = ui->comp_Distributor->view()->firstSelectedOrDefaultObject();
193 void CDbQuickMappingWizard::onWebDataRead()
198 void CDbQuickMappingWizard::onPublishedModels(
const CAircraftModelList &modelsPublished,
203 Q_UNUSED(modelsPublished);
204 Q_UNUSED(modelsSkipped);
205 Q_UNUSED(directWrite);
207 if (requestSuccessful)
213 ui->comp_Log->appendStatusMessagesToList(msgs);
216 void CDbQuickMappingWizard::currentWizardPageChanged(
int id)
218 const bool forward =
id > m_lastId;
219 const bool colorMode = ui->rb_ColorLivery->isChecked();
225 case PageAircraftSelect:
227 this->setAircraftIcaoFilter();
231 if (!colorMode) { forward ? this->next() : this->back(); }
233 case PageLiverySelect:
235 if (colorMode) { this->setColorFilter(); }
236 else { this->setAirlineIcaoFilter(); }
239 case PageDistributorSelect:
241 this->setDistributorFilter();
247 ui->selector_Simulator->setValue(sims);
248 ui->editor_AircraftModel->setLivery(this->getFirstSelectedOrDefaultLivery());
249 ui->editor_AircraftModel->setDistributor(this->getFirstSelectedOrDefaultDistributor());
250 ui->editor_AircraftModel->setAircraftIcao(this->getFirstSelectedOrDefaultAircraftIcao());
253 ui->fr_ConfirmationOk->setVisible(errorFree);
254 ui->fr_ConfirmationStillErrors->setVisible(!errorFree);
255 if (!errorFree) { ui->wp6_Confirmation->showOverlayMessages(msgs); }
258 case PageCredentials:
260 ui->comp_Log->clear();
270 this->writeModelToDb();
271 this->button(BackButton)->hide();
280 const Pages page =
static_cast<Pages>(this->currentId());
287 if (!msgs.
isEmpty()) { ui->wp6_Confirmation->showOverlayMessages(msgs); }
291 case PageCredentials:
293 ok = ui->comp_DbLogin->isUserAuthenticated();
296 ui->wp7_Credentials->showOverlayHTMLMessage(
"No user credentials, read login hints!", 10 * 1000);
313 if (ui->le_ModelString->text().isEmpty())
315 const CStatusMessage error(
this, CStatusMessage::SeverityError, u
"Missing model string",
true);
319 const CStatusMessage vMsg = ui->selector_Simulator->getValue().validateSimulatorsForModel();
325 void CDbQuickMappingWizard::consolidateModelWithUIData()
330 model.
setLivery(ui->editor_AircraftModel->getLivery());
352 void CDbQuickMappingWizard::writeModelToDb()
359 this->consolidateModelWithUIData();
362 static const QString qmw(u
"[swift QMW " % CBuildConfig::getVersionString() % u
"]");
364 m_model.
setVersion(CBuildConfig::getVersionString());
365 const QString extraInfo = QString(m_model.
getDescription() % u
" " % qmw).simplified().trimmed();
369 ui->comp_Log->appendStatusMessagesToList(msgs);
377 ui->cb_Military->setChecked(icao.
isMilitary());
378 ui->selector_AirlineName->setAirlineIcao(icao);
379 ui->selector_AirlineIcaoCode->setAirlineIcao(icao);
382 this->setAirlineIcaoFilter();
390 ui->cb_Military->setChecked(icao.
isMilitary());
393 this->setAircraftIcaoFilter();
bool hasWebDataServices() const
Web data services available?
bool isShuttingDown() const
Is application shutting down?
const context::IContextSimulator * getIContextSimulator() const
Direct access to contexts if a CCoreFacade has been initialized.
CWebDataServices * getWebDataServices() const
Get the web data services.
db::CDatabaseWriter * getDatabaseWriter() const
DB writer class.
swift::misc::simulation::CAircraftModel getModelForModelString(const QString &modelString) const
Model for model string if any.
virtual swift::misc::simulation::CSimulatorPluginInfo getSimulatorPluginInfo() const =0
Simulator info, currently loaded plugin.
bool isSimulatorAvailable() const
Simulator avialable (driver available)?
swift::misc::CStatusMessageList asyncPublishModel(const swift::misc::simulation::CAircraftModel &model, const QString &extraInfo)
Write model to DB.
static void checkBoxReadOnly(QCheckBox *checkBox, bool readOnly)
Pseudo readonly state for checkbox.
static void setWizardButtonWidths(QWizard *wizard)
Set button widths for a wizard.
void changedAircraftIcao(const swift::misc::aviation::CAircraftIcaoCode &icao)
ICAO was changed.
void changedAirlineIcao(const swift::misc::aviation::CAirlineIcaoCode &icao)
ICAO was changed.
Wizard to quickly provide a single mapping.
virtual bool validateCurrentPage()
virtual void keyPressEvent(QKeyEvent *event)
void presetAircraftIcao(const swift::misc::aviation::CAircraftIcaoCode &aircraftIcao)
Preset values.
void presetModel(const swift::misc::simulation::CAircraftModel &model)
Preset a model.
void clear()
Clear wizard.
static const QStringList & getLogCategories()
Log categories.
@ PageConfirmation
model from and validation
@ PageLastConfirmation
just info to say data will be send
virtual ~CDbQuickMappingWizard()
Destructor.
void push_back(const T &value)
Appends an element at the end of the sequence.
bool isEmpty() const
Synonym for empty.
Streamable status message, e.g.
bool isWarningOrAbove() const
Warning or above.
Status messages, e.g. from Core -> GUI.
bool hasWarningOrErrorMessages() const
Warning or error messages.
Value object for ICAO classification.
bool isMilitary() const
Military?
Value object for ICAO classification.
bool isVirtualAirline() const
Virtual airline.
bool isMilitary() const
Military, air force or such?
Value object encapsulating information about an airpot.
bool isColorLivery() const
Color livery?
void setVersion(const QString &version)
Version info.
bool isLoadedFromDb() const
Loaded from DB.
bool isLoadedFromDb() const
Loaded from DB.
const QString & getDbKey() const
Get DB key.
Aircraft model (used by another pilot, my models on disk)
const aviation::CAirlineIcaoCode & getAirlineIcaoCode() const
Airline ICAO code.
const aviation::CLivery & getLivery() const
Get livery.
CSimulatorInfo getSimulator() const
Simulator info.
const QString & getModelString() const
Model key, either queried or loaded from simulator model.
const QString & getDescription() const
Descriptive text.
void setSimulator(const CSimulatorInfo &simulator)
Set simulator info.
const CDistributor & getDistributor() const
Get distributor.
const aviation::CAircraftIcaoCode & getAircraftIcaoCode() const
Aircraft ICAO code.
void setModelMode(ModelMode mode)
Set model mode.
bool hasModelString() const
Non empty model string?
void setLivery(const aviation::CLivery &livery)
Livery.
void setDistributor(const CDistributor &distributor)
Set distributor.
bool setAircraftIcaoCode(const aviation::CAircraftIcaoCode &aircraftIcaoCode)
Set aircraft ICAO code.
Value object encapsulating a list of aircraft models.
Value object encapsulating information of software distributor.
Simple hardcoded info about the corresponding simulator.
CSimulatorInfo add(const CSimulatorInfo &other)
Add simulator.
bool isAnySimulator() const
Any simulator?
bool isXPlane() const
XPlane.
const QString & getSimulator() const
Simulator.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Classes interacting with the swift database (aka "datastore").
Backend services of the swift project, like dealing with the network or the simulators.
High level reusable GUI components.
Free functions in swift::misc.