Improved livery filter bar and filer, accept virtual airline designators

This commit is contained in:
Klaus Basan
2019-01-02 06:41:15 +01:00
committed by Mat Sutcliffe
parent 8bb7eb5d2b
commit e85680f1b0
4 changed files with 136 additions and 191 deletions

View File

@@ -40,11 +40,11 @@ namespace BlackGui
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->color_Fuselage, &CColorSelector::colorChanged, this, &CLiveryFilterBar::onColorChanged);
connect(ui->color_Tail, &CColorSelector::colorChanged, this, &CLiveryFilterBar::onColorChanged);
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);
connect(ui->hs_ColorDistance, &QSlider::valueChanged, this, &CLiveryFilterBar::onColorDistanceChanged);
ui->le_AirlineIcaoCode->setValidator(new CUpperCaseValidator(ui->le_AirlineIcaoCode));
ui->le_LiveryCode->setValidator(new CUpperCaseValidator(ui->le_LiveryCode));
@@ -57,7 +57,7 @@ namespace BlackGui
CLiveryFilterBar::~CLiveryFilterBar()
{ }
std::unique_ptr<BlackGui::Models::IModelFilter<CLiveryList> > CLiveryFilterBar::createModelFilter() const
std::unique_ptr<Models::IModelFilter<CLiveryList> > CLiveryFilterBar::createModelFilter() const
{
const double maxColorDistance = ui->hs_ColorDistance->value() / 100.0;
return std::make_unique<CLiveryFilter>(
@@ -106,7 +106,7 @@ namespace BlackGui
void CLiveryFilterBar::filter(const CAirlineIcaoCode &airlineIcao)
{
if (!airlineIcao.hasValidDesignator()) { return; }
ui->le_AirlineIcaoCode->setText(airlineIcao.getDesignator());
ui->le_AirlineIcaoCode->setText(airlineIcao.getVDesignator());
ui->filter_Buttons->clickButton(CFilterBarButtons::Filter);
}
@@ -123,18 +123,18 @@ namespace BlackGui
ui->le_Description->clear();
ui->color_Fuselage->clear();
ui->color_Tail->clear();
ui->hs_ColorDistance->setValue(0.25 * 100.0);
ui->hs_ColorDistance->setValue(qRound(0.25 * 100.0));
ui->cb_Airlines->setChecked(true);
ui->cb_Colors->setChecked(true);
}
void CLiveryFilterBar::ps_colorChanged(const BlackMisc::CRgbColor &color)
void CLiveryFilterBar::onColorChanged(const BlackMisc::CRgbColor &color)
{
this->triggerFilter();
Q_UNUSED(color);
}
void CLiveryFilterBar::ps_colorDistanceChanged(int distance)
void CLiveryFilterBar::onColorDistanceChanged(int distance)
{
this->triggerFilter();
Q_UNUSED(distance);

View File

@@ -21,8 +21,7 @@
#include <QScopedPointer>
#include <memory>
class QWidget;
namespace Ui { class CLiveryFilterBar; }
namespace BlackMisc
{
namespace Aviation
@@ -31,7 +30,6 @@ namespace BlackMisc
class CLiveryList;
}
}
namespace Ui { class CLiveryFilterBar; }
namespace BlackGui
{
namespace Filters
@@ -41,7 +39,7 @@ namespace BlackGui
*/
class BLACKGUI_EXPORT CLiveryFilterBar :
public CFilterWidget,
public BlackGui::Models::IModelFilterProvider<BlackMisc::Aviation::CLiveryList>
public Models::IModelFilterProvider<BlackMisc::Aviation::CLiveryList>
{
Q_OBJECT
@@ -69,14 +67,13 @@ namespace BlackGui
//! Clear form
virtual void clearForm() override;
private slots:
private:
//! Color changed
void ps_colorChanged(const BlackMisc::CRgbColor &color);
void onColorChanged(const BlackMisc::CRgbColor &color);
//! Color distance changed
void ps_colorDistanceChanged(int distance);
void onColorDistanceChanged(int distance);
private:
QScopedPointer<Ui::CLiveryFilterBar> ui;
};
} // ns

View File

@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>730</width>
<height>48</height>
<width>453</width>
<height>49</height>
</rect>
</property>
<property name="maximumSize">
@@ -19,51 +19,100 @@
<property name="windowTitle">
<string>Livery filter</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gl_CLiveryFilterBar">
<layout class="QVBoxLayout" name="vl_LiveryFilterBar">
<property name="leftMargin">
<number>0</number>
<number>2</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
<number>2</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="horizontalSpacing">
<number>4</number>
</property>
<property name="verticalSpacing">
<number>2</number>
</property>
<item row="0" column="6">
<widget class="QLabel" name="lbl_Description">
<property name="text">
<string>Description:</string>
</property>
<item>
<widget class="QWidget" name="wi_Top" native="true">
<layout class="QHBoxLayout" name="hl_Top">
<property name="leftMargin">
<number>0</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="BlackGui::Filters::CFilterBarButtons" name="filter_Buttons">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lbl_LiveryCode">
<property name="text">
<string>Code:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="le_LiveryCode">
<property name="placeholderText">
<string>Livery code</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lbl_AirlineIcaoCode">
<property name="text">
<string>Airline:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="le_AirlineIcaoCode">
<property name="maximumSize">
<size>
<width>75</width>
<height>16777215</height>
</size>
</property>
<property name="placeholderText">
<string>ICAO</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lbl_Description">
<property name="text">
<string>Description:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="le_Description"/>
</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">
<item>
<widget class="QWidget" name="wi_Bottom" native="true">
<layout class="QHBoxLayout" name="hl_Bottom">
<property name="spacing">
<number>10</number>
</property>
@@ -79,6 +128,40 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="lbl_Id">
<property name="text">
<string>Id:</string>
</property>
</widget>
</item>
<item>
<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>
<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>
<widget class="QLabel" name="lbl_Color">
<property name="text">
@@ -134,142 +217,6 @@
</layout>
</widget>
</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="7">
<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="2">
<widget class="QLabel" name="lbl_LiveryCode">
<property name="text">
<string>Code:</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLineEdit" name="le_LiveryCode">
<property name="placeholderText">
<string>Livery code</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QWidget" name="wi_Id" native="true">
<layout class="QHBoxLayout" name="hl_Id">
<property name="leftMargin">
<number>0</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="QLabel" name="lbl_Id">
<property name="text">
<string>Id:</string>
</property>
</widget>
</item>
<item>
<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_Id">
<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="5">
<widget class="QLineEdit" name="le_AirlineIcaoCode">
<property name="maximumSize">
<size>
<width>75</width>
<height>16777215</height>
</size>
</property>
<property name="placeholderText">
<string>ICAO</string>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
@@ -290,6 +237,7 @@
<tabstop>le_LiveryCode</tabstop>
<tabstop>le_AirlineIcaoCode</tabstop>
<tabstop>le_Description</tabstop>
<tabstop>le_Id</tabstop>
<tabstop>cb_Colors</tabstop>
<tabstop>cb_Airlines</tabstop>
<tabstop>hs_ColorDistance</tabstop>

View File

@@ -26,7 +26,7 @@ namespace BlackGui
m_fuselageColor(fuselageColor), m_tailColor(tailColor), m_maxColorDistance(maxColorDistance),
m_colorLiveries(colorLiveries), m_airlineLiveries(airlineLiveries)
{
this->m_valid = valid();
m_valid = valid();
}
CLiveryList CLiveryFilter::filter(const CLiveryList &inContainer) const
@@ -61,7 +61,7 @@ namespace BlackGui
}
if (!m_airlineIcaoDesignator.isEmpty())
{
if (!this->stringMatchesFilterExpression(livery.getAirlineIcaoCode().getDesignator(), m_airlineIcaoDesignator)) { continue; }
if (!this->stringMatchesFilterExpression(livery.getAirlineIcaoCode().getVDesignator(), m_airlineIcaoDesignator)) { continue; }
}
if (m_fuselageColor.isValid())
{
@@ -80,8 +80,8 @@ namespace BlackGui
{
if (filterByLiveryType()) { return true; }
if (m_fuselageColor.isValid() || m_tailColor.isValid()) { return true; }
return !(this->m_id < 0 && this->m_combinedCode.isEmpty() && this->m_description.isEmpty() &&
this->m_airlineIcaoDesignator.isEmpty());
return !(m_id < 0 && m_combinedCode.isEmpty() && m_description.isEmpty() &&
m_airlineIcaoDesignator.isEmpty());
}
bool CLiveryFilter::filterByLiveryType() const