diff -r a5fba000224f -r 960d1e63f802 E5Gui/E5PathPicker.py --- a/E5Gui/E5PathPicker.py Tue Dec 01 19:01:17 2015 +0100 +++ b/E5Gui/E5PathPicker.py Thu Dec 03 19:11:22 2015 +0100 @@ -17,7 +17,7 @@ from ThirdParty.enum import Enum from PyQt5.QtCore import pyqtSignal, Qt, QFileInfo -from PyQt5.QtWidgets import QWidget, QHBoxLayout, QToolButton +from PyQt5.QtWidgets import QWidget, QHBoxLayout, QToolButton, QSizePolicy from . import E5FileDialog from .E5LineEdit import E5ClearableLineEdit @@ -93,11 +93,25 @@ self.__layout.addWidget(self.__button) self.__button.clicked.connect(self.__showPathPickerDialog) + self.__editor.textEdited.connect(self.__pathEdited) self.__editor.textChanged.connect(self.textChanged) self.setFocusProxy(self.__editor) + self.setFocusPolicy(Qt.StrongFocus) + self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + self.__button.setEnabled(self.__mode != E5PathPickerModes.NoMode) + def __pathEdited(self, path): + """ + Private slot handling editing of the path. + + @param path current text of the path line edit + @type str + """ + if self.__completer and not self.__completer.popup().isVisible(): + self.__completer.setRootPath(Utilities.toNativeSeparators(path)) + def setMode(self, mode): """ Public method to set the path picker mode. @@ -110,10 +124,11 @@ oldMode = self.__mode self.__mode = mode - if mode != oldMode: - # Remove current completer - self.__editor.setCompleter(None) - self.__completer = None + if mode != oldMode or not self.__completer: + if self.__completer: + # Remove current completer + self.__editor.setCompleter(None) + self.__completer = None if mode != E5PathPickerModes.NoMode: # Set a new completer @@ -174,7 +189,10 @@ if self.__mode == E5PathPickerModes.OpenFilesMode: self.__editor.setText(path) else: - self.__editor.setText(Utilities.toNativeSeparators(path)) + path = Utilities.toNativeSeparators(path) + self.__editor.setText(path) + if self.__completer: + self.__completer.setRootPath(path) def text(self): """ @@ -487,7 +505,6 @@ self.__mode = E5PathPicker.DefaultMode self.__editorEnabled = True - self.__completer = None self.__filters = "" self.__defaultDirectory = "" self.__windowTitle = "" @@ -510,6 +527,9 @@ self.__editor.editTextChanged.connect(self.editTextChanged) self.setFocusProxy(self.__editor) + self.setFocusPolicy(Qt.StrongFocus) + self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + self.__button.setEnabled(self.__mode != E5PathPickerModes.NoMode) def setMode(self, mode): @@ -525,17 +545,7 @@ self.__mode = mode if mode != oldMode: - # Remove current completer - self.__editor.setCompleter(None) - self.__completer = None - if mode != E5PathPickerModes.NoMode: - # Set a new completer - if mode == E5PathPickerModes.DirectoryMode: - self.__completer = E5DirCompleter(self.__editor) - else: - self.__completer = E5FileCompleter(self.__editor) - # set inactive text if mode == E5PathPickerModes.OpenFilesMode: self.__editor.setInactiveText(