mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-17 19:05:31 +08:00
Changed model to QAbstractItemModel
This commit is contained in:
@@ -29,9 +29,6 @@ namespace BlackGui
|
|||||||
{
|
{
|
||||||
namespace Models
|
namespace Models
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* Column count
|
|
||||||
*/
|
|
||||||
int CListModelBaseNonTemplate::columnCount(const QModelIndex &modelIndex) const
|
int CListModelBaseNonTemplate::columnCount(const QModelIndex &modelIndex) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(modelIndex);
|
Q_UNUSED(modelIndex);
|
||||||
@@ -39,9 +36,6 @@ namespace BlackGui
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Header data
|
|
||||||
*/
|
|
||||||
QVariant CListModelBaseNonTemplate::headerData(int section, Qt::Orientation orientation, int role) const
|
QVariant CListModelBaseNonTemplate::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
{
|
{
|
||||||
if (orientation != Qt::Horizontal) { return QVariant(); }
|
if (orientation != Qt::Horizontal) { return QVariant(); }
|
||||||
@@ -62,41 +56,38 @@ namespace BlackGui
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
QModelIndex CListModelBaseNonTemplate::index(int row, int column, const QModelIndex &parent) const
|
||||||
* Column to property index
|
{
|
||||||
*/
|
Q_UNUSED(parent);
|
||||||
|
return QAbstractItemModel::createIndex(row, column);
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex CListModelBaseNonTemplate::parent(const QModelIndex &child) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(child);
|
||||||
|
return QModelIndex();
|
||||||
|
}
|
||||||
|
|
||||||
BlackMisc::CPropertyIndex CListModelBaseNonTemplate::columnToPropertyIndex(int column) const
|
BlackMisc::CPropertyIndex CListModelBaseNonTemplate::columnToPropertyIndex(int column) const
|
||||||
{
|
{
|
||||||
return this->m_columns.columnToPropertyIndex(column);
|
return this->m_columns.columnToPropertyIndex(column);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* To column
|
|
||||||
*/
|
|
||||||
int CListModelBaseNonTemplate::propertyIndexToColumn(const CPropertyIndex &propertyIndex) const
|
int CListModelBaseNonTemplate::propertyIndexToColumn(const CPropertyIndex &propertyIndex) const
|
||||||
{
|
{
|
||||||
return m_columns.propertyIndexToColumn(propertyIndex);
|
return m_columns.propertyIndexToColumn(propertyIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Property index
|
|
||||||
*/
|
|
||||||
BlackMisc::CPropertyIndex CListModelBaseNonTemplate::modelIndexToPropertyIndex(const QModelIndex &index) const
|
BlackMisc::CPropertyIndex CListModelBaseNonTemplate::modelIndexToPropertyIndex(const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
return this->columnToPropertyIndex(index.column());
|
return this->columnToPropertyIndex(index.column());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Sort column
|
|
||||||
*/
|
|
||||||
void CListModelBaseNonTemplate::setSortColumnByPropertyIndex(const BlackMisc::CPropertyIndex &propertyIndex)
|
void CListModelBaseNonTemplate::setSortColumnByPropertyIndex(const BlackMisc::CPropertyIndex &propertyIndex)
|
||||||
{
|
{
|
||||||
this->m_sortedColumn = this->m_columns.propertyIndexToColumn(propertyIndex);
|
this->m_sortedColumn = this->m_columns.propertyIndexToColumn(propertyIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Sort column?
|
|
||||||
*/
|
|
||||||
bool CListModelBaseNonTemplate::hasValidSortColumn() const
|
bool CListModelBaseNonTemplate::hasValidSortColumn() const
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -104,12 +95,9 @@ namespace BlackGui
|
|||||||
return this->m_columns.isSortable(this->m_sortedColumn);
|
return this->m_columns.isSortable(this->m_sortedColumn);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Flags
|
|
||||||
*/
|
|
||||||
Qt::ItemFlags CListModelBaseNonTemplate::flags(const QModelIndex &index) const
|
Qt::ItemFlags CListModelBaseNonTemplate::flags(const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
Qt::ItemFlags f = QAbstractListModel::flags(index);
|
Qt::ItemFlags f = QAbstractItemModel::flags(index);
|
||||||
if (!index.isValid()) { return f; }
|
if (!index.isValid()) { return f; }
|
||||||
bool editable = this->m_columns.isEditable(index);
|
bool editable = this->m_columns.isEditable(index);
|
||||||
f = editable ? (f | Qt::ItemIsEditable) : (f ^ Qt::ItemIsEditable);
|
f = editable ? (f | Qt::ItemIsEditable) : (f ^ Qt::ItemIsEditable);
|
||||||
@@ -123,25 +111,16 @@ namespace BlackGui
|
|||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Translation context
|
|
||||||
*/
|
|
||||||
const QString &CListModelBaseNonTemplate::getTranslationContext() const
|
const QString &CListModelBaseNonTemplate::getTranslationContext() const
|
||||||
{
|
{
|
||||||
return m_columns.getTranslationContext();
|
return m_columns.getTranslationContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Update
|
|
||||||
*/
|
|
||||||
int CListModelBaseNonTemplate::ps_updateContainer(const CVariant &variant, bool sort)
|
int CListModelBaseNonTemplate::ps_updateContainer(const CVariant &variant, bool sort)
|
||||||
{
|
{
|
||||||
return this->performUpdateContainer(variant, sort);
|
return this->performUpdateContainer(variant, sort);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Row count
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
int CListModelBase<ObjectType, ContainerType>::rowCount(const QModelIndex &parentIndex) const
|
int CListModelBase<ObjectType, ContainerType>::rowCount(const QModelIndex &parentIndex) const
|
||||||
{
|
{
|
||||||
@@ -149,9 +128,6 @@ namespace BlackGui
|
|||||||
return this->getContainerOrFilteredContainer().size();
|
return this->getContainerOrFilteredContainer().size();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Valid index?
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
bool CListModelBase<ObjectType, ContainerType>::isValidIndex(const QModelIndex &index) const
|
bool CListModelBase<ObjectType, ContainerType>::isValidIndex(const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
@@ -160,9 +136,6 @@ namespace BlackGui
|
|||||||
index.column() >= 0 && index.column() < this->columnCount(index));
|
index.column() >= 0 && index.column() < this->columnCount(index));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Data
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
QVariant CListModelBase<ObjectType, ContainerType>::data(const QModelIndex &index, int role) const
|
QVariant CListModelBase<ObjectType, ContainerType>::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
@@ -178,9 +151,6 @@ namespace BlackGui
|
|||||||
return formatter->data(role, obj.propertyByIndex(propertyIndex)).toQVariant();
|
return formatter->data(role, obj.propertyByIndex(propertyIndex)).toQVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Set data
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
bool CListModelBase<ObjectType, ContainerType>::setData(const QModelIndex &index, const QVariant &value, int role)
|
bool CListModelBase<ObjectType, ContainerType>::setData(const QModelIndex &index, const QVariant &value, int role)
|
||||||
{
|
{
|
||||||
@@ -213,9 +183,6 @@ namespace BlackGui
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Update
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
int CListModelBase<ObjectType, ContainerType>::update(const ContainerType &container, bool sort)
|
int CListModelBase<ObjectType, ContainerType>::update(const ContainerType &container, bool sort)
|
||||||
{
|
{
|
||||||
@@ -239,9 +206,6 @@ namespace BlackGui
|
|||||||
return newSize;
|
return newSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Update
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
void CListModelBase<ObjectType, ContainerType>::update(const QModelIndex &index, const ObjectType &object)
|
void CListModelBase<ObjectType, ContainerType>::update(const QModelIndex &index, const ObjectType &object)
|
||||||
{
|
{
|
||||||
@@ -256,12 +220,9 @@ namespace BlackGui
|
|||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
void CListModelBase<ObjectType, ContainerType>::update(int rowIndex, const ObjectType &object)
|
void CListModelBase<ObjectType, ContainerType>::update(int rowIndex, const ObjectType &object)
|
||||||
{
|
{
|
||||||
this->update(this->index(rowIndex), object);
|
this->update(this->index(rowIndex, 0), object);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Async update
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
BlackMisc::CWorker *CListModelBase<ObjectType, ContainerType>::updateAsync(const ContainerType &container, bool sort)
|
BlackMisc::CWorker *CListModelBase<ObjectType, ContainerType>::updateAsync(const ContainerType &container, bool sort)
|
||||||
{
|
{
|
||||||
@@ -277,9 +238,6 @@ namespace BlackGui
|
|||||||
return worker;
|
return worker;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Container size decides async/sync
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
void CListModelBase<ObjectType, ContainerType>::updateContainerMaybeAsync(const ContainerType &container, bool sort)
|
void CListModelBase<ObjectType, ContainerType>::updateContainerMaybeAsync(const ContainerType &container, bool sort)
|
||||||
{
|
{
|
||||||
@@ -294,18 +252,12 @@ namespace BlackGui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Filter
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
bool CListModelBase<ObjectType, ContainerType>::hasFilter() const
|
bool CListModelBase<ObjectType, ContainerType>::hasFilter() const
|
||||||
{
|
{
|
||||||
return m_filter ? true : false;
|
return m_filter ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Remove filter
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
void CListModelBase<ObjectType, ContainerType>::removeFilter()
|
void CListModelBase<ObjectType, ContainerType>::removeFilter()
|
||||||
{
|
{
|
||||||
@@ -317,9 +269,6 @@ namespace BlackGui
|
|||||||
this->emitRowCountChanged();
|
this->emitRowCountChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Set filter
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
void CListModelBase<ObjectType, ContainerType>::setFilter(std::unique_ptr<IModelFilter<ContainerType> > &filter)
|
void CListModelBase<ObjectType, ContainerType>::setFilter(std::unique_ptr<IModelFilter<ContainerType> > &filter)
|
||||||
{
|
{
|
||||||
@@ -338,9 +287,6 @@ namespace BlackGui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* At
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
const ObjectType &CListModelBase<ObjectType, ContainerType>::at(const QModelIndex &index) const
|
const ObjectType &CListModelBase<ObjectType, ContainerType>::at(const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
@@ -355,18 +301,12 @@ namespace BlackGui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Container
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
const ContainerType &CListModelBase<ObjectType, ContainerType>::getContainer() const
|
const ContainerType &CListModelBase<ObjectType, ContainerType>::getContainer() const
|
||||||
{
|
{
|
||||||
return this->m_container;
|
return this->m_container;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Push back
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
void CListModelBase<ObjectType, ContainerType>::push_back(const ObjectType &object)
|
void CListModelBase<ObjectType, ContainerType>::push_back(const ObjectType &object)
|
||||||
{
|
{
|
||||||
@@ -377,9 +317,6 @@ namespace BlackGui
|
|||||||
this->emitRowCountChanged();
|
this->emitRowCountChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* insert
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
void CListModelBase<ObjectType, ContainerType>::insert(const ObjectType &object)
|
void CListModelBase<ObjectType, ContainerType>::insert(const ObjectType &object)
|
||||||
{
|
{
|
||||||
@@ -396,9 +333,6 @@ namespace BlackGui
|
|||||||
this->emitRowCountChanged();
|
this->emitRowCountChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Remove object
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
void CListModelBase<ObjectType, ContainerType>::remove(const ObjectType &object)
|
void CListModelBase<ObjectType, ContainerType>::remove(const ObjectType &object)
|
||||||
{
|
{
|
||||||
@@ -419,9 +353,6 @@ namespace BlackGui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Clear
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
void CListModelBase<ObjectType, ContainerType>::clear()
|
void CListModelBase<ObjectType, ContainerType>::clear()
|
||||||
{
|
{
|
||||||
@@ -432,9 +363,12 @@ namespace BlackGui
|
|||||||
this->emitRowCountChanged();
|
this->emitRowCountChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
template <typename ObjectType, typename ContainerType>
|
||||||
* Update on container
|
bool CListModelBase<ObjectType, ContainerType>::isEmpty() const
|
||||||
*/
|
{
|
||||||
|
return this->m_container.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
int CListModelBase<ObjectType, ContainerType>::performUpdateContainer(const BlackMisc::CVariant &variant, bool sort)
|
int CListModelBase<ObjectType, ContainerType>::performUpdateContainer(const BlackMisc::CVariant &variant, bool sort)
|
||||||
{
|
{
|
||||||
@@ -487,9 +421,6 @@ namespace BlackGui
|
|||||||
this->updateContainerMaybeAsync(this->m_container, true);
|
this->updateContainerMaybeAsync(this->m_container, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Sort list
|
|
||||||
*/
|
|
||||||
template <typename ObjectType, typename ContainerType>
|
template <typename ObjectType, typename ContainerType>
|
||||||
ContainerType CListModelBase<ObjectType, ContainerType>::sortContainerByColumn(const ContainerType &container, int column, Qt::SortOrder order) const
|
ContainerType CListModelBase<ObjectType, ContainerType>::sortContainerByColumn(const ContainerType &container, int column, Qt::SortOrder order) const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace BlackGui
|
|||||||
namespace Models
|
namespace Models
|
||||||
{
|
{
|
||||||
//! Non templated base class, allows Q_OBJECT and signals to be used
|
//! Non templated base class, allows Q_OBJECT and signals to be used
|
||||||
class CListModelBaseNonTemplate : public QAbstractListModel
|
class CListModelBaseNonTemplate : public QAbstractItemModel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -37,12 +37,18 @@ namespace BlackGui
|
|||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~CListModelBaseNonTemplate() {}
|
virtual ~CListModelBaseNonTemplate() {}
|
||||||
|
|
||||||
//! \copydoc QAbstractListModel::columnCount()
|
//! \copydoc QAbstractItemModel::columnCount()
|
||||||
virtual int columnCount(const QModelIndex &modelIndex = QModelIndex()) const override;
|
virtual int columnCount(const QModelIndex &modelIndex = QModelIndex()) const override;
|
||||||
|
|
||||||
//! \copydoc QAbstractItemModel::headerData()
|
//! \copydoc QAbstractItemModel::headerData()
|
||||||
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||||
|
|
||||||
|
//! \copydoc QAbstractItemModel::headerData()
|
||||||
|
virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
|
||||||
|
|
||||||
|
//! \copydoc QAbstractItemModel::parent()
|
||||||
|
virtual QModelIndex parent(const QModelIndex &child) const override;
|
||||||
|
|
||||||
//! Column to property index
|
//! Column to property index
|
||||||
virtual BlackMisc::CPropertyIndex columnToPropertyIndex(int column) const;
|
virtual BlackMisc::CPropertyIndex columnToPropertyIndex(int column) const;
|
||||||
|
|
||||||
@@ -99,7 +105,7 @@ namespace BlackGui
|
|||||||
* \param parent
|
* \param parent
|
||||||
*/
|
*/
|
||||||
CListModelBaseNonTemplate(const QString &translationContext, QObject *parent = nullptr)
|
CListModelBaseNonTemplate(const QString &translationContext, QObject *parent = nullptr)
|
||||||
: QAbstractListModel(parent), m_columns(translationContext), m_sortedColumn(-1), m_sortOrder(Qt::AscendingOrder)
|
: QAbstractItemModel(parent), m_columns(translationContext), m_sortedColumn(-1), m_sortOrder(Qt::AscendingOrder)
|
||||||
{
|
{
|
||||||
// non unique default name, set translation context as default
|
// non unique default name, set translation context as default
|
||||||
this->setObjectName(translationContext);
|
this->setObjectName(translationContext);
|
||||||
@@ -127,14 +133,14 @@ namespace BlackGui
|
|||||||
//! Used container data
|
//! Used container data
|
||||||
virtual const ContainerType &getContainer() const;
|
virtual const ContainerType &getContainer() const;
|
||||||
|
|
||||||
//! \copydoc QAbstractListModel::data()
|
//! \copydoc QAbstractItemModel::data()
|
||||||
virtual QVariant data(const QModelIndex &index, int role) const override;
|
virtual QVariant data(const QModelIndex &index, int role) const override;
|
||||||
|
|
||||||
//! \copydoc QAbstractListModel::setData()
|
//! \copydoc QAbstractItemModel::setData()
|
||||||
//! \sa CListModelBaseNonTemplate::flags
|
//! \sa CListModelBaseNonTemplate::flags
|
||||||
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
|
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
|
||||||
|
|
||||||
//! \copydoc QAbstractListModel::rowCount()
|
//! \copydoc QAbstractItemModel::rowCount()
|
||||||
virtual int rowCount(const QModelIndex &parentIndex = QModelIndex()) const override;
|
virtual int rowCount(const QModelIndex &parentIndex = QModelIndex()) const override;
|
||||||
|
|
||||||
//! Update by new container
|
//! Update by new container
|
||||||
@@ -156,7 +162,7 @@ namespace BlackGui
|
|||||||
//! Object at row position
|
//! Object at row position
|
||||||
virtual const ObjectType &at(const QModelIndex &index) const;
|
virtual const ObjectType &at(const QModelIndex &index) const;
|
||||||
|
|
||||||
//! \copydoc QAbstractListModel::sort()
|
//! \copydoc QAbstractItemModel::sort()
|
||||||
virtual void sort(int column, Qt::SortOrder order) override;
|
virtual void sort(int column, Qt::SortOrder order) override;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -191,6 +197,9 @@ namespace BlackGui
|
|||||||
//! Clear the list
|
//! Clear the list
|
||||||
virtual void clear();
|
virtual void clear();
|
||||||
|
|
||||||
|
//! Empty?
|
||||||
|
virtual bool isEmpty() const;
|
||||||
|
|
||||||
//! Filter available
|
//! Filter available
|
||||||
bool hasFilter() const;
|
bool hasFilter() const;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user