refs #568, adjusted GUI components

* use incremental updates
* use new signatures
* handle successfully published models
* some custom menus are gone, because they are now part of the specialized views
This commit is contained in:
Klaus Basan
2016-01-08 00:43:11 +01:00
parent c0b66d93f1
commit 6364853264
15 changed files with 134 additions and 39 deletions

View File

@@ -10,11 +10,14 @@
#include "ui_datainfoareacomponent.h" #include "ui_datainfoareacomponent.h"
#include "blackgui/components/logcomponent.h" #include "blackgui/components/logcomponent.h"
#include "blackgui/components/datainfoareacomponent.h" #include "blackgui/components/datainfoareacomponent.h"
#include "blackmisc/network/entityflags.h"
#include "blackcore/webdataservices.h" #include "blackcore/webdataservices.h"
#include "blackmisc/icons.h" #include "blackmisc/icons.h"
#include "blackmisc/logmessage.h" #include "blackmisc/logmessage.h"
#include "blackmisc/verify.h"
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackMisc::Network;
using namespace BlackGui; using namespace BlackGui;
using namespace BlackGui::Components; using namespace BlackGui::Components;
@@ -151,5 +154,19 @@ namespace BlackGui
return CIcons::empty(); return CIcons::empty();
} }
} }
void CDataInfoAreaComponent::requestUpdatedData(CEntityFlags::Entity entity)
{
bool requested = false;
if (entity.testFlag(CEntityFlags::ModelEntity))
{
this->ui->comp_DbModels->requestUpdatedData();
requested = true;
}
// sanity
BLACK_VERIFY_X(requested, Q_FUNC_INFO, "Entity not supported");
Q_UNUSED(requested);
}
} // ns } // ns
} // ns } // ns

View File

@@ -33,7 +33,7 @@ namespace BlackGui
class CDbCountryComponent; class CDbCountryComponent;
/** /**
* Main info area for data entry tool * Info area containing the DB data (models, liveries ...)
*/ */
class BLACKGUI_EXPORT CDataInfoAreaComponent : class BLACKGUI_EXPORT CDataInfoAreaComponent :
public BlackGui::CInfoArea, public BlackGui::CInfoArea,
@@ -89,6 +89,9 @@ namespace BlackGui
//! Load from resource dir //! Load from resource dir
bool readDbDataFromResourceDir(); bool readDbDataFromResourceDir();
//! Load new data (based on timestamp, incremental)
void requestUpdatedData(BlackMisc::Network::CEntityFlags::Entity entity);
protected: protected:
//! \copydoc CInfoArea::getPreferredSizeWhenFloating //! \copydoc CInfoArea::getPreferredSizeWhenFloating
virtual QSize getPreferredSizeWhenFloating(int areaIndex) const override; virtual QSize getPreferredSizeWhenFloating(int areaIndex) const override;

View File

@@ -33,6 +33,7 @@ namespace BlackGui
connect(ui->comp_Mapping, &CDbMappingComponent::filterByLivery, ui->comp_DataInfoArea->getLiveryComponent(), &CDbLiveryComponent::filter); connect(ui->comp_Mapping, &CDbMappingComponent::filterByLivery, ui->comp_DataInfoArea->getLiveryComponent(), &CDbLiveryComponent::filter);
connect(ui->comp_Mapping, &CDbMappingComponent::filterByAircraftIcao, ui->comp_DataInfoArea->getAircraftComponent(), &CDbAircraftIcaoComponent::filter); connect(ui->comp_Mapping, &CDbMappingComponent::filterByAircraftIcao, ui->comp_DataInfoArea->getAircraftComponent(), &CDbAircraftIcaoComponent::filter);
connect(ui->comp_Mapping, &CDbMappingComponent::requestUpdatedData, ui->comp_DataInfoArea, &CDataInfoAreaComponent::requestUpdatedData);
} }
CDataMainInfoAreaComponent::~CDataMainInfoAreaComponent() CDataMainInfoAreaComponent::~CDataMainInfoAreaComponent()

View File

