mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-10 14:07:35 +08:00
refs #577, filter for aircraft model
* allow to filter by distributor * filter by simulator on change
This commit is contained in:
@@ -171,6 +171,16 @@ namespace BlackGui
|
||||
this->ui->editor_Distributor->setProvider(provider);
|
||||
this->ui->editor_AircraftIcao->setProvider(provider);
|
||||
this->ui->comp_StashAircraft->setProvider(provider);
|
||||
|
||||
if (this->ui->tvp_AircraftModelsForVPilot->getFilterDialog())
|
||||
{
|
||||
this->ui->tvp_AircraftModelsForVPilot->getFilterDialog()->setProvider(provider);
|
||||
}
|
||||
|
||||
if (this->ui->tvp_OwnAircraftModels->getFilterDialog())
|
||||
{
|
||||
this->ui->tvp_OwnAircraftModels->getFilterDialog()->setProvider(provider);
|
||||
}
|
||||
}
|
||||
|
||||
void CDbMappingComponent::gracefulShutdown()
|
||||
|
||||
@@ -60,6 +60,11 @@ namespace BlackGui
|
||||
{
|
||||
ps_modelsRead(CEntityFlags::ModelEntity, CEntityFlags::ReadFinished, c);
|
||||
}
|
||||
|
||||
if (this->ui->filter_AircraftModelFilter)
|
||||
{
|
||||
this->ui->filter_AircraftModelFilter->setProvider(webDataReaderProvider);
|
||||
}
|
||||
}
|
||||
|
||||
bool CDbModelComponent::hasModels() const
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
using namespace BlackGui;
|
||||
using namespace BlackGui::Models;
|
||||
using namespace BlackGui::Components;
|
||||
|
||||
namespace BlackGui
|
||||
{
|
||||
@@ -24,6 +25,7 @@ namespace BlackGui
|
||||
{
|
||||
ui->setupUi(this);
|
||||
this->ui->frp_SimulatorSelector->setAll();
|
||||
this->ui->comp_DistributorSelector->withDistributorDescription(false);
|
||||
this->setButtonsAndCount(this->ui->filter_Buttons);
|
||||
connect(ui->le_AircraftIcao, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
|
||||
connect(ui->le_AircraftManufacturer, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
|
||||
@@ -32,6 +34,8 @@ namespace BlackGui
|
||||
connect(ui->le_LiveryCode, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
|
||||
connect(ui->le_ModelDescription, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
|
||||
connect(ui->le_ModelKey, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
|
||||
connect(ui->frp_SimulatorSelector, &CSimulatorSelector::changed, this, &CAircraftModelFilterBar::ps_simulatorSelectionChanged);
|
||||
connect(ui->comp_DistributorSelector, &CDbDistributorSelectorComponent::changedDistributor, this, &CAircraftModelFilterBar::ps_distributorChanged);
|
||||
|
||||
CUpperCaseValidator *ucv = new CUpperCaseValidator(this);
|
||||
this->ui->le_AircraftIcao->setValidator(ucv);
|
||||
@@ -54,10 +58,17 @@ namespace BlackGui
|
||||
this->ui->le_AirlineIcao->text(),
|
||||
this->ui->le_AirlineName->text(),
|
||||
this->ui->le_LiveryCode->text(),
|
||||
this->ui->frp_SimulatorSelector->getValue()
|
||||
this->ui->frp_SimulatorSelector->getValue(),
|
||||
this->ui->comp_DistributorSelector->getDistributor()
|
||||
));
|
||||
}
|
||||
|
||||
void CAircraftModelFilterBar::setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider)
|
||||
{
|
||||
CWebDataServicesAware::setProvider(webDataReaderProvider);
|
||||
this->ui->comp_DistributorSelector->setProvider(webDataReaderProvider);
|
||||
}
|
||||
|
||||
void CAircraftModelFilterBar::onRowCountChanged(int count, bool withFilter)
|
||||
{
|
||||
this->ui->filter_Buttons->onRowCountChanged(count, withFilter);
|
||||
@@ -73,6 +84,19 @@ namespace BlackGui
|
||||
this->ui->le_AirlineName->clear();
|
||||
this->ui->le_LiveryCode->clear();
|
||||
this->ui->frp_SimulatorSelector->setAll();
|
||||
this->ui->comp_DistributorSelector->clear();
|
||||
}
|
||||
|
||||
void CAircraftModelFilterBar::ps_simulatorSelectionChanged(const BlackMisc::Simulation::CSimulatorInfo &info)
|
||||
{
|
||||
Q_UNUSED(info);
|
||||
this->triggerFilter();
|
||||
}
|
||||
|
||||
void CAircraftModelFilterBar::ps_distributorChanged(const BlackMisc::Simulation::CDistributor &distributor)
|
||||
{
|
||||
Q_UNUSED(distributor);
|
||||
this->triggerFilter();
|
||||
}
|
||||
} // ns
|
||||
} // ns
|
||||
|
||||
@@ -44,6 +44,9 @@ namespace BlackGui
|
||||
//! \copydoc IModelFilter::getModelFilter
|
||||
virtual std::unique_ptr<BlackGui::Models::IModelFilter<BlackMisc::Simulation::CAircraftModelList>> createModelFilter() const override;
|
||||
|
||||
//! Set the provider
|
||||
virtual void setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider) override;
|
||||
|
||||
public slots:
|
||||
//! \copydoc CFilterWidget::onRowCountChanged
|
||||
virtual void onRowCountChanged(int count, bool withFilter) override;
|
||||
@@ -52,6 +55,13 @@ namespace BlackGui
|
||||
//! Clear form
|
||||
virtual void clearForm() override;
|
||||
|
||||
private slots:
|
||||
//! Simulator selection changed
|
||||
void ps_simulatorSelectionChanged(const BlackMisc::Simulation::CSimulatorInfo &info);
|
||||
|
||||
//! Distributor changed
|
||||
void ps_distributorChanged(const BlackMisc::Simulation::CDistributor &distributor);
|
||||
|
||||
private:
|
||||
QScopedPointer<Ui::CAircraftModelFilterBar> ui;
|
||||
};
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>658</width>
|
||||
<height>44</height>
|
||||
<height>48</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -41,7 +41,7 @@
|
||||
<item row="0" column="11">
|
||||
<widget class="QLineEdit" name="le_AircraftManufacturer">
|
||||
<property name="placeholderText">
|
||||
<string>manufacturer</string>
|
||||
<string>Manufacturer</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -84,14 +84,14 @@
|
||||
<item row="1" column="7">
|
||||
<widget class="QLineEdit" name="le_LiveryCode">
|
||||
<property name="placeholderText">
|
||||
<string>code</string>
|
||||
<string>Code</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="11">
|
||||
<widget class="QLineEdit" name="le_AirlineName">
|
||||
<property name="placeholderText">
|
||||
<string>airline name</string>
|
||||
<string>Airline name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -115,14 +115,14 @@
|
||||
<string/>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>description</string>
|
||||
<string>Description</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="7">
|
||||
<widget class="QLineEdit" name="le_ModelKey">
|
||||
<property name="placeholderText">
|
||||
<string>key</string>
|
||||
<string>Key</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -168,9 +168,25 @@
|
||||
<item row="1" column="0" colspan="6">
|
||||
<widget class="BlackGui::CSimulatorSelector" name="frp_SimulatorSelector"/>
|
||||
</item>
|
||||
<item row="1" column="8">
|
||||
<widget class="BlackGui::Components::CDbDistributorSelectorComponent" name="comp_DistributorSelector">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>BlackGui::CSimulatorSelector</class>
|
||||
<extends>QFrame</extends>
|
||||
<header>blackgui/simulatorselector.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>BlackGui::Filters::CFilterBarButtons</class>
|
||||
<extends>QFrame</extends>
|
||||
@@ -178,9 +194,9 @@
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>BlackGui::CSimulatorSelector</class>
|
||||
<class>BlackGui::Components::CDbDistributorSelectorComponent</class>
|
||||
<extends>QFrame</extends>
|
||||
<header>blackgui/simulatorselector.h</header>
|
||||
<header>blackgui/components/dbdistributorselectorcomponent.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
using namespace BlackGui::Models;
|
||||
using namespace BlackMisc::Simulation;
|
||||
using namespace BlackMisc::Network;
|
||||
|
||||
namespace BlackGui
|
||||
{
|
||||
@@ -33,5 +34,10 @@ namespace BlackGui
|
||||
{
|
||||
return ui->filter_Models->createModelFilter();
|
||||
}
|
||||
|
||||
void CAircraftModelFilterDialog::setProvider(IWebDataServicesProvider *webDataReaderProvider)
|
||||
{
|
||||
this->ui->filter_Models->setProvider(webDataReaderProvider);
|
||||
}
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "blackgui/blackguiexport.h"
|
||||
#include "filterdialog.h"
|
||||
#include "blackgui/models/aircraftmodelfilter.h"
|
||||
#include "blackmisc/network/webdataservicesprovider.h"
|
||||
#include <QDialog>
|
||||
#include <QScopedPointer>
|
||||
|
||||
@@ -41,6 +42,9 @@ namespace BlackGui
|
||||
//! \copydoc IModelFilterProvider::getModelFilter
|
||||
virtual std::unique_ptr<BlackGui::Models::IModelFilter<BlackMisc::Simulation::CAircraftModelList>> createModelFilter() const override;
|
||||
|
||||
//! Set the provider
|
||||
void setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider);
|
||||
|
||||
private:
|
||||
QScopedPointer<Ui::CAircraftModelFilterDialog> ui;
|
||||
};
|
||||
|
||||
@@ -22,12 +22,14 @@ namespace BlackGui
|
||||
const QString &aircraftIcao, const QString &aircraftManufacturer,
|
||||
const QString &airlineIcao, const QString &airlineName,
|
||||
const QString &liveryCode,
|
||||
const CSimulatorInfo &simInfo) :
|
||||
const CSimulatorInfo &simInfo,
|
||||
const CDistributor &distributor) :
|
||||
m_modelKey(modelKey.trimmed()), m_description(description.trimmed()),
|
||||
m_aircraftIcao(aircraftIcao.trimmed().toUpper()), m_aircraftManufacturer(aircraftManufacturer.trimmed().toUpper()),
|
||||
m_airlineIcao(airlineIcao.trimmed().toUpper()), m_airlineName(airlineName.trimmed().toUpper()),
|
||||
m_liveryCode(liveryCode.trimmed().toUpper()),
|
||||
m_simulatorInfo(simInfo)
|
||||
m_simulatorInfo(simInfo),
|
||||
m_distributor(distributor)
|
||||
{ }
|
||||
|
||||
BlackMisc::Simulation::CAircraftModelList CAircraftModelFilter::filter(const CAircraftModelList &inContainer) const
|
||||
@@ -75,6 +77,12 @@ namespace BlackGui
|
||||
{
|
||||
if (!this->stringMatchesFilterExpression(model.getLivery().getCombinedCode(), this->m_liveryCode)) { continue; }
|
||||
}
|
||||
|
||||
if (this->m_distributor.hasValidDbKey())
|
||||
{
|
||||
if (!model.getDistributor().matchesKeyOrAlias(this->m_distributor)) { continue; }
|
||||
}
|
||||
|
||||
outContainer.push_back(model);
|
||||
}
|
||||
return outContainer;
|
||||
@@ -86,6 +94,7 @@ namespace BlackGui
|
||||
this->m_aircraftManufacturer.isEmpty() && this->m_aircraftIcao.isEmpty() &&
|
||||
this->m_airlineIcao.isEmpty() && this->m_airlineName.isEmpty() &&
|
||||
this->m_liveryCode.isEmpty() &&
|
||||
!this->m_distributor.hasValidDbKey() &&
|
||||
this->m_simulatorInfo.isNoSimulator()
|
||||
);
|
||||
}
|
||||
|
||||
@@ -30,7 +30,9 @@ namespace BlackGui
|
||||
const QString &aircraftIcao, const QString &aircraftManufacturer,
|
||||
const QString &airlineIcao, const QString &airlineName,
|
||||
const QString &liveryCode,
|
||||
const BlackMisc::Simulation::CSimulatorInfo &simInfo = BlackMisc::Simulation::CSimulatorInfo::allSimulators());
|
||||
const BlackMisc::Simulation::CSimulatorInfo &simInfo = BlackMisc::Simulation::CSimulatorInfo::allSimulators(),
|
||||
const BlackMisc::Simulation::CDistributor &distributor = BlackMisc::Simulation::CDistributor()
|
||||
);
|
||||
|
||||
//! \copydoc IModelFilter::filter
|
||||
virtual BlackMisc::Simulation::CAircraftModelList filter(const BlackMisc::Simulation::CAircraftModelList &inContainer) const override;
|
||||
@@ -47,6 +49,7 @@ namespace BlackGui
|
||||
QString m_airlineName;
|
||||
QString m_liveryCode;
|
||||
BlackMisc::Simulation::CSimulatorInfo m_simulatorInfo;
|
||||
BlackMisc::Simulation::CDistributor m_distributor;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -113,6 +113,11 @@ namespace BlackGui
|
||||
this->setFilterDialog(new CAircraftModelFilterDialog(this));
|
||||
}
|
||||
|
||||
CAircraftModelFilterDialog *CAircraftModelView::getFilterDialog() const
|
||||
{
|
||||
return qobject_cast<CAircraftModelFilterDialog *>(this->getFilterWidget());
|
||||
}
|
||||
|
||||
int CAircraftModelView::removeModelsWithModelString(const QStringList &modelStrings, Qt::CaseSensitivity sensitivity)
|
||||
{
|
||||
if (modelStrings.isEmpty()) { return 0; }
|
||||
@@ -245,21 +250,21 @@ namespace BlackGui
|
||||
if (this->m_menus.testFlag(MenuCanStashModels))
|
||||
{
|
||||
menu.addAction(CIcons::appDbStash16(), "Stash", this, SLOT(ps_requestStash()));
|
||||
QAction *a = menu.addAction(CIcons::appDbStash16(), "Stashing clears selection", this, SLOT(ps_stashingClearsSelection()));
|
||||
QAction *a = menu.addAction(CIcons::appDbStash16(), "Stashing clears selection (on/off)", this, SLOT(ps_stashingClearsSelection()));
|
||||
a->setCheckable(true);
|
||||
a->setChecked(m_stashingClearsSelection);
|
||||
}
|
||||
if (this->m_menus.testFlag(MenuHighlightStashed))
|
||||
{
|
||||
// this function requires that someone provides the model strings to be highlighted
|
||||
QAction *a = menu.addAction(CIcons::appDbStash16(), "Highlight stashed", this, SLOT(ps_toggleHighlightStashedModels()));
|
||||
QAction *a = menu.addAction(CIcons::appDbStash16(), "Highlight stashed (on/off)", this, SLOT(ps_toggleHighlightStashedModels()));
|
||||
a->setCheckable(true);
|
||||
a->setChecked(this->derivedModel()->highlightModelStrings());
|
||||
}
|
||||
if (this->m_menus.testFlag(MenuHighlightInvalid))
|
||||
{
|
||||
// this function requires that someone provides the model strings to be highlighted
|
||||
QAction *a = menu.addAction(CIcons::appDbStash16(), "Highlight invalid models", this, SLOT(ps_to));
|
||||
QAction *a = menu.addAction(CIcons::appDbStash16(), "Highlight invalid models (on/off)", this, SLOT(ps_toggleHighlightDbData()));
|
||||
a->setCheckable(true);
|
||||
a->setChecked(this->derivedModel()->highlightDbData());
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@ namespace BlackGui
|
||||
//! Add my own filter dialog
|
||||
void addFilterDialog();
|
||||
|
||||
//! Filter dialog if any
|
||||
BlackGui::Filters::CAircraftModelFilterDialog *getFilterDialog() const;
|
||||
|
||||
//! Remove models with model strings
|
||||
int removeModelsWithModelString(const QStringList &modelStrings, Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user