43 lines
1.2 KiB
Common Lisp
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)
|