mirror of
https://gitlab.com/eql/lqml.git
synced 2025-12-09 03:50:29 -08:00
add new example 'advanced-qml-auto-reload' (single file reload); revisions
This commit is contained in:
parent
5f3b251a69
commit
1473ec8271
28 changed files with 1144 additions and 2 deletions
|
|
@ -0,0 +1,49 @@
|
|||
;;; trivial QML auto reload during development (desktop only), see:
|
||||
;;;
|
||||
;;; lqml run.lisp -auto
|
||||
|
||||
(in-package :qml-user)
|
||||
|
||||
(defvar *reload-all* nil)
|
||||
(defvar *edited-file* nil)
|
||||
|
||||
(defparameter *dir* *load-truename*)
|
||||
|
||||
(defun reload-main-p ()
|
||||
(or *reload-all*
|
||||
(string= "main.qml" *edited-file*)))
|
||||
|
||||
(defun qml:view-status-changed (status)
|
||||
(when (and (= 1 status)
|
||||
(reload-main-p))
|
||||
(load (merge-pathnames "on-reloaded" *dir*))))
|
||||
|
||||
(let ((secs 0))
|
||||
(defun watch-files ()
|
||||
(let ((sum 0)
|
||||
(max 0)
|
||||
files)
|
||||
;; don't cache, files might be added/removed during development
|
||||
(dolist (file (directory (merge-pathnames "../../qml/**/*.qml" *dir*)))
|
||||
(unless (search "/." (namestring file))
|
||||
(push file files)))
|
||||
(dolist (file files)
|
||||
(let ((date (file-write-date file)))
|
||||
(when (> date max)
|
||||
(setf max date
|
||||
*edited-file* file))
|
||||
(incf sum date)))
|
||||
(let ((edited (namestring *edited-file*)))
|
||||
(setf *edited-file*
|
||||
(subseq edited (+ 5 (search "/qml/" edited)))))
|
||||
(when (/= secs sum)
|
||||
(unless (zerop secs)
|
||||
(if (reload-main-p)
|
||||
(qml:reload)
|
||||
(qjs |reload| *edited-file*)))
|
||||
(setf secs sum)))
|
||||
(qsingle-shot 250 'watch-files)))
|
||||
|
||||
(progn
|
||||
(load "qml/.create-qml-loaders")
|
||||
(watch-files))
|
||||
Loading…
Add table
Add a link
Reference in a new issue