Project/PropertiesDialog.py

changeset 0
de9c2efb9d02
child 7
c679fb30c8f3
diff -r 000000000000 -r de9c2efb9d02 Project/PropertiesDialog.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Project/PropertiesDialog.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,260 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2002 - 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the project properties dialog.
+"""
+
+import os
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+from E4Gui.E4Application import e4App
+
+from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter
+
+from Ui_PropertiesDialog import Ui_PropertiesDialog
+from TranslationPropertiesDialog import TranslationPropertiesDialog
+from SpellingPropertiesDialog import SpellingPropertiesDialog
+
+from VCS.RepositoryInfoDialog import VcsRepositoryInfoDialog
+
+import Preferences
+import Utilities
+
+class PropertiesDialog(QDialog, Ui_PropertiesDialog):
+    """
+    Class implementing the project properties dialog.
+    """
+    def __init__(self, project, new = True, parent = None, name = None):
+        """
+        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)
+        @param name name of this dialog (string)
+        """
+        QDialog.__init__(self, parent)
+        if name:
+            self.setObjectName(name)
+        self.setupUi(self)
+        
+        self.project = project
+        self.newProject = new
+        self.transPropertiesDlg = None
+        self.spellPropertiesDlg = None
+        
+        self.dirCompleter = E4DirCompleter(self.dirEdit)
+        self.mainscriptCompleter = E4FileCompleter(self.mainscriptEdit)
+        
+        projectLanguages = sorted(
+            e4App().getObject("DebugServer").getSupportedLanguages())
+        self.languageComboBox.addItems(projectLanguages)
+        
+        projectTypes = project.getProjectTypes()
+        for projectTypeKey in sorted(projectTypes.keys()):
+            self.projectTypeComboBox.addItem(projectTypes[projectTypeKey], 
+                                        QVariant(projectTypeKey))
+        
+        if not new:
+            name = os.path.splitext(self.project.pfile)[0]
+            self.nameEdit.setText(os.path.basename(name))
+            self.languageComboBox.setCurrentIndex(\
+                self.languageComboBox.findText(self.project.pdata["PROGLANGUAGE"][0]))
+            self.mixedLanguageCheckBox.setChecked(self.project.pdata["MIXEDLANGUAGE"][0])
+            try:
+                curIndex = \
+                    self.projectTypeComboBox.findText(\
+                        projectTypes[self.project.pdata["PROJECTTYPE"][0]])
+            except KeyError:
+                curIndex = -1
+            if curIndex == -1:
+                curIndex = self.projectTypeComboBox.findText(projectTypes["Qt4"])
+            self.projectTypeComboBox.setCurrentIndex(curIndex)
+            self.dirEdit.setText(self.project.ppath)
+            try:
+                self.versionEdit.setText(self.project.pdata["VERSION"][0])
+            except IndexError:
+                pass
+            try:
+                self.mainscriptEdit.setText(self.project.pdata["MAINSCRIPT"][0])
+            except IndexError:
+                pass
+            try:
+                self.authorEdit.setText(self.project.pdata["AUTHOR"][0])
+            except IndexError:
+                pass
+            try:
+                self.emailEdit.setText(self.project.pdata["EMAIL"][0])
+            except IndexError:
+                pass
+            try:
+                self.descriptionEdit.setPlainText(self.project.pdata["DESCRIPTION"][0])
+            except LookupError:
+                pass
+            self.vcsLabel.show()
+            if self.project.vcs is not None:
+                vcsSystemsDict = e4App().getObject("PluginManager")\
+                    .getPluginDisplayStrings("version_control")
+                try:
+                    vcsSystemDisplay = vcsSystemsDict[self.project.pdata["VCS"][0]]
+                except KeyError:
+                    vcsSystemDisplay = "None"
+                self.vcsLabel.setText(\
+                    self.trUtf8("The project is version controlled by <b>{0}</b>.")
+                    .format(vcsSystemDisplay))
+                self.vcsInfoButton.show()
+            else:
+                self.vcsLabel.setText(\
+                    self.trUtf8("The project is not version controlled."))
+                self.vcsInfoButton.hide()
+        else:
+            self.projectTypeComboBox.setCurrentIndex(\
+                self.projectTypeComboBox.findText(projectTypes["Qt4"]))
+            hp = os.getcwd()
+            hp = hp + os.sep
+            self.dirEdit.setText(hp)
+            self.versionEdit.setText('0.1')
+            self.vcsLabel.hide()
+            self.vcsInfoButton.hide()
+        
+    @pyqtSlot()
+    def on_dirButton_clicked(self):
+        """
+        Private slot to display a directory selection dialog.
+        """
+        directory = QFileDialog.getExistingDirectory(\
+            self,
+            self.trUtf8("Select project directory"),
+            self.dirEdit.text(),
+            QFileDialog.Options(QFileDialog.ShowDirsOnly))
+        
+        if directory:
+            self.dirEdit.setText(Utilities.toNativeSeparators(directory))
+        
+    @pyqtSlot()
+    def on_spellPropertiesButton_clicked(self):
+        """
+        Private slot to display the spelling properties dialog.
+        """
+        if self.spellPropertiesDlg is None:
+            self.spellPropertiesDlg = \
+                SpellingPropertiesDialog(self.project, self.newProject, self)
+        res = self.spellPropertiesDlg.exec_()
+        if res == QDialog.Rejected:
+            self.spellPropertiesDlg.initDialog() # reset the dialogs contents
+        
+    @pyqtSlot()
+    def on_transPropertiesButton_clicked(self):
+        """
+        Private slot to display the translations properties dialog.
+        """
+        if self.transPropertiesDlg is None:
+            self.transPropertiesDlg = \
+                TranslationPropertiesDialog(self.project, self.newProject, self)
+        else:
+            self.transPropertiesDlg.initFilters()
+        res = self.transPropertiesDlg.exec_()
+        if res == QDialog.Rejected:
+            self.transPropertiesDlg.initDialog() # reset the dialogs contents
+        
+    @pyqtSlot()
+    def on_mainscriptButton_clicked(self):
+        """
+        Private slot to display a file selection dialog.
+        """
+        dir = self.dirEdit.text()
+        if not dir:
+            dir = QDir.currentPath()
+        patterns = []
+        for pattern, filetype in self.project.pdata["FILETYPES"].items():
+            if filetype == "SOURCES":
+                patterns.append(pattern)
+        filters = self.trUtf8("Source Files ({0});;All Files (*)")\
+            .format(" ".join(patterns))
+        fn = QFileDialog.getOpenFileName(\
+            self,
+            self.trUtf8("Select main script file"),
+            dir,
+            filters)
+        
+        if fn:
+            ppath = self.dirEdit.text()
+            if ppath:
+                ppath = QDir(ppath).absolutePath()
+                ppath.append(QDir.separator())
+                fn.replace(ppath, "")
+            self.mainscriptEdit.setText(Utilities.toNativeSeparators(fn))
+        
+    @pyqtSlot()
+    def on_vcsInfoButton_clicked(self):
+        """
+        Private slot to display a vcs information dialog.
+        """
+        if self.project.vcs is None:
+            return
+            
+        info = self.project.vcs.vcsRepositoryInfos(self.project.ppath)
+        dlg = VcsRepositoryInfoDialog(self, info)
+        dlg.exec_()
+        
+    def getProjectType(self):
+        """
+        Public method to get the selected project type.
+        
+        @return selected UI type (string)
+        """
+        data = self.projectTypeComboBox.itemData(self.projectTypeComboBox.currentIndex())
+        return data.toString()
+        
+    def getPPath(self):
+        """
+        Public method to get the project path.
+        
+        @return data of the project directory edit (string)
+        """
+        return os.path.abspath(self.dirEdit.text())
+        
+    def storeData(self):
+        """
+        Public method to store the entered/modified data.
+        """
+        self.project.ppath = os.path.abspath(self.dirEdit.text())
+        fn = self.nameEdit.text()
+        if fn:
+            self.project.name = fn
+            if Preferences.getProject("CompressedProjectFiles"):
+                fn = "%s.e4pz" % fn
+            else:
+                fn = "%s.e4p" % fn
+            self.project.pfile = os.path.join(self.project.ppath, fn)
+        else:
+            self.project.pfile = ""
+        self.project.pdata["VERSION"] = [self.versionEdit.text()]
+        fn = self.mainscriptEdit.text()
+        if fn:
+            fn = fn.replace(self.project.ppath+os.sep, "")
+            self.project.pdata["MAINSCRIPT"] = [fn]
+            self.project.translationsRoot = os.path.splitext(fn)[0]
+        else:
+            self.project.pdata["MAINSCRIPT"] = []
+            self.project.translationsRoot = ""
+        self.project.pdata["AUTHOR"] = [self.authorEdit.text()]
+        self.project.pdata["EMAIL"] = [self.emailEdit.text()]
+        self.project.pdata["DESCRIPTION"] = [self.descriptionEdit.toPlainText()]
+        self.project.pdata["PROGLANGUAGE"] = \
+            [self.languageComboBox.currentText()]
+        self.project.pdata["MIXEDLANGUAGE"] = [self.mixedLanguageCheckBox.isChecked()]
+        projectType = self.getProjectType()
+        if projectType is not None:
+            self.project.pdata["PROJECTTYPE"] = [projectType]
+        
+        if self.spellPropertiesDlg is not None:
+            self.spellPropertiesDlg.storeData()
+        
+        if self.transPropertiesDlg is not None:
+            self.transPropertiesDlg.storeData()

eric ide

mercurial