diff --git a/gui.rkt b/gui.rkt index 2bc3ea7..05adbc2 100644 --- a/gui.rkt +++ b/gui.rkt @@ -36,6 +36,7 @@ (define rktplayer% (class wv-window% + (init-field [log-file #f]) (inherit-field settings icon) (super-new @@ -48,6 +49,8 @@ (define closed #f) (define el-seeker #f) + (define el-volume #f) + (define el-vol-perc #f) (define el-library #f) (define el-playlist #f) (define el-at #f) @@ -71,6 +74,12 @@ (define current-at-seconds 0) (define current-length-seconds 0) + (define/public (update-volume) + (let ((el (send this element 'volume-percentage))) + (let ((percentage (send player get-volume))) + (send el set-innerHTML! (sprintf "%s %d%" (tr "Volume:") percentage))) + ) + ) (define (update-time at-seconds length-seconds) (let ((as (inexact->exact (round at-seconds))) @@ -98,6 +107,7 @@ (send el-seeker set! (format "~a" seeker))) ) ) + (send this update-volume) ) ) ) @@ -232,6 +242,9 @@ ) ) + (define/public (log-file! file) + (set log-file file)) + (define/public (drop-tab! tab-id tab-idx) (when (= current-tab tab-idx) (send this stop)) @@ -312,21 +325,42 @@ (define/override (page-loaded oke) (semaphore-wait initialized) (semaphore-post initialized) - + (super page-loaded oke) + (let ((el (send this element 'log-file))) + (send el set-innerHTML! (format "~a" log-file))) + (ww-connect 'play play-or-pause) (ww-connect 'stop stop) (ww-connect 'prev previous-track) (ww-connect 'next next-track) (ww-connect 'repeat repeat) (ww-connect 'volume volume) + (ww-connect 'devtools devtools) (set! el-seeker (send this element 'seek)) (dbg-rktplayer "el-seeker: ~a" (send el-seeker get)) - (let ((seek-reactor (make-delayed-reactor 0.3 (λ (percentage) (send this seek-to percentage))))) + (let ((seek-reactor (webview-delayed-reactor 0.3 + (λ (percentage) + ;(displayln (format "el-seeker: ~a" percentage)) + (send this seek-to percentage))))) (send el-seeker on-change! seek-reactor)) + (set! el-volume (send this element 'volume-range)) + (set! el-vol-perc (send this element 'volume-perc)) + (dbg-rktplayer "el-volume: ~a" (send el-volume get)) + (let ((volume-reactor (webview-delayed-reactor 1.0 + (λ (volume-range) + (let ((percentage (* volume-range volume-range))) + (send this set-volume! percentage))) + #:update (λ (val) + (let ((p (* val val))) + (send el-vol-perc set-innerHTML! (sprintf "%d%" p)) + ))))) + (send el-volume on-change! volume-reactor)) + + (set! el-library (send this element 'library)) (set! el-playlist (send this element 'tracks)) @@ -365,6 +399,7 @@ ) (update-track-nr current-track-nr) ) + (send this update-volume) ) (define/public (scroll-top id) @@ -524,7 +559,20 @@ ) (define/public (volume) - (dbg-rktplayer "Volume") + (let* ((volume-meter (send this element 'volume-meter)) + (volume-display (send volume-meter display)) + ) + (if (eq? volume-display 'block) + (send volume-meter display 'none) + (send volume-meter display 'block)) + (send el-vol-perc set-innerHTML! + (sprintf "%d%" (send player get-volume))) + ) + ) + + (define/public (set-volume! percentage) + (send player set-volume! percentage) + (send this update-volume) ) (define/public (seek-to percentage) diff --git a/gui/rktplayer.html b/gui/rktplayer.html index 1a93048..de2e3bf 100644 --- a/gui/rktplayer.html +++ b/gui/rktplayer.html @@ -18,7 +18,13 @@