From 41dd96e9c94dd0ebe98527dc26f5becc3f2530dd Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 8 May 2020 18:04:53 -0400 Subject: [PATCH] display values from a list, and support changing that list from nim --- main.qml | 15 +++++++++++++-- src/applicationLogic.nim | 13 +++++-------- src/chats.nim | 38 ++++++++++++++++++++++++++++++++++++++ src/nim_status_client.nim | 10 +++++++++- src/state.nim | 1 - 5 files changed, 65 insertions(+), 12 deletions(-) create mode 100644 src/chats.nim diff --git a/main.qml b/main.qml index bae8731011..2e7bccec8e 100644 --- a/main.qml +++ b/main.qml @@ -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} } ##^##*/ diff --git a/src/applicationLogic.nim b/src/applicationLogic.nim index 7b075e6242..e6cb0fcde0 100644 --- a/src/applicationLogic.nim +++ b/src/applicationLogic.nim @@ -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 \ No newline at end of file + # access all the QProperties which are stored as QVariants diff --git a/src/chats.nim b/src/chats.nim new file mode 100644 index 0000000000..e039735e86 --- /dev/null +++ b/src/chats.nim @@ -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 diff --git a/src/nim_status_client.nim b/src/nim_status_client.nim index bbc5214c65..59c2d3b735 100644 --- a/src/nim_status_client.nim +++ b/src/nim_status_client.nim @@ -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 diff --git a/src/state.nim b/src/state.nim index 0d28eb88e7..5ecbc5550b 100644 --- a/src/state.nim +++ b/src/state.nim @@ -1,5 +1,4 @@ - type Channel = object name*: string type