Better performance for filter

* valid filter flag only calculated once
* Better removal detection of filter dialog
This commit is contained in:
Klaus Basan
2016-04-08 13:57:39 +02:00
parent 5254d0ff71
commit e877c6dba5
17 changed files with 56 additions and 57 deletions

View File

@@ -11,6 +11,7 @@
#include "ui_aircraftmodelfilterdialog.h"
using namespace BlackGui::Models;
using namespace BlackGui::Filters;
using namespace BlackMisc::Simulation;
using namespace BlackMisc::Network;
@@ -25,6 +26,7 @@ namespace BlackGui
ui->setupUi(this);
this->setWindowTitle("Filter models");
this->resize(640, 100);
connect(ui->filter_Models, &CAircraftModelFilterBar::rejectDialog, this, &CAircraftModelFilterDialog::reject);
}
CAircraftModelFilterDialog::~CAircraftModelFilterDialog()

View File

@@ -12,8 +12,8 @@
#ifndef BLACKGUI_FILTERS_AIRCRAFTMODELFILTERFORM_H
#define BLACKGUI_FILTERS_AIRCRAFTMODELFILTERFORM_H
#include "blackgui/blackguiexport.h"
#include "filterdialog.h"
#include "blackgui/blackguiexport.h"
#include "blackgui/models/aircraftmodelfilter.h"
#include <QDialog>
#include <QScopedPointer>

View File

@@ -55,6 +55,7 @@ namespace BlackGui
break;
case CFilterBarButtons::RemoveFilter:
emit changeFilter(false);
emit rejectDialog();
break;
case CFilterBarButtons::ClearForm:
clearForm();

View File

@@ -43,6 +43,9 @@ namespace BlackGui
//! Change the filter by enabling or disabling it
void changeFilter(bool enable);
//! A filter dialog is supposed to close
void rejectDialog();
protected:
//! Set and connect filter bar buttonsd
void setButtonsAndCount(CFilterBarButtons *buttons);

View File

@@ -21,7 +21,10 @@ namespace BlackGui
const QString &description, const QString &combinedType) :
m_designator(designator.trimmed().toUpper()), m_manufacturer(name.trimmed()),
m_description(description.trimmed()), m_combinedType(combinedType.trimmed().toUpper())
{ }
{
this->m_valid = !(this->m_combinedType.isEmpty() && this->m_designator.isEmpty() &&
this->m_description.isEmpty() && this->m_manufacturer.isEmpty());
}
CAircraftIcaoCodeList CAircraftIcaoFilter::filter(const CAircraftIcaoCodeList &inContainer) const
{
@@ -51,12 +54,5 @@ namespace BlackGui
}
return outContainer;
}
bool CAircraftIcaoFilter::isValid() const
{
return !(this->m_combinedType.isEmpty() && this->m_designator.isEmpty() &&
this->m_description.isEmpty() && this->m_manufacturer.isEmpty());
}
} // namespace
} // namespace

View File

@@ -35,9 +35,6 @@ namespace BlackGui
//! \copydoc IModelFilter::filter
virtual BlackMisc::Aviation::CAircraftIcaoCodeList filter(const BlackMisc::Aviation::CAircraftIcaoCodeList &inContainer) const override;
//! \copydoc IModelFilter::isValid
virtual bool isValid() const override;
private:
QString m_designator;
QString m_manufacturer;

View File

@@ -28,7 +28,9 @@ namespace BlackGui
m_liveryCode(liveryCode.trimmed().toUpper()),
m_simulatorInfo(simInfo),
m_distributor(distributor)
{ }
{
m_valid = valid();
}
BlackMisc::Simulation::CAircraftModelList CAircraftModelFilter::filter(const CAircraftModelList &inContainer) const
{
@@ -91,16 +93,19 @@ namespace BlackGui
return outContainer;
}
bool CAircraftModelFilter::isValid() const
bool CAircraftModelFilter::valid() const
{
return !(this->m_modelKey.isEmpty() && this->m_description.isEmpty() &&
(this->m_modelMode != CAircraftModel::Undefined && this->m_modelMode != CAircraftModel::All) &&
this->m_aircraftManufacturer.isEmpty() && this->m_aircraftIcao.isEmpty() &&
this->m_airlineIcao.isEmpty() && this->m_airlineName.isEmpty() &&
this->m_liveryCode.isEmpty() &&
!this->m_distributor.hasValidDbKey() &&
(this->m_simulatorInfo.isNoSimulator() || this->m_simulatorInfo.isAllSimulators())
);
const bool allEmpty = this->m_modelKey.isEmpty() && this->m_description.isEmpty() &&
this->m_aircraftManufacturer.isEmpty() && this->m_aircraftIcao.isEmpty() &&
this->m_airlineIcao.isEmpty() && this->m_airlineName.isEmpty() &&
this->m_liveryCode.isEmpty();
if (!allEmpty) { return true; }
const bool noSim = this->m_simulatorInfo.isNoSimulator() || this->m_simulatorInfo.isAllSimulators();
const bool noMode = this->m_modelMode == CAircraftModel::Undefined || this->m_modelMode == CAircraftModel::All;
const bool noKey = !this->m_distributor.hasValidDbKey();
return !(noSim && noMode && noKey);
}
} // namespace

View File