@@ -68,7 +68,7 @@ namespace BlackGui
void CDbAircraftIcaoComponent::ps_reload() void CDbAircraftIcaoComponent::ps_reload()
{ {
if (!hasProvider()) { return; } if (!hasProvider()) { return; }
triggerRead(CEntityFlags::AircraftIcaoEntity); triggerRead(CEntityFlags::AircraftIcaoEntity, QDateTime());
} }
} // ns } // ns

View File

@@ -63,7 +63,7 @@ namespace BlackGui
void CDbAirlineIcaoComponent::ps_reload() void CDbAirlineIcaoComponent::ps_reload()
{ {
if (!hasProvider()) { return; } if (!hasProvider()) { return; }
triggerRead(CEntityFlags::AirlineIcaoEntity); triggerRead(CEntityFlags::AirlineIcaoEntity, QDateTime());
} }
} // ns } // ns

View File

@@ -63,7 +63,7 @@ namespace BlackGui
void CDbCountryComponent::ps_reload() void CDbCountryComponent::ps_reload()
{ {
if (!hasProvider()) { return; } if (!hasProvider()) { return; }
triggerRead(CEntityFlags::CountryEntity); triggerRead(CEntityFlags::CountryEntity, QDateTime());
} }
} // ns } // ns
} // ns } // ns

View File

@@ -59,7 +59,7 @@ namespace BlackGui
void CDbDistributorComponent::ps_reload() void CDbDistributorComponent::ps_reload()
{ {
if (!hasProvider()) { return; } if (!hasProvider()) { return; }
triggerRead(CEntityFlags::DistributorEntity); triggerRead(CEntityFlags::DistributorEntity, QDateTime());
} }
} // ns } // ns
} // ns } // ns

View File

@@ -67,7 +67,7 @@ namespace BlackGui
void CDbLiveryComponent::ps_reload() void CDbLiveryComponent::ps_reload()
{ {
if (!hasProvider()) { return; } if (!hasProvider()) { return; }
triggerRead(CEntityFlags::LiveryEntity); triggerRead(CEntityFlags::LiveryEntity, QDateTime());
} }
} // ns } // ns

View File

