Merge pull request #12 from status-im/chats
initial chats/contacts layout; state & messages
This commit is contained in:
commit
18161ae693
32
main.qml
32
main.qml
|
@ -7,7 +7,7 @@ ApplicationWindow {
|
||||||
id: applicationWindow
|
id: applicationWindow
|
||||||
width: 1024
|
width: 1024
|
||||||
height: 768
|
height: 768
|
||||||
title: "JSON RPC Caller"
|
title: "Nim Status Client"
|
||||||
visible: true
|
visible: true
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
@ -160,6 +160,15 @@ ApplicationWindow {
|
||||||
height: parent.height
|
height: parent.height
|
||||||
Layout.minimumWidth: 200
|
Layout.minimumWidth: 200
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
anchors.rightMargin: 0
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
Item {
|
||||||
|
Layout.preferredHeight: 100
|
||||||
|
Layout.fillHeight: false
|
||||||
|
Layout.fillWidth: true
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
id: element
|
id: element
|
||||||
x: 772
|
x: 772
|
||||||
|
@ -239,6 +248,25 @@ ApplicationWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
Layout.fillHeight: true
|
||||||
|
Layout.fillWidth: true
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: chatViewDelegate
|
||||||
|
Label { text: "Name:" + name }
|
||||||
|
}
|
||||||
|
|
||||||
|
ListView {
|
||||||
|
id: listView
|
||||||
|
anchors.fill: parent
|
||||||
|
model: chatsModel
|
||||||
|
delegate: chatViewDelegate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
width: parent.width/2
|
width: parent.width/2
|
||||||
height: parent.height
|
height: parent.height
|
||||||
|
@ -292,6 +320,6 @@ ApplicationWindow {
|
||||||
|
|
||||||
/*##^##
|
/*##^##
|
||||||
Designer {
|
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}
|
||||||
}
|
}
|
||||||
##^##*/
|
##^##*/
|
||||||
|
|
|
@ -3,7 +3,6 @@ import status
|
||||||
import libstatus
|
import libstatus
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
||||||
var signalHandler: SignalCallback = proc(p0: cstring): void =
|
var signalHandler: SignalCallback = proc(p0: cstring): void =
|
||||||
setupForeignThreadGc()
|
setupForeignThreadGc()
|
||||||
|
|
||||||
|
@ -20,6 +19,7 @@ QtObject:
|
||||||
app: QApplication
|
app: QApplication
|
||||||
callResult: string
|
callResult: string
|
||||||
accountResult: string
|
accountResult: string
|
||||||
|
# chats: seq[ChatView]
|
||||||
|
|
||||||
# Constructor
|
# Constructor
|
||||||
proc newApplicationLogic*(app: QApplication): ApplicationLogic =
|
proc newApplicationLogic*(app: QApplication): ApplicationLogic =
|
||||||
|
@ -37,8 +37,6 @@ QtObject:
|
||||||
result.accountResult = status.queryAccounts()
|
result.accountResult = status.queryAccounts()
|
||||||
status.subscribeToTest()
|
status.subscribeToTest()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ¯\_(ツ)_/¯ dunno what is this
|
# ¯\_(ツ)_/¯ dunno what is this
|
||||||
proc setup(self: ApplicationLogic) =
|
proc setup(self: ApplicationLogic) =
|
||||||
# discard status.onMessage(self.onMessage)
|
# discard status.onMessage(self.onMessage)
|
||||||
|
|
|
@ -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,7 @@
|
||||||
import NimQml
|
import NimQml
|
||||||
import applicationLogic
|
import applicationLogic
|
||||||
|
import chats
|
||||||
|
import state
|
||||||
|
|
||||||
proc mainProc() =
|
proc mainProc() =
|
||||||
|
|
||||||
|
@ -11,6 +13,8 @@ proc mainProc() =
|
||||||
var app = newQApplication()
|
var app = newQApplication()
|
||||||
defer: app.delete() # Defer will run this just before mainProc() function ends
|
defer: app.delete() # Defer will run this just before mainProc() function ends
|
||||||
|
|
||||||
|
var chatsModel = newChatsModel();
|
||||||
|
defer: chatsModel.delete
|
||||||
|
|
||||||
var engine = newQQmlApplicationEngine()
|
var engine = newQQmlApplicationEngine()
|
||||||
defer: engine.delete()
|
defer: engine.delete()
|
||||||
|
@ -22,7 +26,24 @@ proc mainProc() =
|
||||||
let logicVariant = newQVariant(logic)
|
let logicVariant = newQVariant(logic)
|
||||||
defer: logicVariant.delete
|
defer: logicVariant.delete
|
||||||
|
|
||||||
|
let chatsVariant = newQVariant(chatsModel)
|
||||||
|
defer: chatsVariant.delete
|
||||||
|
|
||||||
|
var appState = state.newAppState()
|
||||||
|
echo appState.title
|
||||||
|
|
||||||
|
appState.subscribe(proc () =
|
||||||
|
chatsModel.names = @[]
|
||||||
|
for channel in appState.channels:
|
||||||
|
echo channel.name
|
||||||
|
chatsModel.addNameTolist(channel.name)
|
||||||
|
)
|
||||||
|
|
||||||
|
appState.addChannel("test")
|
||||||
|
appState.addChannel("test2")
|
||||||
|
|
||||||
engine.setRootContextProperty("logic", logicVariant)
|
engine.setRootContextProperty("logic", logicVariant)
|
||||||
|
engine.setRootContextProperty("chatsModel", chatsVariant)
|
||||||
engine.load("main.qml")
|
engine.load("main.qml")
|
||||||
|
|
||||||
# Qt main event loop is entered here
|
# Qt main event loop is entered here
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
|
||||||
|
type Channel = object
|
||||||
|
name*: string
|
||||||
|
type
|
||||||
|
Subscriber* = proc ()
|
||||||
|
|
||||||
|
type AppState* = ref object
|
||||||
|
title*: string
|
||||||
|
channels*: seq[Channel]
|
||||||
|
subscribers*: seq[Subscriber]
|
||||||
|
|
||||||
|
proc newAppState*(): AppState =
|
||||||
|
result = AppState(title: "hello")
|
||||||
|
|
||||||
|
proc subscribe*(self: AppState, subscriber: Subscriber) =
|
||||||
|
self.subscribers.add(subscriber)
|
||||||
|
|
||||||
|
proc dispatch*(self: AppState) =
|
||||||
|
for subscriber in self.subscribers:
|
||||||
|
subscriber()
|
||||||
|
|
||||||
|
proc addChannel*(self: AppState, name: string) =
|
||||||
|
self.channels.add(Channel(name: name))
|
||||||
|
self.dispatch()
|
Loading…
Reference in New Issue