1 USING: accessors audio audio.engine combinators destructors
2 images.loader images.viewer init kernel namespaces
3 ui.gadgets ui.gadgets.buttons ui.gadgets.panes ;
4 FROM: ui.gadgets.buttons.private => border-button-theme ;
5 FROM: audio.engine.private => make-engine-current ;
8 TUPLE: audio-gadget < button
10 audio audio-clip state ;
14 CONSTANT: play-label-image-path "vocab:audio/gadget/play.png"
15 CONSTANT: pause-label-image-path "vocab:audio/gadget/pause.png"
17 SYMBOLS: play-label-image pause-label-image gadget-audio-engine ;
20 f play-label-image set-global
21 f pause-label-image set-global
22 f gadget-audio-engine set-global
25 : initialize-audio-gadgets ( -- )
26 gadget-audio-engine get-global [
27 play-label-image-path load-image
28 play-label-image set-global
30 pause-label-image-path load-image
31 pause-label-image set-global
33 <standard-audio-engine> dup start-audio*
34 gadget-audio-engine set-global
37 SYMBOLS: playing paused ;
39 : relabel-audio-gadget ( audio-gadget label -- )
40 [ drop clear-gadget ] [ add-gadget drop ] 2bi ;
42 : pause-audio-gadget ( audio-gadget -- )
43 [ dup play-label>> relabel-audio-gadget ]
44 [ paused swap state<< ]
45 [ audio-clip>> pause-clip ] tri ;
47 : play-audio-gadget ( audio-gadget -- )
48 [ dup pause-label>> relabel-audio-gadget ]
49 [ playing swap state<< ]
50 [ audio-clip>> play-clip ] tri ;
52 : click-audio-gadget ( audio-gadget -- )
53 gadget-audio-engine get make-engine-current
55 { playing [ pause-audio-gadget ] }
56 { paused [ play-audio-gadget ] }
61 :: <audio-gadget> ( audio -- gadget )
62 initialize-audio-gadgets
63 play-label-image get-global <image-gadget> :> play-label
64 pause-label-image get-global <image-gadget> :> pause-label
65 play-label [ click-audio-gadget ] audio-gadget new-button
69 play-label >>play-label
70 pause-label >>pause-label ;
72 M: audio-gadget graft*
73 [ call-next-method ] [
75 [ gadget-audio-engine get-global f ] dip f <static-audio-clip>
80 M: audio-gadget ungraft*
81 [ pause-audio-gadget ]
82 [ audio-clip>> dispose ]
83 [ call-next-method ] tri ;
86 <audio-gadget> gadget. ;
88 M: audio content-gadget