✨ Added info pane to GUI.

This commit is contained in:
Robert Honz
2024-03-23 14:00:33 +01:00
parent 84c8036bdd
commit 10e2f39196
4 changed files with 706 additions and 478 deletions
+16 -16
View File
@@ -185,8 +185,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.cb_search_type.setCurrentIndex(2) self.cb_search_type.setCurrentIndex(2)
def _init_tree_results(self, tree: QtWidgets.QTableWidget): def _init_tree_results(self, tree: QtWidgets.QTableWidget):
tree.setColumnHidden(5, True)
tree.sortByColumn(0, QtCore.Qt.SortOrder.AscendingOrder) tree.sortByColumn(0, QtCore.Qt.SortOrder.AscendingOrder)
tree.setColumnHidden(1, True)
def tidal_user_lists(self): def tidal_user_lists(self):
# Start loading spinner # Start loading spinner
@@ -228,8 +228,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
info: str = item.sub_title info: str = item.sub_title
twi_child.setText(0, name) twi_child.setText(0, name)
twi_child.setText(1, info) twi_child.setData(1, QtCore.Qt.ItemDataRole.UserRole, item)
twi_child.setData(3, QtCore.Qt.ItemDataRole.UserRole, item) twi_child.setText(2, info)
# Stop load spinner # Stop load spinner
self.s_spinner_stop.emit() self.s_spinner_stop.emit()
@@ -238,8 +238,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def _init_tree_lists(self, tree: QtWidgets.QTreeWidget): def _init_tree_lists(self, tree: QtWidgets.QTreeWidget):
# Adjust Tree. # Adjust Tree.
tree.setColumnWidth(0, 200) tree.setColumnWidth(0, 200)
tree.setColumnWidth(1, 300) tree.setColumnHidden(1, True)
tree.setColumnHidden(2, True) tree.setColumnWidth(2, 300)
tree.expandAll() tree.expandAll()
# Connect the contextmenu # Connect the contextmenu
@@ -336,11 +336,11 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
# Populate child # Populate child
child: QtWidgets.QTreeWidgetItem = QtWidgets.QTreeWidgetItem() child: QtWidgets.QTreeWidgetItem = QtWidgets.QTreeWidgetItem()
child.setText(0, index) child.setText(0, index)
child.setText(1, item.artist) child.setData(1, QtCore.Qt.ItemDataRole.UserRole, item.obj)
child.setText(2, item.title) child.setText(2, item.artist)
child.setText(3, item.album) child.setText(3, item.title)
child.setText(4, duration) child.setText(4, item.album)
child.setData(5, QtCore.Qt.ItemDataRole.UserRole, item.obj) child.setText(5, duration)
if isinstance(item.obj, Mix | Playlist | Album | Artist): if isinstance(item.obj, Mix | Playlist | Album | Artist):
# Add a disabled dummy child, so expansion arrow will appear. This Child will be replaced on expansion. # Add a disabled dummy child, so expansion arrow will appear. This Child will be replaced on expansion.
@@ -529,7 +529,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.tidal.settings_apply() self.tidal.settings_apply()
def on_list_items_show(self, item: QtWidgets.QTreeWidgetItem): def on_list_items_show(self, item: QtWidgets.QTreeWidgetItem):
media_list: Album | Playlist = item.data(3, QtCore.Qt.ItemDataRole.UserRole) media_list: Album | Playlist = item.data(1, QtCore.Qt.ItemDataRole.UserRole)
# Only if clicked item is not a top level item. # Only if clicked item is not a top level item.
if media_list: if media_list:
@@ -543,7 +543,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
) -> None: ) -> None:
if point: if point:
item = self.tr_lists_user.itemAt(point) item = self.tr_lists_user.itemAt(point)
media_list = item.data(3, QtCore.Qt.ItemDataRole.UserRole) media_list = item.data(1, QtCore.Qt.ItemDataRole.UserRole)
# Get all results # Get all results
media_items: [Track | Video | Album] = items_results_all(media_list) media_items: [Track | Video | Album] = items_results_all(media_list)
@@ -569,11 +569,11 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
else: else:
# If it is an artist resolve it with all available albums of him # If it is an artist resolve it with all available albums of him
if len(items) == 1: if len(items) == 1:
tmp_media: QtWidgets.QTreeWidgetItem = items[0].data(5, QtCore.Qt.ItemDataRole.UserRole) tmp_media: QtWidgets.QTreeWidgetItem = items[0].data(1, QtCore.Qt.ItemDataRole.UserRole)
if isinstance(tmp_media, Artist): if isinstance(tmp_media, Artist):
tmp_children: [QtWidgets.QTreeWidgetItem] = [] tmp_children: [QtWidgets.QTreeWidgetItem] = []
is_dummy_child = not bool(items[0].child(0).data(5, QtCore.Qt.ItemDataRole.UserRole)) is_dummy_child = not bool(items[0].child(0).data(1, QtCore.Qt.ItemDataRole.UserRole))
# Use the expand function to retrieve all albums. # Use the expand function to retrieve all albums.
if is_dummy_child: if is_dummy_child:
@@ -590,7 +590,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
items_pos_last = len(items) - 1 items_pos_last = len(items) - 1
for item in items: for item in items:
media: Track | Album | Playlist | Video | Artist = item.data(5, QtCore.Qt.ItemDataRole.UserRole) media: Track | Album | Playlist | Video | Artist = item.data(1, QtCore.Qt.ItemDataRole.UserRole)
# Skip only if Track item, skip option set and the item is not the last in the list. # Skip only if Track item, skip option set and the item is not the last in the list.
download_delay: bool = bool( download_delay: bool = bool(
isinstance(media, Track | Video) isinstance(media, Track | Video)
@@ -635,7 +635,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
if load_children: if load_children:
list_item.removeChild(list_item.child(0)) list_item.removeChild(list_item.child(0))
media_list: [Mix | Album | Playlist | Artist] = list_item.data(5, QtCore.Qt.ItemDataRole.UserRole) media_list: [Mix | Album | Playlist | Artist] = list_item.data(1, QtCore.Qt.ItemDataRole.UserRole)
self.list_items_show_result(media_list=media_list, parent=list_item) self.list_items_show_result(media_list=media_list, parent=list_item)
+111 -23
View File
@@ -7,13 +7,13 @@
################################################################################ ################################################################################
from PySide6.QtCore import QCoreApplication, QLocale, QMetaObject, QRect, QSize, Qt from PySide6.QtCore import QCoreApplication, QLocale, QMetaObject, QRect, QSize, Qt
from PySide6.QtGui import QAction from PySide6.QtGui import QAction, QFont, QPixmap
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
QAbstractItemView, QAbstractItemView,
QComboBox, QComboBox,
QFrame,
QHBoxLayout, QHBoxLayout,
QLabel, QLabel,
QLayout,
QLineEdit, QLineEdit,
QMenu, QMenu,
QMenuBar, QMenuBar,
@@ -21,6 +21,8 @@ from PySide6.QtWidgets import (
QPushButton, QPushButton,
QSizePolicy, QSizePolicy,
QStatusBar, QStatusBar,
QTableWidget,
QTableWidgetItem,
QTreeWidget, QTreeWidget,
QTreeWidgetItem, QTreeWidgetItem,
QVBoxLayout, QVBoxLayout,
@@ -32,7 +34,7 @@ class Ui_MainWindow:
def setupUi(self, MainWindow): def setupUi(self, MainWindow):
if not MainWindow.objectName(): if not MainWindow.objectName():
MainWindow.setObjectName("MainWindow") MainWindow.setObjectName("MainWindow")
MainWindow.resize(900, 700) MainWindow.resize(1200, 800)
self.a_preferences = QAction(MainWindow) self.a_preferences = QAction(MainWindow)
self.a_preferences.setObjectName("a_preferences") self.a_preferences.setObjectName("a_preferences")
self.a_preferences.setEnabled(True) self.a_preferences.setEnabled(True)
@@ -78,14 +80,11 @@ class Ui_MainWindow:
# endif // QT_CONFIG(accessibility) # endif // QT_CONFIG(accessibility)
self.horizontalLayout = QHBoxLayout(self.w_central) self.horizontalLayout = QHBoxLayout(self.w_central)
self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setObjectName("horizontalLayout")
self.lh_main = QHBoxLayout() self.lv_list_user = QVBoxLayout()
self.lh_main.setObjectName("lh_main") self.lv_list_user.setObjectName("lv_list_user")
self.lh_main.setSizeConstraint(QLayout.SetNoConstraint)
self.verticalLayout = QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.tr_lists_user = QTreeWidget(self.w_central) self.tr_lists_user = QTreeWidget(self.w_central)
__qtreewidgetitem = QTreeWidgetItem() __qtreewidgetitem = QTreeWidgetItem()
__qtreewidgetitem.setText(1, "Info") __qtreewidgetitem.setText(2, "Info")
__qtreewidgetitem.setText(0, "Name") __qtreewidgetitem.setText(0, "Name")
self.tr_lists_user.setHeaderItem(__qtreewidgetitem) self.tr_lists_user.setHeaderItem(__qtreewidgetitem)
__qtreewidgetitem1 = QTreeWidgetItem(self.tr_lists_user) __qtreewidgetitem1 = QTreeWidgetItem(self.tr_lists_user)
@@ -119,7 +118,7 @@ class Ui_MainWindow:
self.tr_lists_user.header().setHighlightSections(True) self.tr_lists_user.header().setHighlightSections(True)
self.tr_lists_user.header().setProperty("showSortIndicator", True) self.tr_lists_user.header().setProperty("showSortIndicator", True)
self.verticalLayout.addWidget(self.tr_lists_user) self.lv_list_user.addWidget(self.tr_lists_user)
self.pb_reload_user_lists = QPushButton(self.w_central) self.pb_reload_user_lists = QPushButton(self.w_central)
self.pb_reload_user_lists.setObjectName("pb_reload_user_lists") self.pb_reload_user_lists.setObjectName("pb_reload_user_lists")
@@ -129,9 +128,9 @@ class Ui_MainWindow:
sizePolicy1.setHeightForWidth(self.pb_reload_user_lists.sizePolicy().hasHeightForWidth()) sizePolicy1.setHeightForWidth(self.pb_reload_user_lists.sizePolicy().hasHeightForWidth())
self.pb_reload_user_lists.setSizePolicy(sizePolicy1) self.pb_reload_user_lists.setSizePolicy(sizePolicy1)
self.verticalLayout.addWidget(self.pb_reload_user_lists) self.lv_list_user.addWidget(self.pb_reload_user_lists)
self.lh_main.addLayout(self.verticalLayout) self.horizontalLayout.addLayout(self.lv_list_user)
self.lv_search_result = QVBoxLayout() self.lv_search_result = QVBoxLayout()
# ifndef Q_OS_MAC # ifndef Q_OS_MAC
@@ -375,17 +374,92 @@ class Ui_MainWindow:
self.lv_search_result.addWidget(self.te_debug) self.lv_search_result.addWidget(self.te_debug)
self.lh_main.addLayout(self.lv_search_result) self.horizontalLayout.addLayout(self.lv_search_result)
self.lh_main.setStretch(0, 40) self.lv_info = QVBoxLayout()
self.lh_main.setStretch(1, 60) self.lv_info.setObjectName("lv_info")
self.lv_info_item = QVBoxLayout()
self.lv_info_item.setObjectName("lv_info_item")
self.horizontalLayout_2 = QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.l_pm_cover = QLabel(self.w_central)
self.l_pm_cover.setObjectName("l_pm_cover")
sizePolicy3 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
sizePolicy3.setHorizontalStretch(0)
sizePolicy3.setVerticalStretch(0)
sizePolicy3.setHeightForWidth(self.l_pm_cover.sizePolicy().hasHeightForWidth())
self.l_pm_cover.setSizePolicy(sizePolicy3)
self.l_pm_cover.setMaximumSize(QSize(280, 280))
self.l_pm_cover.setBaseSize(QSize(0, 0))
self.l_pm_cover.setFrameShape(QFrame.NoFrame)
self.l_pm_cover.setPixmap(QPixmap("placeholder_cover.jpg"))
self.l_pm_cover.setScaledContents(True)
self.l_pm_cover.setAlignment(Qt.AlignHCenter | Qt.AlignTop)
self.horizontalLayout.addLayout(self.lh_main) self.horizontalLayout_2.addWidget(self.l_pm_cover)
self.lv_info_item.addLayout(self.horizontalLayout_2)
self.lv_info.addLayout(self.lv_info_item)
self.lv_queue_dl = QVBoxLayout()
self.lv_queue_dl.setObjectName("lv_queue_dl")
self.l_h_queue_dl = QLabel(self.w_central)
self.l_h_queue_dl.setObjectName("l_h_queue_dl")
font = QFont()
font.setBold(True)
font.setItalic(False)
font.setKerning(True)
self.l_h_queue_dl.setFont(font)
self.lv_queue_dl.addWidget(self.l_h_queue_dl)
self.ta_queue_dl = QTableWidget(self.w_central)
if self.ta_queue_dl.columnCount() < 5:
self.ta_queue_dl.setColumnCount(5)
__qtablewidgetitem = QTableWidgetItem()
__qtablewidgetitem.setTextAlignment(Qt.AlignLeading | Qt.AlignVCenter)
self.ta_queue_dl.setHorizontalHeaderItem(0, __qtablewidgetitem)
__qtablewidgetitem1 = QTableWidgetItem()
self.ta_queue_dl.setHorizontalHeaderItem(1, __qtablewidgetitem1)
__qtablewidgetitem2 = QTableWidgetItem()
__qtablewidgetitem2.setTextAlignment(Qt.AlignLeading | Qt.AlignVCenter)
self.ta_queue_dl.setHorizontalHeaderItem(2, __qtablewidgetitem2)
__qtablewidgetitem3 = QTableWidgetItem()
__qtablewidgetitem3.setTextAlignment(Qt.AlignLeading | Qt.AlignVCenter)
self.ta_queue_dl.setHorizontalHeaderItem(3, __qtablewidgetitem3)
__qtablewidgetitem4 = QTableWidgetItem()
__qtablewidgetitem4.setTextAlignment(Qt.AlignLeading | Qt.AlignVCenter)
self.ta_queue_dl.setHorizontalHeaderItem(4, __qtablewidgetitem4)
self.ta_queue_dl.setObjectName("ta_queue_dl")
self.ta_queue_dl.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.ta_queue_dl.setTabKeyNavigation(False)
self.ta_queue_dl.setProperty("showDropIndicator", False)
self.ta_queue_dl.setDragDropOverwriteMode(False)
self.ta_queue_dl.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.ta_queue_dl.setSelectionBehavior(QAbstractItemView.SelectRows)
self.ta_queue_dl.setSortingEnabled(True)
self.ta_queue_dl.verticalHeader().setProperty("showSortIndicator", True)
self.lv_queue_dl.addWidget(self.ta_queue_dl)
self.pb_queue_item_remove = QPushButton(self.w_central)
self.pb_queue_item_remove.setObjectName("pb_queue_item_remove")
self.pb_queue_item_remove.setEnabled(False)
self.lv_queue_dl.addWidget(self.pb_queue_item_remove)
self.lv_info.addLayout(self.lv_queue_dl)
self.horizontalLayout.addLayout(self.lv_info)
self.horizontalLayout.setStretch(0, 25)
self.horizontalLayout.setStretch(1, 50)
self.horizontalLayout.setStretch(2, 25)
MainWindow.setCentralWidget(self.w_central) MainWindow.setCentralWidget(self.w_central)
self.menubar = QMenuBar(MainWindow) self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName("menubar") self.menubar.setObjectName("menubar")
self.menubar.setGeometry(QRect(0, 0, 900, 24)) self.menubar.setGeometry(QRect(0, 0, 1200, 24))
# if QT_CONFIG(tooltip) # if QT_CONFIG(tooltip)
self.menubar.setToolTip("") self.menubar.setToolTip("")
# endif // QT_CONFIG(tooltip) # endif // QT_CONFIG(tooltip)
@@ -457,7 +531,7 @@ class Ui_MainWindow:
self.a_exit.setText(QCoreApplication.translate("MainWindow", "Exit", None)) self.a_exit.setText(QCoreApplication.translate("MainWindow", "Exit", None))
self.a_logout.setText(QCoreApplication.translate("MainWindow", "Logout", None)) self.a_logout.setText(QCoreApplication.translate("MainWindow", "Logout", None))
___qtreewidgetitem = self.tr_lists_user.headerItem() ___qtreewidgetitem = self.tr_lists_user.headerItem()
___qtreewidgetitem.setText(2, QCoreApplication.translate("MainWindow", "obj", None)) ___qtreewidgetitem.setText(1, QCoreApplication.translate("MainWindow", "obj", None))
__sortingEnabled = self.tr_lists_user.isSortingEnabled() __sortingEnabled = self.tr_lists_user.isSortingEnabled()
self.tr_lists_user.setSortingEnabled(False) self.tr_lists_user.setSortingEnabled(False)
@@ -471,13 +545,27 @@ class Ui_MainWindow:
self.pb_reload_user_lists.setText(QCoreApplication.translate("MainWindow", "Reload", None)) self.pb_reload_user_lists.setText(QCoreApplication.translate("MainWindow", "Reload", None))
___qtreewidgetitem4 = self.tr_results.headerItem() ___qtreewidgetitem4 = self.tr_results.headerItem()
___qtreewidgetitem4.setText(5, QCoreApplication.translate("MainWindow", "obj", None)) ___qtreewidgetitem4.setText(6, QCoreApplication.translate("MainWindow", "Quality", None))
___qtreewidgetitem4.setText(4, QCoreApplication.translate("MainWindow", "Duration", None)) ___qtreewidgetitem4.setText(5, QCoreApplication.translate("MainWindow", "Duration", None))
___qtreewidgetitem4.setText(3, QCoreApplication.translate("MainWindow", "Album", None)) ___qtreewidgetitem4.setText(4, QCoreApplication.translate("MainWindow", "Album", None))
___qtreewidgetitem4.setText(2, QCoreApplication.translate("MainWindow", "Title", None)) ___qtreewidgetitem4.setText(3, QCoreApplication.translate("MainWindow", "Title", None))
___qtreewidgetitem4.setText(1, QCoreApplication.translate("MainWindow", "Artist", None)) ___qtreewidgetitem4.setText(2, QCoreApplication.translate("MainWindow", "Artist", None))
___qtreewidgetitem4.setText(1, QCoreApplication.translate("MainWindow", "obj", None))
___qtreewidgetitem4.setText(0, QCoreApplication.translate("MainWindow", "#", None)) ___qtreewidgetitem4.setText(0, QCoreApplication.translate("MainWindow", "#", None))
self.te_debug.setPlaceholderText(QCoreApplication.translate("MainWindow", "Logs...", None)) self.te_debug.setPlaceholderText(QCoreApplication.translate("MainWindow", "Logs...", None))
self.l_pm_cover.setText("")
self.l_h_queue_dl.setText(QCoreApplication.translate("MainWindow", "Download Queue", None))
___qtablewidgetitem = self.ta_queue_dl.horizontalHeaderItem(0)
___qtablewidgetitem.setText(QCoreApplication.translate("MainWindow", "#", None))
___qtablewidgetitem1 = self.ta_queue_dl.horizontalHeaderItem(1)
___qtablewidgetitem1.setText(QCoreApplication.translate("MainWindow", "obj", None))
___qtablewidgetitem2 = self.ta_queue_dl.horizontalHeaderItem(2)
___qtablewidgetitem2.setText(QCoreApplication.translate("MainWindow", "Name", None))
___qtablewidgetitem3 = self.ta_queue_dl.horizontalHeaderItem(3)
___qtablewidgetitem3.setText(QCoreApplication.translate("MainWindow", "Type", None))
___qtablewidgetitem4 = self.ta_queue_dl.horizontalHeaderItem(4)
___qtablewidgetitem4.setText(QCoreApplication.translate("MainWindow", "Quality", None))
self.pb_queue_item_remove.setText(QCoreApplication.translate("MainWindow", "Remove", None))
self.m_file.setTitle(QCoreApplication.translate("MainWindow", "File", None)) self.m_file.setTitle(QCoreApplication.translate("MainWindow", "File", None))
# retranslateUi # retranslateUi
+579 -439
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB