--- /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()