From 93e6e1d38eb09fda32713dc220f61f790020aa65 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 24 Sep 2015 00:03:20 +0200 Subject: [PATCH] refs #452 filter UI elements --- .../filters/aircrafticaofilterbar.cpp | 88 ++++++ src/blackgui/filters/aircrafticaofilterbar.h | 68 +++++ src/blackgui/filters/aircrafticaofilterbar.ui | 159 +++++++++++ .../filters/aircraftmodelfilterbar.cpp | 70 +++++ src/blackgui/filters/aircraftmodelfilterbar.h | 61 ++++ .../filters/aircraftmodelfilterbar.ui | 198 +++++++++++++ .../filters/aircraftmodelfilterdialog.cpp | 37 +++ .../filters/aircraftmodelfilterdialog.h | 51 ++++ .../filters/aircraftmodelfilterdialog.ui | 82 ++++++ src/blackgui/filters/airlineicaofilterbar.cpp | 86 ++++++ src/blackgui/filters/airlineicaofilterbar.h | 68 +++++ src/blackgui/filters/airlineicaofilterbar.ui | 162 +++++++++++ src/blackgui/filters/countryfilterbar.cpp | 50 ++++ src/blackgui/filters/countryfilterbar.h | 51 ++++ src/blackgui/filters/countryfilterbar.ui | 114 ++++++++ src/blackgui/filters/filterbarbuttons.cpp | 64 +++++ src/blackgui/filters/filterbarbuttons.h | 71 +++++ src/blackgui/filters/filterbarbuttons.ui | 139 ++++++++++ src/blackgui/filters/filterdialog.cpp | 36 +++ src/blackgui/filters/filterdialog.h | 40 +++ src/blackgui/filters/filterwidget.cpp | 68 +++++ src/blackgui/filters/filterwidget.h | 64 +++++ src/blackgui/filters/liveryfilterbar.cpp | 106 +++++++ src/blackgui/filters/liveryfilterbar.h | 75 +++++ src/blackgui/filters/liveryfilterbar.ui | 261 ++++++++++++++++++ 25 files changed, 2269 insertions(+) create mode 100644 src/blackgui/filters/aircrafticaofilterbar.cpp create mode 100644 src/blackgui/filters/aircrafticaofilterbar.h create mode 100644 src/blackgui/filters/aircrafticaofilterbar.ui create mode 100644 src/blackgui/filters/aircraftmodelfilterbar.cpp create mode 100644 src/blackgui/filters/aircraftmodelfilterbar.h create mode 100644 src/blackgui/filters/aircraftmodelfilterbar.ui create mode 100644 src/blackgui/filters/aircraftmodelfilterdialog.cpp create mode 100644 src/blackgui/filters/aircraftmodelfilterdialog.h create mode 100644 src/blackgui/filters/aircraftmodelfilterdialog.ui create mode 100644 src/blackgui/filters/airlineicaofilterbar.cpp create mode 100644 src/blackgui/filters/airlineicaofilterbar.h create mode 100644 src/blackgui/filters/airlineicaofilterbar.ui create mode 100644 src/blackgui/filters/countryfilterbar.cpp create mode 100644 src/blackgui/filters/countryfilterbar.h create mode 100644 src/blackgui/filters/countryfilterbar.ui create mode 100644 src/blackgui/filters/filterbarbuttons.cpp create mode 100644 src/blackgui/filters/filterbarbuttons.h create mode 100644 src/blackgui/filters/filterbarbuttons.ui create mode 100644 src/blackgui/filters/filterdialog.cpp create mode 100644 src/blackgui/filters/filterdialog.h create mode 100644 src/blackgui/filters/filterwidget.cpp create mode 100644 src/blackgui/filters/filterwidget.h create mode 100644 src/blackgui/filters/liveryfilterbar.cpp create mode 100644 src/blackgui/filters/liveryfilterbar.h create mode 100644 src/blackgui/filters/liveryfilterbar.ui diff --git a/src/blackgui/filters/aircrafticaofilterbar.cpp b/src/blackgui/filters/aircrafticaofilterbar.cpp new file mode 100644 index 000000000..d7a5222f6 --- /dev/null +++ b/src/blackgui/filters/aircrafticaofilterbar.cpp @@ -0,0 +1,88 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift Project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "aircrafticaofilterbar.h" +#include "ui_aircrafticaofilterbar.h" + +using namespace BlackMisc::Aviation; +using namespace BlackGui::Models; + +namespace BlackGui +{ + namespace Filters + { + CAircraftIcaoFilterBar::CAircraftIcaoFilterBar(QWidget *parent) : + CFilterWidget(parent), + ui(new Ui::CAircraftIcaoFilterBar) + { + ui->setupUi(this); + this->setButtonsAndCount(this->ui->filter_Buttons); + connect(ui->le_Designator, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_Manufacturer, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_Description, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + } + + CAircraftIcaoFilterBar::~CAircraftIcaoFilterBar() + { } + + std::unique_ptr > CAircraftIcaoFilterBar::createModelFilter() const + { + return std::unique_ptr( + new CAircraftIcaoFilter( + this->ui->le_Designator->text(), + this->ui->le_Manufacturer->text(), + this->ui->le_Description->text(), + this->ui->combinedtype_Selector->getCombinedType() + )); + } + + void CAircraftIcaoFilterBar::filter(const CAircraftIcaoCode &icao) + { + bool filter = false; + if (icao.hasDesignator()) + { + this->ui->le_Designator->setText(icao.getDesignator()); + filter = true; + } + if (icao.hasManufacturer()) + { + this->ui->le_Manufacturer->setText(icao.getManufacturer()); + filter = true; + } + if (icao.hasModelDescription()) + { + this->ui->le_Manufacturer->setText("*" + icao.getModelDescription() + "*"); + filter = true; + } + if (filter) + { + this->ui->filter_Buttons->clickButton(CFilterBarButtons::Filter); + } + } + + void CAircraftIcaoFilterBar::onRowCountChanged(int count, bool withFilter) + { + this->ui->filter_Buttons->onRowCountChanged(count, withFilter); + } + + void CAircraftIcaoFilterBar::clearForm() + { + ui->le_Designator->clear(); + ui->le_Manufacturer->clear(); + ui->le_Description->clear(); + ui->combinedtype_Selector->clear(); + } + + void CAircraftIcaoFilterBar::setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider) + { + Q_UNUSED(webDataReaderProvider); + } + + } // ns +} // nss diff --git a/src/blackgui/filters/aircrafticaofilterbar.h b/src/blackgui/filters/aircrafticaofilterbar.h new file mode 100644 index 000000000..1d8497457 --- /dev/null +++ b/src/blackgui/filters/aircrafticaofilterbar.h @@ -0,0 +1,68 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKGUI_FILTERS_AIRCRAFTICAOFILTERBAR_H +#define BLACKGUI_FILTERS_AIRCRAFTICAOFILTERBAR_H + +#include "blackguiexport.h" +#include "blackgui/filters/filterwidget.h" +#include "blackgui/models/aircrafticaofilter.h" +#include "blackmisc/network/webdataservicesprovider.h" +#include + +namespace Ui { class CAircraftIcaoFilterBar; } + +namespace BlackGui +{ + namespace Filters + { + /*! + * Aircraft ICAO filter bar + */ + class BLACKGUI_EXPORT CAircraftIcaoFilterBar : + public CFilterWidget, + public BlackGui::Models::IModelFilterProvider, + public BlackMisc::Network::CWebDataServicesAware + { + Q_OBJECT + + public: + //! Constructor + explicit CAircraftIcaoFilterBar(QWidget *parent = nullptr); + + //! Destructor + ~CAircraftIcaoFilterBar(); + + //! \copydoc CWebDataReaderAware::setProvider + virtual void setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider) override; + + //! \copydoc CFilterWidget::getModelFilter + std::unique_ptr > createModelFilter() const; + + //! Filter by ICAO object as default values + void filter(const BlackMisc::Aviation::CAircraftIcaoCode &icao); + + public slots: + //! \copydoc CFilterWidget::onRowCountChanged + virtual void onRowCountChanged(int count, bool withFilter) override; + + protected: + //! \copydoc CFilterWidget::clearForm + void clearForm(); + + private: + QScopedPointer ui; + }; + + } // ns +} // ns + +#endif // guard diff --git a/src/blackgui/filters/aircrafticaofilterbar.ui b/src/blackgui/filters/aircrafticaofilterbar.ui new file mode 100644 index 000000000..0a6b00715 --- /dev/null +++ b/src/blackgui/filters/aircrafticaofilterbar.ui @@ -0,0 +1,159 @@ + + + CAircraftIcaoFilterBar + + + + 0 + 0 + 574 + 44 + + + + + 0 + 10 + + + + Frame + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + 4 + + + 2 + + + + + Manufacturer + + + + + + + + + + Manufacturer, e.g. Airbus, Boeing + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 50 + 16777215 + + + + 4 + + + ICAO + + + + + + + Designator: + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + Description: + + + + + + + + + + + 0 + 10 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + BlackGui::CAircraftCombinedTypeSelector + QFrame +
blackgui/aircraftcombinedtypeselector.h
+ 1 +
+ + BlackGui::Filters::CFilterBarButtons + QFrame +
blackgui/filters/filterbarbuttons.h
+ 1 +
+
+ + le_Designator + le_Manufacturer + le_Description + + + +
diff --git a/src/blackgui/filters/aircraftmodelfilterbar.cpp b/src/blackgui/filters/aircraftmodelfilterbar.cpp new file mode 100644 index 000000000..eabec6e4e --- /dev/null +++ b/src/blackgui/filters/aircraftmodelfilterbar.cpp @@ -0,0 +1,70 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift Project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "aircraftmodelfilterbar.h" +#include "ui_aircraftmodelfilterbar.h" + +using namespace BlackGui::Models; + +namespace BlackGui +{ + namespace Filters + { + CAircraftModelFilterBar::CAircraftModelFilterBar(QWidget *parent) : + CFilterWidget(parent), + ui(new Ui::CAircraftModelFilterBar) + { + ui->setupUi(this); + this->ui->frp_SimulatorSelector->setAll(); + this->setButtonsAndCount(this->ui->filter_Buttons); + connect(ui->le_AircraftIcao, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_AircraftManufacturer, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_AirlineIcao, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_AirlineName, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_LiveryCode, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_ModelDescription, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_ModelKey, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + } + + CAircraftModelFilterBar::~CAircraftModelFilterBar() + { } + + std::unique_ptr > CAircraftModelFilterBar::createModelFilter() const + { + return std::unique_ptr( + new CAircraftModelFilter( + this->ui->le_ModelKey->text(), + this->ui->le_ModelDescription->text(), + this->ui->le_AircraftIcao->text(), + this->ui->le_AircraftManufacturer->text(), + this->ui->le_AirlineIcao->text(), + this->ui->le_AirlineName->text(), + this->ui->le_LiveryCode->text(), + this->ui->frp_SimulatorSelector->getValue() + )); + } + + void CAircraftModelFilterBar::onRowCountChanged(int count, bool withFilter) + { + this->ui->filter_Buttons->onRowCountChanged(count, withFilter); + } + + void CAircraftModelFilterBar::clearForm() + { + this->ui->le_ModelKey->clear(); + this->ui->le_ModelDescription->clear(); + this->ui->le_AircraftIcao->clear(); + this->ui->le_AircraftManufacturer->clear(); + this->ui->le_AirlineIcao->clear(); + this->ui->le_AirlineName->clear(); + this->ui->le_LiveryCode->clear(); + this->ui->frp_SimulatorSelector->setAll(); + } + } // ns +} // ns diff --git a/src/blackgui/filters/aircraftmodelfilterbar.h b/src/blackgui/filters/aircraftmodelfilterbar.h new file mode 100644 index 000000000..518a378ae --- /dev/null +++ b/src/blackgui/filters/aircraftmodelfilterbar.h @@ -0,0 +1,61 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKGUI_FILTERS_FILTERBARAIRCRAFTMODEL_H +#define BLACKGUI_FILTERS_FILTERBARAIRCRAFTMODEL_H + +#include "blackguiexport.h" +#include "blackgui/models/aircraftmodelfilter.h" +#include "blackgui/filters/filterwidget.h" +#include "blackmisc/network/webdataservicesprovider.h" +#include + +namespace Ui { class CAircraftModelFilterBar; } + +namespace BlackGui +{ + namespace Filters + { + /*! + * Filter bar for aircraft models + */ + class BLACKGUI_EXPORT CAircraftModelFilterBar : + public CFilterWidget, + public BlackGui::Models::IModelFilterProvider, + public BlackMisc::Network::CWebDataServicesAware + { + Q_OBJECT + + public: + //! Constructor + explicit CAircraftModelFilterBar(QWidget *parent = nullptr); + + //! Destructor + ~CAircraftModelFilterBar(); + + //! \copydoc IModelFilter::getModelFilter + virtual std::unique_ptr> createModelFilter() const override; + + public slots: + //! \copydoc CFilterWidget::onRowCountChanged + virtual void onRowCountChanged(int count, bool withFilter) override; + + protected: + //! Clear form + virtual void clearForm() override; + + private: + QScopedPointer ui; + }; + } // ns +} // ns + +#endif // guard diff --git a/src/blackgui/filters/aircraftmodelfilterbar.ui b/src/blackgui/filters/aircraftmodelfilterbar.ui new file mode 100644 index 000000000..a8d5ec05a --- /dev/null +++ b/src/blackgui/filters/aircraftmodelfilterbar.ui @@ -0,0 +1,198 @@ + + + CAircraftModelFilterBar + + + + 0 + 0 + 658 + 44 + + + + Frame + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + 4 + + + 2 + + + + + manufacturer + + + + + + + + 50 + 16777215 + + + + ICAO + + + + + + + Model: + + + + + + + + 50 + 16777215 + + + + 4 + + + ICAO + + + + + + + code + + + + + + + airline name + + + + + + + Livery: + + + + + + + Airline: + + + + + + + + + + description + + + + + + + key + + + + + + + Aircraft: + + + + + + + + 50 + 0 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 60 + 20 + + + + + + + + + + + + BlackGui::Filters::CFilterBarButtons + QFrame +
blackgui/filters/filterbarbuttons.h
+ 1 +
+ + BlackGui::CSimulatorSelector + QFrame +
blackgui/simulatorselector.h
+ 1 +
+
+ + le_ModelKey + le_ModelDescription + le_AircraftIcao + le_AircraftManufacturer + le_LiveryCode + le_AirlineIcao + le_AirlineName + + + +
diff --git a/src/blackgui/filters/aircraftmodelfilterdialog.cpp b/src/blackgui/filters/aircraftmodelfilterdialog.cpp new file mode 100644 index 000000000..1f7bfa356 --- /dev/null +++ b/src/blackgui/filters/aircraftmodelfilterdialog.cpp @@ -0,0 +1,37 @@ +/* Copyright (C) 2013 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "aircraftmodelfilterdialog.h" +#include "ui_aircraftmodelfilterdialog.h" + +using namespace BlackGui::Models; +using namespace BlackMisc::Simulation; + +namespace BlackGui +{ + namespace Filters + { + CAircraftModelFilterDialog::CAircraftModelFilterDialog(QWidget *parent) : + CFilterDialog(parent), + ui(new Ui::CAircraftModelFilterDialog) + { + ui->setupUi(this); + this->setWindowTitle("Filter models"); + this->resize(640, 100); + } + + CAircraftModelFilterDialog::~CAircraftModelFilterDialog() + { } + + std::unique_ptr> CAircraftModelFilterDialog::createModelFilter() const + { + return ui->filter_Models->createModelFilter(); + } + } // namespace +} // namespace diff --git a/src/blackgui/filters/aircraftmodelfilterdialog.h b/src/blackgui/filters/aircraftmodelfilterdialog.h new file mode 100644 index 000000000..699b23b4d --- /dev/null +++ b/src/blackgui/filters/aircraftmodelfilterdialog.h @@ -0,0 +1,51 @@ +/* Copyright (C) 2013 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKGUI_FILTERS_AIRCRAFTMODELFILTERFORM_H +#define BLACKGUI_FILTERS_AIRCRAFTMODELFILTERFORM_H + +#include "blackgui/blackguiexport.h" +#include "filterdialog.h" +#include "blackgui/models/aircraftmodelfilter.h" +#include +#include + +namespace Ui { class CAircraftModelFilterDialog; } + +namespace BlackGui +{ + namespace Filters + { + //! Form for a aircraft model filter + class BLACKGUI_EXPORT CAircraftModelFilterDialog : + public CFilterDialog, + public BlackGui::Models::IModelFilterProvider + { + Q_OBJECT + + public: + //! Constructor + explicit CAircraftModelFilterDialog(QWidget *parent = nullptr); + + //! Destructor + ~CAircraftModelFilterDialog(); + + //! \copydoc IModelFilterProvider::getModelFilter + virtual std::unique_ptr> createModelFilter() const override; + + private: + QScopedPointer ui; + }; + + } // namespace +} // namespace + +#endif // guard diff --git a/src/blackgui/filters/aircraftmodelfilterdialog.ui b/src/blackgui/filters/aircraftmodelfilterdialog.ui new file mode 100644 index 000000000..05b8b6545 --- /dev/null +++ b/src/blackgui/filters/aircraftmodelfilterdialog.ui @@ -0,0 +1,82 @@ + + + CAircraftModelFilterDialog + + + + 0 + 0 + 336 + 95 + + + + Dialog + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + BlackGui::Filters::CAircraftModelFilterBar + QFrame +
blackgui/filters/aircraftmodelfilterbar.h
+ 1 +
+
+ + + + bb_ButtonBox + accepted() + CAircraftModelFilterDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + bb_ButtonBox + rejected() + CAircraftModelFilterDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/blackgui/filters/airlineicaofilterbar.cpp b/src/blackgui/filters/airlineicaofilterbar.cpp new file mode 100644 index 000000000..2202784c2 --- /dev/null +++ b/src/blackgui/filters/airlineicaofilterbar.cpp @@ -0,0 +1,86 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "airlineicaofilterbar.h" +#include "ui_airlineicaofilterbar.h" + +using namespace BlackMisc; +using namespace BlackMisc::Aviation; +using namespace BlackGui::Models; + +namespace BlackGui +{ + namespace Filters + { + CAirlineIcaoFilterBar::CAirlineIcaoFilterBar(QWidget *parent) : + CFilterWidget(parent), + ui(new Ui::CAirlineIcaoFilterBar) + { + ui->setupUi(this); + this->setButtonsAndCount(this->ui->filter_Buttons); + + connect(ui->le_Designator, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_Name, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + } + + CAirlineIcaoFilterBar::~CAirlineIcaoFilterBar() { } + + std::unique_ptr > CAirlineIcaoFilterBar::createModelFilter() const + { + return std::unique_ptr( + new CAirlineIcaoFilter( + this->ui->le_Designator->text(), + this->ui->le_Name->text(), + this->ui->country_Selector->isSet() ? this->ui->country_Selector->getCountry().getIsoCode() : "", + this->ui->cb_RealAirline->isChecked(), + this->ui->cb_VirtualAirline->isChecked() + )); + } + + void CAirlineIcaoFilterBar::setProvider(Network::IWebDataServicesProvider *webDataReaderProvider) + { + this->ui->country_Selector->setProvider(webDataReaderProvider); + } + + void CAirlineIcaoFilterBar::filter(const CAirlineIcaoCode &icao) + { + bool filter = false; + if (icao.hasValidDesignator()) + { + this->ui->le_Designator->setText(icao.getVDesignator()); + filter = true; + } + if (icao.hasName()) + { + this->ui->le_Name->setText(icao.getName()); + filter = true; + } + + if (filter) + { + this->ui->filter_Buttons->clickButton(CFilterBarButtons::Filter); + } + } + + void CAirlineIcaoFilterBar::onRowCountChanged(int count, bool withFilter) + { + this->ui->filter_Buttons->onRowCountChanged(count, withFilter); + } + + void CAirlineIcaoFilterBar::clearForm() + { + this->ui->le_Designator->clear(); + this->ui->le_Name->clear(); + this->ui->country_Selector->clear(); + this->ui->cb_RealAirline->setChecked(true); + this->ui->cb_VirtualAirline->setChecked(true); + } + + } // ns +} // ns diff --git a/src/blackgui/filters/airlineicaofilterbar.h b/src/blackgui/filters/airlineicaofilterbar.h new file mode 100644 index 000000000..86fe56420 --- /dev/null +++ b/src/blackgui/filters/airlineicaofilterbar.h @@ -0,0 +1,68 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKGUI_FILTERS_AIRLINEICAOFILTERBAR_H +#define BLACKGUI_FILTERS_AIRLINEICAOFILTERBAR_H + +#include "blackguiexport.h" +#include "blackgui/filters/filterwidget.h" +#include "blackgui/models/airlineicaofilter.h" +#include "blackmisc/network/webdataservicesprovider.h" +#include +#include + +namespace Ui { class CAirlineIcaoFilterBar; } + +namespace BlackGui +{ + namespace Filters + { + /*! + * Airline ICAO filter bar + */ + class BLACKGUI_EXPORT CAirlineIcaoFilterBar : + public CFilterWidget, + public BlackGui::Models::IModelFilterProvider, + public BlackMisc::Network::CWebDataServicesAware + { + Q_OBJECT + + public: + //! Constructor + explicit CAirlineIcaoFilterBar(QWidget *parent = nullptr); + + //! Destructor + ~CAirlineIcaoFilterBar(); + + //! \copydoc IModelFilter::getModelFilter + virtual std::unique_ptr> createModelFilter() const override; + + //! \copydoc CWebDataReaderAware::setProvider + virtual void setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider) override; + + //! Filter default values by ICAO code + void filter(const BlackMisc::Aviation::CAirlineIcaoCode &icao); + + public slots: + //! \copydoc CFilterWidget::onRowCountChanged + virtual void onRowCountChanged(int count, bool withFilter) override; + + protected: + //! Clear form + virtual void clearForm() override; + + private: + QScopedPointer ui; + }; + } // ns +} // ns + +#endif // guard diff --git a/src/blackgui/filters/airlineicaofilterbar.ui b/src/blackgui/filters/airlineicaofilterbar.ui new file mode 100644 index 000000000..3d49d48c4 --- /dev/null +++ b/src/blackgui/filters/airlineicaofilterbar.ui @@ -0,0 +1,162 @@ + + + CAirlineIcaoFilterBar + + + + 0 + 0 + 492 + 22 + + + + Frame + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + 4 + + + 2 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + 50 + 16777215 + + + + 4 + + + ICAO + + + + + + + Airline: + + + + + + + Real airline + + + true + + + + + + + Virtual airline + + + true + + + + + + + Name of airline + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Name: + + + + + + + Country: + + + + + + + + BlackGui::Components::CDbCountrySelectorComponent + QFrame +
blackgui/components/dbcountryselectorcomponent.h
+ 1 +
+ + BlackGui::Filters::CFilterBarButtons + QFrame +
blackgui/filters/filterbarbuttons.h
+ 1 +
+
+ + le_Designator + le_Name + cb_RealAirline + cb_VirtualAirline + + + +
diff --git a/src/blackgui/filters/countryfilterbar.cpp b/src/blackgui/filters/countryfilterbar.cpp new file mode 100644 index 000000000..eb004f815 --- /dev/null +++ b/src/blackgui/filters/countryfilterbar.cpp @@ -0,0 +1,50 @@ +#include "countryfilterbar.h" +#include "ui_countryfilterbar.h" + +using namespace BlackGui::Models; +using namespace BlackMisc; +using namespace BlackMisc::Network; + +namespace BlackGui +{ + namespace Filters + { + CCountryFilterBar::CCountryFilterBar(QWidget *parent) : + CFilterWidget(parent), + ui(new Ui::CCountryFilterBar) + { + ui->setupUi(this); + this->setButtonsAndCount(this->ui->filter_Buttons); + connect(ui->le_IsoCode, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_Name, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + } + + CCountryFilterBar::~CCountryFilterBar() + { } + + std::unique_ptr > CCountryFilterBar::createModelFilter() const + { + return std::unique_ptr( + new CCountryFilter( + ui->le_IsoCode->text(), + ui->le_Name->text() + )); + } + + void CCountryFilterBar::setProvider(IWebDataServicesProvider *webDataReaderProvider) + { + Q_UNUSED(webDataReaderProvider); + } + + void CCountryFilterBar::onRowCountChanged(int count, bool withFilter) + { + this->ui->filter_Buttons->onRowCountChanged(count, withFilter); + } + + void CCountryFilterBar::clearForm() + { + ui->le_IsoCode->clear(); + ui->le_Name->clear(); + } + } +} diff --git a/src/blackgui/filters/countryfilterbar.h b/src/blackgui/filters/countryfilterbar.h new file mode 100644 index 000000000..4fbe48d80 --- /dev/null +++ b/src/blackgui/filters/countryfilterbar.h @@ -0,0 +1,51 @@ +#ifndef BLACKGUI_FILTERS_COUNTRYFILTERBAR_H +#define BLACKGUI_FILTERS_COUNTRYFILTERBAR_H + +#include "blackguiexport.h" +#include "blackgui/filters/filterwidget.h" +#include "blackgui/models/countryfilter.h" +#include "blackmisc/network/webdataservicesprovider.h" +#include + +namespace Ui { class CCountryFilterBar; } + +namespace BlackGui +{ + namespace Filters + { + /*! + * Country filter bar + */ + class BLACKGUI_EXPORT CCountryFilterBar : + public CFilterWidget, + public BlackGui::Models::IModelFilterProvider, + public BlackMisc::Network::CWebDataServicesAware + { + public: + //! Constructor + explicit CCountryFilterBar(QWidget *parent = nullptr); + + //! Destructor + ~CCountryFilterBar(); + + //! \copydoc IModelFilter::getModelFilter + virtual std::unique_ptr> createModelFilter() const override; + + //! \copydoc CWebDataReaderAware::setProvider + virtual void setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider) override; + + public slots: + //! \copydoc CFilterWidget::onRowCountChanged + virtual void onRowCountChanged(int count, bool withFilter) override; + + protected: + //! Clear form + virtual void clearForm() override; + + private: + QScopedPointer ui; + }; + } +} + +#endif // guard diff --git a/src/blackgui/filters/countryfilterbar.ui b/src/blackgui/filters/countryfilterbar.ui new file mode 100644 index 000000000..580655453 --- /dev/null +++ b/src/blackgui/filters/countryfilterbar.ui @@ -0,0 +1,114 @@ + + + CCountryFilterBar + + + + 0 + 0 + 384 + 22 + + + + Country filter bat + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 4 + + + 2 + + + + + + 75 + 16777215 + + + + ISO + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + Name of country + + + + + + + Name: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Country ISO, e.g. DE, US, FR + + + Country ISO: + + + + + + + + BlackGui::Filters::CFilterBarButtons + QFrame +
blackgui/filters/filterbarbuttons.h
+ 1 +
+
+ + le_IsoCode + le_Name + + + +
diff --git a/src/blackgui/filters/filterbarbuttons.cpp b/src/blackgui/filters/filterbarbuttons.cpp new file mode 100644 index 000000000..29c51e76b --- /dev/null +++ b/src/blackgui/filters/filterbarbuttons.cpp @@ -0,0 +1,64 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "filterbarbuttons.h" +#include "ui_filterbarbuttons.h" + +namespace BlackGui +{ + namespace Filters + { + CFilterBarButtons::CFilterBarButtons(QWidget *parent) : + QFrame(parent), + ui(new Ui::CFilterBarButtons) + { + ui->setupUi(this); + connect(this->ui->tb_ClearForm, &QToolButton::clicked, this, &CFilterBarButtons::ps_buttonClicked); + connect(this->ui->tb_Filter, &QToolButton::clicked, this, &CFilterBarButtons::ps_buttonClicked); + connect(this->ui->tb_RemoveFilter, &QToolButton::clicked, this, &CFilterBarButtons::ps_buttonClicked); + } + + CFilterBarButtons::~CFilterBarButtons() + { } + + void CFilterBarButtons::ps_buttonClicked() + { + QObject *sender = QObject::sender(); + if (sender == ui->tb_ClearForm) { emit buttonClicked(ClearForm); } + else if (sender == ui->tb_Filter) { emit buttonClicked(Filter); } + else if (sender == ui->tb_RemoveFilter) { emit buttonClicked(RemoveFilter); } + } + + void CFilterBarButtons::onRowCountChanged(int count, bool withFilter) + { + QString v = QString::number(count); + if (withFilter) { v += "F";} + this->ui->le_Count->setText(v); + } + + void CFilterBarButtons::clickButton(CFilterBarButtons::FilterButton filterButton) + { + switch (filterButton) + { + case ClearForm: + this->ui->tb_ClearForm->click(); + break; + case RemoveFilter: + this->ui->tb_RemoveFilter->click(); + break; + case Filter: + this->ui->tb_Filter->click(); + break; + default: + break; + } + } + + } // ns +} // ns diff --git a/src/blackgui/filters/filterbarbuttons.h b/src/blackgui/filters/filterbarbuttons.h new file mode 100644 index 000000000..4e7b2e757 --- /dev/null +++ b/src/blackgui/filters/filterbarbuttons.h @@ -0,0 +1,71 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKGUI_FILTERS_FILTERBARBUTTONS_H +#define BLACKGUI_FILTERS_FILTERBARBUTTONS_H + +#include "blackgui/blackguiexport.h" +#include +#include + +namespace Ui { class CFilterBarButtons; } + +namespace BlackGui +{ + namespace Filters + { + /*! + * Filter bar buttons + */ + class BLACKGUI_EXPORT CFilterBarButtons : public QFrame + { + Q_OBJECT + + public: + //! Buttons + enum FilterButton + { + ClearForm, + Filter, + RemoveFilter + }; + + //! Constructor + explicit CFilterBarButtons(QWidget *parent = nullptr); + + //! Destructor + ~CFilterBarButtons(); + + signals: + //! Filter button clicked + void buttonClicked(FilterButton filterButton); + + public slots: + //! Row count has been changed + void onRowCountChanged(int count, bool withFilter); + + //! Trigger button + void clickButton(FilterButton filterButton); + + private slots: + //! Button was clicked + void ps_buttonClicked(); + + private: + QScopedPointer ui; + }; + + } // ns +} // ns + +Q_DECLARE_METATYPE(BlackGui::Filters::CFilterBarButtons::FilterButton) + +#endif // guard diff --git a/src/blackgui/filters/filterbarbuttons.ui b/src/blackgui/filters/filterbarbuttons.ui new file mode 100644 index 000000000..2eaa675c8 --- /dev/null +++ b/src/blackgui/filters/filterbarbuttons.ui @@ -0,0 +1,139 @@ + + + CFilterBarButtons + + + + 0 + 0 + 140 + 24 + + + + + 140 + 0 + + + + + 150 + 16777215 + + + + Filter bar buttons + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + Number of entries + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + filter + + + filter + + + + :/diagona/icons/diagona/icons/application-search-result.png:/diagona/icons/diagona/icons/application-search-result.png + + + + + + + remove filter + + + remove filter + + + + :/diagona/icons/diagona/icons/cross-circle.png:/diagona/icons/diagona/icons/cross-circle.png + + + + + + + clear form + + + clear form + + + + :/diagona/icons/diagona/icons/cross-white.png:/diagona/icons/diagona/icons/cross-white.png + + + Ctrl+S + + + + + + + + + + diff --git a/src/blackgui/filters/filterdialog.cpp b/src/blackgui/filters/filterdialog.cpp new file mode 100644 index 000000000..c7df2b108 --- /dev/null +++ b/src/blackgui/filters/filterdialog.cpp @@ -0,0 +1,36 @@ +/* Copyright (C) 2013 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "filterdialog.h" +#include "blackgui/stylesheetutility.h" + +namespace BlackGui +{ + namespace Filters + { + CFilterDialog::CFilterDialog(QWidget *parent) : QDialog(parent, Qt::Tool) + { + this->setWindowTitle("Filter dialog"); + ps_onStyleSheetChanged(); + connect(&CStyleSheetUtility::instance(), &CStyleSheetUtility::styleSheetsChanged, this, &CFilterDialog::ps_onStyleSheetChanged); + } + + CFilterDialog::~CFilterDialog() + { } + + void CFilterDialog::ps_onStyleSheetChanged() + { + const QString qss = CStyleSheetUtility::instance().style(CStyleSheetUtility::fileNameFilterDialog()); + this->setStyleSheet(qss); + } + + } // namespace +} // namespace + + diff --git a/src/blackgui/filters/filterdialog.h b/src/blackgui/filters/filterdialog.h new file mode 100644 index 000000000..0d923f1b5 --- /dev/null +++ b/src/blackgui/filters/filterdialog.h @@ -0,0 +1,40 @@ +/* Copyright (C) 2013 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKGUI_FILTERS_FILTERDIALOG_H +#define BLACKGUI_FILTERS_FILTERDIALOG_H + +#include "blackgui/blackguiexport.h" +#include + +namespace BlackGui +{ + namespace Filters + { + //! Base for filter dialog + class BLACKGUI_EXPORT CFilterDialog : public QDialog + { + public: + //! Constructor + CFilterDialog(QWidget *parent = nullptr); + + //! Destructor + virtual ~CFilterDialog(); + + private slots: + //! Stylesheet changed + void ps_onStyleSheetChanged(); + }; + + } // namespace +} // namespace + +#endif // guard diff --git a/src/blackgui/filters/filterwidget.cpp b/src/blackgui/filters/filterwidget.cpp new file mode 100644 index 000000000..fb7837089 --- /dev/null +++ b/src/blackgui/filters/filterwidget.cpp @@ -0,0 +1,68 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "filterwidget.h" +#include "blackgui/stylesheetutility.h" + +namespace BlackGui +{ + namespace Filters + { + CFilterWidget::CFilterWidget(QWidget *parent) : QFrame(parent) + { + this->setWindowTitle("Filter widget"); + ps_onStyleSheetChanged(); + connect(&CStyleSheetUtility::instance(), &CStyleSheetUtility::styleSheetsChanged, this, &CFilterWidget::ps_onStyleSheetChanged); + } + + CFilterWidget::~CFilterWidget() + { } + + void CFilterWidget::setButtonsAndCount(CFilterBarButtons *buttons) + { + if (buttons) + { + bool s = connect(buttons, &CFilterBarButtons::buttonClicked, this, &CFilterWidget::ps_filterButtonClicked); + Q_ASSERT_X(s, Q_FUNC_INFO, "filter button connect"); + Q_UNUSED(s); + } + } + + void CFilterWidget::triggerFilter() + { + this->ps_filterButtonClicked(CFilterBarButtons::Filter); + } + + void CFilterWidget::ps_onStyleSheetChanged() + { + const QString qss = CStyleSheetUtility::instance().style(CStyleSheetUtility::fileNameFilterDialog()); + this->setStyleSheet(qss); + } + + void CFilterWidget::ps_filterButtonClicked(CFilterBarButtons::FilterButton filterButton) + { + switch (filterButton) + { + case CFilterBarButtons::Filter: + emit changeFilter(true); + break; + case CFilterBarButtons::RemoveFilter: + emit changeFilter(false); + break; + case CFilterBarButtons::ClearForm: + clearForm(); + emit changeFilter(false); + break; + } + } + + } // namespace +} // namespace + + diff --git a/src/blackgui/filters/filterwidget.h b/src/blackgui/filters/filterwidget.h new file mode 100644 index 000000000..5d5cd7837 --- /dev/null +++ b/src/blackgui/filters/filterwidget.h @@ -0,0 +1,64 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKGUI_FILTERS_FILTERWIDGET_H +#define BLACKGUI_FILTERS_FILTERWIDGET_H + +#include "blackgui/blackguiexport.h" +#include "blackgui/filters/filterbarbuttons.h" +#include + +namespace BlackGui +{ + namespace Filters + { + //! Base for filter dialog + class BLACKGUI_EXPORT CFilterWidget : public QFrame + { + Q_OBJECT + + public: + //! Constructor + CFilterWidget(QWidget *parent = nullptr); + + //! Destructor + virtual ~CFilterWidget(); + + public slots: + //! Row count has been changed + virtual void onRowCountChanged(int count, bool withFilter) = 0; + + //! Trigger filtering + virtual void triggerFilter(); + + signals: + //! Change the filter by enabling or disabling it + void changeFilter(bool enable); + + protected: + //! Set and connect filter bar buttonsd + void setButtonsAndCount(CFilterBarButtons *buttons); + + //! Clear the filter form + virtual void clearForm() = 0; + + private slots: + //! Button clicked + void ps_filterButtonClicked(CFilterBarButtons::FilterButton filterButton); + + //! Stylesheet changed + void ps_onStyleSheetChanged(); + }; + + } // namespace +} // namespace + +#endif // guard diff --git a/src/blackgui/filters/liveryfilterbar.cpp b/src/blackgui/filters/liveryfilterbar.cpp new file mode 100644 index 000000000..1273c2fd4 --- /dev/null +++ b/src/blackgui/filters/liveryfilterbar.cpp @@ -0,0 +1,106 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "liveryfilterbar.h" +#include "ui_liveryfilterbar.h" + +using namespace BlackMisc::Aviation; +using namespace BlackGui::Models; + +namespace BlackGui +{ + namespace Filters + { + CLiveryFilterBar::CLiveryFilterBar(QWidget *parent) : + CFilterWidget(parent), + ui(new Ui::CLiveryFilterBar) + { + ui->setupUi(this); + this->setButtonsAndCount(this->ui->filter_Buttons); + + 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->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); + } + + CLiveryFilterBar::~CLiveryFilterBar() + { } + + std::unique_ptr > CLiveryFilterBar::createModelFilter() const + { + double maxColorDistance = ui->hs_ColorDistance->value() / 100.0; + return std::unique_ptr( + new CLiveryFilter( + this->ui->le_LiveryCode->text(), + this->ui->le_Description->text(), + this->ui->le_AirlineIcaoCode->text(), + this->ui->color_Fuselage->getColor(), + this->ui->color_Tail->getColor(), + maxColorDistance, + this->ui->cb_Colors->isChecked(), + this->ui->cb_Airlines->isChecked() + )); + } + + void CLiveryFilterBar::setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider) + { + Q_UNUSED(webDataReaderProvider); + } + + void CLiveryFilterBar::filter(const CLivery &livery) + { + if (livery.hasCombinedCode()) + { + this->ui->le_LiveryCode->setText(livery.getCombinedCode()); + } + else if (livery.hasValidAirlineDesignator()) + { + this->ui->le_AirlineIcaoCode->setText(livery.getAirlineIcaoCodeDesignator()); + } + else + { + return; + } + this->ui->filter_Buttons->clickButton(CFilterBarButtons::Filter); + } + + void CLiveryFilterBar::onRowCountChanged(int count, bool withFilter) + { + this->ui->filter_Buttons->onRowCountChanged(count, withFilter); + } + + void CLiveryFilterBar::clearForm() + { + ui->le_AirlineIcaoCode->clear(); + ui->le_LiveryCode->clear(); + ui->le_Description->clear(); + ui->color_Fuselage->clear(); + ui->color_Tail->clear(); + ui->hs_ColorDistance->setValue(0.25 * 100.0); + } + + void CLiveryFilterBar::ps_colorChanged(const BlackMisc::CRgbColor &color) + { + this->triggerFilter(); + Q_UNUSED(color); + } + + void CLiveryFilterBar::ps_colorDistanceChanged(int distance) + { + this->triggerFilter(); + Q_UNUSED(distance); + } + + } // ns +} // ns diff --git a/src/blackgui/filters/liveryfilterbar.h b/src/blackgui/filters/liveryfilterbar.h new file mode 100644 index 000000000..b829b0064 --- /dev/null +++ b/src/blackgui/filters/liveryfilterbar.h @@ -0,0 +1,75 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKGUI_FILTERS_LIVERYFILTERBAR_H +#define BLACKGUI_FILTERS_LIVERYFILTERBAR_H + +#include "blackguiexport.h" +#include "blackgui/filters/filterwidget.h" +#include "blackgui/models/liveryfilter.h" +#include "blackmisc/network/webdataservicesprovider.h" +#include + +namespace Ui { class CLiveryFilterBar; } + +namespace BlackGui +{ + namespace Filters + { + /*! + * Livery filter bar + */ + class BLACKGUI_EXPORT CLiveryFilterBar : + public CFilterWidget, + public BlackGui::Models::IModelFilterProvider, + public BlackMisc::Network::CWebDataServicesAware + { + Q_OBJECT + + public: + //! Constructor + explicit CLiveryFilterBar(QWidget *parent = nullptr); + + //! Destructor + ~CLiveryFilterBar(); + + //! \copydoc IModelFilter::getModelFilter + virtual std::unique_ptr> createModelFilter() const override; + + //! \copydoc CWebDataReaderAware::setProvider + virtual void setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider) override; + + //! Filter by livery as default values + void filter(const BlackMisc::Aviation::CLivery &livery); + + public slots: + //! \copydoc CFilterWidget::onRowCountChanged + virtual void onRowCountChanged(int count, bool withFilter) override; + + protected: + //! Clear form + virtual void clearForm() override; + + private slots: + //! Color changed + void ps_colorChanged(const BlackMisc::CRgbColor &color); + + //! Color distance changed + void ps_colorDistanceChanged(int distance); + + private: + QScopedPointer ui; + }; + + } // ns +} // ns + +#endif // guard diff --git a/src/blackgui/filters/liveryfilterbar.ui b/src/blackgui/filters/liveryfilterbar.ui new file mode 100644 index 000000000..8ca7c58f4 --- /dev/null +++ b/src/blackgui/filters/liveryfilterbar.ui @@ -0,0 +1,261 @@ + + + CLiveryFilterBar + + + + 0 + 0 + 597 + 44 + + + + + 16777215 + 50 + + + + Frame + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + 4 + + + 2 + + + + + Airline: + + + + + + + Code: + + + + + + + Description: + + + + + + + Livery code + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + + + 75 + 16777215 + + + + ICAO + + + + + + + + 10 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Color (F/Tl): + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + 100 + 0 + + + + Color distance + + + 100 + + + 5 + + + 25 + + + Qt::Horizontal + + + + + + + + + + + 10 + + + 5 + + + 0 + + + 0 + + + 0 + + + + + Color liveries + + + + + + + Airline liveries + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + BlackGui::CColorSelector + QFrame +
blackgui/colorselector.h
+ 1 +
+ + BlackGui::Filters::CFilterBarButtons + QFrame +
blackgui/filters/filterbarbuttons.h
+ 1 +
+
+ + le_LiveryCode + le_AirlineIcaoCode + le_Description + cb_Colors + cb_Airlines + hs_ColorDistance + + + +