display values from a list, and support changing that list from nim

This commit is contained in:
Iuri Matias 2020-05-08 18:04:53 -04:00
parent a0580893c4
commit 41dd96e9c9
5 changed files with 65 additions and 12 deletions

View File

@ -7,7 +7,7 @@ ApplicationWindow {
id: applicationWindow
width: 1024
height: 768
title: "JSON RPC Caller"
title: "Nim Status Client"
visible: true
RowLayout {
@ -237,6 +237,17 @@ ApplicationWindow {
font.pixelSize: 28
}
}
Component {
id: chatViewDelegate
Label { text: "Name:" + name }
}
ListView {
id: listView
anchors.fill: parent
model: chatsModel
delegate: chatViewDelegate
}
}
Item {
@ -292,6 +303,6 @@ ApplicationWindow {
/*##^##
Designer {
D{i:9;anchors_height:40;anchors_width:40}D{i:19;anchors_y:0}D{i:23;anchors_height:100;anchors_width:100}
D{i:9;anchors_height:40;anchors_width:40}
}
##^##*/

View File

@ -20,6 +20,7 @@ QtObject:
app: QApplication
callResult: string
accountResult: string
# chats: seq[ChatView]
# Constructor
proc newApplicationLogic*(app: QApplication): ApplicationLogic =
@ -41,17 +42,13 @@ QtObject:
echo appState.title
appState.subscribe(proc () =
echo "1nd subscriber got a new update!"
for channel in appState.channels:
echo channel.name
)
appState.addChannel("test")
appState.subscribe(proc () =
echo "2nd subscriber got a new update!"
)
appState.addChannel("test2")
for channel in appState.channels:
echo channel.name
# result.chats.add(ChatView(name: "test"))
# ¯\_(ツ)_/¯ dunno what is this
proc setup(self: ApplicationLogic) =
@ -112,4 +109,4 @@ QtObject:
notify = callResultChanged
# This class has the metaObject property available which lets
# access all the QProperties which are stored as QVariants
# access all the QProperties which are stored as QVariants

38
src/chats.nim Normal file
View File

@ -0,0 +1,38 @@
import NimQml
import Tables
type
RoleNames {.pure.} = enum
Name = UserRole + 1,
QtObject:
type
ChatsModel* = ref object of QAbstractListModel
names*: seq[string]
proc delete(self: ChatsModel) =
self.QAbstractListModel.delete
proc setup(self: ChatsModel) =
self.QAbstractListModel.setup
proc newChatsModel*(): ChatsModel =
new(result, delete)
result.names = @["test", "test2"]
result.setup
proc addNameTolist*(self: ChatsModel, name: string) =
self.names.add(name)
method rowCount(self: ChatsModel, index: QModelIndex = nil): int =
return self.names.len
method data(self: ChatsModel, index: QModelIndex, role: int): QVariant =
if not index.isValid:
return
if index.row < 0 or index.row >= self.names.len:
return
return newQVariant(self.names[index.row])
method roleNames(self: ChatsModel): Table[int, string] =
{ RoleNames.Name.int:"name"}.toTable

View File

@ -1,5 +1,6 @@
import NimQml
import applicationLogic
import chats
proc mainProc() =
@ -11,7 +12,9 @@ proc mainProc() =
var app = newQApplication()
defer: app.delete() # Defer will run this just before mainProc() function ends
var chatsModel = newChatsModel();
defer: chatsModel.delete
var engine = newQQmlApplicationEngine()
defer: engine.delete()
@ -22,7 +25,12 @@ proc mainProc() =
let logicVariant = newQVariant(logic)
defer: logicVariant.delete
let chatsVariant = newQVariant(chatsModel)
defer: chatsVariant.delete
chatsModel.addNameTolist("hello")
engine.setRootContextProperty("logic", logicVariant)
engine.setRootContextProperty("chatsModel", chatsVariant)
engine.load("main.qml")
# Qt main event loop is entered here

View File

@ -1,5 +1,4 @@
type Channel = object
name*: string
type