diff --git a/src/blackgui/filters/liveryfilterbar.cpp b/src/blackgui/filters/liveryfilterbar.cpp index e2a7f9187..a6db539e7 100644 --- a/src/blackgui/filters/liveryfilterbar.cpp +++ b/src/blackgui/filters/liveryfilterbar.cpp @@ -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 > CLiveryFilterBar::createModelFilter() const { - double maxColorDistance = ui->hs_ColorDistance->value() / 100.0; + const double maxColorDistance = ui->hs_ColorDistance->value() / 100.0; return std::make_unique( + 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(); diff --git a/src/blackgui/filters/liveryfilterbar.h b/src/blackgui/filters/liveryfilterbar.h index c99f315ce..85783e6e6 100644 --- a/src/blackgui/filters/liveryfilterbar.h +++ b/src/blackgui/filters/liveryfilterbar.h @@ -50,7 +50,7 @@ namespace BlackGui explicit CLiveryFilterBar(QWidget *parent = nullptr); //! Destructor - ~CLiveryFilterBar(); + virtual ~CLiveryFilterBar(); //! \copydoc Models::IModelFilterProvider::createModelFilter virtual std::unique_ptr> createModelFilter() const override; diff --git a/src/blackgui/filters/liveryfilterbar.ui b/src/blackgui/filters/liveryfilterbar.ui index 2ba1a6dd5..b10e52890 100644 --- a/src/blackgui/filters/liveryfilterbar.ui +++ b/src/blackgui/filters/liveryfilterbar.ui @@ -6,8 +6,8 @@ 0 0 - 597 - 44 + 730 + 48 @@ -44,48 +44,48 @@ 2 - - - - Airline: + + + + Qt::Horizontal - + + + 40 + 20 + + + - + Code: - - - - Description: - - - - + Livery code - - - - QFrame::StyledPanel - - - QFrame::Raised + + + + Description: - - - + + + Airline: + + + + @@ -98,7 +98,68 @@ - + + + + + + + + 10 + + + 5 + + + 0 + + + 0 + + + 0 + + + + + Color liveries + + + + + + + Airline liveries + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + @@ -171,14 +232,11 @@ - - - - - 10 - + + + - 5 + 0 0 @@ -190,21 +248,27 @@ 0 - + - Color liveries + Id: - - - Airline liveries + + + + 50 + 16777215 + + + + id - + Qt::Horizontal @@ -219,34 +283,21 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - BlackGui::Components::CColorSelector - QFrame -
blackgui/components/colorselector.h
- 1 -
BlackGui::Filters::CFilterBarButtons QFrame
blackgui/filters/filterbarbuttons.h
1
+ + BlackGui::Components::CColorSelector + QFrame +
blackgui/components/colorselector.h
+ 1 +
le_LiveryCode diff --git a/src/blackgui/models/liveryfilter.cpp b/src/blackgui/models/liveryfilter.cpp index 8aaca7f94..9ae0b8fcd 100644 --- a/src/blackgui/models/liveryfilter.cpp +++ b/src/blackgui/models/liveryfilter.cpp @@ -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()); } diff --git a/src/blackgui/models/liveryfilter.h b/src/blackgui/models/liveryfilter.h index 82f73969b..8ec6be90d 100644 --- a/src/blackgui/models/liveryfilter.h +++ b/src/blackgui/models/liveryfilter.h @@ -23,26 +23,28 @@ namespace BlackGui { namespace Models { - //! Filter for aircraft liveries class BLACKGUI_EXPORT CLiveryFilter : public IModelFilter { 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