256 lines
14 KiB
Python
256 lines
14 KiB
Python
# -*- coding: utf-8 -*-
|
|
import qtawesome as qta
|
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
|
|
|
LIST_WIDGET_STYLES = """
|
|
QListWidget {
|
|
border: 0;
|
|
}
|
|
"""
|
|
|
|
|
|
class UiMainWindow(object):
|
|
def setup_ui(self):
|
|
self.setWindowIcon(QtGui.QIcon(":/icon/playtypus.png"))
|
|
self.setObjectName("MainWindow")
|
|
self.resize(719, 574)
|
|
self.setStyleSheet(LIST_WIDGET_STYLES)
|
|
self.centralwidget = QtWidgets.QWidget(self)
|
|
self.centralwidget.setObjectName("centralwidget")
|
|
self.centralLayout = QtWidgets.QVBoxLayout(self.centralwidget)
|
|
self.centralLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.centralLayout.setSpacing(0)
|
|
self.centralLayout.setObjectName("centralLayout")
|
|
# Playback toolbar
|
|
self.playbackToolBar = QtWidgets.QToolBar(self)
|
|
self.playbackToolBar.setMovable(False)
|
|
self.playbackToolBar.setIconSize(QtCore.QSize(32, 32))
|
|
self.playbackToolBar.setObjectName("playbackToolBar")
|
|
self.toggleAction = self.playbackToolBar.addAction(qta.icon("mdi.chevron-down"), '')
|
|
self.previousAction = self.playbackToolBar.addAction(qta.icon("mdi.skip-previous"), '')
|
|
self.playAction = self.playbackToolBar.addAction(qta.icon("mdi.play"), '')
|
|
self.nextAction = self.playbackToolBar.addAction(qta.icon("mdi.skip-next"), '')
|
|
self.positionLabel = QtWidgets.QLabel()
|
|
self.positionLabel.setAlignment(QtCore.Qt.AlignCenter)
|
|
self.positionLabel.setObjectName("positionLabel")
|
|
self.playbackToolBar.addWidget(self.positionLabel)
|
|
self.positionSlider = QtWidgets.QSlider()
|
|
self.positionSlider.setOrientation(QtCore.Qt.Horizontal)
|
|
self.positionSlider.setObjectName("positionSlider")
|
|
self.playbackToolBar.addWidget(self.positionSlider)
|
|
self.shuffleAction = self.playbackToolBar.addAction(qta.icon("mdi.shuffle"), '')
|
|
self.repeatAction = self.playbackToolBar.addAction(qta.icon("mdi.repeat"), '')
|
|
self.muteAction = self.playbackToolBar.addAction(qta.icon("mdi.volume-high"), '')
|
|
self.muteAction.setCheckable(True)
|
|
self.volumeSlider = QtWidgets.QSlider()
|
|
self.volumeSlider.setOrientation(QtCore.Qt.Horizontal)
|
|
self.volumeSlider.setObjectName("volumeSlider")
|
|
self.playbackToolBar.addWidget(self.volumeSlider)
|
|
self.mainMenu = QtWidgets.QMenu()
|
|
self.settingsAction = self.mainMenu.addAction(qta.icon('mdi.application-settings'), '')
|
|
self.menuAction = self.playbackToolBar.addAction(qta.icon("mdi.menu"), '')
|
|
self.menuAction.setMenu(self.mainMenu)
|
|
menuButton = self.playbackToolBar.widgetForAction(self.menuAction)
|
|
self.menuAction.triggered.connect(menuButton.showMenu)
|
|
self.addToolBar(self.playbackToolBar)
|
|
# Splitter and main components
|
|
self.splitter = QtWidgets.QSplitter(self.centralwidget)
|
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
|
sizePolicy.setHorizontalStretch(0)
|
|
sizePolicy.setVerticalStretch(0)
|
|
sizePolicy.setHeightForWidth(self.splitter.sizePolicy().hasHeightForWidth())
|
|
self.splitter.setSizePolicy(sizePolicy)
|
|
self.splitter.setOrientation(QtCore.Qt.Horizontal)
|
|
self.splitter.setHandleWidth(1)
|
|
self.splitter.setObjectName("splitter")
|
|
self.viewListWidget = QtWidgets.QListWidget(self.splitter)
|
|
self.viewListWidget.setIconSize(QtCore.QSize(40, 40))
|
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)
|
|
sizePolicy.setHorizontalStretch(0)
|
|
sizePolicy.setVerticalStretch(0)
|
|
sizePolicy.setHeightForWidth(self.viewListWidget.sizePolicy().hasHeightForWidth())
|
|
self.viewListWidget.setSizePolicy(sizePolicy)
|
|
self.viewListWidget.setObjectName("viewListWidget")
|
|
self.stackedWidget = QtWidgets.QStackedWidget(self.splitter)
|
|
self.stackedWidget.setObjectName("stackedWidget")
|
|
# Albums page
|
|
self.albumPage = QtWidgets.QWidget()
|
|
self.albumPage.setObjectName("albumPage")
|
|
self.albumPageLayout = QtWidgets.QVBoxLayout(self.albumPage)
|
|
self.albumPageLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.albumPageLayout.setSpacing(0)
|
|
self.albumPageLayout.setObjectName("albumPageLayout")
|
|
self.albumPageTitleLayout = QtWidgets.QHBoxLayout()
|
|
self.albumPageTitleLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.albumPageTitleLayout.setSpacing(0)
|
|
self.albumPageTitleLayout.setObjectName("albumPageTitleLayout")
|
|
self.albumPageIconLabel = QtWidgets.QLabel(self.albumPage)
|
|
self.albumPageIconLabel.setMaximumSize(36, 36)
|
|
self.albumPageIconLabel.setPixmap(qta.icon('mdi.album').pixmap(32))
|
|
self.albumPageTitleLayout.addWidget(self.albumPageIconLabel)
|
|
self.albumPageTitleLabel = QtWidgets.QLabel(self.albumPage)
|
|
self.albumPageTitleLayout.addWidget(self.albumPageTitleLabel)
|
|
self.albumPageTotalLabel = QtWidgets.QLabel(self.albumPage)
|
|
self.albumPageTotalLabel.setAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight)
|
|
self.albumPageTotalLabel.setIndent(4)
|
|
self.albumPageTotalLabel.setText('0')
|
|
self.albumPageTitleLayout.addWidget(self.albumPageTotalLabel)
|
|
self.albumPageLayout.addLayout(self.albumPageTitleLayout)
|
|
self.albumListWidget = QtWidgets.QListWidget(self.albumPage)
|
|
self.albumListWidget.setObjectName("albumListWidget")
|
|
self.albumListWidget.setSortingEnabled(True)
|
|
self.albumListWidget.setIconSize(QtCore.QSize(100, 100))
|
|
self.albumPageLayout.addWidget(self.albumListWidget)
|
|
self.stackedWidget.addWidget(self.albumPage)
|
|
# Artists page
|
|
self.artistPage = QtWidgets.QWidget()
|
|
self.artistPage.setObjectName("artistPage")
|
|
self.artistPageLayout = QtWidgets.QVBoxLayout(self.artistPage)
|
|
self.artistPageLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.artistPageLayout.setSpacing(0)
|
|
self.artistPageLayout.setObjectName("artistPageLayout")
|
|
self.artistPageTitleLayout = QtWidgets.QHBoxLayout()
|
|
self.artistPageTitleLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.artistPageTitleLayout.setSpacing(0)
|
|
self.artistPageTitleLayout.setObjectName("artistPageTitleLayout")
|
|
self.artistPageIconLabel = QtWidgets.QLabel(self.artistPage)
|
|
self.artistPageIconLabel.setMaximumSize(36, 36)
|
|
self.artistPageIconLabel.setPixmap(qta.icon('mdi.account').pixmap(32))
|
|
self.artistPageTitleLayout.addWidget(self.artistPageIconLabel)
|
|
self.artistPageTitleLabel = QtWidgets.QLabel(self.artistPage)
|
|
self.artistPageTitleLayout.addWidget(self.artistPageTitleLabel)
|
|
self.artistPageTotalLabel = QtWidgets.QLabel(self.artistPage)
|
|
self.artistPageTotalLabel.setAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight)
|
|
self.artistPageTotalLabel.setIndent(4)
|
|
self.artistPageTotalLabel.setText('0')
|
|
self.artistPageTitleLayout.addWidget(self.artistPageTotalLabel)
|
|
self.artistPageLayout.addLayout(self.artistPageTitleLayout)
|
|
self.artistListWidget = QtWidgets.QListWidget(self.artistPage)
|
|
self.artistListWidget.setObjectName("artistListWidget")
|
|
self.artistListWidget.setSortingEnabled(True)
|
|
self.artistListWidget.setIconSize(QtCore.QSize(100, 100))
|
|
self.artistPageLayout.addWidget(self.artistListWidget)
|
|
self.stackedWidget.addWidget(self.artistPage)
|
|
# Playlists page
|
|
self.playlistPage = QtWidgets.QWidget()
|
|
self.playlistPage.setObjectName("playlistPage")
|
|
self.playlistPageLayout = QtWidgets.QVBoxLayout(self.playlistPage)
|
|
self.playlistPageLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.playlistPageLayout.setSpacing(0)
|
|
self.playlistPageLayout.setObjectName("playlistPageLayout")
|
|
self.playlistPageTitleLayout = QtWidgets.QHBoxLayout()
|
|
self.playlistPageTitleLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.playlistPageTitleLayout.setSpacing(0)
|
|
self.playlistPageTitleLayout.setObjectName("playlistPageTitleLayout")
|
|
self.playlistPageIconLabel = QtWidgets.QLabel(self.playlistPage)
|
|
self.playlistPageIconLabel.setMaximumSize(36, 36)
|
|
self.playlistPageIconLabel.setPixmap(qta.icon('mdi.playlist-music').pixmap(32))
|
|
self.playlistPageTitleLayout.addWidget(self.playlistPageIconLabel)
|
|
self.playlistPageTitleLabel = QtWidgets.QLabel(self.playlistPage)
|
|
self.playlistPageTitleLayout.addWidget(self.playlistPageTitleLabel)
|
|
self.playlistPageTotalLabel = QtWidgets.QLabel(self.playlistPage)
|
|
self.playlistPageTotalLabel.setAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight)
|
|
self.playlistPageTotalLabel.setIndent(4)
|
|
self.playlistPageTotalLabel.setText('0')
|
|
self.playlistPageTitleLayout.addWidget(self.playlistPageTotalLabel)
|
|
self.playlistPageLayout.addLayout(self.playlistPageTitleLayout)
|
|
self.playlistListWidget = QtWidgets.QListWidget(self.playlistPage)
|
|
self.playlistListWidget.setObjectName("playlistListWidget")
|
|
self.playlistListWidget.setSortingEnabled(True)
|
|
self.playlistListWidget.setIconSize(QtCore.QSize(64, 64))
|
|
self.playlistPageLayout.addWidget(self.playlistListWidget)
|
|
self.stackedWidget.addWidget(self.playlistPage)
|
|
# Radio page
|
|
self.radioPage = QtWidgets.QWidget()
|
|
self.radioPage.setObjectName("radioPage")
|
|
self.radioPageLayout = QtWidgets.QVBoxLayout(self.radioPage)
|
|
self.radioPageLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.radioPageLayout.setSpacing(0)
|
|
self.radioPageLayout.setObjectName("radioPageLayout")
|
|
self.radioPageTitleLayout = QtWidgets.QHBoxLayout()
|
|
self.radioPageTitleLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.radioPageTitleLayout.setSpacing(0)
|
|
self.radioPageTitleLayout.setObjectName("radioPageTitleLayout")
|
|
self.radioPageIconLabel = QtWidgets.QLabel(self.radioPage)
|
|
self.radioPageIconLabel.setMaximumSize(36, 36)
|
|
self.radioPageIconLabel.setPixmap(qta.icon('mdi.radio').pixmap(32))
|
|
self.radioPageTitleLayout.addWidget(self.radioPageIconLabel)
|
|
self.radioPageTitleLabel = QtWidgets.QLabel(self.radioPage)
|
|
self.radioPageTitleLayout.addWidget(self.radioPageTitleLabel)
|
|
self.radioPageTotalLabel = QtWidgets.QLabel(self.radioPage)
|
|
self.radioPageTotalLabel.setAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight)
|
|
self.radioPageTotalLabel.setIndent(4)
|
|
self.radioPageTotalLabel.setText('0')
|
|
self.radioPageTitleLayout.addWidget(self.radioPageTotalLabel)
|
|
self.radioPageLayout.addLayout(self.radioPageTitleLayout)
|
|
self.radioListWidget = QtWidgets.QListWidget(self.radioPage)
|
|
self.radioListWidget.setObjectName("radioListWidget")
|
|
self.radioListWidget.setSortingEnabled(True)
|
|
self.radioListWidget.setIconSize(QtCore.QSize(64, 64))
|
|
self.radioPageLayout.addWidget(self.radioListWidget)
|
|
self.stackedWidget.addWidget(self.radioPage)
|
|
# Playlist
|
|
self.playlistWidget = QtWidgets.QListWidget(self.splitter)
|
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.MinimumExpanding)
|
|
sizePolicy.setHorizontalStretch(0)
|
|
sizePolicy.setVerticalStretch(0)
|
|
sizePolicy.setHeightForWidth(self.playlistWidget.sizePolicy().hasHeightForWidth())
|
|
self.playlistWidget.setSizePolicy(sizePolicy)
|
|
self.playlistWidget.setObjectName("playlistWidget")
|
|
self.centralLayout.addWidget(self.splitter)
|
|
self.setCentralWidget(self.centralwidget)
|
|
self.statusbar = QtWidgets.QStatusBar(self)
|
|
self.statusbar.setObjectName("statusbar")
|
|
self.setStatusBar(self.statusbar)
|
|
|
|
self.albumsListItem = QtWidgets.QListWidgetItem(qta.icon('mdi.album'), '')
|
|
self.artistsListItem = QtWidgets.QListWidgetItem(qta.icon('mdi.account'), '')
|
|
self.playlistsListItem = QtWidgets.QListWidgetItem(qta.icon('mdi.playlist-music'), '')
|
|
self.radiosListItem = QtWidgets.QListWidgetItem(qta.icon('mdi.music'), '')
|
|
for item in [self.albumsListItem, self.artistsListItem, self.playlistsListItem, self.radiosListItem]:
|
|
self.viewListWidget.addItem(item)
|
|
|
|
self.splitter.setStretchFactor(1, 1)
|
|
self.retranslate_ui()
|
|
self.viewListWidget.currentRowChanged.connect(self.on_view_list_current_row_changed)
|
|
self.viewListWidget.setCurrentRow(0)
|
|
QtCore.QMetaObject.connectSlotsByName(self)
|
|
|
|
self.viewListWidget.setFocus()
|
|
|
|
def retranslate_ui(self):
|
|
_translate = QtCore.QCoreApplication.translate
|
|
self.setWindowTitle(_translate("MainWindow", "Playtypus"))
|
|
self.positionLabel.setText(_translate("MainWindow", "01:43"))
|
|
self.playAction.setText(_translate("MainWindow", "&Play"))
|
|
self.playAction.setToolTip(_translate("MainWindow", "Play"))
|
|
self.settingsAction.setText(_translate("MainWindow", "&Configure"))
|
|
self.albumsListItem.setText(_translate("MainWindow", "Albums"))
|
|
self.albumPageTitleLabel.setText(_translate("MainWindow", "Albums"))
|
|
self.artistsListItem.setText(_translate("MainWindow", "Artists"))
|
|
self.artistPageTitleLabel.setText(_translate("MainWindow", "Artists"))
|
|
self.radiosListItem.setText(_translate("MainWindow", "Radio"))
|
|
self.radioPageTitleLabel.setText(_translate("MainWindow", "Radio"))
|
|
self.playlistsListItem.setText(_translate("MainWindow", "Playlists"))
|
|
self.playlistPageTitleLabel.setText(_translate("MainWindow", "Playlists"))
|
|
|
|
def on_menu_button_clicked(self):
|
|
pos = self.mapToGlobal(self.menuButton.geometry().bottomRight())
|
|
pos.setX(pos.x() - self.mainMenu.geometry().width())
|
|
self.mainMenu.exec(pos)
|
|
|
|
def on_view_list_current_row_changed(self, current_row):
|
|
self.stackedWidget.setCurrentIndex(current_row)
|
|
|
|
def update_album_total(self, value):
|
|
self.albumPageTotalLabel.setText(str(value))
|
|
|
|
def update_artist_total(self, value):
|
|
self.artistPageTotalLabel.setText(str(value))
|
|
|
|
def update_playlist_total(self, value):
|
|
self.playlistPageTotalLabel.setText(str(value))
|
|
|
|
def update_radio_total(self, value):
|
|
self.radioPageTotalLabel.setText(str(value))
|