1
1
# coding:utf-8
2
+ from enum import Enum
3
+
2
4
from common .icon import getIconColor
3
5
from PyQt5 .QtCore import QEvent , QSize , Qt
4
6
from PyQt5 .QtGui import QFont , QFontMetrics , QIcon
8
10
from .song_card_type import SongCardType
9
11
10
12
13
+ class WidgetState (Enum ):
14
+ """ Widget state """
15
+ NORMAL = "notSelected-notPlay"
16
+ PLAY = "notSelected-play"
17
+ SELECTED = "selected"
18
+
19
+
20
+ class CardState (Enum ):
21
+ """ Song card state """
22
+ LEAVE = "notSelected-leave"
23
+ ENTER = "notSelected-enter"
24
+ PRESSED = "notSelected-pressed"
25
+ SELECTED_LEAVE = "selected-leave"
26
+ SELECTED_ENTER = "selected-enter"
27
+ SELECTED_PRESSED = "selected-pressed"
28
+
29
+
11
30
class ToolButton (QToolButton ):
12
31
""" Tool button of song name card """
13
32
@@ -21,34 +40,31 @@ def __init__(self, iconType: str, parent=None):
21
40
self .setFixedSize (60 , 60 )
22
41
self .setIconSize (QSize (20 , 20 ))
23
42
24
- self .state = "notSelected-notPlay"
43
+ self .state = WidgetState . NORMAL
25
44
self .setIconType (iconType )
26
- self .setState ("notSelected-notPlay" )
45
+ self .setState (WidgetState . NORMAL )
27
46
self .setStyleSheet ("QToolButton{border:none;margin:0}" )
28
47
29
- def setState (self , state : str ):
48
+ def setState (self , state : WidgetState ):
30
49
""" set button state
31
50
32
51
Parameters
33
52
----------
34
- state: str
35
- button state, including:
36
- * notSelected-notPlay
37
- * notSelected-play
38
- * selected
53
+ state: WidgetState
54
+ button state
39
55
"""
40
56
self .state = state
41
- self .setProperty ("state" , state )
57
+ self .setProperty ("state" , state . value )
42
58
self .setIcon (QIcon (self .iconPaths [self .state ]))
43
59
44
60
def setIconType (self , iconType : str ):
45
61
""" set the type of icon"""
46
62
c = getIconColor ()
47
63
folder = ":/images/song_list_widget"
48
64
self .iconPaths = {
49
- "notSelected-notPlay" : f"{ folder } /{ iconType } _{ c } .svg" ,
50
- "notSelected-play" : f"{ folder } /{ iconType } _green_{ c } .svg" ,
51
- "selected" : f"{ folder } /{ iconType } _white.svg" ,
65
+ WidgetState . NORMAL : f"{ folder } /{ iconType } _{ c } .svg" ,
66
+ WidgetState . PLAY : f"{ folder } /{ iconType } _green_{ c } .svg" ,
67
+ WidgetState . SELECTED : f"{ folder } /{ iconType } _white.svg" ,
52
68
}
53
69
self .setIcon (QIcon (self .iconPaths [self .state ]))
54
70
@@ -72,7 +88,7 @@ def __initWidget(self):
72
88
73
89
# set property and ID
74
90
self .setObjectName ("buttonGroup" )
75
- self .setProperty ( "state" , "notSelected-leave" )
91
+ self .setState ( CardState . LEAVE )
76
92
77
93
self .installEventFilter (self )
78
94
@@ -81,35 +97,26 @@ def setButtonHidden(self, isHidden: bool):
81
97
self .playButton .setHidden (isHidden )
82
98
self .addToButton .setHidden (isHidden )
83
99
84
- def setButtonState (self , state : str ):
100
+ def setButtonState (self , state : WidgetState ):
85
101
""" set button state
86
102
87
103
Parameters
88
104
----------
89
- state: str
90
- button state, including:
91
- * notSelected-notPlay
92
- * notSelected-play
93
- * selected
105
+ state: WidgetState
106
+ button state
94
107
"""
95
108
self .playButton .setState (state )
96
109
self .addToButton .setState (state )
97
110
98
- def setState (self , state : str ):
111
+ def setState (self , state : CardState ):
99
112
""" set button group state
100
113
101
114
Parameters
102
115
----------
103
- state: str
104
- 按钮组状态,有以下六种:
105
- * notSelected-leave
106
- * notSelected-enter
107
- * notSelected-pressed
108
- * selected-leave
109
- * selected-enter
110
- * selected-pressed
116
+ state: CardState
117
+ button group state
111
118
"""
112
- self .setProperty ("state" , state )
119
+ self .setProperty ("state" , state . value )
113
120
114
121
def eventFilter (self , obj , e : QEvent ):
115
122
if obj == self :
@@ -196,32 +203,32 @@ def resizeEvent(self, e):
196
203
super ().resizeEvent (e )
197
204
self ._moveButtonGroup ()
198
205
199
- def setCheckBoxBtLabelState (self , state : str , isSongExit = True ):
206
+ def setWidgetState (self , state : WidgetState , isSongExit = True ):
200
207
""" set the state of check box, buttons and labels
201
208
202
209
Parameters
203
210
----------
204
- state: str
205
- including `notSelected-notPlay`, `notSelected-play` and `selected`
211
+ state: WidgetState
212
+ widget state
206
213
207
214
isSongExist: bool
208
215
whether the song exists or not, the alarm icon will appear when it is `False`.
209
216
"""
210
- self .checkBox .setProperty ("state" , state )
211
- self .songNameLabel .setProperty ("state" , state )
217
+ self .checkBox .setProperty ("state" , state . value )
218
+ self .songNameLabel .setProperty ("state" , state . value )
212
219
self .buttonGroup .setButtonState (state )
213
220
214
221
# update icon
215
222
if isSongExit :
216
- color = "white" if state == "selected" else f"green_{ getIconColor ()} "
223
+ color = "white" if state == WidgetState . SELECTED else f"green_{ getIconColor ()} "
217
224
path = f":/images/song_list_widget/Playing_{ color } .svg"
218
225
else :
219
- color = "white" if state == "selected" else "red"
226
+ color = "white" if state == WidgetState . SELECTED else "red"
220
227
path = f":/images/song_list_widget/Info_{ color } .svg"
221
228
222
229
self .playingLabel .load (path )
223
230
224
- def setButtonGroupState (self , state : str ):
231
+ def setButtonGroupState (self , state : CardState ):
225
232
""" set button group state """
226
233
self .buttonGroup .setState (state )
227
234
@@ -252,9 +259,9 @@ def __initWidget(self):
252
259
self .trackLabel .setObjectName ("trackLabel" )
253
260
self .checkBox .installEventFilter (self )
254
261
255
- def setCheckBoxBtLabelState (self , state : str , isSongExist = True ):
256
- super ().setCheckBoxBtLabelState (state , isSongExist )
257
- self .trackLabel .setProperty ("state" , state )
262
+ def setWidgetState (self , state : WidgetState , isSongExist = True ):
263
+ super ().setWidgetState (state , isSongExist )
264
+ self .trackLabel .setProperty ("state" , state . value )
258
265
259
266
def updateSongNameCard (self , songName : str , track : str ):
260
267
super ().updateSongNameCard (songName )
0 commit comments