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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -19,13 +19,15 @@ namespace BlackGui
{
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 &airlineIcao, const QString &airlineName,
const QString &liveryCode,
const CSimulatorInfo &simInfo,
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_airlineIcao(airlineIcao.trimmed().toUpper()), m_airlineName(airlineName.trimmed().toUpper()),
m_liveryCode(liveryCode.trimmed().toUpper()),
@@ -56,11 +58,16 @@ namespace BlackGui
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 (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->stringMatchesFilterExpression(model.getAircraftIcaoCodeDesignator(), this->m_aircraftIcao)) { continue; }
@@ -96,8 +103,6 @@ namespace BlackGui
return outContainer;
}
bool CAircraftModelFilter::valid() const
{
const bool allEmpty = this->m_modelKey.isEmpty() && this->m_description.isEmpty() &&
@@ -106,10 +111,10 @@ namespace BlackGui
this->m_liveryCode.isEmpty();
if (!allEmpty) { return true; }
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();
return !(noSim && noMode && noKey);
return !(noSim && noModelMode && noDbState && noKey);
}
} // namespace
} // namespace

View File

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