mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-16 10:25:36 +08:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user