Project/FiletypeAssociationDialog.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
diff -r 000000000000 -r de9c2efb9d02 Project/FiletypeAssociationDialog.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Project/FiletypeAssociationDialog.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,158 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2005 - 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to enter filetype associations for the project.
+"""
+
+import sys
+import os
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+from Ui_FiletypeAssociationDialog import Ui_FiletypeAssociationDialog
+
+class FiletypeAssociationDialog(QDialog, Ui_FiletypeAssociationDialog):
+    """
+    Class implementing a dialog to enter filetype associations for the project.
+    """
+    def __init__(self, project, parent = None):
+        """
+        Constructor
+        
+        @param project reference to the project object
+        @param parent reference to the parent widget (QWidget)
+        """
+        QDialog.__init__(self, parent)
+        self.setupUi(self)
+
+        self.filetypeAssociationList.headerItem().setText(
+            self.filetypeAssociationList.columnCount(), "")
+        self.filetypeAssociationList.header().setSortIndicator(0, Qt.AscendingOrder)
+        
+        # keep these lists in sync
+        self.filetypes = ["SOURCES", "FORMS", "TRANSLATIONS", "RESOURCES", "INTERFACES", 
+                          "OTHERS", "__IGNORE__"]
+        self.filetypeStrings = [self.trUtf8("Sources"), self.trUtf8("Forms"),
+                                self.trUtf8("Translations"), self.trUtf8("Resources"),
+                                self.trUtf8("Interfaces"), self.trUtf8("Others"), 
+                                self.trUtf8("Ignore")]
+        self.filetypeCombo.addItems(self.filetypeStrings)
+        
+        self.project = project
+        for pattern, filetype in self.project.pdata["FILETYPES"].items():
+            try:
+                index = self.filetypes.index(filetype)
+                itm = self.__createItem(pattern, self.filetypeStrings[index])
+            except ValueError:
+                pass    # silently discard entries of unknown type
+        
+        self.__resort()
+        self.__reformat()
+        
+    def __resort(self):
+        """
+        Private method to resort the tree.
+        """
+        self.filetypeAssociationList.sortItems(self.filetypeAssociationList.sortColumn(), 
+            self.filetypeAssociationList.header().sortIndicatorOrder())
+        
+    def __reformat(self):
+        """
+        Private method to reformat the tree.
+        """
+        self.filetypeAssociationList.header().resizeSections(QHeaderView.ResizeToContents)
+        self.filetypeAssociationList.header().setStretchLastSection(True)
+        
+    def __createItem(self, pattern, filetype):
+        """
+        Private slot to create a new entry in the association list.
+        
+        @param pattern pattern of the entry (string)
+        @param filetype file type of the entry (string)
+        @return reference to the newly generated entry (QTreeWidgetItem)
+        """
+        itm = QTreeWidgetItem(self.filetypeAssociationList, [pattern, filetype])
+        return itm
+        
+    def on_filetypeAssociationList_currentItemChanged(self, itm, prevItm):
+        """
+        Private slot to handle the currentItemChanged signal of the association list.
+        
+        @param itm reference to the new current item (QTreeWidgetItem)
+        @param prevItm reference to the previous current item (QTreeWidgetItem)
+        """
+        if itm is None:
+            self.filePatternEdit.clear()
+            self.filetypeCombo.setCurrentIndex(0)
+            self.deleteAssociationButton.setEnabled(False)
+        else:
+            self.filePatternEdit.setText(itm.text(0))
+            self.filetypeCombo.setCurrentIndex(self.filetypeCombo.findText(itm.text(1)))
+            self.deleteAssociationButton.setEnabled(True)
+
+    @pyqtSlot()
+    def on_addAssociationButton_clicked(self):
+        """
+        Private slot to add the association displayed to the list.
+        """
+        pattern = self.filePatternEdit.text()
+        filetype = self.filetypeCombo.currentText()
+        if pattern:
+            items = self.filetypeAssociationList.findItems(\
+                pattern, Qt.MatchFlags(Qt.MatchExactly), 0)
+            for itm in items:
+                itm = self.filetypeAssociationList.takeTopLevelItem(\
+                    self.filetypeAssociationList.indexOfTopLevelItem(itm))
+                del itm
+            itm = self.__createItem(pattern, filetype)
+            self.__resort()
+            self.__reformat()
+            self.filePatternEdit.clear()
+            self.filetypeCombo.setCurrentIndex(0)
+            self.filetypeAssociationList.setCurrentItem(itm)
+
+    @pyqtSlot()
+    def on_deleteAssociationButton_clicked(self):
+        """
+        Private slot to delete the currently selected association of the listbox.
+        """
+        for itm in self.filetypeAssociationList.selectedItems():
+            itm = self.filetypeAssociationList.takeTopLevelItem(\
+                self.filetypeAssociationList.indexOfTopLevelItem(itm))
+            del itm
+            
+            self.filetypeAssociationList.clearSelection()
+            self.filePatternEdit.clear()
+            self.filetypeCombo.setCurrentIndex(0)
+
+    def on_filePatternEdit_textChanged(self, txt):
+        """
+        Private slot to handle the textChanged signal of the pattern lineedit.
+        
+        @param txt text of the lineedit (string)
+        """
+        if not txt:
+            self.addAssociationButton.setEnabled(False)
+            self.deleteAssociationButton.setEnabled(False)
+        else:
+            self.addAssociationButton.setEnabled(True)
+            if len(self.filetypeAssociationList.selectedItems()) == 0:
+                self.deleteAssociationButton.setEnabled(False)
+            else:
+                self.deleteAssociationButton.setEnabled(\
+                    self.filetypeAssociationList.selectedItems()[0].text(0) == txt)
+
+    def transferData(self):
+        """
+        Public slot to transfer the associations into the projects data structure.
+        """
+        self.project.pdata["FILETYPES"] = {}
+        for index in range(self.filetypeAssociationList.topLevelItemCount()):
+            itm = self.filetypeAssociationList.topLevelItem(index)
+            pattern = itm.text(0)
+            index = self.filetypeStrings.index(itm.text(1))
+            self.project.pdata["FILETYPES"][pattern] = self.filetypes[index]

eric ide

mercurial