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

View File

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

View File

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

View File

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

View File

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