feat: hook wallet assets to nim model
This commit is contained in:
parent
cd522ba803
commit
a962069b73
|
@ -0,0 +1,67 @@
|
||||||
|
import NimQml
|
||||||
|
import Tables
|
||||||
|
|
||||||
|
type
|
||||||
|
AssetRoles {.pure.} = enum
|
||||||
|
Name = UserRole + 1,
|
||||||
|
Symbol = UserRole + 2,
|
||||||
|
Value = UserRole + 3,
|
||||||
|
FiatValue = UserRole + 4,
|
||||||
|
Image = UserRole + 5
|
||||||
|
|
||||||
|
type
|
||||||
|
Asset* = ref object of QObject
|
||||||
|
name*, symbol*, value*, fiatValue*, image*: string
|
||||||
|
|
||||||
|
QtObject:
|
||||||
|
type
|
||||||
|
AssetsModel* = ref object of QAbstractListModel
|
||||||
|
assets*: seq[Asset]
|
||||||
|
|
||||||
|
proc delete(self: AssetsModel) =
|
||||||
|
self.QAbstractListModel.delete
|
||||||
|
for asset in self.assets:
|
||||||
|
asset.delete
|
||||||
|
self.assets = @[]
|
||||||
|
|
||||||
|
proc setup(self: AssetsModel) =
|
||||||
|
self.QAbstractListModel.setup
|
||||||
|
|
||||||
|
proc newAssetsModel*(): AssetsModel =
|
||||||
|
new(result, delete)
|
||||||
|
result.assets = @[]
|
||||||
|
result.setup
|
||||||
|
|
||||||
|
proc addAssetToList*(self: AssetsModel, name: string, symbol: string, value: string, fiatValue: string) {.slot.} =
|
||||||
|
self.beginInsertRows(newQModelIndex(), self.assets.len, self.assets.len)
|
||||||
|
self.assets.add(Asset(name : name,
|
||||||
|
symbol : symbol,
|
||||||
|
value : value,
|
||||||
|
fiatValue: fiatValue,
|
||||||
|
image: ""))
|
||||||
|
self.endInsertRows()
|
||||||
|
|
||||||
|
method rowCount(self: AssetsModel, index: QModelIndex = nil): int =
|
||||||
|
return self.assets.len
|
||||||
|
|
||||||
|
method data(self: AssetsModel, index: QModelIndex, role: int): QVariant =
|
||||||
|
if not index.isValid:
|
||||||
|
return
|
||||||
|
if index.row < 0 or index.row >= self.assets.len:
|
||||||
|
return
|
||||||
|
|
||||||
|
let asset = self.assets[index.row]
|
||||||
|
let assetRole = role.AssetRoles
|
||||||
|
case assetRole:
|
||||||
|
of AssetRoles.Name: result = newQVariant(asset.name)
|
||||||
|
of AssetRoles.Symbol: result = newQVariant(asset.symbol)
|
||||||
|
of AssetRoles.Value: result = newQVariant(asset.value)
|
||||||
|
of AssetRoles.FiatValue: result = newQVariant(asset.fiatValue)
|
||||||
|
of AssetRoles.Image: result = newQVariant(asset.image)
|
||||||
|
|
||||||
|
method roleNames(self: AssetsModel): Table[int, string] =
|
||||||
|
{ AssetRoles.Name.int:"name",
|
||||||
|
AssetRoles.Symbol.int:"symbol",
|
||||||
|
AssetRoles.Value.int:"value",
|
||||||
|
AssetRoles.FiatValue.int:"fiatValue",
|
||||||
|
AssetRoles.Image.int:"image" }.toTable
|
|
@ -1,6 +1,7 @@
|
||||||
import NimQml
|
import NimQml
|
||||||
import applicationView
|
import applicationView
|
||||||
import chats
|
import chats
|
||||||
|
import assets
|
||||||
import json
|
import json
|
||||||
import state
|
import state
|
||||||
import status/utils
|
import status/utils
|
||||||
|
@ -28,6 +29,9 @@ proc mainProc() =
|
||||||
var chatsModel = newChatsModel();
|
var chatsModel = newChatsModel();
|
||||||
defer: chatsModel.delete
|
defer: chatsModel.delete
|
||||||
|
|
||||||
|
var assetsModel = newAssetsModel();
|
||||||
|
defer: assetsModel.delete
|
||||||
|
|
||||||
var engine = newQQmlApplicationEngine()
|
var engine = newQQmlApplicationEngine()
|
||||||
defer: engine.delete()
|
defer: engine.delete()
|
||||||
|
|
||||||
|
@ -76,6 +80,9 @@ proc mainProc() =
|
||||||
chatsModel.addNameTolist(channel.name)
|
chatsModel.addNameTolist(channel.name)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
let assetsVariant = newQVariant(assetsModel)
|
||||||
|
defer: chatsVariant.delete
|
||||||
|
|
||||||
status.startMessenger()
|
status.startMessenger()
|
||||||
|
|
||||||
appState.addChannel("test")
|
appState.addChannel("test")
|
||||||
|
@ -83,6 +90,9 @@ proc mainProc() =
|
||||||
|
|
||||||
engine.setRootContextProperty("logic", logicVariant)
|
engine.setRootContextProperty("logic", logicVariant)
|
||||||
engine.setRootContextProperty("chatsModel", chatsVariant)
|
engine.setRootContextProperty("chatsModel", chatsVariant)
|
||||||
|
engine.setRootContextProperty("assetsModel", assetsVariant)
|
||||||
|
|
||||||
|
assetsModel.addAssetToList("Ethereum", "ETH", fmt"{eth_value:.6}", "$" & fmt"{usd_balance:.6}")
|
||||||
|
|
||||||
engine.load("../ui/main.qml")
|
engine.load("../ui/main.qml")
|
||||||
|
|
||||||
|
|
|
@ -193,13 +193,11 @@ ColumnLayout {
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: assetInfoContainer
|
id: assetInfoContainer
|
||||||
width: 100
|
Layout.fillHeight: true
|
||||||
height: 100
|
Layout.fillWidth: true
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: walletSendBg
|
id: walletSendBg
|
||||||
width: 200
|
|
||||||
height: 200
|
|
||||||
color: "#ffffff"
|
color: "#ffffff"
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
@ -266,26 +264,19 @@ ColumnLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete this when we have a real model
|
|
||||||
ListModel {
|
|
||||||
id: exampleAssets
|
|
||||||
ListElement {
|
|
||||||
name: "Ethereum"
|
|
||||||
symbol: "ETH"
|
|
||||||
value: "0.4564234124124..."
|
|
||||||
fiatValue: "$268.30"
|
|
||||||
image: ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ListView {
|
ListView {
|
||||||
id: listView
|
id: listView
|
||||||
anchors.topMargin: 36
|
anchors.topMargin: 36
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
// Change this to the real model
|
model: assetsModel
|
||||||
model: exampleAssets
|
|
||||||
delegate: assetViewDelegate
|
delegate: assetViewDelegate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*##^##
|
||||||
|
Designer {
|
||||||
|
D{i:0;formeditorZoom:0.8999999761581421;height:770;width:340}
|
||||||
|
}
|
||||||
|
##^##*/
|
||||||
|
|
Loading…
Reference in New Issue