E5Gui/E5PathPicker.py

changeset 4599
960d1e63f802
parent 4597
46be8d9c4dd8
child 4601
0017e7cb67ae
equal deleted inserted replaced
4598:a5fba000224f 4599:960d1e63f802
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:

eric ide

mercurial