display values from a list, and support changing that list from nim
This commit is contained in:
parent
a0580893c4
commit
41dd96e9c9
15
main.qml
15
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}
|
||||
}
|
||||
##^##*/
|
||||
|
|
|
@ -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) =
|
||||
|
|
|
@ -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
|
|
@ -1,5 +1,6 @@
|
|||
import NimQml
|
||||
import applicationLogic
|
||||
import chats
|
||||
|
||||
proc mainProc() =
|
||||
|
||||
|
@ -11,6 +12,8 @@ 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
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
|
||||
|
||||
type Channel = object
|
||||
name*: string
|
||||
type
|
||||
|
|
Loading…
Reference in New Issue