Skip to content

Commit fb18cfe

Browse files
committed
refactor volume slider
1 parent 4b0dea8 commit fb18cfe

File tree

3 files changed

+86
-63
lines changed

3 files changed

+86
-63
lines changed

src/SpotifyConnect/SPOCBoxedTextWithIcon.class.st

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ SPOCBoxedTextWithIcon class >> iconPadding [
1919

2020
{
2121
#category : #constructor,
22-
#'squeak_changestamp' : 'TL 7/8/2024 17:09'
22+
#'squeak_changestamp' : 'TL 7/8/2024 17:38'
2323
}
2424
SPOCBoxedTextWithIcon class >> newWithText: aString withIcon: anAssetPath [
2525

2626
^ SPOCBoxedTextWithIcon new contents: (' ', aString);
27-
position: self class iconPadding @ 0;
27+
position: self iconPadding @ 0;
2828
withAssetPath: anAssetPath;
2929
yourself
3030
]

src/SpotifyConnect/SPOCSwitchDevice.class.st

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ SPOCSwitchDevice class >> devicesPanelWidth [
6161

6262
{
6363
#category : #constants,
64-
#'squeak_changestamp' : 'TL 7/8/2024 17:04'
64+
#'squeak_changestamp' : 'TL 7/8/2024 17:51'
6565
}
6666
SPOCSwitchDevice class >> itemTextPadding [
6767

68-
^ self class devicesPanelPadding * self class devicesPanelToItemRatio
68+
^ self devicesPanelPadding * self devicesPanelToItemRatio
6969
]
7070

7171
{

src/SpotifyConnect/SPOCVolumeSlider.class.st

Lines changed: 82 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ Class {
88
'button',
99
'deviceID',
1010
'icon',
11+
'isMuted',
1112
'slider',
12-
'storeVolume',
1313
'supportsVolume',
1414
'volume'
1515
],
@@ -37,38 +37,30 @@ SPOCVolumeSlider class >> speakerMutedIconPath [
3737

3838
{
3939
#category : #initialization,
40-
#'squeak_changestamp' : 'TL 6/19/2024 19:44'
40+
#'squeak_changestamp' : 'TL 7/8/2024 18:15'
4141
}
4242
SPOCVolumeSlider >> attachButton [
4343

44-
self icon: (SPOCIcon new
45-
color: Color transparent;
44+
self icon: (SPOCIcon new color: Color transparent;
4645
iconAsset: self class speakerIconPath;
4746
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;
5650
addMorph: self button
5751
]
5852

5953
{
6054
#category : #initialization,
61-
#'squeak_changestamp' : 'TL 6/19/2024 00:46'
55+
#'squeak_changestamp' : 'TL 7/8/2024 18:59'
6256
}
6357
SPOCVolumeSlider >> attachSlider [
6458

65-
self slider: (SPOCSlider new
66-
value: self volume;
59+
self slider: (SPOCSlider new value: self volume;
6760
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
7264
]
7365

7466
{
@@ -91,16 +83,16 @@ SPOCVolumeSlider >> button: anObject [
9183

9284
{
9385
#category : #'api-call',
94-
#'squeak_changestamp' : 'VE 6/26/2024 14:54'
86+
#'squeak_changestamp' : 'TL 7/8/2024 18:52'
9587
}
9688
SPOCVolumeSlider >> changeVolumeTo: aVolume [
9789

98-
self volume: aVolume.
99-
SPOCApiVolume new
100-
authorizer: self app auth;
90+
SPOCApiVolume new authorizer: self app auth;
10191
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
10496
]
10597

10698
{
@@ -141,7 +133,7 @@ SPOCVolumeSlider >> icon: anObject [
141133

142134
{
143135
#category : #initialization,
144-
#'squeak_changestamp' : 'TL 6/19/2024 00:47'
136+
#'squeak_changestamp' : 'TL 7/8/2024 17:32'
145137
}
146138
SPOCVolumeSlider >> initialize [
147139

@@ -150,14 +142,41 @@ SPOCVolumeSlider >> initialize [
150142
self color: Color transparent;
151143
supportsVolume: false;
152144
volume: 100;
153-
storeVolume: self volume;
154145
layoutPolicy: TableLayout new;
155146
listDirection: #leftToRight;
156147
attachSlider;
157148
attachButton;
158149
extendFully
159150
]
160151

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+
161180
{
162181
#category : #updating,
163182
#'squeak_changestamp' : 'VE 7/2/2024 19:12'
@@ -195,21 +214,14 @@ SPOCVolumeSlider >> slider: anObject [
195214
]
196215

197216
{
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'
209219
}
210-
SPOCVolumeSlider >> storeVolume: anObject [
220+
SPOCVolumeSlider >> spacerMorph [
211221

212-
storeVolume := anObject
222+
^ Morph new color: Color transparent;
223+
extent: 1 @ SPOCStyle defaultMargin;
224+
yourself
213225
]
214226

215227
{
@@ -232,33 +244,42 @@ SPOCVolumeSlider >> supportsVolume: anObject [
232244

233245
{
234246
#category : #actions,
235-
#'squeak_changestamp' : 'VE 6/26/2024 14:54'
247+
#'squeak_changestamp' : 'TL 7/8/2024 18:57'
236248
}
237-
SPOCVolumeSlider >> switchSpeakerState [
249+
SPOCVolumeSlider >> switchMuteState [
238250

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]
245254
]
246255

247256
{
248257
#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'
250270
}
251271
SPOCVolumeSlider >> updatePlaybackState: aState [
252272

273+
| newVolume |
253274
super updatePlaybackState: aState.
254275
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].
257280
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]
262283
]
263284

264285
{
@@ -292,13 +313,15 @@ SPOCVolumeSlider >> volume: anObject [
292313

293314
{
294315
#category : #actions,
295-
#'squeak_changestamp' : 'VE 7/2/2024 19:03'
316+
#'squeak_changestamp' : 'TL 7/8/2024 18:30'
296317
}
297318
SPOCVolumeSlider >> volumeClicked: aBlock [
298319

299-
self isDisabled ifTrue: [self showPopUp. ^ self].
320+
self isDisabled
321+
ifTrue: [self showPopUp.
322+
^ self].
300323
self supportsVolume
301324
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]
304327
]

0 commit comments

Comments
 (0)