mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 20:15:35 +08:00
Better performance for filter
* valid filter flag only calculated once * Better removal detection of filter dialog
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -55,6 +55,7 @@ namespace BlackGui
|
||||
break;
|
||||
case CFilterBarButtons::RemoveFilter:
|
||||
emit changeFilter(false);
|
||||
emit rejectDialog();
|
||||
break;
|
||||
case CFilterBarButtons::ClearForm:
|
||||
clearForm();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user