mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-09 13:35:34 +08:00
refs #720, allow to filter by DB data
* tristate checkboxes * can hide count element * tab order
This commit is contained in:
committed by
Mathew Sutcliffe
parent
019b623f43
commit
d9a35563e3
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user