QML Client
This commit is contained in:
parent
da3a4fd63e
commit
9ebac725c2
|
|
@ -0,0 +1,47 @@
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import platform
|
||||||
|
from PySide6.QtCore import QUrl
|
||||||
|
|
||||||
|
from PySide6.QtGui import QGuiApplication, QIcon
|
||||||
|
from PySide6.QtQml import QQmlApplicationEngine
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
organizationName = "Bamatics"
|
||||||
|
organizationDomain = "bamatics.de"
|
||||||
|
applicationName = "SSE Client"
|
||||||
|
versionMajor = 1
|
||||||
|
versionMinor = 0
|
||||||
|
versionMicro = 0
|
||||||
|
|
||||||
|
|
||||||
|
app = QGuiApplication([])
|
||||||
|
app.setOrganizationDomain(organizationDomain)
|
||||||
|
app.setOrganizationName(organizationName)
|
||||||
|
app.setApplicationName(applicationName)
|
||||||
|
app.setApplicationDisplayName(applicationName)
|
||||||
|
path = os.path.dirname( os.path.realpath(__file__) )
|
||||||
|
|
||||||
|
myappid = u''+ organizationName + '.' + applicationName + '.' +str(versionMajor) # arbitrary string
|
||||||
|
# if platform.system() == "Darwin":
|
||||||
|
# app.setWindowIcon( QIcon( "src/images/svg/app_icon.svg" ) )
|
||||||
|
# if platform.system() == "Windows":
|
||||||
|
# #https://stackoverflow.com/questions/1551605/how-to-set-applications-taskbar-icon-in-windows-7/1552105#1552105
|
||||||
|
# icon = QIcon(path + "/images/svg/app_icon.svg")
|
||||||
|
# app.setWindowIcon( icon )
|
||||||
|
# import ctypes
|
||||||
|
# ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
|
||||||
|
|
||||||
|
engine = QQmlApplicationEngine()
|
||||||
|
|
||||||
|
#Register models
|
||||||
|
|
||||||
|
engine.rootContext().setContextProperty("applicationDirPath", path )
|
||||||
|
engine.load( QUrl().fromLocalFile( os.path.join(path, "qml/main.qml")) )
|
||||||
|
|
||||||
|
if not engine.rootObjects():
|
||||||
|
sys.exit(-1)
|
||||||
|
|
||||||
|
|
||||||
|
sys.exit( app.exec() )
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Window
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Controls.Material
|
||||||
|
|
||||||
|
import Qt.labs.settings
|
||||||
|
|
||||||
|
ApplicationWindow {
|
||||||
|
id: window
|
||||||
|
width: 800
|
||||||
|
height: 600
|
||||||
|
|
||||||
|
visible: true
|
||||||
|
title: Qt.application.name
|
||||||
|
|
||||||
|
Settings {
|
||||||
|
category: "ApplicationWindow"
|
||||||
|
property alias x: window.x
|
||||||
|
property alias y: window.y
|
||||||
|
property alias width: window.width
|
||||||
|
property alias height: window.height
|
||||||
|
}
|
||||||
|
Settings {
|
||||||
|
category: "settings"
|
||||||
|
property alias nrOfElements: nrOfElements.value
|
||||||
|
}
|
||||||
|
Settings{
|
||||||
|
id: settings
|
||||||
|
}
|
||||||
|
|
||||||
|
property int counter: 0
|
||||||
|
property bool online: false
|
||||||
|
|
||||||
|
function add(entry){
|
||||||
|
var diff = data.count - nrOfElements.value+1
|
||||||
|
if( diff > 0 )
|
||||||
|
data.remove(0, diff)
|
||||||
|
data.append( entry )
|
||||||
|
}
|
||||||
|
|
||||||
|
function update(event){
|
||||||
|
console.log(event)
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetch(){
|
||||||
|
console.log("Try to fetch...")
|
||||||
|
var last_response_len = 0;
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open('GET', 'http://127.0.0.1/stream', true); // method, adress, async
|
||||||
|
xhr.setRequestHeader('Accept', 'text/event-stream');
|
||||||
|
xhr.onreadystatechange = console.log( xhr.readyState )
|
||||||
|
xhr.onprogress = () => {
|
||||||
|
var responseText = xhttxhrp.response.substr(last_response_len);
|
||||||
|
last_response_len = xhr.response.length;
|
||||||
|
update( responseText )
|
||||||
|
}
|
||||||
|
xhr.send()
|
||||||
|
}
|
||||||
|
|
||||||
|
ListModel{
|
||||||
|
id: data
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer{
|
||||||
|
id: reconnect
|
||||||
|
interval: 3000
|
||||||
|
repeat: true
|
||||||
|
running: false
|
||||||
|
onTriggered: fetch()
|
||||||
|
}
|
||||||
|
Component.onCompleted: {
|
||||||
|
fetch()
|
||||||
|
}
|
||||||
|
|
||||||
|
header: RowLayout{
|
||||||
|
Label{
|
||||||
|
Layout.alignment: Qt.AlignLeft
|
||||||
|
text: 'Nr of Elements: ' + nrOfElements.value
|
||||||
|
}
|
||||||
|
Slider{
|
||||||
|
Layout.alignment: Qt.AlignLeft
|
||||||
|
id: nrOfElements
|
||||||
|
from: 5
|
||||||
|
to: 25
|
||||||
|
stepSize: 1
|
||||||
|
onValueChanged: {
|
||||||
|
while( data.count > value )
|
||||||
|
{
|
||||||
|
data.remove(0, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Rectangle{
|
||||||
|
Layout.alignment: Qt.AlignLeft
|
||||||
|
id: status
|
||||||
|
property bool online: window.online
|
||||||
|
width: 100
|
||||||
|
height: 30
|
||||||
|
color: online ? 'green' : 'red'
|
||||||
|
radius: 5
|
||||||
|
Label{
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: parent.online ? 'Online' : 'Offline'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Button{
|
||||||
|
text: "Test"
|
||||||
|
onClicked: {
|
||||||
|
counter++;
|
||||||
|
var txt = "Counter " + counter
|
||||||
|
window.add( {type: "Message", txt: txt} )
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Item{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ListView{
|
||||||
|
anchors.fill: parent
|
||||||
|
model: data
|
||||||
|
delegate: Label{
|
||||||
|
text: type + ' : ' + txt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue