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