@@ -18,6 +18,7 @@
using namespace BlackCore; using namespace BlackCore;
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackMisc::Aviation; using namespace BlackMisc::Aviation;
using namespace BlackMisc::Network;
using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation;
using namespace BlackMisc::Simulation::FsCommon; using namespace BlackMisc::Simulation::FsCommon;
using namespace BlackGui; using namespace BlackGui;
@@ -53,6 +54,7 @@ namespace BlackGui
connect(ui->comp_StashAircraft->getView(), &CAircraftModelView::doubleClicked, this, &CDbMappingComponent::ps_onModelRowSelected); connect(ui->comp_StashAircraft->getView(), &CAircraftModelView::doubleClicked, this, &CDbMappingComponent::ps_onModelRowSelected);
connect(ui->comp_StashAircraft->getView(), &CAircraftModelView::requestHandlingOfStashDrop, this, &CDbMappingComponent::ps_handleStashDropRequest); connect(ui->comp_StashAircraft->getView(), &CAircraftModelView::requestHandlingOfStashDrop, this, &CDbMappingComponent::ps_handleStashDropRequest);
connect(ui->comp_StashAircraft, &CDbStashComponent::stashedModelsChanged, this, &CDbMappingComponent::ps_onStashedModelsChanged); connect(ui->comp_StashAircraft, &CDbStashComponent::stashedModelsChanged, this, &CDbMappingComponent::ps_onStashedModelsChanged);
connect(ui->comp_StashAircraft, &CDbStashComponent::modelsSuccessfullyPublished, this, &CDbMappingComponent::ps_onModelsSuccessfullyPublished);
ui->tvp_OwnAircraftModels->setDisplayAutomatically(true); ui->tvp_OwnAircraftModels->setDisplayAutomatically(true);
ui->tvp_OwnAircraftModels->setCustomMenu(new CMappingSimulatorModelMenu(this)); ui->tvp_OwnAircraftModels->setCustomMenu(new CMappingSimulatorModelMenu(this));
@@ -181,9 +183,9 @@ namespace BlackGui
switch (tab) switch (tab)
{ {
case TabOwnModels: case TabOwnModels:
return ui->tvp_OwnAircraftModels->hasModelsToStash(); return ui->tvp_OwnAircraftModels->hasSelectedModelsToStash();
case TabVPliot: case TabVPliot:
return ui->tvp_AircraftModelsForVPilot->hasModelsToStash(); return ui->tvp_AircraftModelsForVPilot->hasSelectedModelsToStash();
default: default:
break; break;
} }
@@ -266,12 +268,16 @@ namespace BlackGui
{ {
const CAircraftModel model(getAircraftModel()); const CAircraftModel model(getAircraftModel());
CStatusMessageList msgs(this->validateCurrentModel(true)); CStatusMessageList msgs(this->validateCurrentModel(true));
if (!msgs.hasErrorMessages())
{
msgs.push_back(
this->ui->comp_StashAircraft->stashModel(model, true)
);
}
if (msgs.hasErrorMessages()) if (msgs.hasErrorMessages())
{ {
this->showMessages(msgs); this->showMessages(msgs);
return;
} }
this->ui->comp_StashAircraft->stashModel(model, true);
} }
void CDbMappingComponent::resizeForSelect() void CDbMappingComponent::resizeForSelect()
@@ -372,6 +378,12 @@ namespace BlackGui
} }
} }
void CDbMappingComponent::ps_onModelsSuccessfullyPublished(const CAircraftModelList &models)
{
if (models.isEmpty()) { return; }
emit this->requestUpdatedData(CEntityFlags::ModelEntity);
}
void CDbMappingComponent::ps_onVPilotCountChanged(int count, bool withFilter) void CDbMappingComponent::ps_onVPilotCountChanged(int count, bool withFilter)
{ {
if (!m_withVPilot) { return; } if (!m_withVPilot) { return; }
@@ -434,7 +446,7 @@ namespace BlackGui
); );
if (msgs.hasWarningOrErrorMessages()) if (msgs.hasWarningOrErrorMessages())
{ {
// maybe log, popup? this->showMessages(msgs);
} }
} }

View File

@@ -23,6 +23,7 @@
#include "blackmisc/simulation/aircraftmodelloader.h" #include "blackmisc/simulation/aircraftmodelloader.h"
#include "blackmisc/simulation/fscommon/vpilotrulesreader.h" #include "blackmisc/simulation/fscommon/vpilotrulesreader.h"
#include "blackmisc/network/webdataservicesprovider.h" #include "blackmisc/network/webdataservicesprovider.h"
#include "blackmisc/network/entityflags.h"
#include "blackmisc/statusmessagelist.h" #include "blackmisc/statusmessagelist.h"
#include <QFrame> #include <QFrame>
#include <QScopedPointer> #include <QScopedPointer>
@@ -102,6 +103,9 @@ namespace BlackGui
//! Request to filter by distributor //! Request to filter by distributor
void filterByDistributor(const BlackMisc::Simulation::CDistributor &distributor); void filterByDistributor(const BlackMisc::Simulation::CDistributor &distributor);
//! Request new data
void requestUpdatedData(BlackMisc::Network::CEntityFlags::Entity entities);
public slots: public slots:
//! Validate, empty list means OK //! Validate, empty list means OK
BlackMisc::CStatusMessageList validateCurrentModel(bool withNestedForms) const; BlackMisc::CStatusMessageList validateCurrentModel(bool withNestedForms) const;
@@ -122,12 +126,15 @@ namespace BlackGui
//! Data for vPilot have been loaded //! Data for vPilot have been loaded
void ps_onLoadVPilotDataFinished(bool success); void ps_onLoadVPilotDataFinished(bool success);
//! vPilot cached changed //! vPilot cached models changed
void ps_onVPilotCacheChanged(); void ps_onVPilotCacheChanged();
//! Stashed models changed //! Stashed models changed
void ps_onStashedModelsChanged(); void ps_onStashedModelsChanged();
//! Models have been published successfully
void ps_onModelsSuccessfullyPublished(const BlackMisc::Simulation::CAircraftModelList &models);
//! Stash drop request //! Stash drop request
void ps_handleStashDropRequest(const BlackMisc::Aviation::CAirlineIcaoCode &code) const; void ps_handleStashDropRequest(const BlackMisc::Aviation::CAirlineIcaoCode &code) const;

