diff --git a/src/blackgui/filters/distributorfilterbar.cpp b/src/blackgui/filters/distributorfilterbar.cpp new file mode 100644 index 000000000..633a0d86a --- /dev/null +++ b/src/blackgui/filters/distributorfilterbar.cpp @@ -0,0 +1,66 @@ +/* Copyright (C) 2018 + * 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 "blackgui/filters/distributorfilterbar.h" +#include "blackgui/filters/filterbarbuttons.h" +#include "blackgui/models/distributorfilter.h" +#include "blackgui/uppercasevalidator.h" +#include "blackmisc/simulation/distributorlist.h" +#include "ui_distributorfilterbar.h" + +#include + +using namespace BlackGui::Models; +using namespace BlackGui::Components; +using namespace BlackMisc; +using namespace BlackMisc::Simulation; + +namespace BlackGui +{ + namespace Filters + { + CDistributorFilterBar::CDistributorFilterBar(QWidget *parent) : + CFilterWidget(parent), + ui(new Ui::CDistributorFilterBar) + { + ui->setupUi(this); + ui->comp_Simulator->setMode(CSimulatorSelector::CheckBoxes); + ui->comp_Simulator->setNoSelectionMeansAll(true); + this->setButtonsAndCount(ui->filter_Buttons); + + connect(ui->comp_Simulator, &CSimulatorSelector::changed, this, &CFilterWidget::triggerFilter); + + // reset form + this->clearForm(); + } + + CDistributorFilterBar::~CDistributorFilterBar() + { } + + std::unique_ptr > CDistributorFilterBar::createModelFilter() const + { + return std::make_unique(ui->comp_Simulator->getValue()); + } + + void CDistributorFilterBar::setSimulator(const CSimulatorInfo &simulator) + { + ui->comp_Simulator->setValue(simulator); + } + + void CDistributorFilterBar::onRowCountChanged(int count, bool withFilter) + { + ui->filter_Buttons->onRowCountChanged(count, withFilter); + } + + void CDistributorFilterBar::clearForm() + { + ui->comp_Simulator->clear(); + } + } // ns +} // ns diff --git a/src/blackgui/filters/distributorfilterbar.h b/src/blackgui/filters/distributorfilterbar.h new file mode 100644 index 000000000..db5d67192 --- /dev/null +++ b/src/blackgui/filters/distributorfilterbar.h @@ -0,0 +1,65 @@ +/* Copyright (C) 2018 + * 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_DISTRIBUTORFILTERBAR_H +#define BLACKGUI_FILTERS_DISTRIBUTORFILTERBAR_H + +#include "blackgui/blackguiexport.h" +#include "blackgui/filters/filterwidget.h" +#include "blackgui/models/modelfilter.h" + +#include +#include +#include + +class QWidget; + +namespace BlackMisc { namespace Simulation { class CDistributorList; class CSimulatorInfo; }} +namespace Ui { class CDistributorFilterBar; } +namespace BlackGui +{ + namespace Filters + { + /*! + * Distributor filter bar + */ + class BLACKGUI_EXPORT CDistributorFilterBar : + public CFilterWidget, + public Models::IModelFilterProvider + { + public: + //! Constructor + explicit CDistributorFilterBar(QWidget *parent = nullptr); + + //! Destructor + virtual ~CDistributorFilterBar(); + + //! \copydoc Models::IModelFilterProvider::createModelFilter + virtual std::unique_ptr> createModelFilter() const override; + + //! Set simulator + void setSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator); + + 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/distributorfilterbar.ui b/src/blackgui/filters/distributorfilterbar.ui new file mode 100644 index 000000000..d87e511cc --- /dev/null +++ b/src/blackgui/filters/distributorfilterbar.ui @@ -0,0 +1,67 @@ + + + CDistributorFilterBar + + + + 0 + 0 + 221 + 10 + + + + Distributor filter bar + + + + 0 + + + 0 + + + 0 + + + 4 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + 200 + 0 + + + + + + + + + BlackGui::Components::CSimulatorSelector + QFrame +
blackgui/components/simulatorselector.h
+ 1 +
+ + BlackGui::Filters::CFilterBarButtons + QFrame +
blackgui/filters/filterbarbuttons.h
+ 1 +
+
+ + +
diff --git a/src/blackgui/models/distributorfilter.cpp b/src/blackgui/models/distributorfilter.cpp new file mode 100644 index 000000000..b4e410f1f --- /dev/null +++ b/src/blackgui/models/distributorfilter.cpp @@ -0,0 +1,38 @@ +/* Copyright (C) 2018 + * 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 "blackgui/models/distributorfilter.h" +#include "blackmisc/simulation/distributor.h" + +using namespace BlackMisc; +using namespace BlackMisc::Simulation; + +namespace BlackGui +{ + namespace Models + { + CDistributorFilter::CDistributorFilter(const Simulation::CSimulatorInfo &simulator) : + m_simulator(simulator) + { + this->m_valid = true; + } + + CDistributorList CDistributorFilter::filter(const CDistributorList &inDistributors) const + { + if (!this->isValid()) { return inDistributors; } + CDistributorList outContainer; + for (const CDistributor &distributor : inDistributors) + { + if (!distributor.getSimulator().matchesAny(m_simulator)) { continue; } + outContainer.push_back(distributor); + } + return outContainer; + } + } // namespace +} // namespace diff --git a/src/blackgui/models/distributorfilter.h b/src/blackgui/models/distributorfilter.h new file mode 100644 index 000000000..34fccb09d --- /dev/null +++ b/src/blackgui/models/distributorfilter.h @@ -0,0 +1,42 @@ +/* Copyright (C) 2018 + * 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_DISTRIBUTORFILTER_H +#define BLACKGUI_DISTRIBUTORFILTER_H + +#include "blackgui/blackguiexport.h" +#include "blackgui/models/modelfilter.h" +#include "blackmisc/simulation/simulatorinfo.h" +#include "blackmisc/simulation/distributorlist.h" + +#include + +namespace BlackGui +{ + namespace Models + { + //! Country filter + class BLACKGUI_EXPORT CDistributorFilter : public IModelFilter + { + public: + //! Constructor + CDistributorFilter(const BlackMisc::Simulation::CSimulatorInfo &simulator); + + //! \copydoc IModelFilter::filter + virtual BlackMisc::Simulation::CDistributorList filter(const BlackMisc::Simulation::CDistributorList &inDistributors) const override; + + private: + BlackMisc::Simulation::CSimulatorInfo m_simulator; + }; + } // namespace +} // namespace + +#endif // guard