Ref T75, filter livery by id

This commit is contained in:
Klaus Basan
2017-05-07 22:02:46 +02:00
parent 997d17c459
commit 7df685bbda
5 changed files with 145 additions and 86 deletions

View File

@@ -39,15 +39,16 @@ namespace BlackGui
connect(ui->le_AirlineIcaoCode, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
connect(ui->le_Description, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
connect(ui->le_LiveryCode, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
connect(ui->le_Id, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
connect(ui->color_Fuselage, &CColorSelector::colorChanged, this, &CLiveryFilterBar::ps_colorChanged);
connect(ui->color_Tail, &CColorSelector::colorChanged, this, &CLiveryFilterBar::ps_colorChanged);
connect(ui->cb_Airlines, &QCheckBox::released, this, &CFilterWidget::triggerFilter);
connect(ui->cb_Colors, &QCheckBox::released, this, &CFilterWidget::triggerFilter);
connect(ui->hs_ColorDistance, &QSlider::valueChanged, this, &CLiveryFilterBar::ps_colorDistanceChanged);
CUpperCaseValidator *ucv = new CUpperCaseValidator(this);
ui->le_AirlineIcaoCode->setValidator(ucv);
ui->le_LiveryCode->setValidator(ucv);
ui->le_AirlineIcaoCode->setValidator(new CUpperCaseValidator(ui->le_AirlineIcaoCode));
ui->le_LiveryCode->setValidator(new CUpperCaseValidator(ui->le_LiveryCode));
ui->le_Id->setValidator(new QIntValidator(ui->le_Id));
// reset form
this->clearForm();
@@ -58,8 +59,9 @@ namespace BlackGui
std::unique_ptr<BlackGui::Models::IModelFilter<CLiveryList> > CLiveryFilterBar::createModelFilter() const
{
double maxColorDistance = ui->hs_ColorDistance->value() / 100.0;
const double maxColorDistance = ui->hs_ColorDistance->value() / 100.0;
return std::make_unique<CLiveryFilter>(
convertDbId(ui->le_Id->text()),
ui->le_LiveryCode->text(),
ui->le_Description->text(),
ui->le_AirlineIcaoCode->text(),
@@ -103,14 +105,8 @@ namespace BlackGui
void CLiveryFilterBar::filter(const CAirlineIcaoCode &airlineIcao)
{
if (airlineIcao.hasValidDesignator())
{
ui->le_AirlineIcaoCode->setText(airlineIcao.getDesignator());
}
else
{
return;
}
if (!airlineIcao.hasValidDesignator()) { return; }
ui->le_AirlineIcaoCode->setText(airlineIcao.getDesignator());
ui->filter_Buttons->clickButton(CFilterBarButtons::Filter);
}
@@ -121,6 +117,7 @@ namespace BlackGui
void CLiveryFilterBar::clearForm()
{
ui->le_Id->clear();
ui->le_AirlineIcaoCode->clear();
ui->le_LiveryCode->clear();
ui->le_Description->clear();

View File

@@ -50,7 +50,7 @@ namespace BlackGui
explicit CLiveryFilterBar(QWidget *parent = nullptr);
//! Destructor
~CLiveryFilterBar();
virtual ~CLiveryFilterBar();
//! \copydoc Models::IModelFilterProvider::createModelFilter
virtual std::unique_ptr<BlackGui::Models::IModelFilter<BlackMisc::Aviation::CLiveryList>> createModelFilter() const override;

View File

@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>597</width>
<height>44</height>
<width>730</width>
<height>48</height>
</rect>
</property>
<property name="maximumSize">
@@ -44,48 +44,48 @@
<property name="verticalSpacing">
<number>2</number>
</property>
<item row="0" column="3">
<widget class="QLabel" name="lbl_AirlineIcaoCode">
<property name="text">
<string>Airline:</string>
<item row="0" column="8">
<spacer name="hs_Row1">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<item row="0" column="2">
<widget class="QLabel" name="lbl_LiveryCode">
<property name="text">
<string>Code:</string>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QLabel" name="lbl_Description">
<property name="text">
<string>Description:</string>
</property>
</widget>
</item>
<item row="0" column="2">
<item row="0" column="3">
<widget class="QLineEdit" name="le_LiveryCode">
<property name="placeholderText">
<string>Livery code</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="BlackGui::Filters::CFilterBarButtons" name="filter_Buttons">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
<item row="0" column="6">
<widget class="QLabel" name="lbl_Description">
<property name="text">
<string>Description:</string>
</property>
</widget>
</item>
<item row="0" column="6">
<widget class="QLineEdit" name="le_Description"/>
</item>
<item row="0" column="4">
<widget class="QLabel" name="lbl_AirlineIcaoCode">
<property name="text">
<string>Airline:</string>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QLineEdit" name="le_AirlineIcaoCode">
<property name="maximumSize">
<size>
@@ -98,7 +98,68 @@
</property>
</widget>
</item>
<item row="1" column="3" colspan="4">
<item row="0" column="7">
<widget class="QLineEdit" name="le_Description"/>
</item>
<item row="1" column="2" colspan="2">
<widget class="QWidget" name="wi_Flags" native="true">
<layout class="QHBoxLayout" name="hl_Flags">
<property name="spacing">
<number>10</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="cb_Colors">
<property name="text">
<string>Color liveries</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cb_Airlines">
<property name="text">
<string>Airline liveries</string>
</property>
</widget>
</item>
<item>
<spacer name="hs_Flags">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="BlackGui::Filters::CFilterBarButtons" name="filter_Buttons">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
<item row="1" column="4" colspan="4">
<widget class="QWidget" name="wi_Colors" native="true">
<layout class="QHBoxLayout" name="hl_Colors">
<property name="spacing">
@@ -171,14 +232,11 @@
</layout>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QWidget" name="wi_Flags" native="true">
<layout class="QHBoxLayout" name="hl_Flags">
<property name="spacing">
<number>10</number>
</property>
<item row="1" column="0">
<widget class="QWidget" name="wi_Id" native="true">
<layout class="QHBoxLayout" name="hl_Id">
<property name="leftMargin">
<number>5</number>
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
@@ -190,21 +248,27 @@
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="cb_Colors">
<widget class="QLabel" name="lbl_Id">
<property name="text">
<string>Color liveries</string>
<string>Id:</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cb_Airlines">
<property name="text">
<string>Airline liveries</string>
<widget class="QLineEdit" name="le_Id">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="placeholderText">
<string>id</string>
</property>
</widget>
</item>
<item>
<spacer name="hs_Flags">
<spacer name="hs_Id">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@@ -219,34 +283,21 @@
</layout>
</widget>
</item>
<item row="0" column="7">
<spacer name="hs_Row1">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>BlackGui::Components::CColorSelector</class>
<extends>QFrame</extends>
<header>blackgui/components/colorselector.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>BlackGui::Filters::CFilterBarButtons</class>
<extends>QFrame</extends>
<header>blackgui/filters/filterbarbuttons.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>BlackGui::Components::CColorSelector</class>
<extends>QFrame</extends>
<header>blackgui/components/colorselector.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>le_LiveryCode</tabstop>

View File

@@ -17,9 +17,10 @@ namespace BlackGui
{
namespace Models
{
CLiveryFilter::CLiveryFilter(const QString &combinedCode, const QString &descriptiom,
CLiveryFilter::CLiveryFilter(int id, const QString &combinedCode, const QString &descriptiom,
const QString &airlineDesignator,
const BlackMisc::CRgbColor &fuselageColor, const BlackMisc::CRgbColor &tailColor, double maxColorDistance, bool colorLiveries, bool airlineLiveries) :
m_id(id),
m_combinedCode(combinedCode.trimmed().toUpper()), m_description(descriptiom),
m_airlineIcaoDesignator(airlineDesignator.trimmed().toUpper()),
m_fuselageColor(fuselageColor), m_tailColor(tailColor), m_maxColorDistance(maxColorDistance),
@@ -35,12 +36,21 @@ namespace BlackGui
bool checkLiveryType = filterByLiveryType();
for (const CLivery &livery : inContainer)
{
if (m_id >= 0)
{
// search only for id
if (livery.isLoadedFromDb() && livery.getDbKey() == m_id)
{
outContainer.push_back(livery);
break;
}
continue;
}
if (checkLiveryType)
{
if (!m_colorLiveries && livery.isColorLivery()) {continue;}
if (!m_airlineLiveries && livery.isAirlineLivery()) { continue; }
}
if (!m_combinedCode.isEmpty())
{
if (!this->stringMatchesFilterExpression(livery.getCombinedCode(), m_combinedCode)) { continue; }
@@ -70,7 +80,7 @@ namespace BlackGui
{
if (filterByLiveryType()) { return true; }
if (m_fuselageColor.isValid() || m_tailColor.isValid()) { return true; }
return !(this->m_combinedCode.isEmpty() && this->m_description.isEmpty() &&
return !(this->m_id < 0 && this->m_combinedCode.isEmpty() && this->m_description.isEmpty() &&
this->m_airlineIcaoDesignator.isEmpty());
}

View File

@@ -23,26 +23,28 @@ namespace BlackGui
{
namespace Models
{
//! Filter for aircraft liveries
class BLACKGUI_EXPORT CLiveryFilter : public IModelFilter<BlackMisc::Aviation::CLiveryList>
{
public:
//! Constructor
CLiveryFilter(const QString &combinedCode,
const QString &descriptiom,
const QString &airlineDesignator,
const BlackMisc::CRgbColor &fuselageColor,
const BlackMisc::CRgbColor &tailColor,
double maxColorDistance,
bool colorLiveries,
bool airlineLiveries
);
CLiveryFilter(
int id,
const QString &combinedCode,
const QString &descriptiom,
const QString &airlineDesignator,
const BlackMisc::CRgbColor &fuselageColor,
const BlackMisc::CRgbColor &tailColor,
double maxColorDistance,
bool colorLiveries,
bool airlineLiveries
);
//! \copydoc IModelFilter::filter
virtual BlackMisc::Aviation::CLiveryList filter(const BlackMisc::Aviation::CLiveryList &inContainer) const override;
private:
int m_id = -1;
QString m_combinedCode;
QString m_description;
QString m_airlineIcaoDesignator;
@@ -58,7 +60,6 @@ namespace BlackGui
//! Valid filter?
bool valid() const;
};
} // namespace
} // namespace