View File

@@ -10,11 +10,13 @@
#include "dbmodelcomponent.h" #include "dbmodelcomponent.h"
#include "dbmappingcomponent.h" #include "dbmappingcomponent.h"
#include "blackgui/stylesheetutility.h" #include "blackgui/stylesheetutility.h"
#include "blackmisc/simulation/aircraftmodel.h"
#include "ui_dbmodelcomponent.h" #include "ui_dbmodelcomponent.h"
#include <functional> #include <functional>
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackMisc::Network; using namespace BlackMisc::Network;
using namespace BlackMisc::Simulation;
using namespace BlackGui::Views; using namespace BlackGui::Views;
using namespace BlackGui::Models; using namespace BlackGui::Models;
@@ -57,6 +59,17 @@ namespace BlackGui
} }
} }
void CDbModelComponent::requestUpdatedData()
{
QDateTime ts;
if (!this->ui->tvp_AircraftModel->isEmpty())
{
CAircraftModel model(this->ui->tvp_AircraftModel->container().latestObject());
ts = model.getUtcTimestamp();
}
this->triggerRead(CEntityFlags::ModelEntity, ts);
}
void CDbModelComponent::ps_modelsRead(CEntityFlags::Entity entity, CEntityFlags::ReadState readState, int count) void CDbModelComponent::ps_modelsRead(CEntityFlags::Entity entity, CEntityFlags::ReadState readState, int count)
{ {
Q_UNUSED(count); Q_UNUSED(count);
@@ -64,15 +77,15 @@ namespace BlackGui
{ {
if (readState == CEntityFlags::ReadFinished || readState == CEntityFlags::ReadFinishedRestricted) if (readState == CEntityFlags::ReadFinished || readState == CEntityFlags::ReadFinishedRestricted)
{ {
this->ui->tvp_AircraftModel->updateContainer(this->getModels()); this->ui->tvp_AircraftModel->updateContainerMaybeAsync(this->getModels());
} }
} }
} }
void CDbModelComponent::ps_reload() void CDbModelComponent::ps_reload()
{ {
if (!hasProvider()) { return; } if (!this->hasProvider()) { return; }
triggerRead(CEntityFlags::ModelEntity); this->triggerRead(CEntityFlags::ModelEntity, QDateTime());
} }
void CDbModelComponent::ps_onStyleSheetChanged() void CDbModelComponent::ps_onStyleSheetChanged()

View File

@@ -48,6 +48,13 @@ namespace BlackGui
//! Set the provider //! Set the provider
virtual void setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider) override; virtual void setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider) override;
//! Get latest model if any
BlackMisc::Simulation::CAircraftModel getLatestModel() const;
public slots:
//! Load new data
void requestUpdatedData();
private slots: private slots:
//! Models have been read //! Models have been read
void ps_modelsRead(BlackMisc::Network::CEntityFlags::Entity entity, BlackMisc::Network::CEntityFlags::ReadState readState, int count); void ps_modelsRead(BlackMisc::Network::CEntityFlags::Entity entity, BlackMisc::Network::CEntityFlags::ReadState readState, int count);

View File

