refs #720, allow to filter by DB data

* tristate checkboxes
* can hide count element
* tab order
This commit is contained in:
Klaus Basan
2016-08-09 01:37:01 +02:00
committed by Mathew Sutcliffe
parent 019b623f43
commit d9a35563e3
8 changed files with 76 additions and 25 deletions

View File

@@ -15,6 +15,7 @@
#include "blackgui/uppercasevalidator.h" #include "blackgui/uppercasevalidator.h"
#include "blackmisc/simulation/aircraftmodel.h" #include "blackmisc/simulation/aircraftmodel.h"
#include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/aircraftmodellist.h"
#include "blackmisc/db/datastore.h"
#include "ui_aircraftmodelfilterbar.h" #include "ui_aircraftmodelfilterbar.h"
#include <QCheckBox> #include <QCheckBox>
@@ -22,6 +23,7 @@
#include <QtGlobal> #include <QtGlobal>
using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation;
using namespace BlackMisc::Db;
using namespace BlackGui; using namespace BlackGui;
using namespace BlackGui::Models; using namespace BlackGui::Models;
using namespace BlackGui::Components; using namespace BlackGui::Components;
@@ -46,8 +48,8 @@ namespace BlackGui
connect(ui->le_ModelDescription, &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->le_ModelKey, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
connect(ui->cb_Include, &QCheckBox::toggled, this, &CAircraftModelFilterBar::ps_checkBoxChanged); connect(ui->cbt_Db, &QCheckBox::toggled, this, &CAircraftModelFilterBar::ps_checkBoxChanged);
connect(ui->cb_Exclude, &QCheckBox::toggled, this, &CAircraftModelFilterBar::ps_checkBoxChanged); connect(ui->cbt_IncludeExclude, &QCheckBox::toggled, this, &CAircraftModelFilterBar::ps_checkBoxChanged);
connect(ui->frp_SimulatorSelector, &CSimulatorSelector::changed, this, &CAircraftModelFilterBar::ps_simulatorSelectionChanged); connect(ui->frp_SimulatorSelector, &CSimulatorSelector::changed, this, &CAircraftModelFilterBar::ps_simulatorSelectionChanged);
connect(ui->comp_DistributorSelector, &CDbDistributorSelectorComponent::changedDistributor, this, &CAircraftModelFilterBar::ps_distributorChanged); connect(ui->comp_DistributorSelector, &CDbDistributorSelectorComponent::changedDistributor, this, &CAircraftModelFilterBar::ps_distributorChanged);
@@ -66,15 +68,39 @@ namespace BlackGui
CAircraftModelFilterBar::~CAircraftModelFilterBar() CAircraftModelFilterBar::~CAircraftModelFilterBar()
{ } { }
void CAircraftModelFilterBar::displayCount(bool show)
{
ui->filter_Buttons->displayCount(show);
}
std::unique_ptr<BlackGui::Models::IModelFilter<BlackMisc::Simulation::CAircraftModelList> > CAircraftModelFilterBar::createModelFilter() const std::unique_ptr<BlackGui::Models::IModelFilter<BlackMisc::Simulation::CAircraftModelList> > CAircraftModelFilterBar::createModelFilter() const
{ {
CAircraftModel::ModelModeFilter mf = this->ui->cb_Include->isChecked() ? CAircraftModel::Include : CAircraftModel::Undefined; CAircraftModel::ModelModeFilter mf = CAircraftModel::All;
if (this->ui->cb_Exclude->isChecked()) { mf |= CAircraftModel::Exclude; } if (ui->cbt_IncludeExclude->checkState() == Qt::Checked)
{
mf = CAircraftModel::Include;
}
else if (ui->cbt_IncludeExclude->checkState() == Qt::Unchecked)
{
mf = CAircraftModel::Exclude;
}
BlackMisc::Db::DbKeyStateFilter dbf = BlackMisc::Db::All;
if (ui->cbt_Db->checkState() == Qt::Checked)
{
dbf = BlackMisc::Db::Valid;
}
else if (ui->cbt_Db->checkState() == Qt::Unchecked)
{
dbf = BlackMisc::Db::Invalid;
}
return std::unique_ptr<CAircraftModelFilter>( return std::unique_ptr<CAircraftModelFilter>(
new CAircraftModelFilter( new CAircraftModelFilter(
this->ui->le_ModelKey->text(), this->ui->le_ModelKey->text(),
this->ui->le_ModelDescription->text(), this->ui->le_ModelDescription->text(),
mf, mf,
dbf,
this->ui->le_AircraftIcao->text(), this->ui->le_AircraftIcao->text(),
this->ui->le_AircraftManufacturer->text(), this->ui->le_AircraftManufacturer->text(),
this->ui->le_AirlineIcao->text(), this->ui->le_AirlineIcao->text(),
@@ -101,8 +127,8 @@ namespace BlackGui
this->ui->le_LiveryCode->clear(); this->ui->le_LiveryCode->clear();
this->ui->frp_SimulatorSelector->setAll(); this->ui->frp_SimulatorSelector->setAll();
this->ui->comp_DistributorSelector->clear(); this->ui->comp_DistributorSelector->clear();
this->ui->cb_Exclude->setChecked(true); this->ui->cbt_IncludeExclude->setCheckState(Qt::PartiallyChecked);
this->ui->cb_Include->setChecked(true); this->ui->cbt_Db->setCheckState(Qt::PartiallyChecked);
} }
void CAircraftModelFilterBar::ps_simulatorSelectionChanged(const BlackMisc::Simulation::CSimulatorInfo &info) void CAircraftModelFilterBar::ps_simulatorSelectionChanged(const BlackMisc::Simulation::CSimulatorInfo &info)

View File

@@ -47,6 +47,9 @@ namespace BlackGui
//! Destructor //! Destructor
~CAircraftModelFilterBar(); ~CAircraftModelFilterBar();
//! Show count
void displayCount(bool show);
//! \copydoc Models::IModelFilterProvider::createModelFilter //! \copydoc Models::IModelFilterProvider::createModelFilter
virtual std::unique_ptr<BlackGui::Models::IModelFilter<BlackMisc::Simulation::CAircraftModelList>> createModelFilter() const override; virtual std::unique_ptr<BlackGui::Models::IModelFilter<BlackMisc::Simulation::CAircraftModelList>> createModelFilter() const override;

View File

@@ -39,7 +39,7 @@
<number>2</number> <number>2</number>
</property> </property>
<item row="0" column="5"> <item row="0" column="5">
<widget class="QWidget" name="wi_IncludeExclude" native="true"> <widget class="QWidget" name="wi_States" native="true">
<layout class="QHBoxLayout" name="hl_IncludeExclude"> <layout class="QHBoxLayout" name="hl_IncludeExclude">
<property name="leftMargin"> <property name="leftMargin">
<number>0</number> <number>0</number>
@@ -54,27 +54,27 @@
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
<widget class="QCheckBox" name="cb_Include"> <widget class="QCheckBox" name="cbt_IncludeExclude">
<property name="toolTip"> <property name="toolTip">
<string>Included models</string> <string>Included/excluded models?</string>
</property> </property>
<property name="text"> <property name="text">
<string>In.</string> <string>Incl.</string>
</property> </property>
<property name="checked"> <property name="tristate">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="cb_Exclude"> <widget class="QCheckBox" name="cbt_Db">
<property name="toolTip"> <property name="toolTip">
<string>Excluded models</string> <string>DB data?</string>
</property> </property>
<property name="text"> <property name="text">
<string>Ex.</string> <string>DB</string>
</property> </property>
<property name="checked"> <property name="tristate">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
@@ -177,6 +177,9 @@
</item> </item>
<item row="1" column="6"> <item row="1" column="6">
<widget class="QLabel" name="lbl_Livery"> <widget class="QLabel" name="lbl_Livery">
<property name="toolTip">
<string/>
</property>
<property name="text"> <property name="text">
<string>Livery:</string> <string>Livery:</string>
</property> </property>
@@ -229,6 +232,8 @@
</customwidget> </customwidget>
</customwidgets> </customwidgets>
<tabstops> <tabstops>
<tabstop>cbt_IncludeExclude</tabstop>
<tabstop>cbt_Db</tabstop>
<tabstop>le_ModelKey</tabstop> <tabstop>le_ModelKey</tabstop>
<tabstop>le_ModelDescription</tabstop> <tabstop>le_ModelDescription</tabstop>
<tabstop>le_AircraftIcao</tabstop> <tabstop>le_AircraftIcao</tabstop>

View File

@@ -28,6 +28,7 @@ namespace BlackGui
ui->setupUi(this); ui->setupUi(this);
this->setWindowTitle("Filter models"); this->setWindowTitle("Filter models");
this->resize(640, 100); this->resize(640, 100);
ui->filter_Models->displayCount(false);
connect(ui->filter_Models, &CAircraftModelFilterBar::rejectDialog, this, &CAircraftModelFilterDialog::reject); connect(ui->filter_Models, &CAircraftModelFilterBar::rejectDialog, this, &CAircraftModelFilterDialog::reject);
} }

View File

@@ -31,6 +31,11 @@ namespace BlackGui
CFilterBarButtons::~CFilterBarButtons() CFilterBarButtons::~CFilterBarButtons()
{ } { }
void CFilterBarButtons::displayCount(bool show)
{
ui->le_Count->setVisible(show);
}
void CFilterBarButtons::ps_buttonClicked() void CFilterBarButtons::ps_buttonClicked()
{ {
QObject *sender = QObject::sender(); QObject *sender = QObject::sender();

View File

@@ -49,6 +49,9 @@ namespace BlackGui
//! Destructor //! Destructor
~CFilterBarButtons(); ~CFilterBarButtons();
//! Show the counter
void displayCount(bool show);
signals: signals:
//! Filter button clicked //! Filter button clicked
void buttonClicked(FilterButton filterButton); void buttonClicked(FilterButton filterButton);
@@ -67,7 +70,6 @@ namespace BlackGui
private: private:
QScopedPointer<Ui::CFilterBarButtons> ui; QScopedPointer<Ui::CFilterBarButtons> ui;
}; };
} // ns } // ns
} // ns } // ns

View File

@@ -19,13 +19,15 @@ namespace BlackGui
{ {
namespace Models namespace Models
{ {
CAircraftModelFilter::CAircraftModelFilter(const QString &modelKey, const QString &description, CAircraftModel::ModelModeFilter modelMode, CAircraftModelFilter::CAircraftModelFilter(const QString &modelKey, const QString &description,
CAircraftModel::ModelModeFilter modelMode, BlackMisc::Db::DbKeyStateFilter dbKeyFilter,
const QString &aircraftIcao, const QString &aircraftManufacturer, const QString &aircraftIcao, const QString &aircraftManufacturer,
const QString &airlineIcao, const QString &airlineName, const QString &airlineIcao, const QString &airlineName,
const QString &liveryCode, const QString &liveryCode,
const CSimulatorInfo &simInfo, const CSimulatorInfo &simInfo,
const CDistributor &distributor) : const CDistributor &distributor) :
m_modelKey(modelKey.trimmed().toUpper()), m_description(description.trimmed()), m_modelMode(modelMode), m_modelKey(modelKey.trimmed().toUpper()), m_description(description.trimmed()),
m_modelMode(modelMode), m_dbKeyFilter(dbKeyFilter),
m_aircraftIcao(aircraftIcao.trimmed().toUpper()), m_aircraftManufacturer(aircraftManufacturer.trimmed().toUpper()), m_aircraftIcao(aircraftIcao.trimmed().toUpper()), m_aircraftManufacturer(aircraftManufacturer.trimmed().toUpper()),
m_airlineIcao(airlineIcao.trimmed().toUpper()), m_airlineName(airlineName.trimmed().toUpper()), m_airlineIcao(airlineIcao.trimmed().toUpper()), m_airlineName(airlineName.trimmed().toUpper()),
m_liveryCode(liveryCode.trimmed().toUpper()), m_liveryCode(liveryCode.trimmed().toUpper()),
@@ -56,11 +58,16 @@ namespace BlackGui
if (!this->stringMatchesFilterExpression(model.getDescription(), this->m_description)) { continue; } if (!this->stringMatchesFilterExpression(model.getDescription(), this->m_description)) { continue; }
} }
if (this->m_modelMode != CAircraftModel::Undefined) if (this->m_modelMode != CAircraftModel::All && this->m_modelMode != CAircraftModel::Undefined)
{ {
if (!model.matchesMode(this->m_modelMode)) { continue; } if (!model.matchesMode(this->m_modelMode)) { continue; }
} }
if (this->m_dbKeyFilter != BlackMisc::Db::All && this->m_dbKeyFilter != BlackMisc::Db::Undefined)
{
if (!model.matchesDbKeyState(this->m_dbKeyFilter)) { continue; }
}
if (!this->m_aircraftIcao.isEmpty()) if (!this->m_aircraftIcao.isEmpty())
{ {
if (!this->stringMatchesFilterExpression(model.getAircraftIcaoCodeDesignator(), this->m_aircraftIcao)) { continue; } if (!this->stringMatchesFilterExpression(model.getAircraftIcaoCodeDesignator(), this->m_aircraftIcao)) { continue; }
@@ -96,8 +103,6 @@ namespace BlackGui
return outContainer; return outContainer;
} }
bool CAircraftModelFilter::valid() const bool CAircraftModelFilter::valid() const
{ {
const bool allEmpty = this->m_modelKey.isEmpty() && this->m_description.isEmpty() && const bool allEmpty = this->m_modelKey.isEmpty() && this->m_description.isEmpty() &&
@@ -106,10 +111,10 @@ namespace BlackGui
this->m_liveryCode.isEmpty(); this->m_liveryCode.isEmpty();
if (!allEmpty) { return true; } if (!allEmpty) { return true; }
const bool noSim = this->m_simulatorInfo.isNoSimulator() || this->m_simulatorInfo.isAllSimulators(); const bool noSim = this->m_simulatorInfo.isNoSimulator() || this->m_simulatorInfo.isAllSimulators();
const bool noMode = this->m_modelMode == CAircraftModel::Undefined || this->m_modelMode == CAircraftModel::All; const bool noModelMode = this->m_modelMode == CAircraftModel::Undefined || this->m_modelMode == CAircraftModel::All;
const bool noDbState = this->m_dbKeyFilter == BlackMisc::Db::Undefined || this->m_dbKeyFilter == BlackMisc::Db::All;
const bool noKey = !this->m_distributor.hasValidDbKey(); const bool noKey = !this->m_distributor.hasValidDbKey();
return !(noSim && noMode && noKey); return !(noSim && noModelMode && noDbState && noKey);
} }
} // namespace } // namespace
} // namespace } // namespace

View File

@@ -18,6 +18,7 @@
#include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/aircraftmodellist.h"
#include "blackmisc/simulation/distributor.h" #include "blackmisc/simulation/distributor.h"
#include "blackmisc/simulation/simulatorinfo.h" #include "blackmisc/simulation/simulatorinfo.h"
#include "blackmisc/db/datastore.h"
#include <QString> #include <QString>
@@ -30,7 +31,9 @@ namespace BlackGui
{ {
public: public:
//! Constructor //! Constructor
CAircraftModelFilter(const QString &modelKey, const QString &description, BlackMisc::Simulation::CAircraftModel::ModelModeFilter modelMode, CAircraftModelFilter(const QString &modelKey, const QString &description,
BlackMisc::Simulation::CAircraftModel::ModelModeFilter modelMode,
BlackMisc::Db::DbKeyStateFilter dbKeyFilter,
const QString &aircraftIcao, const QString &aircraftManufacturer, const QString &aircraftIcao, const QString &aircraftManufacturer,
const QString &airlineIcao, const QString &airlineName, const QString &airlineIcao, const QString &airlineName,
const QString &liveryCode, const QString &liveryCode,
@@ -45,6 +48,7 @@ namespace BlackGui
QString m_modelKey; QString m_modelKey;
QString m_description; QString m_description;
BlackMisc::Simulation::CAircraftModel::ModelModeFilter m_modelMode; BlackMisc::Simulation::CAircraftModel::ModelModeFilter m_modelMode;
BlackMisc::Db::DbKeyStateFilter m_dbKeyFilter;
QString m_aircraftIcao; QString m_aircraftIcao;
QString m_aircraftManufacturer; QString m_aircraftManufacturer;
QString m_airlineIcao; QString m_airlineIcao;