feat: add a defaultValue property to SwitchRole

This commit is contained in:
Grecko 2017-09-21 23:30:50 +02:00
parent 9a475e52ac
commit d19e22fd54
3 changed files with 37 additions and 3 deletions

View File

@ -117,7 +117,7 @@ QString SwitchRole::defaultRoleName() const
return m_defaultRoleName;
}
void SwitchRole::setDefaultRoleName(QString defaultRoleName)
void SwitchRole::setDefaultRoleName(const QString& defaultRoleName)
{
if (m_defaultRoleName == defaultRoleName)
return;
@ -127,6 +127,21 @@ void SwitchRole::setDefaultRoleName(QString defaultRoleName)
invalidate();
}
QVariant SwitchRole::defaultValue() const
{
return m_defaultValue;
}
void SwitchRole::setDefaultValue(const QVariant& defaultValue)
{
if (m_defaultValue == defaultValue)
return;
m_defaultValue = defaultValue;
Q_EMIT defaultValueChanged();
invalidate();
}
QQmlListProperty<Filter> SwitchRole::filters()
{
return QQmlListProperty<Filter>(this, &m_filters,
@ -166,7 +181,9 @@ QVariant SwitchRole::data(const QModelIndex &sourceIndex, const QQmlSortFilterPr
return value;
}
}
return proxyModel.sourceData(sourceIndex, m_defaultRoleName);
if (!m_defaultRoleName.isEmpty())
return proxyModel.sourceData(sourceIndex, m_defaultRoleName);
return m_defaultValue;
}
void SwitchRole::append_filter(QQmlListProperty<Filter>* list, Filter* filter)

View File

@ -84,13 +84,17 @@ class SwitchRole : public ProxyRole
{
Q_OBJECT
Q_PROPERTY(QString defaultRoleName READ defaultRoleName WRITE setDefaultRoleName NOTIFY defaultRoleNameChanged)
Q_PROPERTY(QVariant defaultValue READ defaultValue WRITE setDefaultValue NOTIFY defaultValueChanged)
Q_PROPERTY(QQmlListProperty<qqsfpm::Filter> filters READ filters)
public:
using ProxyRole::ProxyRole;
QString defaultRoleName() const;
void setDefaultRoleName(QString defaultRoleName);
void setDefaultRoleName(const QString& defaultRoleName);
QVariant defaultValue() const;
void setDefaultValue(const QVariant& defaultValue);
QQmlListProperty<Filter> filters();
void proxyModelCompleted(const QQmlSortFilterProxyModel& proxyModel) override;
@ -99,6 +103,7 @@ public:
Q_SIGNALS:
void defaultRoleNameChanged();
void defaultValueChanged();
private:
QVariant data(const QModelIndex& sourceIndex, const QQmlSortFilterProxyModel& proxyModel) override;
@ -109,6 +114,7 @@ private:
static void clear_filters(QQmlListProperty<Filter>* list);
QString m_defaultRoleName;
QVariant m_defaultValue;
QList<Filter*> m_filters;
};

View File

@ -18,6 +18,7 @@ Item {
sourceModel: listModel
proxyRoles: SwitchRole {
id: switchRole
name: "switchRole"
filters: [
ValueFilter {
@ -40,6 +41,7 @@ Item {
}
]
defaultRoleName: "name"
defaultValue: "foo"
}
}
@ -86,5 +88,14 @@ Item {
listModel.setProperty(1, "name", "2");
listModel.setProperty(0, "favorite", true);
}
function test_defaultValue() {
switchRole.defaultRoleName = "";
compare(instantiator.objectAt(1).switchRole, "foo");
switchRole.defaultValue = "bar";
compare(instantiator.objectAt(1).switchRole, "bar");
switchRole.defaultRoleName = "name";
switchRole.defaultValue = "foo";
}
}
}