Ref T70, filters and model

* added model descriptions in view model
* filtering for family and all 3 descriptions
* completers for filter fields
This commit is contained in:
Klaus Basan
2017-06-15 00:37:08 +02:00
parent 63598a6a4e
commit 334adbf02d
6 changed files with 84 additions and 18 deletions

View File

@@ -12,16 +12,20 @@
#include "blackgui/filters/filterbarbuttons.h"
#include "blackgui/models/aircrafticaofilter.h"
#include "blackgui/uppercasevalidator.h"
#include "blackgui/guiapplication.h"
#include "blackcore/webdataservices.h"
#include "blackmisc/aviation/aircrafticaocode.h"
#include "blackmisc/aviation/aircrafticaocodelist.h"
#include "ui_aircrafticaofilterbar.h"
#include <QLineEdit>
#include <QString>
#include <QCompleter>
using namespace BlackMisc::Aviation;
using namespace BlackGui;
using namespace BlackGui::Models;
using namespace BlackCore;
namespace BlackGui
{
@@ -37,11 +41,19 @@ namespace BlackGui
connect(ui->le_Manufacturer, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
connect(ui->le_Description, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
connect(ui->le_Id, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
connect(ui->le_Family, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
ui->le_Designator->setValidator(new CUpperCaseValidator(ui->le_Designator));
ui->le_Family->setValidator(new CUpperCaseValidator(ui->le_Family));
ui->le_Manufacturer->setValidator(new CUpperCaseValidator(ui->le_Manufacturer));
ui->le_Id->setValidator(new QIntValidator(ui->le_Id));
if (sGui && sGui->hasWebDataServices())
{
connect(sGui->getWebDataServices(), &CWebDataServices::swiftDbAircraftIcaoRead, this, &CAircraftIcaoFilterBar::initCompleters);
this->initCompleters();
}
// reset form
this->clearForm();
}
@@ -54,6 +66,7 @@ namespace BlackGui
return std::make_unique<CAircraftIcaoFilter>(
convertDbId(ui->le_Id->text()),
ui->le_Designator->text(),
ui->le_Family->text(),
ui->le_Manufacturer->text(),
ui->le_Description->text(),
ui->combinedType_Selector->getCombinedType()
@@ -107,5 +120,21 @@ namespace BlackGui
ui->le_Description->clear();
ui->combinedType_Selector->clear();
}
void CAircraftIcaoFilterBar::initCompleters()
{
if (m_hasCompleters) { return; }
if (!sGui || !sGui->hasWebDataServices()) { return; }
if (sGui->getWebDataServices()->getAircraftIcaoCodesCount() < 1) { return; }
m_hasCompleters = true;
const CAircraftIcaoCodeList codes = sGui->getWebDataServices()->getAircraftIcaoCodes();
const QStringList designators = codes.allIcaoCodes().toList();
ui->le_Designator->setCompleter(new QCompleter(designators, ui->le_Designator));
const QStringList families = codes.allFamilies().toList();
ui->le_Family->setCompleter(new QCompleter(families, ui->le_Family));
const QStringList manufacturers = codes.allManufacturers().toList();
ui->le_Manufacturer->setCompleter(new QCompleter(manufacturers, ui->le_Manufacturer));
}
} // ns
} // nss

View File

@@ -31,7 +31,6 @@ namespace BlackMisc
}
}
namespace Ui { class CAircraftIcaoFilterBar; }
namespace BlackGui
{
namespace Filters
@@ -50,7 +49,7 @@ namespace BlackGui
explicit CAircraftIcaoFilterBar(QWidget *parent = nullptr);
//! Destructor
~CAircraftIcaoFilterBar();
virtual ~CAircraftIcaoFilterBar();
//! \copydoc Models::IModelFilterProvider::createModelFilter
std::unique_ptr<BlackGui::Models::IModelFilter<BlackMisc::Aviation::CAircraftIcaoCodeList> > createModelFilter() const override;
@@ -71,8 +70,11 @@ namespace BlackGui
private:
QScopedPointer<Ui::CAircraftIcaoFilterBar> ui;
};
bool m_hasCompleters = false;
//! Set the completers
void initCompleters();
};
} // ns
} // ns

View File

@@ -78,7 +78,7 @@
<widget class="QLineEdit" name="le_Designator">
<property name="maximumSize">
<size>
<width>50</width>
<width>75</width>
<height>16777215</height>
</size>
</property>
@@ -172,7 +172,7 @@
</layout>
</widget>
</item>
<item row="1" column="2" colspan="3">
<item row="1" column="4" colspan="3">
<widget class="BlackGui::Components::CAircraftCombinedTypeSelector" name="combinedType_Selector">
<property name="minimumSize">
<size>
@@ -188,13 +188,36 @@
</property>
</widget>
</item>
<item row="1" column="1">
<item row="1" column="3">
<widget class="QLabel" name="lbl_Combined">
<property name="text">
<string>Combined:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="lbl_Family">
<property name="text">
<string>Family:</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLineEdit" name="le_Family">
<property name="maximumSize">
<size>
<width>75</width>
<height>16777215</height>
</size>
</property>
<property name="maxLength">
<number>10</number>
</property>
<property name="placeholderText">
<string>Family</string>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>

View File

