1# -*- coding: utf-8 -*- 2 3# Copyright (c) 2003 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> 4# 5 6""" 7Module implementing the file dialog wizard dialog. 8""" 9 10import os 11 12from PyQt5.QtCore import pyqtSlot, QUrl 13from PyQt5.QtWidgets import ( 14 QDialog, QDialogButtonBox, QFileDialog, QButtonGroup 15) 16 17from E5Gui.E5Completers import E5FileCompleter, E5DirCompleter 18 19from .Ui_FileDialogWizardDialog import Ui_FileDialogWizardDialog 20 21import Globals 22 23 24class FileDialogWizardDialog(QDialog, Ui_FileDialogWizardDialog): 25 """ 26 Class implementing the color dialog wizard dialog. 27 28 It displays a dialog for entering the parameters for the 29 E5FileDialog or QFileDialog code generator. 30 """ 31 def __init__(self, dialogVariant, parent=None): 32 """ 33 Constructor 34 35 @param dialogVariant variant of the file dialog to be generated 36 (-1 = E5FileDialog, 0 = unknown, 5 = PyQt5) 37 @type int 38 @param parent parent widget 39 @type QWidget 40 """ 41 super().__init__(parent) 42 self.setupUi(self) 43 44 self.eStartWithCompleter = E5FileCompleter(self.eStartWith) 45 self.eWorkDirCompleter = E5DirCompleter(self.eWorkDir) 46 47 self.__dialogVariant = dialogVariant 48 49 self.__typeButtonsGroup = QButtonGroup(self) 50 self.__typeButtonsGroup.setExclusive(True) 51 self.__typeButtonsGroup.addButton(self.rOpenFile, 1) 52 self.__typeButtonsGroup.addButton(self.rOpenFiles, 2) 53 self.__typeButtonsGroup.addButton(self.rSaveFile, 3) 54 self.__typeButtonsGroup.addButton(self.rfOpenFile, 11) 55 self.__typeButtonsGroup.addButton(self.rfOpenFiles, 12) 56 self.__typeButtonsGroup.addButton(self.rfSaveFile, 13) 57 self.__typeButtonsGroup.addButton(self.rOpenFileUrl, 21) 58 self.__typeButtonsGroup.addButton(self.rOpenFileUrls, 22) 59 self.__typeButtonsGroup.addButton(self.rSaveFileUrl, 23) 60 self.__typeButtonsGroup.addButton(self.rDirectory, 30) 61 self.__typeButtonsGroup.addButton(self.rDirectoryUrl, 31) 62 self.__typeButtonsGroup.buttonClicked[int].connect( 63 self.__toggleInitialFilterAndResult) 64 self.__toggleInitialFilterAndResult(1) 65 66 if self.__dialogVariant == -1: 67 self.pyqtComboBox.addItems(["eric"]) 68 self.setWindowTitle(self.tr("E5FileDialog Wizard")) 69 self.pyqtComboBox.setCurrentIndex(0) 70 self.pyqtComboBox.setEnabled(False) 71 else: 72 self.pyqtComboBox.addItems(["PyQt5", "PyQt6"]) 73 self.setWindowTitle(self.tr("QFileDialog Wizard")) 74 if self.__dialogVariant == 5: 75 self.pyqtComboBox.setCurrentIndex(0) 76 elif self.__dialogVariant == 6: 77 self.pyqtComboBox.setCurrentIndex(1) 78 else: 79 self.pyqtComboBox.setCurrentIndex(0) 80 81 self.rSaveFile.toggled[bool].connect(self.__toggleConfirmCheckBox) 82 self.rfSaveFile.toggled[bool].connect(self.__toggleConfirmCheckBox) 83 self.rSaveFileUrl.toggled[bool].connect(self.__toggleConfirmCheckBox) 84 self.rDirectory.toggled[bool].connect(self.__toggleGroupsAndTest) 85 self.rDirectoryUrl.toggled[bool].connect(self.__toggleGroupsAndTest) 86 self.cStartWith.toggled[bool].connect(self.__toggleGroupsAndTest) 87 self.cWorkDir.toggled[bool].connect(self.__toggleGroupsAndTest) 88 self.cFilters.toggled[bool].connect(self.__toggleGroupsAndTest) 89 90 self.bTest = self.buttonBox.addButton( 91 self.tr("Test"), QDialogButtonBox.ButtonRole.ActionRole) 92 93 msh = self.minimumSizeHint() 94 self.resize(max(self.width(), msh.width()), msh.height()) 95 96 def __adjustOptions(self, options): 97 """ 98 Private method to adjust the file dialog options. 99 100 @param options file dialog options (QFileDialog.Options) 101 @return modified options (QFileDialog.Options) 102 """ 103 if Globals.isLinuxPlatform(): 104 options |= QFileDialog.Option.DontUseNativeDialog 105 return options 106 107 @pyqtSlot(int) 108 def on_pyqtComboBox_currentIndexChanged(self, index): 109 """ 110 Private slot to setup the dialog for the selected PyQt variant. 111 112 @param index index of the current item 113 @type int 114 """ 115 txt = self.pyqtComboBox.itemText(index) 116 self.rfOpenFile.setEnabled(txt == "eric") 117 self.rfOpenFiles.setEnabled(txt == "eric") 118 self.rfSaveFile.setEnabled(txt == "eric") 119 120 self.rOpenFileUrl.setEnabled(txt in ["PyQt5", "PyQt6"]) 121 self.rOpenFileUrls.setEnabled(txt in ["PyQt5", "PyQt6"]) 122 self.rSaveFileUrl.setEnabled(txt in ["PyQt5", "PyQt6"]) 123 self.rDirectoryUrl.setEnabled(txt in ["PyQt5", "PyQt6"]) 124 125 if txt in ["PyQt5", "PyQt6"]: 126 if self.rfOpenFile.isChecked(): 127 self.rOpenFile.setChecked(True) 128 elif self.rfOpenFiles.isChecked(): 129 self.rOpenFiles.setChecked(True) 130 elif self.rfSaveFile.isChecked(): 131 self.rSaveFile.setChecked(True) 132 else: 133 if self.rOpenFileUrl.isChecked(): 134 self.rOpenFile.setChecked(True) 135 if self.rOpenFileUrls.isChecked(): 136 self.rOpenFiles.setChecked(True) 137 if self.rSaveFileUrl.isChecked(): 138 self.rSaveFile.setChecked(True) 139 if self.rDirectoryUrl.isChecked(): 140 self.rDirectory.setChecked(True) 141 142 if txt == "eric": 143 self.__dialogVariant = -1 144 elif txt == "PyQt5": 145 self.__dialogVariant = 5 146 elif txt == "PyQt6": 147 self.__dialogVariant = 6 148 else: 149 # default is PyQt5 150 self.__dialogVariant = 5 151 152 self.__toggleInitialFilterAndResult( 153 self.__typeButtonsGroup.checkedId()) 154 155 def on_buttonBox_clicked(self, button): 156 """ 157 Private slot called by a button of the button box clicked. 158 159 @param button button that was clicked (QAbstractButton) 160 """ 161 if button == self.bTest: 162 self.on_bTest_clicked() 163 164 @pyqtSlot() 165 def on_bTest_clicked(self): 166 """ 167 Private method to test the selected options. 168 """ 169 if self.rOpenFile.isChecked() or self.rfOpenFile.isChecked(): 170 if not self.cSymlinks.isChecked(): 171 options = QFileDialog.Options( 172 QFileDialog.Option.DontResolveSymlinks) 173 else: 174 options = QFileDialog.Options() 175 options = self.__adjustOptions(options) 176 QFileDialog.getOpenFileName( 177 None, 178 self.eCaption.text(), 179 self.eStartWith.text(), 180 self.eFilters.text(), 181 self.eInitialFilter.text(), 182 options) 183 elif self.rOpenFileUrl.isChecked(): 184 if not self.cSymlinks.isChecked(): 185 options = QFileDialog.Options( 186 QFileDialog.Option.DontResolveSymlinks) 187 else: 188 options = QFileDialog.Options() 189 options = self.__adjustOptions(options) 190 try: 191 QFileDialog.getOpenFileUrl( 192 None, 193 self.eCaption.text(), 194 QUrl(self.eStartWith.text()), 195 self.eFilters.text(), 196 self.eInitialFilter.text(), 197 options, 198 self.schemesEdit.text().split()) 199 except TypeError: 200 # PyQt5 < 5.13.0 contains an error 201 QFileDialog.getOpenFileUrl( 202 None, 203 self.eCaption.text(), 204 self.eStartWith.text(), 205 self.eFilters.text(), 206 self.eInitialFilter.text(), 207 options, 208 self.schemesEdit.text().split()) 209 elif self.rOpenFiles.isChecked() or self.rfOpenFiles.isChecked(): 210 if not self.cSymlinks.isChecked(): 211 options = QFileDialog.Options( 212 QFileDialog.Option.DontResolveSymlinks) 213 else: 214 options = QFileDialog.Options() 215 options = self.__adjustOptions(options) 216 QFileDialog.getOpenFileNames( 217 None, 218 self.eCaption.text(), 219 self.eStartWith.text(), 220 self.eFilters.text(), 221 self.eInitialFilter.text(), 222 options) 223 elif self.rOpenFileUrls.isChecked(): 224 if not self.cSymlinks.isChecked(): 225 options = QFileDialog.Options( 226 QFileDialog.Option.DontResolveSymlinks) 227 else: 228 options = QFileDialog.Options() 229 options = self.__adjustOptions(options) 230 try: 231 QFileDialog.getOpenFileUrls( 232 None, 233 self.eCaption.text(), 234 QUrl(self.eStartWith.text()), 235 self.eFilters.text(), 236 self.eInitialFilter.text(), 237 options, 238 self.schemesEdit.text().split()) 239 except TypeError: 240 # PyQt5 < 5.13.0 contains an error 241 QFileDialog.getOpenFileUrls( 242 None, 243 self.eCaption.text(), 244 self.eStartWith.text(), 245 self.eFilters.text(), 246 self.eInitialFilter.text(), 247 options, 248 self.schemesEdit.text().split()) 249 elif self.rSaveFile.isChecked() or self.rfSaveFile.isChecked(): 250 if not self.cSymlinks.isChecked(): 251 options = QFileDialog.Options( 252 QFileDialog.Option.DontResolveSymlinks) 253 else: 254 options = QFileDialog.Options() 255 options = self.__adjustOptions(options) 256 QFileDialog.getSaveFileName( 257 None, 258 self.eCaption.text(), 259 self.eStartWith.text(), 260 self.eFilters.text(), 261 self.eInitialFilter.text(), 262 options) 263 elif self.rSaveFileUrl.isChecked(): 264 if not self.cSymlinks.isChecked(): 265 options = QFileDialog.Options( 266 QFileDialog.Option.DontResolveSymlinks) 267 else: 268 options = QFileDialog.Options() 269 options = self.__adjustOptions(options) 270 try: 271 QFileDialog.getSaveFileUrl( 272 None, 273 self.eCaption.text(), 274 QUrl(self.eStartWith.text()), 275 self.eFilters.text(), 276 self.eInitialFilter.text(), 277 options, 278 self.schemesEdit.text().split()) 279 except TypeError: 280 # PyQt5 < 5.13.0 contains an error 281 QFileDialog.getSaveFileUrl( 282 None, 283 self.eCaption.text(), 284 self.eStartWith.text(), 285 self.eFilters.text(), 286 self.eInitialFilter.text(), 287 options, 288 self.schemesEdit.text().split()) 289 elif self.rDirectory.isChecked(): 290 options = QFileDialog.Options() 291 if not self.cSymlinks.isChecked(): 292 options |= QFileDialog.Options( 293 QFileDialog.Option.DontResolveSymlinks) 294 if self.cDirOnly.isChecked(): 295 options |= QFileDialog.Options(QFileDialog.Option.ShowDirsOnly) 296 else: 297 options |= QFileDialog.Options(QFileDialog.Option(0)) 298 options = self.__adjustOptions(options) 299 QFileDialog.getExistingDirectory( 300 None, 301 self.eCaption.text(), 302 self.eWorkDir.text(), 303 options) 304 elif self.rDirectoryUrl.isChecked(): 305 options = QFileDialog.Options() 306 if not self.cSymlinks.isChecked(): 307 options |= QFileDialog.Options( 308 QFileDialog.Option.DontResolveSymlinks) 309 if self.cDirOnly.isChecked(): 310 options |= QFileDialog.Options(QFileDialog.Option.ShowDirsOnly) 311 else: 312 options |= QFileDialog.Options(QFileDialog.Option(0)) 313 options = self.__adjustOptions(options) 314 try: 315 QFileDialog.getExistingDirectoryUrl( 316 None, 317 self.eCaption.text(), 318 QUrl(self.eWorkDir.text()), 319 options, 320 self.schemesEdit.text().split()) 321 except TypeError: 322 # PyQt5 < 5.13.0 contains an error 323 QFileDialog.getExistingDirectoryUrl( 324 None, 325 self.eCaption.text(), 326 self.eWorkDir.text(), 327 options, 328 self.schemesEdit.text().split()) 329 330 def __toggleConfirmCheckBox(self): 331 """ 332 Private slot to enable/disable the confirmation check box. 333 """ 334 self.cConfirmOverwrite.setEnabled( 335 self.rSaveFile.isChecked() or self.rfSaveFile.isChecked() or 336 self.rSaveFileUrl.isChecked()) 337 338 def __toggleGroupsAndTest(self): 339 """ 340 Private slot to enable/disable certain groups and the test button. 341 """ 342 if self.rDirectory.isChecked() or self.rDirectoryUrl.isChecked(): 343 self.filePropertiesGroup.setEnabled(False) 344 self.dirPropertiesGroup.setEnabled(True) 345 self.bTest.setDisabled(self.cWorkDir.isChecked()) 346 else: 347 self.filePropertiesGroup.setEnabled(True) 348 self.dirPropertiesGroup.setEnabled(False) 349 self.bTest.setDisabled( 350 self.cStartWith.isChecked() or self.cFilters.isChecked()) 351 352 def __toggleInitialFilterAndResult(self, checkedId): 353 """ 354 Private slot to enable/disable the initial filter elements and the 355 results entries. 356 357 @param checkedId id of the clicked button (integer) 358 """ 359 enable = ( 360 (self.__dialogVariant in (-1, ) and checkedId in [11, 12, 13]) or 361 (self.__dialogVariant in (5, 6) and 362 checkedId in [1, 2, 3, 21, 22, 23]) 363 ) 364 365 self.lInitialFilter.setEnabled(enable) 366 self.eInitialFilter.setEnabled(enable) 367 self.cInitialFilter.setEnabled(enable) 368 369 self.lFilterVariable.setEnabled(enable) 370 self.eFilterVariable.setEnabled(enable) 371 372 self.urlPropertiesGroup.setEnabled(checkedId in (21, 22, 23, 31)) 373 374 def getCode(self, indLevel, indString): 375 """ 376 Public method to get the source code for Qt5. 377 378 @param indLevel indentation level (int) 379 @param indString string used for indentation (space or tab) (string) 380 @return generated code (string) 381 """ 382 # calculate our indentation level and the indentation string 383 il = indLevel + 1 384 istring = il * indString 385 estring = os.linesep + indLevel * indString 386 387 # now generate the code 388 if self.parentSelf.isChecked(): 389 parent = "self" 390 elif self.parentNone.isChecked(): 391 parent = "None" 392 elif self.parentOther.isChecked(): 393 parent = self.parentEdit.text() 394 if parent == "": 395 parent = "None" 396 397 # prepare the result variables 398 nameVariable = self.eNameVariable.text() 399 if not nameVariable: 400 if self.__typeButtonsGroup.checkedButton() in [ 401 self.rOpenFile, self.rfOpenFile, 402 self.rSaveFile, self.rfSaveFile]: 403 nameVariable = "fileName" 404 elif self.__typeButtonsGroup.checkedButton() in [ 405 self.rOpenFiles, self.rfOpenFiles]: 406 nameVariable = "fileNames" 407 elif self.__typeButtonsGroup.checkedButton() == self.rDirectory: 408 nameVariable = "dirName" 409 else: 410 nameVariable = "res" 411 filterVariable = self.eFilterVariable.text() 412 if not filterVariable: 413 if ( 414 (self.__dialogVariant in (-1, ) and 415 self.__typeButtonsGroup.checkedButton() in [ 416 self.rfOpenFile, self.rfOpenFiles, self.rfSaveFile]) or 417 (self.__dialogVariant in (5, 6) and 418 self.__typeButtonsGroup.checkedButton() in [ 419 self.rOpenFile, self.rOpenFiles, self.rSaveFile]) 420 ): 421 filterVariable = ", selectedFilter" 422 else: 423 filterVariable = "" 424 else: 425 filterVariable = ", " + filterVariable 426 427 if self.__dialogVariant == -1: 428 dialogType = "E5FileDialog" 429 optionStr = "" 430 else: 431 dialogType = "QFileDialog" 432 optionStr = ".Option" 433 434 code = '{0}{1} = {2}.'.format(nameVariable, filterVariable, dialogType) 435 if ( 436 self.rOpenFile.isChecked() or 437 self.rfOpenFile.isChecked() or 438 self.rOpenFileUrl.isChecked() 439 ): 440 if self.rOpenFile.isChecked(): 441 code += 'getOpenFileName({0}{1}'.format(os.linesep, istring) 442 elif self.rOpenFileUrl.isChecked(): 443 code += 'getOpenFileUrl({0}{1}'.format(os.linesep, istring) 444 else: 445 code += 'getOpenFileNameAndFilter({0}{1}'.format( 446 os.linesep, istring) 447 code += '{0},{1}{2}'.format(parent, os.linesep, istring) 448 if not self.eCaption.text(): 449 code += '"",{0}{1}'.format(os.linesep, istring) 450 else: 451 code += 'self.tr("{0}"),{1}{2}'.format( 452 self.eCaption.text(), os.linesep, istring) 453 if self.rOpenFileUrl.isChecked(): 454 if not self.eStartWith.text(): 455 code += 'QUrl(),{0}{1}'.format(os.linesep, istring) 456 else: 457 if self.cStartWith.isChecked(): 458 fmt = '{0},{1}{2}' 459 else: 460 fmt = 'QUrl("{0}"),{1}{2}' 461 code += fmt.format(self.eStartWith.text(), os.linesep, 462 istring) 463 else: 464 if not self.eStartWith.text(): 465 code += '"",{0}{1}'.format(os.linesep, istring) 466 else: 467 if self.cStartWith.isChecked(): 468 fmt = '{0},{1}{2}' 469 else: 470 fmt = '"{0}",{1}{2}' 471 code += fmt.format(self.eStartWith.text(), os.linesep, 472 istring) 473 if self.eFilters.text() == "": 474 code += '""' 475 else: 476 if self.cFilters.isChecked(): 477 fmt = '{0}' 478 else: 479 fmt = 'self.tr("{0}")' 480 code += fmt.format(self.eFilters.text()) 481 if self.rfOpenFile.isChecked() or self.__dialogVariant in (5, 6): 482 if self.eInitialFilter.text() == "": 483 initialFilter = "None" 484 else: 485 if self.cInitialFilter.isChecked(): 486 fmt = '{0}' 487 else: 488 fmt = 'self.tr("{0}")' 489 initialFilter = fmt.format(self.eInitialFilter.text()) 490 code += ',{0}{1}{2}'.format(os.linesep, istring, initialFilter) 491 if not self.cSymlinks.isChecked(): 492 code += ( 493 ',{0}{1}{2}.Options({2}{3}.DontResolveSymlinks)' 494 .format(os.linesep, istring, dialogType, optionStr) 495 ) 496 if self.rOpenFileUrl.isChecked() and bool(self.schemesEdit.text()): 497 code += ',{0}{1}{2}'.format( 498 os.linesep, istring, self.__prepareSchemesList()) 499 code += '){0}'.format(estring) 500 elif ( 501 self.rOpenFiles.isChecked() or 502 self.rfOpenFiles.isChecked() or 503 self.rOpenFileUrls.isChecked() 504 ): 505 if self.rOpenFiles.isChecked(): 506 code += 'getOpenFileNames({0}{1}'.format(os.linesep, istring) 507 elif self.rOpenFileUrls.isChecked(): 508 code += 'getOpenFileUrls({0}{1}'.format(os.linesep, istring) 509 else: 510 code += 'getOpenFileNamesAndFilter({0}{1}'.format( 511 os.linesep, istring) 512 code += '{0},{1}{2}'.format(parent, os.linesep, istring) 513 if not self.eCaption.text(): 514 code += '"",{0}{1}'.format(os.linesep, istring) 515 else: 516 code += 'self.tr("{0}"),{1}{2}'.format( 517 self.eCaption.text(), os.linesep, istring) 518 if self.rOpenFileUrls.isChecked(): 519 if not self.eStartWith.text(): 520 code += 'QUrl(),{0}{1}'.format(os.linesep, istring) 521 else: 522 if self.cStartWith.isChecked(): 523 fmt = '{0},{1}{2}' 524 else: 525 fmt = 'QUrl("{0}"),{1}{2}' 526 code += fmt.format(self.eStartWith.text(), os.linesep, 527 istring) 528 else: 529 if not self.eStartWith.text(): 530 code += '"",{0}{1}'.format(os.linesep, istring) 531 else: 532 if self.cStartWith.isChecked(): 533 fmt = '{0},{1}{2}' 534 else: 535 fmt = '"{0}",{1}{2}' 536 code += fmt.format(self.eStartWith.text(), os.linesep, 537 istring) 538 if not self.eFilters.text(): 539 code += '""' 540 else: 541 if self.cFilters.isChecked(): 542 fmt = '{0}' 543 else: 544 fmt = 'self.tr("{0}")' 545 code += fmt.format(self.eFilters.text()) 546 if self.rfOpenFiles.isChecked() or self.__dialogVariant in (5, 6): 547 if self.eInitialFilter.text() == "": 548 initialFilter = "None" 549 else: 550 if self.cInitialFilter.isChecked(): 551 fmt = '{0}' 552 else: 553 fmt = 'self.tr("{0}")' 554 initialFilter = fmt.format(self.eInitialFilter.text()) 555 code += ',{0}{1}{2}'.format(os.linesep, istring, initialFilter) 556 if not self.cSymlinks.isChecked(): 557 code += ( 558 ',{0}{1}{2}.Options({2}{3}.DontResolveSymlinks)' 559 .format(os.linesep, istring, dialogType, optionStr) 560 ) 561 if ( 562 self.rOpenFileUrls.isChecked() and 563 bool(self.schemesEdit.text()) 564 ): 565 code += ',{0}{1}{2}'.format( 566 os.linesep, istring, self.__prepareSchemesList()) 567 code += '){0}'.format(estring) 568 elif ( 569 self.rSaveFile.isChecked() or 570 self.rfSaveFile.isChecked() or 571 self.rSaveFileUrl.isChecked() 572 ): 573 if self.rSaveFile.isChecked(): 574 code += 'getSaveFileName({0}{1}'.format(os.linesep, istring) 575 elif self.rSaveFileUrl.isChecked(): 576 code += 'getSaveFileUrl({0}{1}'.format(os.linesep, istring) 577 else: 578 code += 'getSaveFileNameAndFilter({0}{1}'.format( 579 os.linesep, istring) 580 code += '{0},{1}{2}'.format(parent, os.linesep, istring) 581 if not self.eCaption.text(): 582 code += '"",{0}{1}'.format(os.linesep, istring) 583 else: 584 code += 'self.tr("{0}"),{1}{2}'.format( 585 self.eCaption.text(), os.linesep, istring) 586 if self.rSaveFileUrl.isChecked(): 587 if not self.eStartWith.text(): 588 code += 'QUrl(),{0}{1}'.format(os.linesep, istring) 589 else: 590 if self.cStartWith.isChecked(): 591 fmt = '{0},{1}{2}' 592 else: 593 fmt = 'QUrl("{0}"),{1}{2}' 594 code += fmt.format(self.eStartWith.text(), os.linesep, 595 istring) 596 else: 597 if not self.eStartWith.text(): 598 code += '"",{0}{1}'.format(os.linesep, istring) 599 else: 600 if self.cStartWith.isChecked(): 601 fmt = '{0},{1}{2}' 602 else: 603 fmt = '"{0}",{1}{2}' 604 code += fmt.format(self.eStartWith.text(), os.linesep, 605 istring) 606 if not self.eFilters.text(): 607 code += '""' 608 else: 609 if self.cFilters.isChecked(): 610 fmt = '{0}' 611 else: 612 fmt = 'self.tr("{0}")' 613 code += fmt.format(self.eFilters.text()) 614 if self.rfSaveFile.isChecked() or self.__dialogVariant in (5, 6): 615 if self.eInitialFilter.text() == "": 616 initialFilter = "None" 617 else: 618 if self.cInitialFilter.isChecked(): 619 fmt = '{0}' 620 else: 621 fmt = 'self.tr("{0}")' 622 initialFilter = fmt.format(self.eInitialFilter.text()) 623 code += ',{0}{1}{2}'.format(os.linesep, istring, initialFilter) 624 if ( 625 (not self.cSymlinks.isChecked()) or 626 (not self.cConfirmOverwrite.isChecked()) 627 ): 628 code += ',{0}{1}{2}.Options('.format( 629 os.linesep, istring, dialogType) 630 if not self.cSymlinks.isChecked(): 631 code += '{0}{1}.DontResolveSymlinks'.format( 632 dialogType, optionStr) 633 if ( 634 (not self.cSymlinks.isChecked()) and 635 (not self.cConfirmOverwrite.isChecked()) 636 ): 637 code += ' | ' 638 if not self.cConfirmOverwrite.isChecked(): 639 code += '{0}{1}.DontConfirmOverwrite'.format( 640 dialogType, optionStr) 641 code += ')' 642 if ( 643 self.rSaveFileUrl.isChecked() and 644 bool(self.schemesEdit.text()) 645 ): 646 code += ',{0}{1}{2}'.format( 647 os.linesep, istring, self.__prepareSchemesList()) 648 649 code += '){0}'.format(estring) 650 elif self.rDirectory.isChecked() or self.rDirectoryUrl.isChecked(): 651 if self.rDirectory.isChecked(): 652 code += 'getExistingDirectory({0}{1}'.format( 653 os.linesep, istring) 654 else: 655 code += 'getExistingDirectoryUrl({0}{1}'.format( 656 os.linesep, istring) 657 code += '{0},{1}{2}'.format(parent, os.linesep, istring) 658 if not self.eCaption.text(): 659 code += '"",{0}{1}'.format(os.linesep, istring) 660 else: 661 code += 'self.tr("{0}"),{1}{2}'.format( 662 self.eCaption.text(), os.linesep, istring) 663 if self.rDirectoryUrl.isChecked(): 664 if not self.eWorkDir.text(): 665 code += 'QUrl()' 666 else: 667 if self.cWorkDir.isChecked(): 668 fmt = '{0}' 669 else: 670 fmt = 'QUrl("{0}")' 671 code += fmt.format(self.eWorkDir.text()) 672 else: 673 if not self.eWorkDir.text(): 674 code += '""' 675 else: 676 if self.cWorkDir.isChecked(): 677 fmt = '{0}' 678 else: 679 fmt = '"{0}"' 680 code += fmt.format(self.eWorkDir.text()) 681 code += ',{0}{1}{2}.Options('.format(os.linesep, istring, 682 dialogType) 683 if not self.cSymlinks.isChecked(): 684 code += '{0}{1}.DontResolveSymlinks | '.format( 685 dialogType, optionStr) 686 if self.cDirOnly.isChecked(): 687 code += '{0}{1}.ShowDirsOnly'.format( 688 dialogType, optionStr) 689 else: 690 code += '{0}.Option(0)'.format(dialogType) 691 code += ')' 692 if self.rDirectoryUrl.isChecked(): 693 code += ',{0}{1}{2}'.format( 694 os.linesep, istring, self.__prepareSchemesList()) 695 code += '){0}'.format(estring) 696 697 return code 698 699 def __prepareSchemesList(self): 700 """ 701 Private method to prepare the list of supported schemes. 702 703 @return string representation of the supported schemes 704 @rtype str 705 """ 706 return repr(self.schemesEdit.text().strip().split()) 707