15 from enum import Enum |
15 from enum import Enum |
16 except ImportError: |
16 except ImportError: |
17 from ThirdParty.enum import Enum |
17 from ThirdParty.enum import Enum |
18 |
18 |
19 from PyQt5.QtCore import pyqtSignal, Qt, QFileInfo |
19 from PyQt5.QtCore import pyqtSignal, Qt, QFileInfo |
20 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QToolButton |
20 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QToolButton, QSizePolicy |
21 |
21 |
22 from . import E5FileDialog |
22 from . import E5FileDialog |
23 from .E5LineEdit import E5ClearableLineEdit |
23 from .E5LineEdit import E5ClearableLineEdit |
24 from .E5Completers import E5FileCompleter, E5DirCompleter |
24 from .E5Completers import E5FileCompleter, E5DirCompleter |
25 from .E5ComboBox import E5ClearableComboBox |
25 from .E5ComboBox import E5ClearableComboBox |
91 |
91 |
92 self.__layout.addWidget(self.__editor) |
92 self.__layout.addWidget(self.__editor) |
93 self.__layout.addWidget(self.__button) |
93 self.__layout.addWidget(self.__button) |
94 |
94 |
95 self.__button.clicked.connect(self.__showPathPickerDialog) |
95 self.__button.clicked.connect(self.__showPathPickerDialog) |
|
96 self.__editor.textEdited.connect(self.__pathEdited) |
96 self.__editor.textChanged.connect(self.textChanged) |
97 self.__editor.textChanged.connect(self.textChanged) |
97 |
98 |
98 self.setFocusProxy(self.__editor) |
99 self.setFocusProxy(self.__editor) |
|
100 self.setFocusPolicy(Qt.StrongFocus) |
|
101 self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) |
|
102 |
99 self.__button.setEnabled(self.__mode != E5PathPickerModes.NoMode) |
103 self.__button.setEnabled(self.__mode != E5PathPickerModes.NoMode) |
|
104 |
|
105 def __pathEdited(self, path): |
|
106 """ |
|
107 Private slot handling editing of the path. |
|
108 |
|
109 @param path current text of the path line edit |
|
110 @type str |
|
111 """ |
|
112 if self.__completer and not self.__completer.popup().isVisible(): |
|
113 self.__completer.setRootPath(Utilities.toNativeSeparators(path)) |
100 |
114 |
101 def setMode(self, mode): |
115 def setMode(self, mode): |
102 """ |
116 """ |
103 Public method to set the path picker mode. |
117 Public method to set the path picker mode. |
104 |
118 |
108 assert mode in E5PathPickerModes |
122 assert mode in E5PathPickerModes |
109 |
123 |
110 oldMode = self.__mode |
124 oldMode = self.__mode |
111 self.__mode = mode |
125 self.__mode = mode |
112 |
126 |
113 if mode != oldMode: |
127 if mode != oldMode or not self.__completer: |
114 # Remove current completer |
128 if self.__completer: |
115 self.__editor.setCompleter(None) |
129 # Remove current completer |
116 self.__completer = None |
130 self.__editor.setCompleter(None) |
|
131 self.__completer = None |
117 |
132 |
118 if mode != E5PathPickerModes.NoMode: |
133 if mode != E5PathPickerModes.NoMode: |
119 # Set a new completer |
134 # Set a new completer |
120 if mode == E5PathPickerModes.DirectoryMode: |
135 if mode == E5PathPickerModes.DirectoryMode: |
121 self.__completer = E5DirCompleter(self.__editor) |
136 self.__completer = E5DirCompleter(self.__editor) |
172 @type str |
187 @type str |
173 """ |
188 """ |
174 if self.__mode == E5PathPickerModes.OpenFilesMode: |
189 if self.__mode == E5PathPickerModes.OpenFilesMode: |
175 self.__editor.setText(path) |
190 self.__editor.setText(path) |
176 else: |
191 else: |
177 self.__editor.setText(Utilities.toNativeSeparators(path)) |
192 path = Utilities.toNativeSeparators(path) |
|
193 self.__editor.setText(path) |
|
194 if self.__completer: |
|
195 self.__completer.setRootPath(path) |
178 |
196 |
179 def text(self): |
197 def text(self): |
180 """ |
198 """ |
181 Public method to get the current path. |
199 Public method to get the current path. |
182 |
200 |
485 super(E5ComboPathPicker, self).__init__(parent) |
503 super(E5ComboPathPicker, self).__init__(parent) |
486 |
504 |
487 self.__mode = E5PathPicker.DefaultMode |
505 self.__mode = E5PathPicker.DefaultMode |
488 self.__editorEnabled = True |
506 self.__editorEnabled = True |
489 |
507 |
490 self.__completer = None |
|
491 self.__filters = "" |
508 self.__filters = "" |
492 self.__defaultDirectory = "" |
509 self.__defaultDirectory = "" |
493 self.__windowTitle = "" |
510 self.__windowTitle = "" |
494 |
511 |
495 self.__layout = QHBoxLayout() |
512 self.__layout = QHBoxLayout() |
508 |
525 |
509 self.__button.clicked.connect(self.__showPathPickerDialog) |
526 self.__button.clicked.connect(self.__showPathPickerDialog) |
510 self.__editor.editTextChanged.connect(self.editTextChanged) |
527 self.__editor.editTextChanged.connect(self.editTextChanged) |
511 |
528 |
512 self.setFocusProxy(self.__editor) |
529 self.setFocusProxy(self.__editor) |
|
530 self.setFocusPolicy(Qt.StrongFocus) |
|
531 self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) |
|
532 |
513 self.__button.setEnabled(self.__mode != E5PathPickerModes.NoMode) |
533 self.__button.setEnabled(self.__mode != E5PathPickerModes.NoMode) |
514 |
534 |
515 def setMode(self, mode): |
535 def setMode(self, mode): |
516 """ |
536 """ |
517 Public method to set the path picker mode. |
537 Public method to set the path picker mode. |
523 |
543 |
524 oldMode = self.__mode |
544 oldMode = self.__mode |
525 self.__mode = mode |
545 self.__mode = mode |
526 |
546 |
527 if mode != oldMode: |
547 if mode != oldMode: |
528 # Remove current completer |
|
529 self.__editor.setCompleter(None) |
|
530 self.__completer = None |
|
531 |
|
532 if mode != E5PathPickerModes.NoMode: |
548 if mode != E5PathPickerModes.NoMode: |
533 # Set a new completer |
|
534 if mode == E5PathPickerModes.DirectoryMode: |
|
535 self.__completer = E5DirCompleter(self.__editor) |
|
536 else: |
|
537 self.__completer = E5FileCompleter(self.__editor) |
|
538 |
|
539 # set inactive text |
549 # set inactive text |
540 if mode == E5PathPickerModes.OpenFilesMode: |
550 if mode == E5PathPickerModes.OpenFilesMode: |
541 self.__editor.setInactiveText( |
551 self.__editor.setInactiveText( |
542 self.tr("Enter Path Names separated by ';'")) |
552 self.tr("Enter Path Names separated by ';'")) |
543 else: |
553 else: |