-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathschemep3-panel-progress-view.scm
72 lines (57 loc) · 1.89 KB
/
schemep3-panel-progress-view.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#lang scheme/gui
(provide
progress-view%
playback-time-panel%
)
(require srfi/2)
(require srfi/26)
(require "schemep3-playback.scm")
(require "schemep3-helpers.scm")
(require "schemep3-status.scm")
(require "schemep3-database.scm")
(define playback-time-panel%
(class horizontal-panel%
(super-new
(stretchable-width #f))
(define time-display-message%
(class message%
(define/public (set-time n)
(send this set-label (format-time (number->integer n))))
(super-new (label "xx:xx"))))
(define _progress-message
(new time-display-message%
(parent this)))
(new message% (label "/") (parent this))
(define _duration-message
(new time-display-message%
(parent this)))
(define (set-duration-from-item file-index)
(and-let* ((duration (schemep3-database-retrieve-field file-index 'duration)))
(send _duration-message set-time duration)))
(and-let* ((file-index (now-playing-database-index)))
(set-duration-from-item file-index))
(add-progress-hook
(lambda (time position)
(send _progress-message set-time time)))
(add-pre-play-hook
(lambda (playlist-index file-index)
(set-duration-from-item file-index)))))
(define progress-view%
(class horizontal-panel%
(super-new)
(define _playback-slider
(new slider%
(parent this)
(min-value 0)
(max-value 100)
(style '(horizontal plain))
(callback
(lambda (control event)
(seek (send control get-value))))
(label #f)))
(new playback-time-panel%
(parent this))
(add-progress-hook
(lambda (time position)
(send _playback-slider set-value (number->integer position))))
))