mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-14 08:45:36 +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"
|
#include "ui_aircraftmodelfilterdialog.h"
|
||||||
|
|
||||||
using namespace BlackGui::Models;
|
using namespace BlackGui::Models;
|
||||||
|
using namespace BlackGui::Filters;
|
||||||
using namespace BlackMisc::Simulation;
|
using namespace BlackMisc::Simulation;
|
||||||
using namespace BlackMisc::Network;
|
using namespace BlackMisc::Network;
|
||||||
|
|
||||||
@@ -25,6 +26,7 @@ namespace BlackGui
|
|||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
this->setWindowTitle("Filter models");
|
this->setWindowTitle("Filter models");
|
||||||
this->resize(640, 100);
|
this->resize(640, 100);
|
||||||
|
connect(ui->filter_Models, &CAircraftModelFilterBar::rejectDialog, this, &CAircraftModelFilterDialog::reject);
|
||||||
}
|
}
|
||||||
|
|
||||||
CAircraftModelFilterDialog::~CAircraftModelFilterDialog()
|
CAircraftModelFilterDialog::~CAircraftModelFilterDialog()
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
#ifndef BLACKGUI_FILTERS_AIRCRAFTMODELFILTERFORM_H
|
#ifndef BLACKGUI_FILTERS_AIRCRAFTMODELFILTERFORM_H
|
||||||
#define BLACKGUI_FILTERS_AIRCRAFTMODELFILTERFORM_H
|
#define BLACKGUI_FILTERS_AIRCRAFTMODELFILTERFORM_H
|
||||||
|
|
||||||
#include "blackgui/blackguiexport.h"
|
|
||||||
#include "filterdialog.h"
|
#include "filterdialog.h"
|
||||||
|
#include "blackgui/blackguiexport.h"
|
||||||
#include "blackgui/models/aircraftmodelfilter.h"
|
#include "blackgui/models/aircraftmodelfilter.h"
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
#include <QScopedPointer>
|
#include <QScopedPointer>
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ namespace BlackGui
|
|||||||
break;
|
break;
|
||||||
case CFilterBarButtons::RemoveFilter:
|
case CFilterBarButtons::RemoveFilter:
|
||||||
emit changeFilter(false);
|
emit changeFilter(false);
|
||||||
|
emit rejectDialog();
|
||||||
break;
|
break;
|
||||||
case CFilterBarButtons::ClearForm:
|
case CFilterBarButtons::ClearForm:
|
||||||
clearForm();
|
clearForm();
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ namespace BlackGui
|
|||||||
//! Change the filter by enabling or disabling it
|
//! Change the filter by enabling or disabling it
|
||||||
void changeFilter(bool enable);
|
void changeFilter(bool enable);
|
||||||
|
|
||||||
|
//! A filter dialog is supposed to close
|
||||||
|
void rejectDialog();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! Set and connect filter bar buttonsd
|
//! Set and connect filter bar buttonsd
|
||||||
void setButtonsAndCount(CFilterBarButtons *buttons);
|
void setButtonsAndCount(CFilterBarButtons *buttons);
|
||||||
|
|||||||
@@ -21,7 +21,10 @@ namespace BlackGui
|
|||||||
const QString &description, const QString &combinedType) :
|
const QString &description, const QString &combinedType) :
|
||||||
m_designator(designator.trimmed().toUpper()), m_manufacturer(name.trimmed()),
|
m_designator(designator.trimmed().toUpper()), m_manufacturer(name.trimmed()),
|
||||||
m_description(description.trimmed()), m_combinedType(combinedType.trimmed().toUpper())
|
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
|
CAircraftIcaoCodeList CAircraftIcaoFilter::filter(const CAircraftIcaoCodeList &inContainer) const
|
||||||
{
|
{
|
||||||
@@ -51,12 +54,5 @@ namespace BlackGui
|
|||||||
}
|
}
|
||||||
return outContainer;
|
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
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -35,9 +35,6 @@ namespace BlackGui
|
|||||||
//! \copydoc IModelFilter::filter
|
//! \copydoc IModelFilter::filter
|
||||||
virtual BlackMisc::Aviation::CAircraftIcaoCodeList filter(const BlackMisc::Aviation::CAircraftIcaoCodeList &inContainer) const override;
|
virtual BlackMisc::Aviation::CAircraftIcaoCodeList filter(const BlackMisc::Aviation::CAircraftIcaoCodeList &inContainer) const override;
|
||||||
|
|
||||||
//! \copydoc IModelFilter::isValid
|
|
||||||
virtual bool isValid() const override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_designator;
|
QString m_designator;
|
||||||
QString m_manufacturer;
|
QString m_manufacturer;
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ namespace BlackGui
|
|||||||
m_liveryCode(liveryCode.trimmed().toUpper()),
|
m_liveryCode(liveryCode.trimmed().toUpper()),
|
||||||
m_simulatorInfo(simInfo),
|
m_simulatorInfo(simInfo),
|
||||||
m_distributor(distributor)
|
m_distributor(distributor)
|
||||||
{ }
|
{
|
||||||
|
m_valid = valid();
|
||||||
|
}
|
||||||
|
|
||||||
BlackMisc::Simulation::CAircraftModelList CAircraftModelFilter::filter(const CAircraftModelList &inContainer) const
|
BlackMisc::Simulation::CAircraftModelList CAircraftModelFilter::filter(const CAircraftModelList &inContainer) const
|
||||||
{
|
{
|
||||||
@@ -91,16 +93,19 @@ namespace BlackGui
|
|||||||
return outContainer;
|
return outContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CAircraftModelFilter::isValid() const
|
|
||||||
|
|
||||||
|
bool CAircraftModelFilter::valid() const
|
||||||
{
|
{
|
||||||
return !(this->m_modelKey.isEmpty() && this->m_description.isEmpty() &&
|
const bool allEmpty = 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_aircraftManufacturer.isEmpty() && this->m_aircraftIcao.isEmpty() &&
|
this->m_airlineIcao.isEmpty() && this->m_airlineName.isEmpty() &&
|
||||||
this->m_airlineIcao.isEmpty() && this->m_airlineName.isEmpty() &&
|
this->m_liveryCode.isEmpty();
|
||||||
this->m_liveryCode.isEmpty() &&
|
if (!allEmpty) { return true; }
|
||||||
!this->m_distributor.hasValidDbKey() &&
|
const bool noSim = this->m_simulatorInfo.isNoSimulator() || this->m_simulatorInfo.isAllSimulators();
|
||||||
(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
|
} // namespace
|
||||||
|
|||||||
@@ -36,9 +36,6 @@ namespace BlackGui
|
|||||||
//! \copydoc IModelFilter::filter
|
//! \copydoc IModelFilter::filter
|
||||||
virtual BlackMisc::Simulation::CAircraftModelList filter(const BlackMisc::Simulation::CAircraftModelList &inContainer) const override;
|
virtual BlackMisc::Simulation::CAircraftModelList filter(const BlackMisc::Simulation::CAircraftModelList &inContainer) const override;
|
||||||
|
|
||||||
//! \copydoc IModelFilter::isValid
|
|
||||||
virtual bool isValid() const override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_modelKey;
|
QString m_modelKey;
|
||||||
QString m_description;
|
QString m_description;
|
||||||
@@ -49,9 +46,9 @@ namespace BlackGui
|
|||||||
QString m_airlineName;
|
QString m_airlineName;
|
||||||
QString m_liveryCode;
|
QString m_liveryCode;
|
||||||
BlackMisc::Simulation::CSimulatorInfo m_simulatorInfo;
|
BlackMisc::Simulation::CSimulatorInfo m_simulatorInfo;
|
||||||
BlackMisc::Simulation::CDistributor m_distributor;
|
BlackMisc::Simulation::CDistributor m_distributor;
|
||||||
|
bool valid() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,11 @@ namespace BlackGui
|
|||||||
const QString &countryIso, bool isReal, bool isVa) :
|
const QString &countryIso, bool isReal, bool isVa) :
|
||||||
m_vDesignator(vDesignator.trimmed().toUpper()), m_name(name.trimmed()),
|
m_vDesignator(vDesignator.trimmed().toUpper()), m_name(name.trimmed()),
|
||||||
m_countryIso(countryIso.trimmed().toUpper()), m_real(isReal), m_va(isVa)
|
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
|
CAirlineIcaoCodeList CAirlineIcaoFilter::filter(const CAirlineIcaoCodeList &inContainer) const
|
||||||
{
|
{
|
||||||
@@ -59,13 +63,5 @@ namespace BlackGui
|
|||||||
}
|
}
|
||||||
return outContainer;
|
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
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -31,9 +31,6 @@ namespace BlackGui
|
|||||||
//! \copydoc IModelFilter::filter
|
//! \copydoc IModelFilter::filter
|
||||||
virtual BlackMisc::Aviation::CAirlineIcaoCodeList filter(const BlackMisc::Aviation::CAirlineIcaoCodeList &inContainer) const override;
|
virtual BlackMisc::Aviation::CAirlineIcaoCodeList filter(const BlackMisc::Aviation::CAirlineIcaoCodeList &inContainer) const override;
|
||||||
|
|
||||||
//! \copydoc IModelFilter::isValid
|
|
||||||
virtual bool isValid() const override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_vDesignator;
|
QString m_vDesignator;
|
||||||
QString m_name;
|
QString m_name;
|
||||||
|
|||||||
@@ -18,7 +18,9 @@ namespace BlackGui
|
|||||||
{
|
{
|
||||||
CCountryFilter::CCountryFilter(const QString &isoCode, const QString &name) :
|
CCountryFilter::CCountryFilter(const QString &isoCode, const QString &name) :
|
||||||
m_isoCode(isoCode.trimmed().toUpper()), m_name(name.trimmed())
|
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
|
CCountryList CCountryFilter::filter(const CCountryList &inContainer) const
|
||||||
{
|
{
|
||||||
@@ -43,11 +45,5 @@ namespace BlackGui
|
|||||||
}
|
}
|
||||||
return outContainer;
|
return outContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CCountryFilter::isValid() const
|
|
||||||
{
|
|
||||||
return !(this->m_isoCode.isEmpty() && this->m_name.isEmpty());
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -30,9 +30,6 @@ namespace BlackGui
|
|||||||
//! \copydoc IModelFilter::filter
|
//! \copydoc IModelFilter::filter
|
||||||
virtual BlackMisc::CCountryList filter(const BlackMisc::CCountryList &inContainer) const override;
|
virtual BlackMisc::CCountryList filter(const BlackMisc::CCountryList &inContainer) const override;
|
||||||
|
|
||||||
//! \copydoc IModelFilter::isValid
|
|
||||||
virtual bool isValid() const override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_isoCode;
|
QString m_isoCode;
|
||||||
QString m_name;
|
QString m_name;
|
||||||
|
|||||||
@@ -350,7 +350,8 @@ namespace BlackGui
|
|||||||
template <typename ObjectType, typename ContainerType, bool UseCompare>
|
template <typename ObjectType, typename ContainerType, bool UseCompare>
|
||||||
bool CListModelBase<ObjectType, ContainerType, UseCompare>::hasFilter() const
|
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>
|
template <typename ObjectType, typename ContainerType, bool UseCompare>
|
||||||
|
|||||||
@@ -23,7 +23,9 @@ namespace BlackGui
|
|||||||
m_airlineIcaoDesignator(airlineDesignator.trimmed().toUpper()),
|
m_airlineIcaoDesignator(airlineDesignator.trimmed().toUpper()),
|
||||||
m_fuselageColor(fuselageColor), m_tailColor(tailColor), m_maxColorDistance(maxColorDistance),
|
m_fuselageColor(fuselageColor), m_tailColor(tailColor), m_maxColorDistance(maxColorDistance),
|
||||||
m_colorLiveries(colorLiveries), m_airlineLiveries(airlineLiveries)
|
m_colorLiveries(colorLiveries), m_airlineLiveries(airlineLiveries)
|
||||||
{ }
|
{
|
||||||
|
this->m_valid = valid();
|
||||||
|
}
|
||||||
|
|
||||||
CLiveryList CLiveryFilter::filter(const CLiveryList &inContainer) const
|
CLiveryList CLiveryFilter::filter(const CLiveryList &inContainer) const
|
||||||
{
|
{
|
||||||
@@ -63,7 +65,7 @@ namespace BlackGui
|
|||||||
return outContainer;
|
return outContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CLiveryFilter::isValid() const
|
bool CLiveryFilter::valid() const
|
||||||
{
|
{
|
||||||
if (filterByLiveryType()) { return true; }
|
if (filterByLiveryType()) { return true; }
|
||||||
if (m_fuselageColor.isValid() || m_tailColor.isValid()) { return true; }
|
if (m_fuselageColor.isValid() || m_tailColor.isValid()) { return true; }
|
||||||
|
|||||||
@@ -39,9 +39,6 @@ namespace BlackGui
|
|||||||
//! \copydoc IModelFilter::filter
|
//! \copydoc IModelFilter::filter
|
||||||
virtual BlackMisc::Aviation::CLiveryList filter(const BlackMisc::Aviation::CLiveryList &inContainer) const override;
|
virtual BlackMisc::Aviation::CLiveryList filter(const BlackMisc::Aviation::CLiveryList &inContainer) const override;
|
||||||
|
|
||||||
//! \copydoc IModelFilter::isValid
|
|
||||||
virtual bool isValid() const override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_combinedCode;
|
QString m_combinedCode;
|
||||||
QString m_description;
|
QString m_description;
|
||||||
@@ -54,6 +51,9 @@ namespace BlackGui
|
|||||||
|
|
||||||
//! Filter by livery type such as color or airline liveries
|
//! Filter by livery type such as color or airline liveries
|
||||||
bool filterByLiveryType() const;
|
bool filterByLiveryType() const;
|
||||||
|
|
||||||
|
//! Valid filter?
|
||||||
|
bool valid() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ namespace BlackGui
|
|||||||
virtual ContainerType filter(const ContainerType &container) const = 0;
|
virtual ContainerType filter(const ContainerType &container) const = 0;
|
||||||
|
|
||||||
//! Anything to do?
|
//! Anything to do?
|
||||||
virtual bool isValid() const = 0;
|
bool isValid() const { return this->m_valid; }
|
||||||
|
|
||||||
//! Enabled?
|
//! Enabled?
|
||||||
virtual bool isEnabled() const { return m_enabled && isValid(); }
|
virtual bool isEnabled() const { return m_enabled && isValid(); }
|
||||||
@@ -49,6 +49,8 @@ namespace BlackGui
|
|||||||
//! Remove the * wildcards
|
//! Remove the * wildcards
|
||||||
QString stripWildcard(const QString &value) const;
|
QString stripWildcard(const QString &value) const;
|
||||||
|
|
||||||
|
bool m_valid = false; //!< is filter valid
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_enabled = true;
|
bool m_enabled = true;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1094,7 +1094,14 @@ namespace BlackGui
|
|||||||
Q_ASSERT_X(provider, Q_FUNC_INFO, "Filter widget does not provide interface");
|
Q_ASSERT_X(provider, Q_FUNC_INFO, "Filter widget does not provide interface");
|
||||||
if (!provider) { return false; }
|
if (!provider) { return false; }
|
||||||
std::unique_ptr<IModelFilter<ContainerType>> f(provider->createModelFilter());
|
std::unique_ptr<IModelFilter<ContainerType>> f(provider->createModelFilter());
|
||||||
this->takeFilterOwnership(f);
|
if (f->isValid())
|
||||||
|
{
|
||||||
|
this->takeFilterOwnership(f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->removeFilter();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user