✨ 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)
def _init_tree_results(self, tree: QtWidgets.QTableWidget):
tree.setColumnHidden(5, True)
tree.sortByColumn(0, QtCore.Qt.SortOrder.AscendingOrder)
tree.setColumnHidden(1, True)
def tidal_user_lists(self):
# Start loading spinner
@@ -228,8 +228,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
info: str = item.sub_title
twi_child.setText(0, name)
twi_child.setText(1, info)
twi_child.setData(3, QtCore.Qt.ItemDataRole.UserRole, item)
twi_child.setData(1, QtCore.Qt.ItemDataRole.UserRole, item)
twi_child.setText(2, info)
# Stop load spinner
self.s_spinner_stop.emit()
@@ -238,8 +238,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def _init_tree_lists(self, tree: QtWidgets.QTreeWidget):
# Adjust Tree.
tree.setColumnWidth(0, 200)
tree.setColumnWidth(1, 300)
tree.setColumnHidden(2, True)
tree.setColumnHidden(1, True)
tree.setColumnWidth(2, 300)
tree.expandAll()
# Connect the contextmenu
@@ -336,11 +336,11 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
# Populate child
child: QtWidgets.QTreeWidgetItem = QtWidgets.QTreeWidgetItem()
child.setText(0, index)
child.setText(1, item.artist)
child.setText(2, item.title)
child.setText(3, item.album)
child.setText(4, duration)
child.setData(5, QtCore.Qt.ItemDataRole.UserRole, item.obj)
child.setData(1, QtCore.Qt.ItemDataRole.UserRole, item.obj)
child.setText(2, item.artist)
child.setText(3, item.title)
child.setText(4, item.album)
child.setText(5, duration)
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.
@@ -529,7 +529,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.tidal.settings_apply()
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.
if media_list:
@@ -543,7 +543,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
) -> None:
if 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
media_items: [Track | Video | Album] = items_results_all(media_list)
@@ -569,11 +569,11 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
else:
# If it is an artist resolve it with all available albums of him
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):
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.
if is_dummy_child:
@@ -590,7 +590,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
items_pos_last = len(items) - 1
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.
download_delay: bool = bool(
isinstance(media, Track | Video)
@@ -635,7 +635,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
if load_children:
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)
+111 -23
View File
@@ -7,13 +7,13 @@
################################################################################
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 (
QAbstractItemView,
QComboBox,
QFrame,
QHBoxLayout,
QLabel,
QLayout,
QLineEdit,
QMenu,
QMenuBar,
@@ -21,6 +21,8 @@ from PySide6.QtWidgets import (
QPushButton,
QSizePolicy,
QStatusBar,
QTableWidget,
QTableWidgetItem,
QTreeWidget,
QTreeWidgetItem,
QVBoxLayout,
@@ -32,7 +34,7 @@ class Ui_MainWindow:
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName("MainWindow")
MainWindow.resize(900, 700)
MainWindow.resize(1200, 800)
self.a_preferences = QAction(MainWindow)
self.a_preferences.setObjectName("a_preferences")
self.a_preferences.setEnabled(True)
@@ -78,14 +80,11 @@ class Ui_MainWindow:
# endif // QT_CONFIG(accessibility)
self.horizontalLayout = QHBoxLayout(self.w_central)
self.horizontalLayout.setObjectName("horizontalLayout")
self.lh_main = QHBoxLayout()
self.lh_main.setObjectName("lh_main")
self.lh_main.setSizeConstraint(QLayout.SetNoConstraint)
self.verticalLayout = QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.lv_list_user = QVBoxLayout()
self.lv_list_user.setObjectName("lv_list_user")
self.tr_lists_user = QTreeWidget(self.w_central)
__qtreewidgetitem = QTreeWidgetItem()
__qtreewidgetitem.setText(1, "Info")
__qtreewidgetitem.setText(2, "Info")
__qtreewidgetitem.setText(0, "Name")
self.tr_lists_user.setHeaderItem(__qtreewidgetitem)
__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().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.setObjectName("pb_reload_user_lists")
@@ -129,9 +128,9 @@ class Ui_MainWindow:
sizePolicy1.setHeightForWidth(self.pb_reload_user_lists.sizePolicy().hasHeightForWidth())
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()
# ifndef Q_OS_MAC
@@ -375,17 +374,92 @@ class Ui_MainWindow:
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.lh_main.setStretch(1, 60)
self.lv_info = QVBoxLayout()
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)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName("menubar")
self.menubar.setGeometry(QRect(0, 0, 900, 24))
self.menubar.setGeometry(QRect(0, 0, 1200, 24))
# if QT_CONFIG(tooltip)
self.menubar.setToolTip("")
# endif // QT_CONFIG(tooltip)
@@ -457,7 +531,7 @@ class Ui_MainWindow:
self.a_exit.setText(QCoreApplication.translate("MainWindow", "Exit", None))
self.a_logout.setText(QCoreApplication.translate("MainWindow", "Logout", None))
___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()
self.tr_lists_user.setSortingEnabled(False)
@@ -471,13 +545,27 @@ class Ui_MainWindow:
self.pb_reload_user_lists.setText(QCoreApplication.translate("MainWindow", "Reload", None))
___qtreewidgetitem4 = self.tr_results.headerItem()
___qtreewidgetitem4.setText(5, QCoreApplication.translate("MainWindow", "obj", None))
___qtreewidgetitem4.setText(4, QCoreApplication.translate("MainWindow", "Duration", None))
___qtreewidgetitem4.setText(3, QCoreApplication.translate("MainWindow", "Album", None))
___qtreewidgetitem4.setText(2, QCoreApplication.translate("MainWindow", "Title", None))
___qtreewidgetitem4.setText(1, QCoreApplication.translate("MainWindow", "Artist", None))
___qtreewidgetitem4.setText(6, QCoreApplication.translate("MainWindow", "Quality", None))
___qtreewidgetitem4.setText(5, QCoreApplication.translate("MainWindow", "Duration", None))
___qtreewidgetitem4.setText(4, QCoreApplication.translate("MainWindow", "Album", None))
___qtreewidgetitem4.setText(3, QCoreApplication.translate("MainWindow", "Title", None))
___qtreewidgetitem4.setText(2, QCoreApplication.translate("MainWindow", "Artist", None))
___qtreewidgetitem4.setText(1, QCoreApplication.translate("MainWindow", "obj", None))
___qtreewidgetitem4.setText(0, QCoreApplication.translate("MainWindow", "#", 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))
# retranslateUi
+156 -16
View File
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>900</width>
<height>700</height>
<width>1200</width>
<height>800</height>
</rect>
</property>
<property name="windowTitle">
@@ -38,14 +38,9 @@
<property name="accessibleDescription">
<string notr="true"/>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<layout class="QHBoxLayout" name="horizontalLayout" stretch="25,50,25">
<item>
<layout class="QHBoxLayout" name="lh_main" stretch="40,60">
<property name="sizeConstraint">
<enum>QLayout::SetNoConstraint</enum>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="lv_list_user">
<item>
<widget class="QTreeWidget" name="tr_lists_user">
<property name="toolTip">
@@ -101,6 +96,11 @@
<string notr="true"/>
</property>
</column>
<column>
<property name="text">
<string>obj</string>
</property>
</column>
<column>
<property name="text">
<string notr="true">Info</string>
@@ -115,11 +115,6 @@
<string notr="true"/>
</property>
</column>
<column>
<property name="text">
<string>obj</string>
</property>
</column>
<item>
<property name="text">
<string>Playlists</string>
@@ -303,6 +298,11 @@
<string>#</string>
</property>
</column>
<column>
<property name="text">
<string>obj</string>
</property>
</column>
<column>
<property name="text">
<string>Artist</string>
@@ -325,7 +325,7 @@
</column>
<column>
<property name="text">
<string>obj</string>
<string>Quality</string>
</property>
</column>
</widget>
@@ -510,6 +510,146 @@
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="lv_info">
<item>
<layout class="QVBoxLayout" name="lv_info_item">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="l_pm_cover">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>280</width>
<height>280</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>placeholder_cover.jpg</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
<property name="alignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="lv_queue_dl">
<item>
<widget class="QLabel" name="l_h_queue_dl">
<property name="font">
<font>
<italic>false</italic>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>Download Queue</string>
</property>
</widget>
</item>
<item>
<widget class="QTableWidget" name="ta_queue_dl">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="tabKeyNavigation">
<bool>false</bool>
</property>
<property name="showDropIndicator" stdset="0">
<bool>false</bool>
</property>
<property name="dragDropOverwriteMode">
<bool>false</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
<attribute name="verticalHeaderShowSortIndicator" stdset="0">
<bool>true</bool>
</attribute>
<column>
<property name="text">
<string>#</string>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</column>
<column>
<property name="text">
<string>obj</string>
</property>
</column>
<column>
<property name="text">
<string>Name</string>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</column>
<column>
<property name="text">
<string>Type</string>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</column>
<column>
<property name="text">
<string>Quality</string>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</column>
</widget>
</item>
<item>
<widget class="QPushButton" name="pb_queue_item_remove">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
@@ -519,7 +659,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>900</width>
<width>1200</width>
<height>24</height>
</rect>
</property>
Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB