diff --git a/private/menu.rkt b/private/menu.rkt index 872bbf9..7cb0df4 100644 --- a/private/menu.rkt +++ b/private/menu.rkt @@ -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)