refs #577, filter for aircraft model

* allow to filter by distributor
* filter by simulator on change
This commit is contained in:
Klaus Basan
2016-01-25 00:12:13 +01:00
parent 572b604908
commit c54dd8560d
13 changed files with 121 additions and 16 deletions

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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;
};

View File

@@ -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>

View File

@@ -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

View File

@@ -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;
};

View File

@@ -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()
);
}

View File

@@ -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

View File

@@ -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());
}

View File

@@ -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);