Parcourir la source

add explorerTable update; improve menu design

Olivier Massot il y a 4 ans
Parent
commit
da47a47e60
5 fichiers modifiés avec 982 ajouts et 1228 suppressions
  1. 5 6
      ui/qt/main.ui
  2. 3 1
      ui/qt/main_ui.py
  3. 944 1193
      ui/qt/rsc_rc.py
  4. 28 27
      ui/qt/widgets/explorertable.py
  5. 2 1
      ui/window.py

+ 5 - 6
ui/qt/main.ui

@@ -68,6 +68,11 @@
           <pointsize>12</pointsize>
          </font>
         </property>
+        <property name="styleSheet">
+         <string notr="true">QListWidget::item {
+	margin: 16px 0;
+}</string>
+        </property>
         <property name="horizontalScrollBarPolicy">
          <enum>Qt::ScrollBarAlwaysOff</enum>
         </property>
@@ -89,12 +94,6 @@
           <height>24</height>
          </size>
         </property>
-        <property name="gridSize">
-         <size>
-          <width>0</width>
-          <height>36</height>
-         </size>
-        </property>
         <property name="currentRow">
          <number>-1</number>
         </property>

+ 3 - 1
ui/qt/main_ui.py

@@ -39,13 +39,15 @@ class Ui_mainWindow(object):
         font.setFamily("Verdana")
         font.setPointSize(12)
         self.menu.setFont(font)
+        self.menu.setStyleSheet("QListWidget::item {\n"
+"    margin: 16px 0;\n"
+"}")
         self.menu.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
         self.menu.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
         self.menu.setProperty("showDropIndicator", False)
         self.menu.setDefaultDropAction(QtCore.Qt.CopyAction)
         self.menu.setAlternatingRowColors(True)
         self.menu.setIconSize(QtCore.QSize(24, 24))
-        self.menu.setGridSize(QtCore.QSize(0, 36))
         self.menu.setObjectName("menu")
         self.mainLayout.addWidget(self.menu)
         self.verticalLayout_7 = QtWidgets.QVBoxLayout()

Fichier diff supprimé car celui-ci est trop grand
+ 944 - 1193
ui/qt/rsc_rc.py


+ 28 - 27
ui/qt/widgets/explorertable.py

@@ -20,43 +20,53 @@ class ExplorerTable(QTreeWidget):
         self.setColumnWidth(0, 54)
         self.hideColumn(2)
         self.itemDoubleClicked.connect(self._itemDoubleClicked)
+        self.artist_items, self.album_items, self.track_items = {}, {}, {}
 
     def populate(self):
         session = db.Session()
         track_repo = TrackRepository(session)
         self.clear()
 
-        artist_folders = {}
-        album_folders = {}
+        self.artist_items, self.album_items, self.track_items = {}, {}, {}
+
         tracks = track_repo.get_all()
 
         self.setUpdatesEnabled(False)
+        self.update_with(tracks)
+        self.setUpdatesEnabled(True)
+        self.trackSelected.emit(None)
+
+    def update_with(self, tracks):
 
         for track in tracks:
-            if track.artist and track.artist not in artist_folders:
+            if track.artist and track.artist not in self.artist_items:
                 item = QTreeWidgetItem(self)
                 item.setIcon(0, QIcon(":/img/rsc/artist.png"))
                 item.setText(1, track.artist)
-                artist_folders[track.artist] = item
+                self.artist_items[track.artist] = item
 
         for track in tracks:
             # list albums with artists
-            if track.artist and track.album and (track.artist, track.album) not in album_folders:
-                item = QTreeWidgetItem(artist_folders[track.artist])
+            if track.artist and track.album and (track.artist, track.album) not in self.album_items:
+                item = QTreeWidgetItem(self.artist_items[track.artist])
                 item.setIcon(0, QIcon(":/img/rsc/album.png"))
                 item.setText(1, track.album)
-                album_folders[(track.artist, track.album)] = item
+                self.album_items[(track.artist, track.album)] = item
 
         for track in tracks:
-            if track.artist and track.album:
-                parent = album_folders[(track.artist, track.album)]
-            elif track.artist:
-                parent = artist_folders[track.artist]
-            else:
-                parent = self
 
-            item = QTreeWidgetItem(parent)
-            item.setIcon(0, QIcon(":/img/rsc/music.png"))
+            if track.id not in self.track_items:
+                if track.artist and track.album:
+                    parent = self.album_items[(track.artist, track.album)]
+                elif track.artist:
+                    parent = self.artist_items[track.artist]
+                else:
+                    parent = self
+
+                item = QTreeWidgetItem(parent)
+                item.setIcon(0, QIcon(":/img/rsc/music.png"))
+                item.setData(2, 0, track.id)
+                self.track_items[track.id] = item
 
             if track.status != track.STATUS_UNAVAILABLE:
                 title = track.title
@@ -65,18 +75,9 @@ class ExplorerTable(QTreeWidget):
                 title = f"[Introuvable] {track.title}"
                 color = QColor(200, 20, 20)
 
-            item.setText(1, title)
-            item.setForeground(0, QBrush(color))
-            item.setForeground(1, QBrush(color))
-            item.setData(2, 0, track.id)
-
-        self.setUpdatesEnabled(True)
-        self.trackSelected.emit(None)
-
-    def update_tracks(self, tracks):
-        # for track in tracks:
-        #     pass
-        self.populate()
+            self.track_items[track.id].setText(1, title)
+            self.track_items[track.id].setForeground(0, QBrush(color))
+            self.track_items[track.id].setForeground(1, QBrush(color))
 
     def selected_track(self):
         track_id = self.selectionModel().selection().indexes()[2].data(2)

+ 2 - 1
ui/window.py

@@ -5,6 +5,7 @@
     @author:[author], [year]
 """
 from PyQt5 import QtWidgets
+from PyQt5.QtCore import QSize
 from path import Path
 
 from PyQt5.QtGui import QIcon
@@ -139,7 +140,7 @@ class MainWindow(QMainWindow):
 
     def refresh_explorer_tree(self, tracks=None):
         if tracks:
-            self.ui.explorerTable.update_tracks(tracks)
+            self.ui.explorerTable.update_with(tracks)
         else:
             self.ui.explorerTable.populate()
         self.ui.explorerLineSearch.clear()

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff