src/eric7/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.py

branch
eric7
changeset 9240
183220dc5492
parent 9221
bf71ee032bb4
child 9255
79ec5473519d
equal deleted inserted replaced
9239:3c605ab5a8c7 9240:183220dc5492
7 Module implementing the file dialog wizard dialog. 7 Module implementing the file dialog wizard dialog.
8 """ 8 """
9 9
10 import os 10 import os
11 11
12 from PyQt6.QtCore import pyqtSlot, QUrl 12 from PyQt6.QtCore import pyqtSlot, QCoreApplication, QUrl
13 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QFileDialog, QButtonGroup 13 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QFileDialog, QButtonGroup
14 14
15 from EricWidgets.EricCompleters import EricFileCompleter, EricDirCompleter 15 from EricWidgets.EricCompleters import EricFileCompleter, EricDirCompleter
16 16
17 from .Ui_FileDialogWizardDialog import Ui_FileDialogWizardDialog 17 from .Ui_FileDialogWizardDialog import Ui_FileDialogWizardDialog
25 25
26 It displays a dialog for entering the parameters for the 26 It displays a dialog for entering the parameters for the
27 EricFileDialog or QFileDialog code generator. 27 EricFileDialog or QFileDialog code generator.
28 """ 28 """
29 29
30 EricTypes = (
31 (
32 QCoreApplication.translate("FileDialogWizardDialog", "eric (String)"),
33 "eric_string",
34 ),
35 (
36 QCoreApplication.translate("FileDialogWizardDialog", "eric (Path)"),
37 "eric_pathlib",
38 ),
39 )
40 PyQtTypes = (
41 ("PyQt5", "pyqt5"),
42 ("PyQt6", "pyqt6"),
43 )
44
30 def __init__(self, dialogVariant, parent=None): 45 def __init__(self, dialogVariant, parent=None):
31 """ 46 """
32 Constructor 47 Constructor
33 48
34 @param dialogVariant variant of the file dialog to be generated 49 @param dialogVariant variant of the file dialog to be generated
35 (-1 = EricFileDialog, 0 = unknown, 5 = PyQt5, 6 = PyQt6) 50 (-2 = EricFileDialog (pathlib.Path based), -1 = EricFileDialog (string
51 based), 0 = unknown, 5 = PyQt5, 6 = PyQt6)
36 @type int 52 @type int
37 @param parent parent widget 53 @param parent parent widget
38 @type QWidget 54 @type QWidget
39 """ 55 """
40 super().__init__(parent) 56 super().__init__(parent)
59 self.__typeButtonsGroup.addButton(self.rDirectory, 30) 75 self.__typeButtonsGroup.addButton(self.rDirectory, 30)
60 self.__typeButtonsGroup.addButton(self.rDirectoryUrl, 31) 76 self.__typeButtonsGroup.addButton(self.rDirectoryUrl, 31)
61 self.__typeButtonsGroup.idClicked.connect(self.__toggleInitialFilterAndResult) 77 self.__typeButtonsGroup.idClicked.connect(self.__toggleInitialFilterAndResult)
62 self.__toggleInitialFilterAndResult(1) 78 self.__toggleInitialFilterAndResult(1)
63 79
64 if self.__dialogVariant == -1: 80 if self.__dialogVariant < 0:
65 self.pyqtComboBox.addItems(["eric"]) 81 for name, type_ in FileDialogWizardDialog.EricTypes:
82 self.pyqtComboBox.addItem(name, type_)
66 self.setWindowTitle(self.tr("EricFileDialog Wizard")) 83 self.setWindowTitle(self.tr("EricFileDialog Wizard"))
67 self.pyqtComboBox.setCurrentIndex(0) 84 if self.__dialogVariant == -1:
68 self.pyqtComboBox.setEnabled(False) 85 self.pyqtComboBox.setCurrentIndex(0)
86 elif self.__dialogVariant == -2:
87 self.pyqtComboBox.setCurrentIndex(1)
88 else:
89 self.pyqtComboBox.setCurrentIndex(0)
69 else: 90 else:
70 self.pyqtComboBox.addItems(["PyQt5", "PyQt6"]) 91 for name, type_ in FileDialogWizardDialog.PyQtTypes:
92 self.pyqtComboBox.addItem(name, type_)
71 self.setWindowTitle(self.tr("QFileDialog Wizard")) 93 self.setWindowTitle(self.tr("QFileDialog Wizard"))
72 if self.__dialogVariant == 5: 94 if self.__dialogVariant == 5:
73 self.pyqtComboBox.setCurrentIndex(0) 95 self.pyqtComboBox.setCurrentIndex(0)
74 elif self.__dialogVariant == 6: 96 elif self.__dialogVariant == 6:
75 self.pyqtComboBox.setCurrentIndex(1) 97 self.pyqtComboBox.setCurrentIndex(1)
109 Private slot to setup the dialog for the selected PyQt variant. 131 Private slot to setup the dialog for the selected PyQt variant.
110 132
111 @param index index of the current item 133 @param index index of the current item
112 @type int 134 @type int
113 """ 135 """
114 txt = self.pyqtComboBox.itemText(index) 136 txt = self.pyqtComboBox.itemData(index)
115 self.rfOpenFile.setEnabled(txt == "eric") 137 self.rfOpenFile.setEnabled(txt.startswith("eric_"))
116 self.rfOpenFiles.setEnabled(txt == "eric") 138 self.rfOpenFiles.setEnabled(txt.startswith("eric_"))
117 self.rfSaveFile.setEnabled(txt == "eric") 139 self.rfSaveFile.setEnabled(txt.startswith("eric_"))
118 140
119 self.rOpenFileUrl.setEnabled(txt in ["PyQt5", "PyQt6"]) 141 self.rOpenFileUrl.setEnabled(txt in ["pyqt5", "pyqt6"])
120 self.rOpenFileUrls.setEnabled(txt in ["PyQt5", "PyQt6"]) 142 self.rOpenFileUrls.setEnabled(txt in ["pyqt5", "pyqt6"])
121 self.rSaveFileUrl.setEnabled(txt in ["PyQt5", "PyQt6"]) 143 self.rSaveFileUrl.setEnabled(txt in ["pyqt5", "pyqt6"])
122 self.rDirectoryUrl.setEnabled(txt in ["PyQt5", "PyQt6"]) 144 self.rDirectoryUrl.setEnabled(txt in ["pyqt5", "pyqt6"])
123 145
124 if txt in ["PyQt5", "PyQt6"]: 146 if txt in ["pyqt5", "pyqt6"]:
125 if self.rfOpenFile.isChecked(): 147 if self.rfOpenFile.isChecked():
126 self.rOpenFile.setChecked(True) 148 self.rOpenFile.setChecked(True)
127 elif self.rfOpenFiles.isChecked(): 149 elif self.rfOpenFiles.isChecked():
128 self.rOpenFiles.setChecked(True) 150 self.rOpenFiles.setChecked(True)
129 elif self.rfSaveFile.isChecked(): 151 elif self.rfSaveFile.isChecked():
136 if self.rSaveFileUrl.isChecked(): 158 if self.rSaveFileUrl.isChecked():
137 self.rSaveFile.setChecked(True) 159 self.rSaveFile.setChecked(True)
138 if self.rDirectoryUrl.isChecked(): 160 if self.rDirectoryUrl.isChecked():
139 self.rDirectory.setChecked(True) 161 self.rDirectory.setChecked(True)
140 162
141 if txt == "eric": 163 if txt == "eric_string":
142 self.__dialogVariant = -1 164 self.__dialogVariant = -1
165 elif txt == "eric_pathlib":
166 self.__dialogVariant = -2
143 elif txt == "PyQt5": 167 elif txt == "PyQt5":
144 self.__dialogVariant = 5 168 self.__dialogVariant = 5
145 elif txt == "PyQt6": 169 elif txt == "PyQt6":
146 self.__dialogVariant = 6 170 self.__dialogVariant = 6
147 else: 171 else:
310 Private slot to enable/disable the initial filter elements and the 334 Private slot to enable/disable the initial filter elements and the
311 results entries. 335 results entries.
312 336
313 @param checkedId id of the clicked button (integer) 337 @param checkedId id of the clicked button (integer)
314 """ 338 """
315 enable = (self.__dialogVariant in (-1,) and checkedId in [11, 12, 13]) or ( 339 enable = (self.__dialogVariant in (-1, -2) and checkedId in [11, 12, 13]) or (
316 self.__dialogVariant in (5, 6) and checkedId in [1, 2, 3, 21, 22, 23] 340 self.__dialogVariant in (5, 6) and checkedId in [1, 2, 3, 21, 22, 23]
317 ) 341 )
318 342
319 self.lInitialFilter.setEnabled(enable) 343 self.lInitialFilter.setEnabled(enable)
320 self.eInitialFilter.setEnabled(enable) 344 self.eInitialFilter.setEnabled(enable)
355 self.rOpenFile, 379 self.rOpenFile,
356 self.rfOpenFile, 380 self.rfOpenFile,
357 self.rSaveFile, 381 self.rSaveFile,
358 self.rfSaveFile, 382 self.rfSaveFile,
359 ]: 383 ]:
360 nameVariable = "fileName" 384 nameVariable = "filePath" if self.__dialogVariant == -2 else "fileName"
361 elif self.__typeButtonsGroup.checkedButton() in [ 385 elif self.__typeButtonsGroup.checkedButton() in [
362 self.rOpenFiles, 386 self.rOpenFiles,
363 self.rfOpenFiles, 387 self.rfOpenFiles,
364 ]: 388 ]:
365 nameVariable = "fileNames" 389 nameVariable = (
390 "filePaths" if self.__dialogVariant == -2 else "fileNames"
391 )
366 elif self.__typeButtonsGroup.checkedButton() == self.rDirectory: 392 elif self.__typeButtonsGroup.checkedButton() == self.rDirectory:
367 nameVariable = "dirName" 393 nameVariable = "dirPath" if self.__dialogVariant == -2 else "dirName"
368 else: 394 else:
369 nameVariable = "res" 395 nameVariable = "res"
370 filterVariable = self.eFilterVariable.text() 396 filterVariable = self.eFilterVariable.text()
371 if not filterVariable: 397 if not filterVariable:
372 if ( 398 if (
382 else: 408 else:
383 filterVariable = "" 409 filterVariable = ""
384 else: 410 else:
385 filterVariable = ", " + filterVariable 411 filterVariable = ", " + filterVariable
386 412
387 if self.__dialogVariant == -1: 413 if self.__dialogVariant in (-1, -2):
388 dialogType = "EricFileDialog" 414 dialogType = "EricFileDialog"
389 optionStr = "" 415 optionStr = ""
390 else: 416 else:
391 dialogType = "QFileDialog" 417 dialogType = "QFileDialog"
392 optionStr = ".Option" 418 optionStr = ".Option"
395 if ( 421 if (
396 self.rOpenFile.isChecked() 422 self.rOpenFile.isChecked()
397 or self.rfOpenFile.isChecked() 423 or self.rfOpenFile.isChecked()
398 or self.rOpenFileUrl.isChecked() 424 or self.rOpenFileUrl.isChecked()
399 ): 425 ):
426 #
427 # getOpenFile...
428 #
400 if self.rOpenFile.isChecked(): 429 if self.rOpenFile.isChecked():
401 code += "getOpenFileName({0}{1}".format(os.linesep, istring) 430 method = (
431 "getOpenFilePath"
432 if self.__dialogVariant == -2
433 else "getOpenFileName"
434 )
435 code += "{0}({1}{2}".format(method, os.linesep, istring)
402 elif self.rOpenFileUrl.isChecked(): 436 elif self.rOpenFileUrl.isChecked():
403 code += "getOpenFileUrl({0}{1}".format(os.linesep, istring) 437 code += "getOpenFileUrl({0}{1}".format(os.linesep, istring)
404 else: 438 else:
405 code += "getOpenFileNameAndFilter({0}{1}".format(os.linesep, istring) 439 method = (
440 "getOpenFilePathAndFilter"
441 if self.__dialogVariant == -2
442 else "getOpenFileNameAndFilter"
443 )
444 code += "{0}({1}{2}".format(method, os.linesep, istring)
406 code += "{0},{1}{2}".format(parent, os.linesep, istring) 445 code += "{0},{1}{2}".format(parent, os.linesep, istring)
407 if not self.eCaption.text(): 446 if not self.eCaption.text():
408 code += '"",{0}{1}'.format(os.linesep, istring) 447 code += '"",{0}{1}'.format(os.linesep, istring)
409 else: 448 else:
410 code += 'self.tr("{0}"),{1}{2}'.format( 449 code += 'self.tr("{0}"),{1}{2}'.format(
458 elif ( 497 elif (
459 self.rOpenFiles.isChecked() 498 self.rOpenFiles.isChecked()
460 or self.rfOpenFiles.isChecked() 499 or self.rfOpenFiles.isChecked()
461 or self.rOpenFileUrls.isChecked() 500 or self.rOpenFileUrls.isChecked()
462 ): 501 ):
502 #
503 # getOpenFile...s
504 #
463 if self.rOpenFiles.isChecked(): 505 if self.rOpenFiles.isChecked():
464 code += "getOpenFileNames({0}{1}".format(os.linesep, istring) 506 method = (
507 "getOpenFilePaths"
508 if self.__dialogVariant == -2
509 else "getOpenFileNames"
510 )
511 code += "{0}({1}{2}".format(method, os.linesep, istring)
465 elif self.rOpenFileUrls.isChecked(): 512 elif self.rOpenFileUrls.isChecked():
466 code += "getOpenFileUrls({0}{1}".format(os.linesep, istring) 513 code += "getOpenFileUrls({0}{1}".format(os.linesep, istring)
467 else: 514 else:
468 code += "getOpenFileNamesAndFilter({0}{1}".format(os.linesep, istring) 515 method = (
516 "getOpenFilePathsAndFilter"
517 if self.__dialogVariant == -2
518 else "getOpenFileNamesAndFilter"
519 )
520 code += "{0}({1}{2}".format(method, os.linesep, istring)
469 code += "{0},{1}{2}".format(parent, os.linesep, istring) 521 code += "{0},{1}{2}".format(parent, os.linesep, istring)
470 if not self.eCaption.text(): 522 if not self.eCaption.text():
471 code += '"",{0}{1}'.format(os.linesep, istring) 523 code += '"",{0}{1}'.format(os.linesep, istring)
472 else: 524 else:
473 code += 'self.tr("{0}"),{1}{2}'.format( 525 code += 'self.tr("{0}"),{1}{2}'.format(
521 elif ( 573 elif (
522 self.rSaveFile.isChecked() 574 self.rSaveFile.isChecked()
523 or self.rfSaveFile.isChecked() 575 or self.rfSaveFile.isChecked()
524 or self.rSaveFileUrl.isChecked() 576 or self.rSaveFileUrl.isChecked()
525 ): 577 ):
578 #
579 # getSaveFile...
580 #
526 if self.rSaveFile.isChecked(): 581 if self.rSaveFile.isChecked():
527 code += "getSaveFileName({0}{1}".format(os.linesep, istring) 582 method = (
583 "getSaveFilePath"
584 if self.__dialogVariant == -2
585 else "getSaveFileName"
586 )
587 code += "{0}({1}{2}".format(method, os.linesep, istring)
528 elif self.rSaveFileUrl.isChecked(): 588 elif self.rSaveFileUrl.isChecked():
529 code += "getSaveFileUrl({0}{1}".format(os.linesep, istring) 589 code += "getSaveFileUrl({0}{1}".format(os.linesep, istring)
530 else: 590 else:
531 code += "getSaveFileNameAndFilter({0}{1}".format(os.linesep, istring) 591 method = (
592 "getSaveFilePathAndFilter"
593 if self.__dialogVariant == -2
594 else "getSaveFileNameAndFilter"
595 )
596 code += "{0}({1}{2}".format(method, os.linesep, istring)
532 code += "{0},{1}{2}".format(parent, os.linesep, istring) 597 code += "{0},{1}{2}".format(parent, os.linesep, istring)
533 if not self.eCaption.text(): 598 if not self.eCaption.text():
534 code += '"",{0}{1}'.format(os.linesep, istring) 599 code += '"",{0}{1}'.format(os.linesep, istring)
535 else: 600 else:
536 code += 'self.tr("{0}"),{1}{2}'.format( 601 code += 'self.tr("{0}"),{1}{2}'.format(
590 ) 655 )
591 656
592 code += "{0}){0}".format(estring) 657 code += "{0}){0}".format(estring)
593 elif self.rDirectory.isChecked() or self.rDirectoryUrl.isChecked(): 658 elif self.rDirectory.isChecked() or self.rDirectoryUrl.isChecked():
594 if self.rDirectory.isChecked(): 659 if self.rDirectory.isChecked():
595 code += "getExistingDirectory({0}{1}".format(os.linesep, istring) 660 method = (
661 "getExistingDirectoryPath"
662 if self.__dialogVariant == -2
663 else "getExistingDirectory"
664 )
665 code += "{0}({1}{2}".format(method, os.linesep, istring)
596 else: 666 else:
597 code += "getExistingDirectoryUrl({0}{1}".format(os.linesep, istring) 667 code += "getExistingDirectoryUrl({0}{1}".format(os.linesep, istring)
598 code += "{0},{1}{2}".format(parent, os.linesep, istring) 668 code += "{0},{1}{2}".format(parent, os.linesep, istring)
599 if not self.eCaption.text(): 669 if not self.eCaption.text():
600 code += '"",{0}{1}'.format(os.linesep, istring) 670 code += '"",{0}{1}'.format(os.linesep, istring)

eric ide

mercurial