This commit is contained in:
2026-02-19 17:23:52 +01:00
parent 9974a598dc
commit 12758d83e0

View File

@@ -68,27 +68,28 @@
(error "menu-item's optional argument separator must be boolean?")) (error "menu-item's optional argument separator must be boolean?"))
(make-ww-menu-item id title icon-file callback submenu separator)) (make-ww-menu-item id title icon-file callback submenu separator))
(define (menu->hash menu) (define (menu->hash menu . for-json)
(unless (is-menu? menu) (let ((fj (if (null? for-json) #f (car for-json))))
(error "menu->hash must be called with a menu")) (unless (is-menu? menu)
(let* ((items (ww-menu-items menu)) (error "menu->hash must be called with a menu"))
(r (map (λ (item) (let* ((items (ww-menu-items menu))
(let ((h (make-hasheq))) (r (map (λ (item)
(hash-set! h 'id (format "~a" (ww-menu-item-id item))) (let ((h (make-hasheq)))
(hash-set! h 'name (ww-menu-item-title item)) (hash-set! h 'id (format "~a" (ww-menu-item-id item)))
(unless (eq? (ww-menu-item-icon-file item) #f) (hash-set! h 'name (ww-menu-item-title item))
(hash-set! h 'icon (ww-menu-item-icon-file item))) (unless (eq? (ww-menu-item-icon-file item) #f)
(unless (eq? (ww-menu-item-submenu item) #f) (hash-set! h 'icon (ww-menu-item-icon-file item)))
(hash-set! h 'submenu (menu->hash (ww-menu-item-submenu item)))) (unless (eq? (ww-menu-item-submenu item) #f)
(unless (eq? (ww-menu-item-separator item) #f) (hash-set! h 'submenu (menu->hash (ww-menu-item-submenu item) fj)))
(hash-set! h 'separator #t)) (unless (eq? (ww-menu-item-separator item) #f)
h (hash-set! h 'separator #t))
)) items)) h
) )) items))
(let ((h (make-hasheq))) )
(hash-set! h 'menu r) (let ((h (make-hasheq)))
(hash-set! h 'menu-id (ww-menu-id menu)) (hash-set! h 'menu r)
h))) (hash-set! h 'menu-id (if fj (format "~a" (ww-menu-id menu)) (ww-menu-id menu)))
h))))
(define (menu-for-each menu cb) (define (menu-for-each menu cb)
(let ((items (ww-menu-items menu))) (let ((items (ww-menu-items menu)))
@@ -109,7 +110,7 @@
(define (menu->json menu) (define (menu->json menu)
(let ((o (open-output-string))) (let ((o (open-output-string)))
(write-json (menu->hash menu) o) (write-json (menu->hash menu #t) o)
(get-output-string o))) (get-output-string o)))
(define (find-menu-item menu id) (define (find-menu-item menu id)