harbour-sextant/lisp/local-projects/cockpit/cockpit.lisp
Renaud Casenave-Péré 7b4a258c0b Revamp app build system
Ui will be referred to by the name ‘cockpit’
2025-09-07 16:22:59 +02:00

43 lines
1.2 KiB
Common Lisp

(uiop:define-package :cockpit
(:use :cl :eql :sextant))
(in-package :cockpit)
(qrequire :quick)
(defun initialize ())
(defun finalize ())
(defun start ()
(initialize)
(ext:catch-signal ext:+SIGTERM+ :catch)
(ext:set-signal-handler ext:+SIGTERM+ #'terminate)
(qconnect qml:*quick-view* "statusChanged(QQuickView::Status)"
(lambda (status)
(case status
(#.|QQuickView.Ready| (qml-reloaded)))))
(qconnect qml:*quick-view* "closing(QQuickCloseEvent*)"
(lambda (close)
(declare (ignore close))
(finalize))))
(defun terminate ()
(finalize)
(qrun #'qquit))
(defun reload-qml (&optional (url "http://localhost:8000/"))
"Reload QML file from an url, directly on the device."
(qrun*
(let ((src (|toString| (|source| qml:*quick-view*))))
(if (x:starts-with qml:*root* src)
(|setSource| qml:*quick-view* (qnew "QUrl(QString)" (x:string-substitute url qml:*root* src)))
(qml:reload))
(|toString| (|source| qml:*quick-view*)))))
(defun set-qml (url)
(|setSource| qml:*quick-view* (qnew "QUrl(QString)" url))
(|toString| (|source| qml:*quick-view*)))
(defun qml-reloaded ())
(qlater #'start)