Sat, 20 Mar 2010 13:14:35 +0000
Fixed a bug in the QFileDialog wizard.
# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2010 Detlev Offenbach <detlev@die-offenbachs.de> # """ Module implementing the file dialog wizard dialog. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from E5Gui.E5Completers import E5FileCompleter, E5DirCompleter from .Ui_FileDialogWizardDialog import Ui_FileDialogWizardDialog class FileDialogWizardDialog(QDialog, Ui_FileDialogWizardDialog): """ Class implementing the color dialog wizard dialog. It displays a dialog for entering the parameters for the QFileDialog code generator. """ def __init__(self, parent=None): """ Constructor @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.eStartWithCompleter = E5FileCompleter(self.eStartWith) self.eWorkDirCompleter = E5DirCompleter(self.eWorkDir) self.connect(self.rSaveFile, SIGNAL("toggled(bool)"), self.__toggleConfirmCheckBox) self.connect(self.rfSaveFile, SIGNAL("toggled(bool)"), self.__toggleConfirmCheckBox) self.connect(self.rDirectory, SIGNAL("toggled(bool)"), self.__toggleGroupsAndTest) self.connect(self.cStartWith, SIGNAL("toggled(bool)"), self.__toggleGroupsAndTest) self.connect(self.cWorkDir, SIGNAL("toggled(bool)"), self.__toggleGroupsAndTest) self.connect(self.cFilters, SIGNAL("toggled(bool)"), self.__toggleGroupsAndTest) self.bTest = \ self.buttonBox.addButton(self.trUtf8("Test"), QDialogButtonBox.ActionRole) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.bTest: self.on_bTest_clicked() @pyqtSlot() def on_bTest_clicked(self): """ Private method to test the selected options. """ if self.rOpenFile.isChecked() or self.rfOpenFile.isChecked(): if not self.cSymlinks.isChecked(): options = QFileDialog.Options(QFileDialog.DontResolveSymlinks) else: options = QFileDialog.Options() QFileDialog.getOpenFileName(\ None, self.eCaption.text(), self.eStartWith.text(), self.eFilters.text(), options) elif self.rOpenFiles.isChecked() or self.rfOpenFiles.isChecked(): if not self.cSymlinks.isChecked(): options = QFileDialog.Options(QFileDialog.DontResolveSymlinks) else: options = QFileDialog.Options() QFileDialog.getOpenFileNames(\ None, self.eCaption.text(), self.eStartWith.text(), self.eFilters.text(), options) elif self.rSaveFile.isChecked() or self.rfSaveFile.isChecked(): if not self.cSymlinks.isChecked(): options = QFileDialog.Options(QFileDialog.DontResolveSymlinks) else: options = QFileDialog.Options() QFileDialog.getSaveFileName(\ None, self.eCaption.text(), self.eStartWith.text(), self.eFilters.text(), options) elif self.rDirectory.isChecked(): options = QFileDialog.Options() if not self.cSymlinks.isChecked(): options |= QFileDialog.Options(QFileDialog.DontResolveSymlinks) if self.cDirOnly.isChecked(): options |= QFileDialog.Options(QFileDialog.ShowDirsOnly) else: options |= QFileDialog.Options(QFileDialog.Option(0)) QFileDialog.getExistingDirectory(\ None, self.eCaption.text(), self.eWorkDir.text(), options) def __toggleConfirmCheckBox(self): """ Private slot to enable/disable the confirmation check box. """ self.cConfirmOverwrite.setEnabled( self.rSaveFile.isChecked() or self.rfSaveFile.isChecked()) def __toggleGroupsAndTest(self): """ Private slot to enable/disable certain groups and the test button. """ if self.rDirectory.isChecked(): self.filePropertiesGroup.setEnabled(False) self.dirPropertiesGroup.setEnabled(True) self.bTest.setDisabled(self.cWorkDir.isChecked()) else: self.filePropertiesGroup.setEnabled(True) self.dirPropertiesGroup.setEnabled(False) self.bTest.setDisabled(\ self.cStartWith.isChecked() or self.cFilters.isChecked()) def __getCode4(self, indLevel, indString): """ Private method to get the source code for Qt4. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ # calculate our indentation level and the indentation string il = indLevel + 1 istring = il * indString # now generate the code code = 'QFileDialog.' if self.rOpenFile.isChecked() or self.rfOpenFile.isChecked(): if self.rOpenFile.isChecked(): code += 'getOpenFileName(\\%s%s' % (os.linesep, istring) else: code += 'getOpenFileNameAndFilter(\\%s%s' % (os.linesep, istring) code += 'None,%s%s' % (os.linesep, istring) if not self.eCaption.text(): code += '"",%s%s' % (os.linesep, istring) else: code += 'self.trUtf8("%s"),%s%s' % \ (self.eCaption.text(), os.linesep, istring) if not self.eStartWith.text(): code += '"",%s%s' % (os.linesep, istring) else: if self.cStartWith.isChecked(): fmt = '%s,%s%s' else: fmt = 'self.trUtf8("%s"),%s%s' code += fmt % (self.eStartWith.text(), os.linesep, istring) if self.eFilters.text() == "": code += '""' else: if self.cFilters.isChecked(): fmt = '%s' else: fmt = 'self.trUtf8("%s")' code += fmt % self.eFilters.text() if self.rfOpenFile.isChecked(): code += ',%s%sNone' % (os.linesep, istring) if not self.cSymlinks.isChecked(): code += ',%s%sQFileDialog.Options(QFileDialog.DontResolveSymlinks)' % \ (os.linesep, istring) code += ')%s' % os.linesep elif self.rOpenFiles.isChecked() or self.rfOpenFiles.isChecked(): if self.rOpenFiles.isChecked(): code += 'getOpenFileNames(\\%s%s' % (os.linesep, istring) else: code += 'getOpenFileNamesAndFilter(\\%s%s' % (os.linesep, istring) code += 'None,%s%s' % (os.linesep, istring) if not self.eCaption.text(): code += '"",%s%s' % (os.linesep, istring) else: code += 'self.trUtf8("%s"),%s%s' % \ (self.eCaption.text(), os.linesep, istring) if not self.eStartWith.text(): code += '"",%s%s' % (os.linesep, istring) else: if self.cStartWith.isChecked(): fmt = '%s,%s%s' else: fmt = 'self.trUtf8("%s"),%s%s' code += fmt % (self.eStartWith.text(), os.linesep, istring) if not self.eFilters.text(): code += '""' else: if self.cFilters.isChecked(): fmt = '%s' else: fmt = 'self.trUtf8("%s")' code += fmt % self.eFilters.text() if self.rfOpenFiles.isChecked(): code += ',%s%sNone' % (os.linesep, istring) if not self.cSymlinks.isChecked(): code += ',%s%sQFileDialog.Options(QFileDialog.DontResolveSymlinks)' % \ (os.linesep, istring) code += ')%s' % os.linesep elif self.rSaveFile.isChecked() or self.rfSaveFile.isChecked(): if self.rSaveFile.isChecked(): code += 'getSaveFileName(\\%s%s' % (os.linesep, istring) else: code += 'getSaveFileNameAndFilter(\\%s%s' % (os.linesep, istring) code += 'None,%s%s' % (os.linesep, istring) if not self.eCaption.text(): code += '"",%s%s' % (os.linesep, istring) else: code += 'self.trUtf8("%s"),%s%s' % \ (self.eCaption.text(), os.linesep, istring) if not self.eStartWith.text(): code += '"",%s%s' % (os.linesep, istring) else: if self.cStartWith.isChecked(): fmt = '%s,%s%s' else: fmt = 'self.trUtf8("%s"),%s%s' code += fmt % (self.eStartWith.text(), os.linesep, istring) if not self.eFilters.text(): code += '""' else: if self.cFilters.isChecked(): fmt = '%s' else: fmt = 'self.trUtf8("%s")' code += fmt % self.eFilters.text() if self.rfSaveFile.isChecked(): code += ',%s%sNone' % (os.linesep, istring) if (not self.cSymlinks.isChecked()) or \ (not self.cConfirmOverwrite.isChecked()): code += ',%s%sQFileDialog.Options(' % (os.linesep, istring) if not self.cSymlinks.isChecked(): code += 'QFileDialog.DontResolveSymlinks' if (not self.cSymlinks.isChecked()) and \ (not self.cConfirmOverwrite.isChecked()): code += ' | ' if not self.cConfirmOverwrite.isChecked(): code += 'QFileDialog.DontConfirmOverwrite' code += ')' code += ')%s' % os.linesep elif self.rDirectory.isChecked(): code += 'getExistingDirectory(\\%s%s' % (os.linesep, istring) code += 'None,%s%s' % (os.linesep, istring) if not self.eCaption.text(): code += '"",%s%s' % (os.linesep, istring) else: code += 'self.trUtf8("%s"),%s%s' % \ (self.eCaption.text(), os.linesep, istring) if not self.eWorkDir.text(): code += '""' else: if self.cWorkDir.isChecked(): fmt = '%s' else: fmt = 'self.trUtf8("%s")' code += fmt % self.eWorkDir.text() code += ',%s%sQFileDialog.Options(' % (os.linesep, istring) if not self.cSymlinks.isChecked(): code += 'QFileDialog.DontResolveSymlinks | ' if self.cDirOnly.isChecked(): code += 'QFileDialog.ShowDirsOnly' else: code += 'QFileDialog.Option(0)' code += '))%s' % os.linesep return code def getCode(self, indLevel, indString): """ Public method to get the source code. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ return self.__getCode4(indLevel, indString)