chore(StatusListPicker): enable picker to work with incompatible models
This commit is contained in:
parent
462b905c5c
commit
26eaeb3ad5
|
@ -74,6 +74,8 @@ Item {
|
||||||
*/
|
*/
|
||||||
property var inputList: ListModel { }
|
property var inputList: ListModel { }
|
||||||
|
|
||||||
|
readonly property StatusListPickerProxies proxy: StatusListPickerProxies {}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmlproperty string StatusListPicker::searchText
|
\qmlproperty string StatusListPicker::searchText
|
||||||
This property holds the search text the searcher input displays by default.
|
This property holds the search text the searcher input displays by default.
|
||||||
|
@ -160,7 +162,7 @@ Item {
|
||||||
// NOTE: ValueFilter would crash if source model does not contain given role
|
// NOTE: ValueFilter would crash if source model does not contain given role
|
||||||
// FIXME: use ValueFilter when its fixed
|
// FIXME: use ValueFilter when its fixed
|
||||||
filters: ExpressionFilter {
|
filters: ExpressionFilter {
|
||||||
expression: model.selected
|
expression: root.proxy.selected(model)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,7 +181,7 @@ Item {
|
||||||
var item = selectedItems.get(i)
|
var item = selectedItems.get(i)
|
||||||
if(res != "")
|
if(res != "")
|
||||||
res += ", "
|
res += ", "
|
||||||
res += formatSymbolShortNameText(item.symbol, item.shortName)
|
res += formatSymbolShortNameText(root.proxy.symbol(item), root.proxy.shortName(item))
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
@ -200,8 +202,8 @@ Item {
|
||||||
Connections {
|
Connections {
|
||||||
target: itemsSelectorHelper
|
target: itemsSelectorHelper
|
||||||
function onSelectItem(key, checked) {
|
function onSelectItem(key, checked) {
|
||||||
if (model.key === key) model.selected = checked
|
if (root.proxy.key(model) === key) root.proxy.setSelected(model, checked)
|
||||||
else if (!root.multiSelection && checked) model.selected = false
|
else if (!root.multiSelection && checked) root.proxy.setSelected(model, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -261,8 +263,8 @@ Item {
|
||||||
filters: ExpressionFilter {
|
filters: ExpressionFilter {
|
||||||
expression: {
|
expression: {
|
||||||
root.searchText // ensure expression is reevaluated when searchText changes
|
root.searchText // ensure expression is reevaluated when searchText changes
|
||||||
return model.name.toLowerCase().includes(root.searchText.toLowerCase()) ||
|
return root.proxy.name(model).toLowerCase().includes(root.searchText.toLowerCase()) ||
|
||||||
model.shortName.toLowerCase().includes(root.searchText.toLowerCase())
|
root.proxy.shortName(model).toLowerCase().includes(root.searchText.toLowerCase())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -302,24 +304,24 @@ Item {
|
||||||
height: content.itemHeight
|
height: content.itemHeight
|
||||||
color: mouseArea.containsMouse ? Theme.palette.baseColor4 : "transparent"
|
color: mouseArea.containsMouse ? Theme.palette.baseColor4 : "transparent"
|
||||||
image: StatusImageSettings {
|
image: StatusImageSettings {
|
||||||
source: model.imageSource ? model.imageSource : ""
|
source: root.proxy.imageSource(model) ? root.proxy.imageSource(model) : ""
|
||||||
width: 15
|
width: 15
|
||||||
height: 15
|
height: 15
|
||||||
isIdenticon: false
|
isIdenticon: false
|
||||||
}
|
}
|
||||||
name: model.name
|
name: root.proxy.name(model)
|
||||||
shortName: model.shortName
|
shortName: root.proxy.shortName(model)
|
||||||
selectorType: root.multiSelection ? StatusItemPicker.SelectorType.CheckBox : StatusItemPicker.SelectorType.RadioButton
|
selectorType: root.multiSelection ? StatusItemPicker.SelectorType.CheckBox : StatusItemPicker.SelectorType.RadioButton
|
||||||
selected: model.selected
|
selected: root.proxy.selected(model)
|
||||||
radioGroup: radioBtnGroup
|
radioGroup: radioBtnGroup
|
||||||
|
|
||||||
onCheckedChanged: {
|
onCheckedChanged: {
|
||||||
if (checked !== model.selected) {
|
if (checked !== root.proxy.selected(model)) {
|
||||||
itemsSelectorHelper.selectItem(model.key, checked)
|
itemsSelectorHelper.selectItem(root.proxy.key(model), checked)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used to notify selected property changes in the specific item picker.
|
// Used to notify selected property changes in the specific item picker.
|
||||||
itemPickerChanged(model.key, checked)
|
itemPickerChanged(root.proxy.key(model), checked)
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
import QtQuick 2.14
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Enables StatusListPicker to work with incompatible models.
|
||||||
|
\qml
|
||||||
|
StatusListPicker {
|
||||||
|
id: currencyPicker
|
||||||
|
inputList: ListModel {
|
||||||
|
ListElement { incompatibleA: 0 ... incomatibleZ: false }
|
||||||
|
ListElement { incompatibleA: 1 ... incomatibleZ: false }
|
||||||
|
ListElement { incompatibleA: 2 ... incomatibleZ: false }
|
||||||
|
}
|
||||||
|
proxy { // StatusListPickerProxies
|
||||||
|
key: (model) => model.incompatibleA
|
||||||
|
...
|
||||||
|
selected: (model) => model.incompatibleZ
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\endqml
|
||||||
|
*/
|
||||||
|
QtObject {
|
||||||
|
property var key: (model) => model.key
|
||||||
|
property var name: (model) => model.name
|
||||||
|
property var shortName: (model) => model.shortName
|
||||||
|
property var symbol: (model) => model.symbol
|
||||||
|
property var imageSource: (model) => model.imageSource
|
||||||
|
property var category: (model) => model.category
|
||||||
|
property var selected: (model) => model.selected
|
||||||
|
property var setSelected: (model, val) => model.selected = val
|
||||||
|
}
|
|
@ -174,5 +174,6 @@
|
||||||
<file>StatusQ/Popups/StatusSpellcheckingMenuItems.qml</file>
|
<file>StatusQ/Popups/StatusSpellcheckingMenuItems.qml</file>
|
||||||
<file>StatusQ/Popups/StatusStackModal.qml</file>
|
<file>StatusQ/Popups/StatusStackModal.qml</file>
|
||||||
<file>StatusQ/qmldir</file>
|
<file>StatusQ/qmldir</file>
|
||||||
|
<file>StatusQ/Components/StatusListPickerProxies.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
Loading…
Reference in New Issue