@@ -18,21 +18,24 @@ namespace BlackGui
{
CAircraftIcaoFilter::CAircraftIcaoFilter(
int id,
const QString &designator, const QString &name,
const QString &designator, const QString &family, const QString &manufacturer,
const QString &description, const QString &combinedType) :
m_id(id),
m_designator(designator.trimmed().toUpper()), m_manufacturer(name.trimmed()),
m_description(description.trimmed()), m_combinedType(combinedType.trimmed().toUpper())
m_designator(designator.trimmed().toUpper()),
m_family(family.trimmed().toUpper()),
m_manufacturer(manufacturer.trimmed()),
m_description(description.trimmed()),
m_combinedType(combinedType.trimmed().toUpper())
{
this->m_valid = !(this->m_id < 0 && this->m_combinedType.isEmpty() && this->m_designator.isEmpty() &&
this->m_description.isEmpty() && this->m_manufacturer.isEmpty());
this->m_family.isEmpty() && this->m_description.isEmpty() && this->m_manufacturer.isEmpty());
}
CAircraftIcaoCodeList CAircraftIcaoFilter::filter(const CAircraftIcaoCodeList &inContainer) const
{
if (!this->isValid()) { return inContainer; }
CAircraftIcaoCodeList outContainer;
bool filterCombinedCode = !this->m_combinedType.isEmpty() && !this->m_combinedType.contains('-') && CAircraftIcaoCode::isValidCombinedType(this->m_combinedType);
const bool filterCombinedCode = !this->m_combinedType.isEmpty() && !this->m_combinedType.contains('-') && CAircraftIcaoCode::isValidCombinedType(this->m_combinedType);
for (const CAircraftIcaoCode &icao : inContainer)
{
@@ -50,13 +53,21 @@ namespace BlackGui
{
if (!this->stringMatchesFilterExpression(icao.getDesignator(), m_designator)) { continue; }
}
if (!m_family.isEmpty())
{
if (!this->stringMatchesFilterExpression(icao.getFamily(), m_family)) { continue; }
}
if (!m_manufacturer.isEmpty())
{
if (!this->stringMatchesFilterExpression(icao.getManufacturer(), m_manufacturer)) { continue; }
}
if (!m_description.isEmpty())
{
if (!this->stringMatchesFilterExpression(icao.getModelDescription(), m_description)) { continue; }
const bool ignore =
!this->stringMatchesFilterExpression(icao.getModelDescription(), m_description) &&
!this->stringMatchesFilterExpression(icao.getModelSwiftDescription(), m_description) &&
!this->stringMatchesFilterExpression(icao.getModelIataDescription(), m_description);
if (ignore) { continue; }
}
if (filterCombinedCode)
{

View File

@@ -22,7 +22,6 @@ namespace BlackGui
{
namespace Models
{
//! Filter for aircraft ICAO data
class BLACKGUI_EXPORT CAircraftIcaoFilter :
public IModelFilter<BlackMisc::Aviation::CAircraftIcaoCodeList>
@@ -31,6 +30,7 @@ namespace BlackGui
//! Constructor
CAircraftIcaoFilter(int id,
const QString &designator,
const QString &family,
const QString &manufacturer,
const QString &description,
const QString &combinedType);
@@ -41,11 +41,11 @@ namespace BlackGui
private:
int m_id = -1;
QString m_designator;
QString m_family;
QString m_manufacturer;
QString m_description;
QString m_combinedType;
};
} // namespace
} // namespace

View File

@@ -32,12 +32,13 @@ namespace BlackGui
this->m_columns.addColumn(CColumn::standardValueObject("rank", CAircraftIcaoCode::IndexRank, CDefaultFormatter::alignRightVCenter()));
this->m_columns.addColumn(CColumn::standardString("manufacturer", CAircraftIcaoCode::IndexManufacturer));
this->m_columns.addColumn(CColumn::standardString("family", CAircraftIcaoCode::IndexFamily));
this->m_columns.addColumn(CColumn::standardString("desc.", "description", CAircraftIcaoCode::IndexModelDescription));
this->m_columns.addColumn(CColumn::standardString("code", "combined code", CAircraftIcaoCode::IndexCombinedAircraftType));
this->m_columns.addColumn(CColumn::standardString("ICAO desc.", "ICAO description", CAircraftIcaoCode::IndexModelDescription));
this->m_columns.addColumn(CColumn::standardString("IATA desc.", "IATA description", CAircraftIcaoCode::IndexModelIataDescription));
this->m_columns.addColumn(CColumn::standardString("swift desc.", "swift description", CAircraftIcaoCode::IndexModelSwiftDescription));
this->m_columns.addColumn(CColumn::standardString("type", "combined type", CAircraftIcaoCode::IndexCombinedAircraftType));
this->m_columns.addColumn(CColumn::standardString("WTC", "wake turbulence category", CAircraftIcaoCode::IndexWtc));
this->m_columns.addColumn(CColumn("mil.", "military", CAircraftIcaoCode::IndexIsMilitary, new CBoolIconFormatter("military", "civil")));
this->m_columns.addColumn(CColumn("VTOL", "vertical take-off and landing", CAircraftIcaoCode::IndexIsVtol, new CBoolIconFormatter("VTOL", "non VTOL")));
this->m_columns.addColumn(CColumn("leg.", "legacy", CAircraftIcaoCode::IndexIsLegacy, new CBoolIconFormatter("legacy", "operating")));
this->m_columns.addColumn(CColumn("VTOL", "vertical take-off and landing", CAircraftIcaoCode::IndexIsVtol, new CBoolIconFormatter("VTOL", "non VTOL"))); this->m_columns.addColumn(CColumn("leg.", "legacy", CAircraftIcaoCode::IndexIsLegacy, new CBoolIconFormatter("legacy", "operating")));
this->m_columns.addColumn(CColumn("real.", "real world aircraft", CAircraftIcaoCode::IndexIsRealworld, new CBoolIconFormatter("real", "non real")));
this->m_columns.addColumn(CColumn::standardString("changed", CAircraftIcaoCode::IndexUtcTimestampFormattedYmdhms));