#lang racket (require racket-webview racket/runtime-path "translate.rkt" ) (provide rktplayer-tray%) (define-runtime-path rkt-gui-dir "gui") (define rktplayer-tray% (class wv-tray% (init-field [rktplayer-gui (error "Must be called with the GUI Window of RktPlayer")] ) (define (adjust-menu) (let ((mnu (wv-menu 'tray-menu (wv-menu-item 'm-hide-show (if (eq? (send rktplayer-gui window-state) 'hidden) (tr "Show window") (tr "Hide window"))) (wv-menu-item 'm-pause-play (tr "Pause / Play")) (wv-menu-item 'm-quit (tr "Quit")) ) ) ) (send this set-menu! mnu) (send this connect-menu! 'm-hide-show (λ () (show-hide))) (send this connect-menu! 'm-quit (λ () (quit))) (send this connect-menu! 'm-pause-play (λ () (pause-play))) )) (define (quit) (send rktplayer-gui quit)) (define (pause-play) (send rktplayer-gui play-or-pause)) (define (show-hide) (send rktplayer-gui show-hide) (adjust-menu) ) (define/override (activated reason) (show-hide) #t) (super-new [icon (build-path rkt-gui-dir "rktplayer.png")] [tooltip (tr "Racket Music Player")]) (begin (send rktplayer-gui set-window-state-change-callback! (λ () (adjust-menu))) (adjust-menu) ) ) )