Preferences/ConfigurationPages/EditorFilePage.py

changeset 742
30fc855257e9
parent 564
b3d966393ba9
child 743
c58faf72e308
--- a/Preferences/ConfigurationPages/EditorFilePage.py	Tue Dec 07 19:00:48 2010 +0100
+++ b/Preferences/ConfigurationPages/EditorFilePage.py	Tue Dec 07 20:10:13 2010 +0100
@@ -7,8 +7,12 @@
 Module implementing the Editor General configuration page.
 """
 
+from PyQt4.QtCore import pyqtSlot
+from PyQt4.QtGui import QListWidgetItem, QInputDialog, QLineEdit
 from PyQt4.Qsci import QsciScintilla
 
+from E5Gui import E5MessageBox
+
 import QScintilla.Lexers
 
 from .ConfigurationPageBase import ConfigurationPageBase
@@ -29,10 +33,12 @@
         self.setupUi(self)
         self.setObjectName("EditorFilePage")
         
-        self.openFilesFilterComboBox.addItems(
-            QScintilla.Lexers.getOpenFileFiltersList(True))
-        self.saveFilesFilterComboBox.addItems(
-            QScintilla.Lexers.getSaveFileFiltersList(True))
+        self.__showsOpenFilters = True
+        self.openFileFilters = Preferences.getEditor("AdditionalOpenFilters")[:]
+        self.saveFileFilters = Preferences.getEditor("AdditionalSaveFilters")[:]
+        self.fileFiltersList.addItems(self.openFileFilters)
+        
+        self.__setDefaultFiltersLists()
         
         self.defaultEncodingComboBox.addItems(sorted(supportedCodecs))
         
@@ -110,6 +116,129 @@
             Preferences.setEditor("EOLMode", QsciScintilla.EolMac)
         elif self.lfRadioButton.isChecked():
             Preferences.setEditor("EOLMode", QsciScintilla.EolUnix)
+        
+        self.__extractFileFilters()
+        Preferences.setEditor("AdditionalOpenFilters", self.openFileFilters)
+        Preferences.setEditor("AdditionalSaveFilters", self.saveFileFilters)
+    
+    def __setDefaultFiltersLists(self, keepSelection = False):
+        """
+        Private slot to set the default file filter combo boxes.
+        """
+        if keepSelection:
+            selectedOpenFilter = self.openFilesFilterComboBox.currentText()
+            selectedSaveFilter = self.saveFilesFilterComboBox.currentText()
+        
+        openFileFiltersList = \
+            QScintilla.Lexers.getOpenFileFiltersList(False, withAdditional = False) + \
+            self.openFileFilters
+        openFileFiltersList.sort()
+        self.openFilesFilterComboBox.addItems(openFileFiltersList)
+        saveFileFiltersList = \
+            QScintilla.Lexers.getSaveFileFiltersList(False, withAdditional = False) + \
+            self.saveFileFilters
+        saveFileFiltersList.sort()
+        self.saveFilesFilterComboBox.addItems(saveFileFiltersList)
+        
+        if keepSelection:
+            self.openFilesFilterComboBox.setCurrentIndex(
+                self.openFilesFilterComboBox.findText(selectedOpenFilter))
+            self.saveFilesFilterComboBox.setCurrentIndex(
+                self.saveFilesFilterComboBox.findText(selectedSaveFilter))
+    
+    def __extractFileFilters(self):
+        """
+        Private method to extract the file filters.
+        """
+        filters = []
+        for row in range(self.fileFiltersList.count()):
+            filters.append(self.fileFiltersList.item(row).text())
+        if self.__showsOpenFilters:
+            self.openFileFilters = filters
+        else:
+            self.saveFileFilters = filters
+    
+    def __checkFileFilter(self, filter):
+        """
+        Private method to check a file filter for validity.
+        
+        @param filter file filter pattern to check (string)
+        @return flag indicating validity (boolean)
+        """
+        if not self.__showsOpenFilters and \
+           filter.count("*") != 1:
+            E5MessageBox.critical(self,
+                self.trUtf8("Add File Filter"),
+                self.trUtf8("""A Save File Filter must contain exactly one"""
+                            """ wildcard pattern. Yours contains {0}.""")\
+                            .format(filter.count("*")))
+            return False
+        
+        if filter.count("*") == 0:
+            E5MessageBox.critical(self,
+                self.trUtf8("Add File Filter"),
+                self.trUtf8("""A File Filter must contain at least one"""
+                            """ wildcard pattern.""")\
+                            .format(filter.count("*")))
+            return False
+        
+        return True
+    
+    @pyqtSlot()
+    def on_addFileFilterButton_clicked(self):
+        """
+        Private slot to add a file filter to the list.
+        """
+        filter, ok = QInputDialog.getText(
+            self,
+            self.trUtf8("Add File Filter"),
+            self.trUtf8("Enter the file filter entry:"),
+            QLineEdit.Normal)
+        if ok and filter:
+            if self.__checkFileFilter(filter):
+                self.fileFiltersList.addItem(filter)
+                self.__extractFileFilters()
+                self.__setDefaultFiltersLists(keepSelection = True)
+    
+    @pyqtSlot()
+    def on_editFileFilterButton_clicked(self):
+        """
+        Slot documentation goes here.
+        """
+        # TODO: not implemented yet
+        raise NotImplementedError
+    
+    @pyqtSlot()
+    def on_deleteFileFilterButton_clicked(self):
+        """
+        Slot documentation goes here.
+        """
+        # TODO: not implemented yet
+        raise NotImplementedError
+    
+    @pyqtSlot(bool)
+    def on_openFiltersButton_toggled(self, checked):
+        """
+        Private slot to switch the list of file filters.
+        """
+        self.__extractFileFilters()
+        self.__showsOpenFilters = checked
+        self.fileFiltersList.clear()
+        if checked:
+            self.fileFiltersList.addItems(self.openFileFilters)
+        else:
+            self.fileFiltersList.addItems(self.saveFileFilters)
+    
+    @pyqtSlot(QListWidgetItem, QListWidgetItem)
+    def on_fileFiltersList_currentItemChanged(self, current, previous):
+        """
+        Private slot to set the state of the edit and delete buttons.
+        
+        @param current new current item (QListWidgetItem)
+        @param previous previous current item (QListWidgetItem)
+        """
+        self.editFileFilterButton.setEnabled(current is not None)
+        self.deleteFileFilterButton.setEnabled(current is not None)
     
 def create(dlg):
     """
@@ -118,4 +247,4 @@
     @param dlg reference to the configuration dialog
     """
     page = EditorFilePage()
-    return page
\ No newline at end of file
+    return page

eric ide

mercurial