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