175 lines
4.9 KiB
QML
175 lines
4.9 KiB
QML
|
import QtQuick 2.15
|
||
|
import QtQuick.Controls 2.15
|
||
|
import QtQuick.Layouts 1.15
|
||
|
|
||
|
import StatusQ 0.1
|
||
|
|
||
|
Item {
|
||
|
id: root
|
||
|
|
||
|
QtObject {
|
||
|
id: d
|
||
|
|
||
|
readonly property string balanceRoleName: "balance"
|
||
|
property string roleName: balanceRoleName
|
||
|
}
|
||
|
|
||
|
ListModel {
|
||
|
id: srcModel
|
||
|
|
||
|
ListElement {
|
||
|
key: "ETH"
|
||
|
|
||
|
balances: [
|
||
|
ListElement { chainId: "1"; balance: 3 },
|
||
|
ListElement { chainId: "2"; balance: 4 },
|
||
|
ListElement { chainId: "31"; balance: 2 }
|
||
|
]
|
||
|
}
|
||
|
|
||
|
ListElement {
|
||
|
key: "SNT"
|
||
|
|
||
|
balances: [
|
||
|
ListElement { chainId: "2"; balance: 42 }
|
||
|
]
|
||
|
}
|
||
|
|
||
|
ListElement {
|
||
|
key: "DAI"
|
||
|
|
||
|
balances: [
|
||
|
ListElement { chainId: "1"; balance: 4 },
|
||
|
ListElement { chainId: "3"; balance: 9 }
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ColumnLayout {
|
||
|
anchors.fill: parent
|
||
|
anchors.margins: 40
|
||
|
|
||
|
Rectangle {
|
||
|
Layout.fillWidth: true
|
||
|
Layout.fillHeight: true
|
||
|
|
||
|
border.color: "gray"
|
||
|
|
||
|
ListView {
|
||
|
anchors.fill: parent
|
||
|
anchors.margins: 10
|
||
|
|
||
|
model: srcModel
|
||
|
spacing: 10
|
||
|
|
||
|
header: Label {
|
||
|
height: implicitHeight * 2
|
||
|
text: `Source model (${srcModel.count})`
|
||
|
|
||
|
font.bold: true
|
||
|
color: "blue"
|
||
|
|
||
|
verticalAlignment: Text.AlignVCenter
|
||
|
}
|
||
|
|
||
|
ScrollBar.vertical: ScrollBar {}
|
||
|
|
||
|
delegate: ColumnLayout {
|
||
|
height: implicitHeight
|
||
|
spacing: 0
|
||
|
|
||
|
Label {
|
||
|
Layout.fillWidth: true
|
||
|
Layout.bottomMargin: 4
|
||
|
|
||
|
text: `KEY: ${model.key}`
|
||
|
font.bold: true
|
||
|
}
|
||
|
Label {
|
||
|
Layout.fillWidth: true
|
||
|
Layout.bottomMargin: 4
|
||
|
|
||
|
text: `Total balances: ${aggregator.value}`
|
||
|
font.bold: true
|
||
|
color: "red"
|
||
|
}
|
||
|
ListView {
|
||
|
Layout.fillWidth: true
|
||
|
Layout.preferredHeight: childrenRect.height
|
||
|
|
||
|
model: balances
|
||
|
delegate: Label {
|
||
|
height: implicitHeight
|
||
|
width: ListView.view.width
|
||
|
text: `chainID: ${model.chainId}, balance: ${model.balance}`
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
SumAggregator {
|
||
|
id: aggregator
|
||
|
|
||
|
model: balances
|
||
|
roleName: d.roleName
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
RowLayout {
|
||
|
Button {
|
||
|
id: addRows
|
||
|
text: "Add rows"
|
||
|
onClicked: {
|
||
|
srcModel.get(0).balances.append( {"chainId": "1", "balance": Math.random()} )
|
||
|
srcModel.get(1).balances.append( {"chainId": "22", "balance": Math.random()} )
|
||
|
srcModel.get(2).balances.append( {"chainId": "34", "balance": Math.random()} )
|
||
|
}
|
||
|
}
|
||
|
Button {
|
||
|
id: removeRows
|
||
|
text: "Remove rows"
|
||
|
onClicked: {
|
||
|
if(srcModel.get(0).balances.count > 1)
|
||
|
srcModel.get(0).balances.remove(0)
|
||
|
if(srcModel.get(1).balances.count > 1)
|
||
|
srcModel.get(1).balances.remove(0)
|
||
|
if(srcModel.get(2).balances.count > 1)
|
||
|
srcModel.get(2).balances.remove(0)
|
||
|
}
|
||
|
}
|
||
|
Button {
|
||
|
id: resetModel
|
||
|
text: "Reset model"
|
||
|
onClicked: {
|
||
|
srcModel.get(0).balances.clear()
|
||
|
srcModel.get(1).balances.clear()
|
||
|
srcModel.get(2).balances.clear()
|
||
|
}
|
||
|
}
|
||
|
Button {
|
||
|
id: changeData
|
||
|
text: "Change data"
|
||
|
onClicked: {
|
||
|
srcModel.get(0).balances.get(0).balance = Math.random()
|
||
|
srcModel.get(1).balances.get(0).balance = Math.random()
|
||
|
srcModel.get(2).balances.get(0).balance = Math.random()
|
||
|
}
|
||
|
}
|
||
|
Button {
|
||
|
id: changeRoleName
|
||
|
text: "Change role name"
|
||
|
|
||
|
onClicked: {
|
||
|
if(d.roleName === d.balanceRoleName)
|
||
|
d.roleName = "chainId"
|
||
|
else
|
||
|
d.roleName = d.balanceRoleName
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// category: Models
|