eric7/ViewManager/BookmarkedFilesDialog.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8318
962bce857696
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/ViewManager/BookmarkedFilesDialog.py	Sat May 15 18:45:04 2021 +0200
@@ -0,0 +1,177 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2004 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a configuration dialog for the bookmarked files menu.
+"""
+
+from PyQt5.QtCore import QFileInfo, Qt, pyqtSlot
+from PyQt5.QtGui import QColor
+from PyQt5.QtWidgets import QListWidgetItem, QDialog
+
+from E5Gui.E5PathPicker import E5PathPickerModes
+
+from .Ui_BookmarkedFilesDialog import Ui_BookmarkedFilesDialog
+
+
+class BookmarkedFilesDialog(QDialog, Ui_BookmarkedFilesDialog):
+    """
+    Class implementing a configuration dialog for the bookmarked files menu.
+    """
+    def __init__(self, bookmarks, parent=None):
+        """
+        Constructor
+        
+        @param bookmarks list of bookmarked files (list of strings)
+        @param parent parent widget (QWidget)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        
+        self.filePicker.setMode(E5PathPickerModes.OpenFileMode)
+        
+        self.bookmarks = bookmarks[:]
+        for bookmark in self.bookmarks:
+            itm = QListWidgetItem(bookmark, self.filesList)
+            if not QFileInfo(bookmark).exists():
+                itm.setBackground(QColor(Qt.GlobalColor.red))
+            
+        if len(self.bookmarks):
+            self.filesList.setCurrentRow(0)
+        
+    def on_filePicker_textChanged(self, txt):
+        """
+        Private slot to handle the textChanged signal of the file edit.
+        
+        @param txt the text of the file edit (string)
+        """
+        self.addButton.setEnabled(txt != "")
+        self.changeButton.setEnabled(
+            txt != "" and
+            self.filesList.currentRow() != -1)
+        
+    def on_filesList_currentRowChanged(self, row):
+        """
+        Private slot to set the lineedit depending on the selected entry.
+        
+        @param row the current row (integer)
+        """
+        if row == -1:
+            self.filePicker.clear()
+            self.downButton.setEnabled(False)
+            self.upButton.setEnabled(False)
+            self.deleteButton.setEnabled(False)
+            self.changeButton.setEnabled(False)
+        else:
+            maxIndex = len(self.bookmarks) - 1
+            self.upButton.setEnabled(row != 0)
+            self.downButton.setEnabled(row != maxIndex)
+            self.deleteButton.setEnabled(True)
+            self.changeButton.setEnabled(True)
+            
+            bookmark = self.bookmarks[row]
+            self.filePicker.setText(bookmark)
+        
+    @pyqtSlot()
+    def on_addButton_clicked(self):
+        """
+        Private slot to add a new entry.
+        """
+        bookmark = self.filePicker.text()
+        if bookmark:
+            itm = QListWidgetItem(bookmark, self.filesList)
+            if not QFileInfo(bookmark).exists():
+                itm.setBackground(QColor(Qt.GlobalColor.red))
+            self.filePicker.clear()
+            self.bookmarks.append(bookmark)
+        row = self.filesList.currentRow()
+        self.on_filesList_currentRowChanged(row)
+        
+    @pyqtSlot()
+    def on_changeButton_clicked(self):
+        """
+        Private slot to change an entry.
+        """
+        row = self.filesList.currentRow()
+        bookmark = self.filePicker.text()
+        self.bookmarks[row] = bookmark
+        itm = self.filesList.item(row)
+        itm.setText(bookmark)
+        if not QFileInfo(bookmark).exists():
+            itm.setBackground(QColor(Qt.GlobalColor.red))
+        else:
+            itm.setBackground(QColor())
+        
+    @pyqtSlot()
+    def on_deleteButton_clicked(self):
+        """
+        Private slot to delete the selected entry.
+        """
+        row = self.filesList.currentRow()
+        itm = self.filesList.takeItem(row)
+        del itm
+        del self.bookmarks[row]
+        row = self.filesList.currentRow()
+        self.on_filesList_currentRowChanged(row)
+        
+    @pyqtSlot()
+    def on_downButton_clicked(self):
+        """
+        Private slot to move an entry down in the list.
+        """
+        rows = self.filesList.count()
+        row = self.filesList.currentRow()
+        if row == rows - 1:
+            # we're already at the end
+            return
+        
+        self.__swap(row, row + 1)
+        itm = self.filesList.takeItem(row)
+        self.filesList.insertItem(row + 1, itm)
+        self.filesList.setCurrentItem(itm)
+        self.upButton.setEnabled(True)
+        if row == rows - 2:
+            self.downButton.setEnabled(False)
+        else:
+            self.downButton.setEnabled(True)
+        
+    @pyqtSlot()
+    def on_upButton_clicked(self):
+        """
+        Private slot to move an entry up in the list.
+        """
+        row = self.filesList.currentRow()
+        if row == 0:
+            # we're already at the top
+            return
+        
+        self.__swap(row - 1, row)
+        itm = self.filesList.takeItem(row)
+        self.filesList.insertItem(row - 1, itm)
+        self.filesList.setCurrentItem(itm)
+        if row == 1:
+            self.upButton.setEnabled(False)
+        else:
+            self.upButton.setEnabled(True)
+        self.downButton.setEnabled(True)
+        
+    def getBookmarkedFiles(self):
+        """
+        Public method to retrieve the tools list.
+        
+        @return a list of filenames (list of strings)
+        """
+        return self.bookmarks
+        
+    def __swap(self, itm1, itm2):
+        """
+        Private method used two swap two list entries given by their index.
+        
+        @param itm1 index of first entry (int)
+        @param itm2 index of second entry (int)
+        """
+        tmp = self.bookmarks[itm1]
+        self.bookmarks[itm1] = self.bookmarks[itm2]
+        self.bookmarks[itm2] = tmp

eric ide

mercurial