8000 使用枚举类替换歌曲卡状态 · ag-python-qt/Groove@c98b95f · GitHub
[go: up one dir, main page]

Skip to content

Commit c98b95f

Browse files
committed
使用枚举类替换歌曲卡状态
1 parent 4d909fd commit c98b95f

File tree

3 files changed

+77
-80
lines changed

3 files changed

+77
-80
lines changed

app/components/song_list_widget/basic_song_card.py

Lines changed: 27 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from PyQt5.QtGui import QContextMenuEvent, QFont, QFontMetrics, QMouseEvent
1212
from PyQt5.QtWidgets import QApplication, QWidget
1313

14-
from .song_name_card import SongNameCardFactory
14+
from .song_name_card import SongNameCardFactory, WidgetState, CardState
1515

1616

1717
class BasicSongCard(QWidget):
@@ -39,7 +39,6 @@ def __init__(self, songInfo: SongInfo, songCardType, parent=None):
3939
self.setFixedHeight(60)
4040
self.setSongInfo(songInfo)
4141
self.__resizeTime = 0
42-
self.__songCardType = songCardType
4342

4443
self.isSongExist = True
4544
self.isPlaying = False
@@ -159,13 +158,13 @@ def setSelected(self, isSelected: bool):
159158

160159
self.isSelected = isSelected
161160
if isSelected:
162-
self.setWidgetState("selected-leave")
163-
self.setCheckBoxBtLabelState("selected")
161+
self.setCardState(CardState.SELECTED_LEAVE)
162+
self.setWidgetState(WidgetState.SELECTED)
164163
else:
165164
self.songNameCard.setWidgetHidden(True)
166-
self.setWidgetState("notSelected-leave")
167-
state = "notSelected-play" if self.isPlaying else "notSelected-notPlay"
168-
self.setCheckBoxBtLabelState(state)
165+
self.setCardState(CardState.LEAVE)
166+
state = WidgetState.PLAY if self.isPlaying else WidgetState.NORMAL
167+
self.setWidgetState(state)
169168

170169
self.setStyle(QApplication.style())
171170

@@ -179,46 +178,37 @@ def setPlay(self, isPlay: bool):
179178

180179
if isPlay:
181180
self.isSelected = True
182-
self.setCheckBoxBtLabelState("selected")
183-
self.setWidgetState("selected-leave")
181+
self.setWidgetState(WidgetState.SELECTED)
182+
self.setCardState(CardState.SELECTED_LEAVE)
184183
else:
185-
self.setCheckBoxBtLabelState("notSelected-notPlay")
186-
self.setWidgetState("notSelected-leave")
184+
self.setWidgetState(WidgetState.NORMAL)
185+
self.setCardState(CardState.LEAVE)
187186

188187
self.songNameCard.setPlay(isPlay, self.isSongExist)
189188
self.setStyle(QApplication.style())
190189

191-
def setCheckBoxBtLabelState(self, state: str):
190+
def setWidgetState(self, state: WidgetState):
192191
""" set the state of check box, buttons and labels
193192
194193
Parameters
195194
----------
196-
state: str
197-
state of check box, buttons and labels, including:
198-
* `notSelected-notPlay`
199-
* `notSelected-play`
200-
* `selected`
195+
state: WidgetState
196+
widget state
201197
"""
202-
self.songNameCard.setCheckBoxBtLabelState(state, self.isSongExist)
198+
self.songNameCard.setWidgetState(state, self.isSongExist)
203199
for label in self.__dynamicStyleLabels:
204-
label.setProperty("state", state)
200+
label.setProperty("state", state.value)
205201

206-
def setWidgetState(self, state: str):
202+
def setCardState(self, state: CardState):
207203
""" set the state of song card
208204
209205
Parameters
210206
----------
211-
state: str
212-
song card state, including:
213-
* `notSelected-leave`
214-
* `notSelected-enter`
215-
* `notSelected-pressed`
216-
* `selected-leave`
217-
* `selected-enter`
218-
* `selected-pressed`
207+
state: CardState
208+
song card state
219209
"""
220210
self.songNameCard.setButtonGroupState(state)
221-
self.setProperty("state", state)
211+
self.setProperty("state", state.value)
222212

223213
def setAnimation(self, widgets: list, deltaXs: list):
224214
""" set the animation of widgets
@@ -266,8 +256,8 @@ def eventFilter(self, obj, e: QEvent):
266256
if e.type() == QEvent.Enter:
267257
self.songNameCard.checkBox.show()
268258
self.songNameCard.buttonGroup.setHidden(self.isInSelectionMode)
269-
state = "selected-enter" if self.isSelected else "notSelected-enter"
270-
self.setWidgetState(state)
259+
state = CardState.SELECTED_ENTER if self.isSelected else CardState.ENTER
260+
self.setCardState(state)
271261
self.setStyle(QApplication.style())
272262

273263
elif e.type() == QEvent.Leave:
@@ -278,22 +268,22 @@ def eventFilter(self, obj, e: QEvent):
278268
self.songNameCard.checkBox.setHidden(
279269
not self.isInSelectionMode)
280270

281-
state = "selected-leave" if self.isSelected else "notSelected-leave"
282-
self.setWidgetState(state)
271+
state = CardState.SELECTED_LEAVE if self.isSelected else CardState.LEAVE
272+
self.setCardState(state)
283273
self.setStyle(QApplication.style())
284274

285275
elif e.type() == QEvent.MouseButtonPress:
286276
self.isPressed = True
287-
state = "selected-pressed" if self.isSelected else "notSelected-pressed"
277+
state = CardState.SELECTED_PRESSED if self.isSelected else CardState.PRESSED
288278
if e.button() == Qt.LeftButton:
289279
self.isSelected = True
290280

291-
self.setWidgetState(state)
281+
self.setCardState(state)
292282
self.setStyle(QApplication.style())
293283

294284
elif e.type() == QEvent.MouseButtonRelease and e.button() == Qt.LeftButton:
295-
self.setWidgetState("selected-leave")
296-
self.setCheckBoxBtLabelState("selected")
285+
self.setCardState(CardState.SELECTED_LEAVE)
286+
self.setWidgetState(WidgetState.SELECTED)
297287
self.setStyle(QApplication.style())
298288

299289
elif e.type() == QEvent.MouseButtonDblClick:

app/components/song_list_widget/song_card.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from PyQt5.QtCore import Qt, pyqtSignal
77
from PyQt5.QtWidgets import QLabel
88

9-
from .basic_song_card import BasicSongCard
9+
from .basic_song_card import BasicSongCard, CardState, WidgetState
1010
from .song_card_type import SongCardType
1111

1212

@@ -17,8 +17,8 @@ def __init__(self, songInfo: SongInfo, songCardType, parent=None):
1717
super().__init__(songInfo, songCardType, parent)
1818
self.durationLabel = QLabel(self.duration, self)
1919
self.setAttribute(Qt.WA_StyledBackground)
20-
self.setWidgetState("notSelected-leave")
21-
self.setCheckBoxBtLabelState("notSelected-notPlay")
20+
self.setCardState(CardState.LEAVE)
21+
self.setWidgetState(WidgetState.NORMAL)
2222

2323
def resizeEvent(self, e):
2424
super().resizeEvent(e)

app/components/song_list_widget/song_name_card.py

Lines changed: 47 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# coding:utf-8
2+
from enum import Enum
3+
24
from common.icon import getIconColor
35
from PyQt5.QtCore import QEvent, QSize, Qt
46
from PyQt5.QtGui import QFont, QFontMetrics, QIcon
@@ -8,6 +10,23 @@
810
from .song_card_type import SongCardType
911

1012

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+
1130
class ToolButton(QToolButton):
1231
""" Tool button of song name card """
1332

@@ -21,34 +40,31 @@ def __init__(self, iconType: str, parent=None):
2140
self.setFixedSize(60, 60)
2241
self.setIconSize(QSize(20, 20))
2342

24-
self.state = "notSelected-notPlay"
43+
self.state = WidgetState.NORMAL
2544
self.setIconType(iconType)
26-
self.setState("notSelected-notPlay")
45+
self.setState(WidgetState.NORMAL)
2746
self.setStyleSheet("QToolButton{border:none;margin:0}")
2847

29-
def setState(self, state: str):
48+
def setState(self, state: WidgetState):
3049
""" set button state
3150
3251
Parameters
3352
----------
34-
state: str
35-
button state, including:
36-
* notSelected-notPlay
37-
* notSelected-play
38-
* selected
53+
state: WidgetState
54+
button state
3955
"""
4056
self.state = state
41-
self.setProperty("state", state)
57+
self.setProperty("state", state.value)
4258
self.setIcon(QIcon(self.iconPaths[self.state]))
4359

4460
def setIconType(self, iconType: str):
4561
""" set the type of icon"""
4662
c = getIconColor()
4763
folder = ":/images/song_list_widget"
4864
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",
5268
}
5369
self.setIcon(QIcon(self.iconPaths[self.state]))
5470

@@ -72,7 +88,7 @@ def __initWidget(self):
7288

7389
# set property and ID
7490
self.setObjectName("buttonGroup")
75-
self.setProperty("state", "notSelected-leave")
91+
self.setState(CardState.LEAVE)
7692

7793
self.installEventFilter(self)
7894

@@ -81,35 +97,26 @@ def setButtonHidden(self, isHidden: bool):
8197
self.playButton.setHidden(isHidden)
8298
self.addToButton.setHidden(isHidden)
8399

84-
def setButtonState(self, state: str):
100+
def setButtonState(self, state: WidgetState):
85101
""" set button state
86102
87103
Parameters
88104
----------
89-
state: str
90-
button state, including:
91-
* notSelected-notPlay
92-
* notSelected-play
93-
* selected
105+
state: WidgetState
106+
button state
94107
"""
95108
self.playButton.setState(state)
96109
self.addToButton.setState(state)
97110

98-
def setState(self, state: str):
111+
def setState(self, state: CardState):
99112
""" set button group state
100113
101114
Parameters
102115
----------
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
111118
"""
112-
self.setProperty("state", state)
119+
self.setProperty("state", state.value)
113120

114121
def eventFilter(self, obj, e: QEvent):
115122
if obj == self:
@@ -196,32 +203,32 @@ def resizeEvent(self, e):
196203
super().resizeEvent(e)
197204
self._moveButtonGroup()
198205

199-
def setCheckBoxBtLabelState(self, state: str, isSongExit=True):
206+
def setWidgetState(self, state: WidgetState, isSongExit=True):
200207
""" set the state of check box, buttons and labels
201208
202209
Parameters
203210
----------
204-
state: str
205-
including `notSelected-notPlay`, `notSelected-play` and `selected`
211+
state: WidgetState
212+
widget state
206213
207214
isSongExist: bool
208215
whether the song exists or not, the alarm icon will appear when it is `False`.
209216
"""
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)
212219
self.buttonGroup.setButtonState(state)
213220

214221
# update icon
215222
if isSongExit:
216-
color ="white" if state == "selected" else f"green_{getIconColor()}"
223+
color ="white" if state == WidgetState.SELECTED else f"green_{getIconColor()}"
217224
path = f":/images/song_list_widget/Playing_{color}.svg"
218225
else:
219-
color = "white" if state == "selected" else "red"
226+
color = "white" if state == WidgetState.SELECTED else "red"
220227
path = f":/images/song_list_widget/Info_{color}.svg"
221228

222229
self.playingLabel.load(path)
223230

224-
def setButtonGroupState(self, state: str):
231+
def setButtonGroupState(self, state: CardState):
225232
""" set button group state """
226233
self.buttonGroup.setState(state)
227234

@@ -252,9 +259,9 @@ def __initWidget(self):
252259
self.trackLabel.setObjectName("trackLabel")
253260
self.checkBox.installEventFilter(self)
254261

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)
258265

259266
def updateSongNameCard(self, songName: str, track: str):
260267
super().updateSongNameCard(songName)

0 commit comments

Comments
 (0)
0