@@ -36,9 +36,6 @@ namespace BlackGui
//! \copydoc IModelFilter::filter
virtual BlackMisc::Simulation::CAircraftModelList filter(const BlackMisc::Simulation::CAircraftModelList &inContainer) const override;
//! \copydoc IModelFilter::isValid
virtual bool isValid() const override;
private:
QString m_modelKey;
QString m_description;
@@ -49,9 +46,9 @@ namespace BlackGui
QString m_airlineName;
QString m_liveryCode;
BlackMisc::Simulation::CSimulatorInfo m_simulatorInfo;
BlackMisc::Simulation::CDistributor m_distributor;
BlackMisc::Simulation::CDistributor m_distributor;
bool valid() const;
};
} // namespace
} // namespace

View File

@@ -20,7 +20,11 @@ namespace BlackGui
const QString &countryIso, bool isReal, bool isVa) :
m_vDesignator(vDesignator.trimmed().toUpper()), m_name(name.trimmed()),
m_countryIso(countryIso.trimmed().toUpper()), m_real(isReal), m_va(isVa)
{ }
{
this->m_valid = !(this->m_countryIso.isEmpty() && this->m_vDesignator.isEmpty() &&
this->m_name.isEmpty() &&
!m_va && !m_real);
}
CAirlineIcaoCodeList CAirlineIcaoFilter::filter(const CAirlineIcaoCodeList &inContainer) const
{
@@ -59,13 +63,5 @@ namespace BlackGui
}
return outContainer;
}
bool CAirlineIcaoFilter::isValid() const
{
return !(this->m_countryIso.isEmpty() && this->m_vDesignator.isEmpty() &&
this->m_name.isEmpty() &&
!m_va && !m_real);
}
} // namespace
} // namespace

View File

@@ -31,9 +31,6 @@ namespace BlackGui
//! \copydoc IModelFilter::filter
virtual BlackMisc::Aviation::CAirlineIcaoCodeList filter(const BlackMisc::Aviation::CAirlineIcaoCodeList &inContainer) const override;
//! \copydoc IModelFilter::isValid
virtual bool isValid() const override;
private:
QString m_vDesignator;
QString m_name;

View File

@@ -18,7 +18,9 @@ namespace BlackGui
{
CCountryFilter::CCountryFilter(const QString &isoCode, const QString &name) :
m_isoCode(isoCode.trimmed().toUpper()), m_name(name.trimmed())
{ }
{
this->m_valid = !(this->m_isoCode.isEmpty() && this->m_name.isEmpty());
}
CCountryList CCountryFilter::filter(const CCountryList &inContainer) const
{
@@ -43,11 +45,5 @@ namespace BlackGui
}
return outContainer;
}
bool CCountryFilter::isValid() const
{
return !(this->m_isoCode.isEmpty() && this->m_name.isEmpty());
}
} // namespace
} // namespace

View File

@@ -30,9 +30,6 @@ namespace BlackGui
//! \copydoc IModelFilter::filter
virtual BlackMisc::CCountryList filter(const BlackMisc::CCountryList &inContainer) const override;
//! \copydoc IModelFilter::isValid
virtual bool isValid() const override;
private:
QString m_isoCode;
QString m_name;

View File

@@ -350,7 +350,8 @@ namespace BlackGui
template <typename ObjectType, typename ContainerType, bool UseCompare>
bool CListModelBase<ObjectType, ContainerType, UseCompare>::hasFilter() const
{
return m_filter && m_filter->isValid() ? true : false;
const bool f = m_filter && m_filter->isValid();
return f;
}
template <typename ObjectType, typename ContainerType, bool UseCompare>

View File

@@ -23,7 +23,9 @@ namespace BlackGui
m_airlineIcaoDesignator(airlineDesignator.trimmed().toUpper()),
m_fuselageColor(fuselageColor), m_tailColor(tailColor), m_maxColorDistance(maxColorDistance),
m_colorLiveries(colorLiveries), m_airlineLiveries(airlineLiveries)
{ }
{
this->m_valid = valid();
}
CLiveryList CLiveryFilter::filter(const CLiveryList &inContainer) const
{
@@ -63,7 +65,7 @@ namespace BlackGui
return outContainer;
}
bool CLiveryFilter::isValid() const
bool CLiveryFilter::valid() const
{
if (filterByLiveryType()) { return true; }
if (m_fuselageColor.isValid() || m_tailColor.isValid()) { return true; }

View File

@@ -39,9 +39,6 @@ namespace BlackGui
//! \copydoc IModelFilter::filter
virtual BlackMisc::Aviation::CLiveryList filter(const BlackMisc::Aviation::CLiveryList &inContainer) const override;
//! \copydoc IModelFilter::isValid
virtual bool isValid() const override;
private:
QString m_combinedCode;
QString m_description;
@@ -54,6 +51,9 @@ namespace BlackGui
//! Filter by livery type such as color or airline liveries
bool filterByLiveryType() const;
//! Valid filter?
bool valid() const;
};
} // namespace

View File

@@ -34,7 +34,7 @@ namespace BlackGui
virtual ContainerType filter(const ContainerType &container) const = 0;
//! Anything to do?
virtual bool isValid() const = 0;
bool isValid() const { return this->m_valid; }
//! Enabled?
virtual bool isEnabled() const { return m_enabled && isValid(); }
@@ -49,6 +49,8 @@ namespace BlackGui
//! Remove the * wildcards
QString stripWildcard(const QString &value) const;
bool m_valid = false; //!< is filter valid
private:
bool m_enabled = true;
};

View File

@@ -1094,7 +1094,14 @@ namespace BlackGui
Q_ASSERT_X(provider, Q_FUNC_INFO, "Filter widget does not provide interface");
if (!provider) { return false; }
std::unique_ptr<IModelFilter<ContainerType>> f(provider->createModelFilter());
this->takeFilterOwnership(f);
if (f->isValid())
{
this->takeFilterOwnership(f);
}
else
{
this->removeFilter();
}
}
}
else