mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-05 09:15:34 +08:00
refs #526, changed to publishing multiple (instead of 1) models
This commit is contained in:
@@ -44,7 +44,6 @@ namespace BlackGui
|
||||
this->ui->tvp_OwnAircraftModels->addFilterDialog();
|
||||
|
||||
// connects
|
||||
connect(ui->editor_Model, &CModelMappingForm::requestPublish, this, &CDbMappingComponent::ps_publishSingleModelToDb);
|
||||
connect(ui->editor_Model, &CModelMappingForm::requestStash, this, &CDbMappingComponent::ps_stashCurrentModel);
|
||||
|
||||
connect(ui->tvp_OwnAircraftModels, &CAircraftModelView::doubleClicked, this, &CDbMappingComponent::ps_onModelRowSelected);
|
||||
@@ -244,7 +243,7 @@ namespace BlackGui
|
||||
return currentTabIndex() == TabStash;
|
||||
}
|
||||
|
||||
CStatusMessageList CDbMappingComponent::validate(bool withNestedForms) const
|
||||
CStatusMessageList CDbMappingComponent::validateCurrentModel(bool withNestedForms) const
|
||||
{
|
||||
CStatusMessageList msgs(this->ui->editor_Model->validate(!withNestedForms));
|
||||
if (withNestedForms)
|
||||
@@ -256,24 +255,6 @@ namespace BlackGui
|
||||
return msgs;
|
||||
}
|
||||
|
||||
void CDbMappingComponent::ps_publishSingleModelToDb()
|
||||
{
|
||||
CStatusMessageList msgs(validate(true));
|
||||
if (msgs.hasErrorMessages())
|
||||
{
|
||||
CLogMessage::preformatted(msgs);
|
||||
this->showMessages(msgs);
|
||||
return;
|
||||
}
|
||||
|
||||
const CAircraftModel model(getAircraftModel());
|
||||
msgs = this->asyncWriteModel(model);
|
||||
if (!msgs.isEmpty())
|
||||
{
|
||||
CLogMessage(this).preformatted(msgs);
|
||||
}
|
||||
}
|
||||
|
||||
void CDbMappingComponent::ps_handleStashDropRequest(const CAirlineIcaoCode &code) const
|
||||
{
|
||||
CLivery stdLivery(this->getStdLiveryForAirlineCode(code));
|
||||
@@ -284,13 +265,13 @@ namespace BlackGui
|
||||
void CDbMappingComponent::ps_stashCurrentModel()
|
||||
{
|
||||
const CAircraftModel model(getAircraftModel());
|
||||
if (!model.hasModelString())
|
||||
CStatusMessageList msgs(this->validateCurrentModel(true));
|
||||
if (msgs.hasErrorMessages())
|
||||
{
|
||||
CStatusMessage msg = CStatusMessage(CStatusMessage::SeverityError, "no model string, ignored");
|
||||
this->showMessage(msg);
|
||||
this->showMessages(msgs);
|
||||
return;
|
||||
}
|
||||
this->ui->comp_StashAircraft->stashModel(model);
|
||||
this->ui->comp_StashAircraft->stashModel(model, true);
|
||||
}
|
||||
|
||||
void CDbMappingComponent::resizeForSelect()
|
||||
|
||||
@@ -104,7 +104,7 @@ namespace BlackGui
|
||||
|
||||
public slots:
|
||||
//! Validate, empty list means OK
|
||||
BlackMisc::CStatusMessageList validate(bool withNestedForms) const;
|
||||
BlackMisc::CStatusMessageList validateCurrentModel(bool withNestedForms) const;
|
||||
|
||||
//! Resize so that selection is easy (larger table view)
|
||||
void resizeForSelect();
|
||||
@@ -128,9 +128,6 @@ namespace BlackGui
|
||||
//! Stashed models changed
|
||||
void ps_onStashedModelsChanged();
|
||||
|
||||
//! Publish
|
||||
void ps_publishSingleModelToDb();
|
||||
|
||||
//! Stash drop request
|
||||
void ps_handleStashDropRequest(const BlackMisc::Aviation::CAirlineIcaoCode &code) const;
|
||||
|
||||
|
||||
@@ -6,10 +6,16 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>262</width>
|
||||
<width>600</width>
|
||||
<height>618</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>600</width>
|
||||
<height>400</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Frame</string>
|
||||
</property>
|
||||
@@ -226,7 +232,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>244</width>
|
||||
<width>582</width>
|
||||
<height>425</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
||||
@@ -76,6 +76,5 @@ namespace BlackGui
|
||||
{
|
||||
// code goes here
|
||||
}
|
||||
|
||||
} // ns
|
||||
} // ns
|
||||
|
||||
@@ -38,14 +38,15 @@ namespace BlackGui
|
||||
|
||||
connect(this->ui->pb_Unstash, &QPushButton::pressed, this, &CDbStashComponent::ps_onUnstashPressed);
|
||||
connect(this->ui->pb_Validate, &QPushButton::pressed, this, &CDbStashComponent::ps_onValidatePressed);
|
||||
connect(this->ui->pb_Publish, &QPushButton::pressed, this, &CDbStashComponent::ps_onPublishPressed);
|
||||
connect(this->ui->tvp_StashAircraftModels, &CAircraftModelView::modelChanged, this, &CDbStashComponent::stashedModelsChanged);
|
||||
connect(this->ui->tvp_StashAircraftModels, &CAircraftModelView::rowCountChanged, this, &CDbStashComponent::ps_onRowCountChanged);
|
||||
|
||||
// copy over buttons
|
||||
connect(this->ui->pb_AircraftIcao, &QPushButton::pressed, this, &CDbStashComponent::ps_copyOverValues);
|
||||
connect(this->ui->pb_AirlineIcao, &QPushButton::pressed, this, &CDbStashComponent::ps_copyOverValues);
|
||||
connect(this->ui->pb_Livery, &QPushButton::pressed, this, &CDbStashComponent::ps_copyOverValues);
|
||||
connect(this->ui->pb_Distributor, &QPushButton::pressed, this, &CDbStashComponent::ps_copyOverValues);
|
||||
connect(this->ui->pb_AircraftIcao, &QPushButton::pressed, this, &CDbStashComponent::ps_copyOverPartsToSelected);
|
||||
connect(this->ui->pb_AirlineIcao, &QPushButton::pressed, this, &CDbStashComponent::ps_copyOverPartsToSelected);
|
||||
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->setCustomMenu(new CStashModelsMenu(this, true));
|
||||
this->enableButtonRow();
|
||||
@@ -57,6 +58,10 @@ namespace BlackGui
|
||||
void CDbStashComponent::setProvider(IWebDataServicesProvider *provider)
|
||||
{
|
||||
CWebDataServicesAware::setProvider(provider);
|
||||
provider->connectDataPublishSignal(
|
||||
this,
|
||||
std::bind(&CDbStashComponent::ps_publishResponse, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)
|
||||
);
|
||||
}
|
||||
|
||||
void CDbStashComponent::gracefulShutdown()
|
||||
@@ -64,23 +69,33 @@ namespace BlackGui
|
||||
// shutdown
|
||||
}
|
||||
|
||||
CStatusMessage CDbStashComponent::validateStashModel(const CAircraftModel &model) const
|
||||
CStatusMessage CDbStashComponent::validateStashModel(const CAircraftModel &model, bool allowReplace) const
|
||||
{
|
||||
static const CLogCategoryList cats(CLogCategoryList(this).join({ CLogCategory::validation()}));
|
||||
if (this->ui->tvp_StashAircraftModels->container().containsModelStringOrId(model))
|
||||
if (!allowReplace && this->ui->tvp_StashAircraftModels->container().containsModelStringOrId(model))
|
||||
{
|
||||
const QString msg("Model \"%1\" already stashed");
|
||||
return CStatusMessage(cats, CStatusMessage::SeverityError, msg.arg(model.getModelString()));
|
||||
return CStatusMessage(validationCats(), CStatusMessage::SeverityError, msg.arg(model.getModelString()));
|
||||
}
|
||||
return CStatusMessage();
|
||||
}
|
||||
|
||||
CStatusMessage CDbStashComponent::stashModel(const CAircraftModel &model)
|
||||
CStatusMessage CDbStashComponent::stashModel(const CAircraftModel &model, bool replace)
|
||||
{
|
||||
CStatusMessage m(validateStashModel(model));
|
||||
CStatusMessage m(validateStashModel(model, replace));
|
||||
if (!m.isWarningOrAbove())
|
||||
{
|
||||
this->ui->tvp_StashAircraftModels->insert(model);
|
||||
if (replace)
|
||||
{
|
||||
this->ui->tvp_StashAircraftModels->replaceOrAdd(&CAircraftModel::getModelString, model.getModelString(), model);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->ui->tvp_StashAircraftModels->insert(model);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this->showMessage(m);
|
||||
}
|
||||
return m;
|
||||
}
|
||||
@@ -107,6 +122,11 @@ namespace BlackGui
|
||||
return !this->ui->tvp_StashAircraftModels->isEmpty();
|
||||
}
|
||||
|
||||
int CDbStashComponent::getStashedModelsCount() const
|
||||
{
|
||||
return this->ui->tvp_StashAircraftModels->rowCount();
|
||||
}
|
||||
|
||||
QStringList CDbStashComponent::getStashedModelStrings() const
|
||||
{
|
||||
return this->ui->tvp_StashAircraftModels->derivedModel()->getModelStrings(false);
|
||||
@@ -170,25 +190,67 @@ namespace BlackGui
|
||||
void CDbStashComponent::ps_onValidatePressed()
|
||||
{
|
||||
if (this->ui->tvp_StashAircraftModels->isEmpty()) {return; }
|
||||
const CStatusMessageList msgs(this->validate());
|
||||
this->showMessages(msgs);
|
||||
this->validateAndDisplay(true);
|
||||
}
|
||||
|
||||
void CDbStashComponent::ps_onPublishPressed()
|
||||
{
|
||||
if (this->ui->tvp_StashAircraftModels->isEmpty()) {return; }
|
||||
if (!this->validateAndDisplay()) { return; }
|
||||
CAircraftModelList models(getSelectedOrAllModels());
|
||||
if (models.isEmpty()) { return; }
|
||||
CStatusMessageList msgs = this->asyncPublishModels(models);
|
||||
if (msgs.hasWarningOrErrorMessages())
|
||||
{
|
||||
this->showMessages(msgs);
|
||||
}
|
||||
}
|
||||
|
||||
void CDbStashComponent::ps_publishResponse(const CAircraftModelList &publishedModels, const CAircraftModelList &skippedModels, const CStatusMessageList &msgs)
|
||||
{
|
||||
if (!msgs.isEmpty())
|
||||
{
|
||||
this->showMessages(msgs);
|
||||
}
|
||||
|
||||
Q_UNUSED(publishedModels);
|
||||
Q_UNUSED(skippedModels);
|
||||
}
|
||||
|
||||
CStatusMessageList CDbStashComponent::validate() const
|
||||
{
|
||||
if (this->ui->tvp_StashAircraftModels->isEmpty()) {return CStatusMessageList(); }
|
||||
bool selectedOnly = ui->cb_SelectedOnly->isChecked();
|
||||
const CAircraftModelList models(selectedOnly ? this->ui->tvp_StashAircraftModels->selectedObjects() : this->ui->tvp_StashAircraftModels->container());
|
||||
CAircraftModelList models(getSelectedOrAllModels());
|
||||
if (models.isEmpty()) { return CStatusMessageList(); }
|
||||
const CStatusMessageList msgs(models.validateForPublishing());
|
||||
if (!msgs.isEmpty()) { return msgs; }
|
||||
|
||||
return CStatusMessageList(
|
||||
{
|
||||
CStatusMessage(CStatusMessage::SeverityInfo, QString("No errors in %1 model(s)").arg(models.size()))
|
||||
CStatusMessage(validationCats(), CStatusMessage::SeverityInfo, QString("No errors in %1 model(s)").arg(models.size()))
|
||||
});
|
||||
}
|
||||
|
||||
bool CDbStashComponent::validateAndDisplay(bool displayInfo)
|
||||
{
|
||||
const CStatusMessageList msgs(this->validate());
|
||||
if (msgs.hasWarningOrErrorMessages())
|
||||
{
|
||||
this->showMessages(msgs);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (displayInfo)
|
||||
{
|
||||
QString no = QString::number(this->getStashedModelsCount());
|
||||
CStatusMessage msg(validationCats(), CStatusMessage::SeverityInfo, "Validation passed for " + no + " models");
|
||||
this->showMessage(msg);
|
||||
}
|
||||
return true; // no error
|
||||
}
|
||||
}
|
||||
|
||||
void CDbStashComponent::enableButtonRow()
|
||||
{
|
||||
bool e = !this->ui->tvp_StashAircraftModels->isEmpty();
|
||||
@@ -201,7 +263,20 @@ namespace BlackGui
|
||||
this->ui->pb_Validate->setEnabled(e);
|
||||
}
|
||||
|
||||
void CDbStashComponent::ps_copyOverValues()
|
||||
const CLogCategoryList &CDbStashComponent::validationCats() const
|
||||
{
|
||||
static const CLogCategoryList cats(CLogCategoryList(this).join({ CLogCategory::validation()}));
|
||||
return cats;
|
||||
}
|
||||
|
||||
CAircraftModelList CDbStashComponent::getSelectedOrAllModels() const
|
||||
{
|
||||
bool selectedOnly = ui->cb_SelectedOnly->isChecked();
|
||||
const CAircraftModelList models(selectedOnly ? this->ui->tvp_StashAircraftModels->selectedObjects() : this->ui->tvp_StashAircraftModels->container());
|
||||
return models;
|
||||
}
|
||||
|
||||
void CDbStashComponent::ps_copyOverPartsToSelected()
|
||||
{
|
||||
QObject *sender = QObject::sender();
|
||||
BLACK_VERIFY_X(this->getMappingComponent(), Q_FUNC_INFO, "missing mapping component");
|
||||
@@ -234,22 +309,22 @@ namespace BlackGui
|
||||
this->enableButtonRow();
|
||||
}
|
||||
|
||||
bool CDbStashComponent::showMessages(const CStatusMessageList &msgs, bool onlyErrors)
|
||||
bool CDbStashComponent::showMessages(const CStatusMessageList &msgs, bool onlyErrors, int timeoutMs)
|
||||
{
|
||||
if (msgs.isEmpty()) { return false; }
|
||||
if (!msgs.hasErrorMessages() && onlyErrors) { return false; }
|
||||
BLACK_VERIFY_X(this->getMappingComponent(), Q_FUNC_INFO, "missing mapping component");
|
||||
if (!this->getMappingComponent()) { return false; }
|
||||
this->getMappingComponent()->showMessages(msgs);
|
||||
this->getMappingComponent()->showMessages(msgs, timeoutMs);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDbStashComponent::showMessage(const CStatusMessage &msg)
|
||||
bool CDbStashComponent::showMessage(const CStatusMessage &msg, int timeoutMs)
|
||||
{
|
||||
if (msg.isEmpty()) { return false; }
|
||||
BLACK_VERIFY_X(this->getMappingComponent(), Q_FUNC_INFO, "missing mapping component");
|
||||
if (!this->getMappingComponent()) { return false; }
|
||||
this->getMappingComponent()->showMessage(msg);
|
||||
this->getMappingComponent()->showMessage(msg, timeoutMs);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -52,10 +52,10 @@ namespace BlackGui
|
||||
void gracefulShutdown();
|
||||
|
||||
//! Test the given model if it can be stashed
|
||||
BlackMisc::CStatusMessage validateStashModel(const BlackMisc::Simulation::CAircraftModel &model) const;
|
||||
BlackMisc::CStatusMessage validateStashModel(const BlackMisc::Simulation::CAircraftModel &model, bool allowReplace) const;
|
||||
|
||||
//! Stash given model
|
||||
BlackMisc::CStatusMessage stashModel(const BlackMisc::Simulation::CAircraftModel &model);
|
||||
BlackMisc::CStatusMessage stashModel(const BlackMisc::Simulation::CAircraftModel &model, bool replace = false);
|
||||
|
||||
//! Stash given models
|
||||
BlackMisc::CStatusMessageList stashModels(const BlackMisc::Simulation::CAircraftModelList &models);
|
||||
@@ -66,6 +66,9 @@ namespace BlackGui
|
||||
//! Has stashed models
|
||||
bool hasStashedModels() const;
|
||||
|
||||
//! Number of models
|
||||
int getStashedModelsCount() const;
|
||||
|
||||
//! Stashed model strings
|
||||
QStringList getStashedModelStrings() const;
|
||||
|
||||
@@ -98,8 +101,16 @@ namespace BlackGui
|
||||
//! Validate pressed
|
||||
void ps_onValidatePressed();
|
||||
|
||||
//! Publish pressed
|
||||
void ps_onPublishPressed();
|
||||
|
||||
//! Publish response received
|
||||
void ps_publishResponse(const BlackMisc::Simulation::CAircraftModelList &publishedModels,
|
||||
const BlackMisc::Simulation::CAircraftModelList &skippedModels,
|
||||
const BlackMisc::CStatusMessageList &msgs);
|
||||
|
||||
//! Copy over values
|
||||
void ps_copyOverValues();
|
||||
void ps_copyOverPartsToSelected();
|
||||
|
||||
//! Row count changed
|
||||
void ps_onRowCountChanged(int number, bool filter);
|
||||
@@ -108,17 +119,26 @@ namespace BlackGui
|
||||
QScopedPointer<Ui::CDbStashComponent> ui;
|
||||
|
||||
//! Display messages
|
||||
bool showMessages(const BlackMisc::CStatusMessageList &msgs, bool onlyErrors = false);
|
||||
bool showMessages(const BlackMisc::CStatusMessageList &msgs, bool onlyErrors = false, int timeoutMs = -1);
|
||||
|
||||
//! Display message
|
||||
bool showMessage(const BlackMisc::CStatusMessage &msg);
|
||||
bool showMessage(const BlackMisc::CStatusMessage &msg, int timeoutMs = -1);
|
||||
|
||||
//! Validate
|
||||
BlackMisc::CStatusMessageList validate() const;
|
||||
|
||||
//! Validate and display info messages
|
||||
bool validateAndDisplay(bool displayInfo = false);
|
||||
|
||||
//! Set the button row
|
||||
void enableButtonRow();
|
||||
|
||||
//! Validation categories
|
||||
const BlackMisc::CLogCategoryList &validationCats() const;
|
||||
|
||||
//! Get the selected only models or all models depending on checkbox
|
||||
BlackMisc::Simulation::CAircraftModelList getSelectedOrAllModels() const;
|
||||
|
||||
//! Custom menu for the stashed models
|
||||
class CStashModelsMenu : public BlackGui::IMenuDelegate
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user