Files
rktplayer/gui/tray.rkt
T

80 lines
2.4 KiB
Racket

#lang racket
(require racket-webview
racket/runtime-path
"translate.rkt"
"../misc/utils.rkt"
)
(provide rktplayer-tray%)
(define-runtime-path rkt-gui-dir "html")
(define rktplayer-tray%
(class wv-tray%
(init-field [rktplayer-gui (error "Must be called with the GUI Window of RktPlayer")]
)
(define (adjust-menu)
(dbg-rktplayer "adjust menu called, window state = ~a" (send rktplayer-gui window-state))
(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)])
(define last-state #f)
(begin
(send rktplayer-gui set-window-state-change-callback!
(λ ()
(let ((st (send rktplayer-gui window-state)))
(if (eq? st 'minimized)
(begin
(if (eq? last-state 'minimized)
(begin
(dbg-rktplayer "state = ~a, presenting window" st)
(send rktplayer-gui present)
(set! last-state 'presented))
(begin
(dbg-rktplayer "state = ~a, hiding window" st)
(send rktplayer-gui hide)
(set! last-state 'minimized))))
(adjust-menu))
)
)
)
(adjust-menu)
)
)
)