@@ -12,7 +12,6 @@
#include "ui_dbstashcomponent.h" #include "ui_dbstashcomponent.h"
#include "blackgui/views/aircraftmodelview.h" #include "blackgui/views/aircraftmodelview.h"
#include "blackmisc/icons.h" #include "blackmisc/icons.h"
#include "blackmisc/verify.h"
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation;
@@ -48,7 +47,7 @@ namespace BlackGui
connect(this->ui->pb_Livery, &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); connect(this->ui->pb_Distributor, &QPushButton::pressed, this, &CDbStashComponent::ps_copyOverPartsToSelected);
ui->tvp_StashAircraftModels->setCustomMenu(new CStashModelsMenu(this, true)); ui->tvp_StashAircraftModels->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows);
this->enableButtonRow(); this->enableButtonRow();
} }
@@ -93,10 +92,6 @@ namespace BlackGui
this->ui->tvp_StashAircraftModels->insert(model); this->ui->tvp_StashAircraftModels->insert(model);
} }
} }
else
{
this->showMessage(m);
}
return m; return m;
} }
@@ -112,6 +107,18 @@ namespace BlackGui
return msgs; return msgs;
} }
int CDbStashComponent::unstashModels(QList<int> keys)
{
if (keys.isEmpty()) { return 0; }
return this->ui->tvp_StashAircraftModels->removeDbKeys(keys);
}
int CDbStashComponent::unstashModels(QStringList modelStrings)
{
if (modelStrings.isEmpty()) { return 0; }
return this->ui->tvp_StashAircraftModels->removeModelsWithModelString(modelStrings);
}
const Views::CAircraftModelView *CDbStashComponent::getView() const const Views::CAircraftModelView *CDbStashComponent::getView() const
{ {
return ui->tvp_StashAircraftModels; return ui->tvp_StashAircraftModels;
@@ -208,9 +215,26 @@ namespace BlackGui
void CDbStashComponent::ps_publishResponse(const CAircraftModelList &publishedModels, const CAircraftModelList &skippedModels, const CStatusMessageList &msgs) void CDbStashComponent::ps_publishResponse(const CAircraftModelList &publishedModels, const CAircraftModelList &skippedModels, const CStatusMessageList &msgs)
{ {
if (!publishedModels.isEmpty())
{
emit this->modelsSuccessfullyPublished(publishedModels);
}
if (!msgs.isEmpty()) if (!msgs.isEmpty())
{ {
this->showMessages(msgs); if (publishedModels.isEmpty())
{
this->showMessages(msgs);
}
else
{
QString confirm("Remove %1 published models?");
auto lambda = [this, publishedModels]()
{
this->unstashModels(publishedModels.getModelStrings(false));
};
this->showMessagesWithConfirmation(msgs, confirm.arg(publishedModels.size()), lambda, QMessageBox::Ok);
}
} }
Q_UNUSED(publishedModels); Q_UNUSED(publishedModels);
@@ -319,6 +343,16 @@ namespace BlackGui
return true; return true;
} }
bool CDbStashComponent::showMessagesWithConfirmation(const CStatusMessageList &msgs, const QString &confirmation, std::function<void ()> okLambda, int defaultButton, 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()->showMessagesWithConfirmation(msgs, confirmation, okLambda, defaultButton, timeoutMs);
return true;
}
bool CDbStashComponent::showMessage(const CStatusMessage &msg, int timeoutMs) bool CDbStashComponent::showMessage(const CStatusMessage &msg, int timeoutMs)
{ {
if (msg.isEmpty()) { return false; } if (msg.isEmpty()) { return false; }
@@ -327,11 +361,5 @@ namespace BlackGui
this->getMappingComponent()->showMessage(msg, timeoutMs); this->getMappingComponent()->showMessage(msg, timeoutMs);
return true; return true;
} }
void CDbStashComponent::CStashModelsMenu::customMenu(QMenu &menu) const
{
menu.addAction(CIcons::database16(), "Unstash", this->parent(), SLOT(ps_onUnstashPressed()));
nestedCustomMenu(menu);
}
} // ns } // ns
} // ns } // ns

View File

