Project/TranslationPropertiesDialog.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
diff -r 000000000000 -r de9c2efb9d02 Project/TranslationPropertiesDialog.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Project/TranslationPropertiesDialog.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,221 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2006 - 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Translations Properties dialog.
+"""
+
+import os
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter
+
+from Ui_TranslationPropertiesDialog import Ui_TranslationPropertiesDialog
+
+import Utilities
+
+class TranslationPropertiesDialog(QDialog, Ui_TranslationPropertiesDialog):
+    """
+    Class implementing the Translations Properties dialog.
+    """
+    def __init__(self, project, new, parent):
+        """
+        Constructor
+        
+        @param project reference to the project object
+        @param new flag indicating the generation of a new project
+        @param parent parent widget of this dialog (QWidget)
+        """
+        QDialog.__init__(self, parent)
+        self.setupUi(self)
+        
+        self.project = project
+        self.parent = parent
+        
+        self.transPatternCompleter = E4FileCompleter(self.transPatternEdit)
+        self.transBinPathCompleter = E4DirCompleter(self.transBinPathEdit)
+        self.exceptionCompleter = E4FileCompleter(self.exceptionEdit)
+        
+        self.initFilters()
+        if not new:
+            self.initDialog()
+        
+    def initFilters(self):
+        """
+        Public method to initialize the filters.
+        """
+        patterns = {
+            "SOURCES"    : [], 
+            "FORMS"      : [], 
+        }
+        for pattern, filetype in self.project.pdata["FILETYPES"].items():
+            if filetype in patterns:
+                patterns[filetype].append(pattern)
+        self.filters = self.trUtf8("Source Files ({0});;")\
+            .format(" ".join(patterns["SOURCES"]))
+        if self.parent.getProjectType() in ["Qt4", "E4Plugin", "PySide"]:
+            self.filters += self.trUtf8("Forms Files ({0});;")\
+                .format(" ".join(patterns["FORMS"]))
+        self.filters += self.trUtf8("All Files (*)")
+        
+    def initDialog(self):
+        """
+        Public method to initialize the dialogs data.
+        """
+        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
+        try:
+            self.transPatternEdit.setText(os.path.join(\
+                self.project.ppath, self.project.pdata["TRANSLATIONPATTERN"][0]))
+        except IndexError:
+            pass
+        try:
+            self.transBinPathEdit.setText(os.path.join(\
+                self.project.ppath, self.project.pdata["TRANSLATIONSBINPATH"][0]))
+        except IndexError:
+            pass
+        self.exceptionsList.clear()
+        for texcept in self.project.pdata["TRANSLATIONEXCEPTIONS"]:
+            if texcept:
+                self.exceptionsList.addItem(texcept)
+        
+    @pyqtSlot()
+    def on_transPatternButton_clicked(self):
+        """
+        Private slot to display a file selection dialog.
+        """
+        tp = self.transPatternEdit.text()
+        if "%language%" in tp:
+            tp = tp.split("%language%")[0]
+        tsfile = QFileDialog.getOpenFileName(\
+            self,
+            self.trUtf8("Select translation file"),
+            tp,
+            "")
+        
+        if tsfile:
+            self.transPatternEdit.setText(Utilities.toNativeSeparators(tsfile))
+        
+    @pyqtSlot(str)
+    def on_transPatternEdit_textChanged(self, txt):
+        """
+        Private slot to check the translation pattern for correctness.
+        
+        @param txt text of the transPatternEdit lineedit (string)
+        """
+        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(
+            "%language%" in txt)
+        
+    @pyqtSlot()
+    def on_transBinPathButton_clicked(self):
+        """
+        Private slot to display a directory selection dialog.
+        """
+        directory = QFileDialog.getExistingDirectory(\
+            self,
+            self.trUtf8("Select directory for binary translations"),
+            self.transBinPathEdit.text(),
+            QFileDialog.Options(QFileDialog.Option(0)))
+        
+        if directory:
+            self.transBinPathEdit.setText(Utilities.toNativeSeparators(directory))
+        
+    @pyqtSlot()
+    def on_deleteExceptionButton_clicked(self):
+        """
+        Private slot to delete the currently selected entry of the listwidget.
+        """
+        row = self.exceptionsList.currentRow()
+        itm = self.exceptionsList.takeItem(row)
+        del itm
+        row = self.exceptionsList.currentRow()
+        self.on_exceptionsList_currentRowChanged(row)
+        
+    @pyqtSlot()
+    def on_addExceptionButton_clicked(self):
+        """
+        Private slot to add the shown exception to the listwidget.
+        """
+        if self.project.ppath == '':
+            ppath = self.parent.getPPath()
+        else:
+            ppath = self.project.ppath
+        texcept = self.exceptionEdit.text()
+        texcept = texcept.replace(ppath + os.sep, "")
+        if texcept.endswith(os.sep):
+            texcept = texcept[:-1]
+        if texcept:
+            QListWidgetItem(texcept, self.exceptionsList)
+            self.exceptionEdit.clear()
+        row = self.exceptionsList.currentRow()
+        self.on_exceptionsList_currentRowChanged(row)
+        
+    @pyqtSlot()
+    def on_exceptFileButton_clicked(self):
+        """
+        Private slot to select a file to exempt from translation.
+        """
+        texcept = QFileDialog.getOpenFileName(\
+            self,
+            self.trUtf8("Exempt file from translation"),
+            self.project.ppath,
+            self.filters)
+        if texcept:
+            self.exceptionEdit.setText(Utilities.toNativeSeparators(texcept))
+        
+    @pyqtSlot()
+    def on_exceptDirButton_clicked(self):
+        """
+        Private slot to select a file to exempt from translation.
+        """
+        texcept = QFileDialog.getExistingDirectory(\
+            self,
+            self.trUtf8("Exempt directory from translation"),
+            self.project.ppath,
+            QFileDialog.Options(QFileDialog.ShowDirsOnly))
+        if texcept:
+            self.exceptionEdit.setText(Utilities.toNativeSeparators(texcept))
+        
+    def on_exceptionsList_currentRowChanged(self, row):
+        """
+        Private slot to handle the currentRowChanged signal of the exceptions list.
+        
+        @param row the current row (integer)
+        """
+        if row == -1:
+            self.deleteExceptionButton.setEnabled(False)
+        else:
+            self.deleteExceptionButton.setEnabled(True)
+        
+    def on_exceptionEdit_textChanged(self, txt):
+        """
+        Private slot to handle the textChanged signal of the exception edit.
+        
+        @param txt the text of the exception edit (string)
+        """
+        self.addExceptionButton.setEnabled(txt != "")
+        
+    def storeData(self):
+        """
+        Public method to store the entered/modified data.
+        """
+        tp = Utilities.toNativeSeparators(self.transPatternEdit.text())
+        if tp:
+            tp = tp.replace(self.project.ppath + os.sep, "")
+            self.project.pdata["TRANSLATIONPATTERN"] = [tp]
+            self.project.translationsRoot = tp.split("%language%")[0]
+        else:
+            self.project.pdata["TRANSLATIONPATTERN"] = []
+        tp = Utilities.toNativeSeparators(self.transBinPathEdit.text())
+        if tp:
+            tp = tp.replace(self.project.ppath + os.sep, "")
+            self.project.pdata["TRANSLATIONSBINPATH"] = [tp]
+        else:
+            self.project.pdata["TRANSLATIONSBINPATH"] = []
+        exceptList = []
+        for i in range(self.exceptionsList.count()):
+            exceptList.append(self.exceptionsList.item(i).text())
+        self.project.pdata["TRANSLATIONEXCEPTIONS"] = exceptList[:]

eric ide

mercurial