24 """ |
24 """ |
25 Class implementing a web search widget for the web browser. |
25 Class implementing a web search widget for the web browser. |
26 |
26 |
27 @signal search(url) emitted when the search should be done |
27 @signal search(url) emitted when the search should be done |
28 """ |
28 """ |
|
29 search = pyqtSignal(QUrl) |
|
30 |
29 def __init__(self, parent = None): |
31 def __init__(self, parent = None): |
30 """ |
32 """ |
31 Constructor |
33 Constructor |
32 |
34 |
33 @param inactiveText text to be shown on inactivity (string) |
35 @param inactiveText text to be shown on inactivity (string) |
36 QWidget.__init__(self, parent) |
38 QWidget.__init__(self, parent) |
37 |
39 |
38 self.mw = parent |
40 self.mw = parent |
39 |
41 |
40 self.__openSearchManager = OpenSearchManager(self) |
42 self.__openSearchManager = OpenSearchManager(self) |
41 self.connect(self.__openSearchManager, |
43 self.__openSearchManager.currentEngineChanged.connect(self.__currentEngineChanged) |
42 SIGNAL("currentEngineChanged()"), |
|
43 self.__currentEngineChanged) |
|
44 self.__currentEngine = "" |
44 self.__currentEngine = "" |
45 |
45 |
46 self.__layout = QHBoxLayout(self) |
46 self.__layout = QHBoxLayout(self) |
47 self.__layout.setMargin(0) |
47 self.__layout.setMargin(0) |
48 self.__layout.setSpacing(0) |
48 self.__layout.setSpacing(0) |
71 self.__completer.setModel(self.__model) |
71 self.__completer.setModel(self.__model) |
72 self.__completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) |
72 self.__completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) |
73 self.__completer.setWidget(self.__searchEdit) |
73 self.__completer.setWidget(self.__searchEdit) |
74 |
74 |
75 self.__searchButton.clicked[()].connect(self.__searchButtonClicked) |
75 self.__searchButton.clicked[()].connect(self.__searchButtonClicked) |
76 self.connect(self.__searchEdit, SIGNAL("textEdited(const QString&)"), |
76 self.__searchEdit.textEdited.connect(self.__textEdited) |
77 self.__textEdited) |
|
78 self.__clearButton.clicked[()].connect(self.__searchEdit.clear) |
77 self.__clearButton.clicked[()].connect(self.__searchEdit.clear) |
79 self.__searchEdit.returnPressed[()].connect(self.__searchNow) |
78 self.__searchEdit.returnPressed[()].connect(self.__searchNow) |
80 self.connect(self.__completer, SIGNAL("activated(const QModelIndex &)"), |
79 self.__completer.activated[QModelIndex].connect(self.__completerActivated) |
81 self.__completerActivated) |
80 self.__completer.highlighted[QModelIndex].connect(self.__completerHighlighted) |
82 self.connect(self.__completer, SIGNAL("highlighted(const QModelIndex &)"), |
|
83 self.__completerHighlighted) |
|
84 self.__enginesMenu.aboutToShow.connect(self.__showEnginesMenu) |
81 self.__enginesMenu.aboutToShow.connect(self.__showEnginesMenu) |
85 |
82 |
86 self.__suggestionsItem = None |
83 self.__suggestionsItem = None |
87 self.__suggestions = [] |
84 self.__suggestions = [] |
88 self.__suggestTimer = None |
85 self.__suggestTimer = None |
113 if len(self.__recentSearches) > self.__maxSavedSearches: |
110 if len(self.__recentSearches) > self.__maxSavedSearches: |
114 self.__recentSearches = self.__recentSearches[:self.__maxSavedSearches] |
111 self.__recentSearches = self.__recentSearches[:self.__maxSavedSearches] |
115 self.__setupCompleterMenu() |
112 self.__setupCompleterMenu() |
116 |
113 |
117 url = self.__openSearchManager.currentEngine().searchUrl(searchText) |
114 url = self.__openSearchManager.currentEngine().searchUrl(searchText) |
118 self.emit(SIGNAL("search"), url) |
115 self.search.emit(url) |
119 |
116 |
120 def __setupCompleterMenu(self): |
117 def __setupCompleterMenu(self): |
121 """ |
118 """ |
122 Private method to create the completer menu. |
119 Private method to create the completer menu. |
123 """ |
120 """ |
202 if self.__suggestionsEnabled: |
199 if self.__suggestionsEnabled: |
203 if self.__suggestTimer is None: |
200 if self.__suggestTimer is None: |
204 self.__suggestTimer = QTimer(self) |
201 self.__suggestTimer = QTimer(self) |
205 self.__suggestTimer.setSingleShot(True) |
202 self.__suggestTimer.setSingleShot(True) |
206 self.__suggestTimer.setInterval(200) |
203 self.__suggestTimer.setInterval(200) |
207 self.connect(self.__suggestTimer, SIGNAL("timeout()"), |
204 self.__suggestTimer.timeout.connect(self.__getSuggestions) |
208 self.__getSuggestions) |
|
209 self.__suggestTimer.start() |
205 self.__suggestTimer.start() |
210 else: |
206 else: |
211 self.__completer.setCompletionPrefix(txt) |
207 self.__completer.setCompletionPrefix(txt) |
212 self.__completer.complete() |
208 self.__completer.complete() |
213 |
209 |
357 """ |
353 """ |
358 Private slot to track a change of the current search engine. |
354 Private slot to track a change of the current search engine. |
359 """ |
355 """ |
360 if self.__openSearchManager.engineExists(self.__currentEngine): |
356 if self.__openSearchManager.engineExists(self.__currentEngine): |
361 oldEngine = self.__openSearchManager.engine(self.__currentEngine) |
357 oldEngine = self.__openSearchManager.engine(self.__currentEngine) |
362 self.disconnect(oldEngine, SIGNAL("imageChanged()"), |
358 oldEngine.imageChanged.disconnect(self.__engineImageChanged) |
363 self.__engineImageChanged) |
|
364 if self.__suggestionsEnabled: |
359 if self.__suggestionsEnabled: |
365 self.disconnect(oldEngine, SIGNAL("suggestions(const QStringList&)"), |
360 oldEngine.suggestions.disconnect(self.__newSuggestions) |
366 self.__newSuggestions) |
|
367 |
361 |
368 newEngine = self.__openSearchManager.currentEngine() |
362 newEngine = self.__openSearchManager.currentEngine() |
369 if newEngine.networkAccessManager() is None: |
363 if newEngine.networkAccessManager() is None: |
370 newEngine.setNetworkAccessManager(self.mw.networkAccessManager()) |
364 newEngine.setNetworkAccessManager(self.mw.networkAccessManager()) |
371 self.connect(newEngine, SIGNAL("imageChanged()"), |
365 newEngine.imageChanged.connect(self.__engineImageChanged) |
372 self.__engineImageChanged) |
|
373 if self.__suggestionsEnabled: |
366 if self.__suggestionsEnabled: |
374 self.connect(newEngine, SIGNAL("suggestions(const QStringList&)"), |
367 newEngine.suggestions.connect(self.__newSuggestions) |
375 self.__newSuggestions) |
|
376 |
368 |
377 self.__searchEdit.setInactiveText(self.__openSearchManager.currentEngineName()) |
369 self.__searchEdit.setInactiveText(self.__openSearchManager.currentEngineName()) |
378 self.__currentEngine = self.__openSearchManager.currentEngineName() |
370 self.__currentEngine = self.__openSearchManager.currentEngineName() |
379 self.__engineButton.setIcon( |
371 self.__engineButton.setIcon( |
380 QIcon(QPixmap.fromImage(self.__openSearchManager.currentEngine().image()))) |
372 QIcon(QPixmap.fromImage(self.__openSearchManager.currentEngine().image()))) |