@@ -16,6 +16,7 @@
#include "blackgui/components/dbmappingcomponentaware.h" #include "blackgui/components/dbmappingcomponentaware.h"
#include "blackgui/menudelegate.h" #include "blackgui/menudelegate.h"
#include "blackgui/views/aircraftmodelview.h" #include "blackgui/views/aircraftmodelview.h"
#include "blackmisc/verify.h"
#include "blackmisc/network/webdataservicesprovider.h" #include "blackmisc/network/webdataservicesprovider.h"
#include <QFrame> #include <QFrame>
#include <QScopedPointer> #include <QScopedPointer>
@@ -60,6 +61,12 @@ namespace BlackGui
//! Stash given models //! Stash given models
BlackMisc::CStatusMessageList stashModels(const BlackMisc::Simulation::CAircraftModelList &models); BlackMisc::CStatusMessageList stashModels(const BlackMisc::Simulation::CAircraftModelList &models);
//! Unstash given models with keys
int unstashModels(QList<int> keys);
//! Unstash given models by model string
int unstashModels(QStringList modelStrings);
//! The embedded view //! The embedded view
const BlackGui::Views::CAircraftModelView *getView() const; const BlackGui::Views::CAircraftModelView *getView() const;
@@ -94,6 +101,9 @@ namespace BlackGui
//! Stashed models have been changed //! Stashed models have been changed
void stashedModelsChanged(); void stashedModelsChanged();
//! Models succesfully published
void modelsSuccessfullyPublished(const BlackMisc::Simulation::CAircraftModelList &publishedModels);
private slots: private slots:
//! Unstash pressed //! Unstash pressed
void ps_onUnstashPressed(); void ps_onUnstashPressed();
@@ -121,6 +131,9 @@ namespace BlackGui
//! Display messages //! Display messages
bool showMessages(const BlackMisc::CStatusMessageList &msgs, bool onlyErrors = false, int timeoutMs = -1); bool showMessages(const BlackMisc::CStatusMessageList &msgs, bool onlyErrors = false, int timeoutMs = -1);
//! Display messages with confirmation
bool showMessagesWithConfirmation(const BlackMisc::CStatusMessageList &msgs, const QString &confirmation, std::function<void()> okLambda, int defaultButton, bool onlyErrors = false, int timeoutMs = -1);
//! Display message //! Display message
bool showMessage(const BlackMisc::CStatusMessage &msg, int timeoutMs = -1); bool showMessage(const BlackMisc::CStatusMessage &msg, int timeoutMs = -1);
@@ -138,17 +151,6 @@ namespace BlackGui
//! Get the selected only models or all models depending on checkbox //! Get the selected only models or all models depending on checkbox
BlackMisc::Simulation::CAircraftModelList getSelectedOrAllModels() const; BlackMisc::Simulation::CAircraftModelList getSelectedOrAllModels() const;
//! Custom menu for the stashed models
class CStashModelsMenu : public BlackGui::IMenuDelegate
{
public:
//! Constructor
CStashModelsMenu(CDbStashComponent *parent, bool separatorAtEnd) : IMenuDelegate(parent, separatorAtEnd) {}
//! \copydoc IMenuDelegate::customMenu
virtual void customMenu(QMenu &menu) const override;
};
}; };
} // ns } // ns
} // ns } // ns

View File

@@ -11,6 +11,7 @@
#include "ui_infobarwebreadersstatuscomponent.h" #include "ui_infobarwebreadersstatuscomponent.h"
#include "blackcore/webreaderflags.h" #include "blackcore/webreaderflags.h"
#include "blackmisc/icons.h" #include "blackmisc/icons.h"
#include "blackmisc/verify.h"
using namespace BlackGui; using namespace BlackGui;
using namespace BlackMisc; using namespace BlackMisc;
@@ -93,6 +94,7 @@ namespace BlackGui
switch (readState) switch (readState)
{ {
case CEntityFlags::ReadFinished: case CEntityFlags::ReadFinished:
case CEntityFlags::ReadFinishedRestricted:
led->setOn(true, blinkTime); led->setOn(true, blinkTime);
break; break;
case CEntityFlags::StartRead: case CEntityFlags::StartRead:
@@ -101,6 +103,9 @@ namespace BlackGui
case CEntityFlags::ReadFailed: case CEntityFlags::ReadFailed:
led->setTriState(2 * blinkTime); led->setTriState(2 * blinkTime);
break; break;
default:
BLACK_VERIFY_X(false, Q_FUNC_INFO, "read state not handled");
break;
} }
} }