8
8
' button' ,
9
9
' deviceID' ,
10
10
' icon' ,
11
+ ' isMuted' ,
11
12
' slider' ,
12
- ' storeVolume' ,
13
13
' supportsVolume' ,
14
14
' volume'
15
15
],
@@ -37,38 +37,30 @@ SPOCVolumeSlider class >> speakerMutedIconPath [
37
37
38
38
{
39
39
#category : #initialization ,
40
- #' squeak_changestamp' : ' TL 6/19 /2024 19:44 '
40
+ #' squeak_changestamp' : ' TL 7/8 /2024 18:15 '
41
41
}
42
42
SPOCVolumeSlider >> attachButton [
43
43
44
- self icon: (SPOCIcon new
45
- color: Color transparent;
44
+ self icon: (SPOCIcon new color: Color transparent;
46
45
iconAsset: self class speakerIconPath;
47
46
yourself );
48
- button: (SPOCClickable
49
- newUsing: self icon
50
- onClick: [:anEvent |
51
- self volumeClicked: [self switchSpeakerState]]);
52
- addMorph: (Morph new
53
- color: Color transparent;
54
- extent: 1 @ 20 ;
55
- yourself );
47
+ button: (SPOCClickable newUsing: self icon
48
+ onClick: [:anEvent | self volumeClicked: [self switchMuteState]]);
49
+ addMorph: self spacerMorph;
56
50
addMorph: self button
57
51
]
58
52
59
53
{
60
54
#category : #initialization ,
61
- #' squeak_changestamp' : ' TL 6/19 /2024 00:46 '
55
+ #' squeak_changestamp' : ' TL 7/8 /2024 18:59 '
62
56
}
63
57
SPOCVolumeSlider >> attachSlider [
64
58
65
- self slider: (SPOCSlider new
66
- value: self volume;
59
+ self slider: (SPOCSlider new value: self volume;
67
60
length: 100 ;
68
- onValueChanged: [:aValue |
69
- self volumeClicked: [self changeVolumeTo: aValue]];
70
- yourself ).
71
- self addMorph: self slider
61
+ onValueChanged: [:aValue | self volumeClicked: [self changeVolumeTo: aValue]];
62
+ yourself );
63
+ addMorph: self slider
72
64
]
73
65
74
66
{
@@ -91,16 +83,16 @@ SPOCVolumeSlider >> button: anObject [
91
83
92
84
{
93
85
#category : #' api-call' ,
94
- #' squeak_changestamp' : ' VE 6/26 /2024 14:54 '
86
+ #' squeak_changestamp' : ' TL 7/8 /2024 18:52 '
95
87
}
96
88
SPOCVolumeSlider >> changeVolumeTo: aVolume [
97
89
98
- self volume: aVolume.
99
- SPOCApiVolume new
100
- authorizer: self app auth;
90
+ SPOCApiVolume new authorizer: self app auth;
101
91
changeVolumeTo: aVolume on: self deviceID.
102
- self slider value: self volume.
103
- self updateSpeakerIcon
92
+ aVolume = 0
93
+ ifTrue: [self mute]
94
+ ifFalse: [self unmute: aVolume].
95
+ self slider value: aVolume
104
96
]
105
97
106
98
{
@@ -141,7 +133,7 @@ SPOCVolumeSlider >> icon: anObject [
141
133
142
134
{
143
135
#category : #initialization ,
144
- #' squeak_changestamp' : ' TL 6/19 /2024 00:47 '
136
+ #' squeak_changestamp' : ' TL 7/8 /2024 17:32 '
145
137
}
146
138
SPOCVolumeSlider >> initialize [
147
139
@@ -150,14 +142,41 @@ SPOCVolumeSlider >> initialize [
150
142
self color: Color transparent;
151
143
supportsVolume: false ;
152
144
volume: 100 ;
153
- storeVolume: self volume;
154
145
layoutPolicy: TableLayout new ;
155
146
listDirection: #leftToRight ;
156
147
attachSlider;
157
148
attachButton;
158
149
extendFully
159
150
]
160
151
152
+ {
153
+ #category : #accessing ,
154
+ #' squeak_changestamp' : ' TL 7/8/2024 18:12'
155
+ }
156
+ SPOCVolumeSlider >> isMuted [
157
+
158
+ ^ isMuted
159
+ ]
160
+
161
+ {
162
+ #category : #accessing ,
163
+ #' squeak_changestamp' : ' TL 7/8/2024 18:12'
164
+ }
165
+ SPOCVolumeSlider >> isMuted: anObject [
166
+
167
+ isMuted := anObject
168
+ ]
169
+
170
+ {
171
+ #category : #updating ,
172
+ #' squeak_changestamp' : ' TL 7/8/2024 18:22'
173
+ }
174
+ SPOCVolumeSlider >> mute [
175
+
176
+ self icon iconAsset: self class speakerMutedIconPath.
177
+ self isMuted: true
178
+ ]
179
+
161
180
{
162
181
#category : #updating ,
163
182
#' squeak_changestamp' : ' VE 7/2/2024 19:12'
@@ -195,21 +214,14 @@ SPOCVolumeSlider >> slider: anObject [
195
214
]
196
215
197
216
{
198
- #category : #accessing ,
199
- #' squeak_changestamp' : ' TL 6/19/2024 00:18'
200
- }
201
- SPOCVolumeSlider >> storeVolume [
202
-
203
- ^ storeVolume
204
- ]
205
-
206
- {
207
- #category : #accessing ,
208
- #' squeak_changestamp' : ' TL 6/19/2024 00:18'
217
+ #category : #initialization ,
218
+ #' squeak_changestamp' : ' TL 7/8/2024 17:39'
209
219
}
210
- SPOCVolumeSlider >> storeVolume: anObject [
220
+ SPOCVolumeSlider >> spacerMorph [
211
221
212
- storeVolume := anObject
222
+ ^ Morph new color: Color transparent;
223
+ extent: 1 @ SPOCStyle defaultMargin;
224
+ yourself
213
225
]
214
226
215
227
{
@@ -232,33 +244,42 @@ SPOCVolumeSlider >> supportsVolume: anObject [
232
244
233
245
{
234
246
#category : #actions ,
235
- #' squeak_changestamp' : ' VE 6/26 /2024 14:54 '
247
+ #' squeak_changestamp' : ' TL 7/8 /2024 18:57 '
236
248
}
237
- SPOCVolumeSlider >> switchSpeakerState [
249
+ SPOCVolumeSlider >> switchMuteState [
238
250
239
- self volume = 0
240
- ifTrue: [self volume: self storeVolume;
241
- changeVolumeTo: self storeVolume]
242
- ifFalse: [self storeVolume: self volume;
243
- volume: 0 ;
244
- changeVolumeTo: self volume]
251
+ self isMuted
252
+ ifTrue: [self changeVolumeTo: self volume]
253
+ ifFalse: [self changeVolumeTo: 0 ]
245
254
]
246
255
247
256
{
248
257
#category : #updating ,
249
- #' squeak_changestamp' : ' VE 7/2/2024 19:00'
258
+ #' squeak_changestamp' : ' TL 7/8/2024 18:50'
259
+ }
260
+ SPOCVolumeSlider >> unmute: aVolume [
261
+
262
+ self icon iconAsset: self class speakerIconPath.
263
+ self isMuted: false ;
264
+ volume: aVolume
265
+ ]
266
+
267
+ {
268
+ #category : #updating ,
269
+ #' squeak_changestamp' : ' TL 7/8/2024 18:52'
250
270
}
251
271
SPOCVolumeSlider >> updatePlaybackState: aState [
252
272
273
+ | newVolume |
253
274
super updatePlaybackState: aState.
254
275
self isDisabled
255
- ifFalse: [self volume = 0
256
- ifFalse: [self storeVolume: self volume].
276
+ ifFalse: [newVolume := aState device volume.
277
+ newVolume = 0
278
+ ifTrue: [self mute]
279
+ ifFalse: [self unmute: newVolume].
257
280
self deviceID: aState device id;
258
- supportsVolume: aState device supportsVolume;
259
- volume: aState device volume;
260
- updateSpeakerIcon.
261
- self slider updateValue: self volume]
281
+ supportsVolume: aState device supportsVolume.
282
+ self slider updateValue: newVolume]
262
283
]
263
284
264
285
{
@@ -292,13 +313,15 @@ SPOCVolumeSlider >> volume: anObject [
292
313
293
314
{
294
315
#category : #actions ,
295
- #' squeak_changestamp' : ' VE 7/2 /2024 19:03 '
316
+ #' squeak_changestamp' : ' TL 7/8 /2024 18:30 '
296
317
}
297
318
SPOCVolumeSlider >> volumeClicked: aBlock [
298
319
299
- self isDisabled ifTrue: [self showPopUp. ^ self ].
320
+ self isDisabled
321
+ ifTrue: [self showPopUp.
322
+ ^ self ].
300
323
self supportsVolume
301
324
ifTrue: aBlock
302
- ifFalse: [self app volumePopUp. self slider value: self volume].
303
- self updateSpeakerIcon.
325
+ ifFalse: [self app volumePopUp.
326
+ self slider value: self volume]
304
327
]
0 commit comments