42 from .OpenSearch.OpenSearchManager import OpenSearchManager |
42 from .OpenSearch.OpenSearchManager import OpenSearchManager |
43 |
43 |
44 self.__mw = parent |
44 self.__mw = parent |
45 |
45 |
46 self.__openSearchManager = OpenSearchManager(self) |
46 self.__openSearchManager = OpenSearchManager(self) |
47 self.__openSearchManager.currentEngineChanged.connect(self.__currentEngineChanged) |
47 self.__openSearchManager.currentEngineChanged.connect( |
|
48 self.__currentEngineChanged) |
48 self.__currentEngine = "" |
49 self.__currentEngine = "" |
49 |
50 |
50 self.__enginesMenu = QMenu(self) |
51 self.__enginesMenu = QMenu(self) |
51 |
52 |
52 self.__engineButton = E5LineEditButton(self) |
53 self.__engineButton = E5LineEditButton(self) |
58 self.addWidget(self.__searchButton, E5LineEdit.LeftSide) |
59 self.addWidget(self.__searchButton, E5LineEdit.LeftSide) |
59 |
60 |
60 self.__model = QStandardItemModel(self) |
61 self.__model = QStandardItemModel(self) |
61 self.__completer = QCompleter() |
62 self.__completer = QCompleter() |
62 self.__completer.setModel(self.__model) |
63 self.__completer.setModel(self.__model) |
63 self.__completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) |
64 self.__completer.setCompletionMode( |
|
65 QCompleter.UnfilteredPopupCompletion) |
64 self.__completer.setWidget(self) |
66 self.__completer.setWidget(self) |
65 |
67 |
66 self.__searchButton.clicked[()].connect(self.__searchButtonClicked) |
68 self.__searchButton.clicked[()].connect(self.__searchButtonClicked) |
67 self.textEdited.connect(self.__textEdited) |
69 self.textEdited.connect(self.__textEdited) |
68 self.returnPressed[()].connect(self.__searchNow) |
70 self.returnPressed[()].connect(self.__searchNow) |
69 self.__completer.activated[QModelIndex].connect(self.__completerActivated) |
71 self.__completer.activated[QModelIndex].connect( |
70 self.__completer.highlighted[QModelIndex].connect(self.__completerHighlighted) |
72 self.__completerActivated) |
|
73 self.__completer.highlighted[QModelIndex].connect( |
|
74 self.__completerHighlighted) |
71 self.__enginesMenu.aboutToShow.connect(self.__showEnginesMenu) |
75 self.__enginesMenu.aboutToShow.connect(self.__showEnginesMenu) |
72 |
76 |
73 self.__suggestionsItem = None |
77 self.__suggestionsItem = None |
74 self.__suggestions = [] |
78 self.__suggestions = [] |
75 self.__suggestTimer = None |
79 self.__suggestTimer = None |
91 searchText = self.text() |
95 searchText = self.text() |
92 if not searchText: |
96 if not searchText: |
93 return |
97 return |
94 |
98 |
95 globalSettings = QWebSettings.globalSettings() |
99 globalSettings = QWebSettings.globalSettings() |
96 if not globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled): |
100 if not globalSettings.testAttribute( |
|
101 QWebSettings.PrivateBrowsingEnabled): |
97 if searchText in self.__recentSearches: |
102 if searchText in self.__recentSearches: |
98 self.__recentSearches.remove(searchText) |
103 self.__recentSearches.remove(searchText) |
99 self.__recentSearches.insert(0, searchText) |
104 self.__recentSearches.insert(0, searchText) |
100 if len(self.__recentSearches) > self.__maxSavedSearches: |
105 if len(self.__recentSearches) > self.__maxSavedSearches: |
101 self.__recentSearches = self.__recentSearches[:self.__maxSavedSearches] |
106 self.__recentSearches = \ |
|
107 self.__recentSearches[:self.__maxSavedSearches] |
102 self.__setupCompleterMenu() |
108 self.__setupCompleterMenu() |
103 |
109 |
104 url = self.__openSearchManager.currentEngine().searchUrl(searchText) |
110 url = self.__openSearchManager.currentEngine().searchUrl(searchText) |
105 self.search.emit(url) |
111 self.search.emit(url) |
106 |
112 |
120 boldFont.setBold(True) |
126 boldFont.setBold(True) |
121 |
127 |
122 if self.__suggestions: |
128 if self.__suggestions: |
123 if self.__model.rowCount() == 0: |
129 if self.__model.rowCount() == 0: |
124 if not self.__suggestionsItem: |
130 if not self.__suggestionsItem: |
125 self.__suggestionsItem = QStandardItem(self.trUtf8("Suggestions")) |
131 self.__suggestionsItem = QStandardItem( |
|
132 self.trUtf8("Suggestions")) |
126 self.__suggestionsItem.setFont(boldFont) |
133 self.__suggestionsItem.setFont(boldFont) |
127 self.__model.appendRow(self.__suggestionsItem) |
134 self.__model.appendRow(self.__suggestionsItem) |
128 |
135 |
129 for suggestion in self.__suggestions: |
136 for suggestion in self.__suggestions: |
130 self.__model.appendRow(QStandardItem(suggestion)) |
137 self.__model.appendRow(QStandardItem(suggestion)) |
131 |
138 |
132 if not self.__recentSearches: |
139 if not self.__recentSearches: |
133 self.__recentSearchesItem = QStandardItem(self.trUtf8("No Recent Searches")) |
140 self.__recentSearchesItem = QStandardItem( |
|
141 self.trUtf8("No Recent Searches")) |
134 self.__recentSearchesItem.setFont(boldFont) |
142 self.__recentSearchesItem.setFont(boldFont) |
135 self.__model.appendRow(self.__recentSearchesItem) |
143 self.__model.appendRow(self.__recentSearchesItem) |
136 else: |
144 else: |
137 self.__recentSearchesItem = QStandardItem(self.trUtf8("Recent Searches")) |
145 self.__recentSearchesItem = QStandardItem( |
|
146 self.trUtf8("Recent Searches")) |
138 self.__recentSearchesItem.setFont(boldFont) |
147 self.__recentSearchesItem.setFont(boldFont) |
139 self.__model.appendRow(self.__recentSearchesItem) |
148 self.__model.appendRow(self.__recentSearchesItem) |
140 for recentSearch in self.__recentSearches: |
149 for recentSearch in self.__recentSearches: |
141 self.__model.appendRow(QStandardItem(recentSearch)) |
150 self.__model.appendRow(QStandardItem(recentSearch)) |
142 |
151 |
143 view = self.__completer.popup() |
152 view = self.__completer.popup() |
144 view.setFixedHeight( |
153 view.setFixedHeight(view.sizeHintForRow(0) * self.__model.rowCount() + |
145 view.sizeHintForRow(0) * self.__model.rowCount() + view.frameWidth() * 2) |
154 view.frameWidth() * 2) |
146 |
155 |
147 self.__searchButton.setEnabled( |
156 self.__searchButton.setEnabled( |
148 bool(self.__recentSearches or self.__suggestions)) |
157 bool(self.__recentSearches or self.__suggestions)) |
149 |
158 |
150 def __completerActivated(self, index): |
159 def __completerActivated(self, index): |
166 def __completerHighlighted(self, index): |
175 def __completerHighlighted(self, index): |
167 """ |
176 """ |
168 Private slot handling the highlighting of an entry of the completer. |
177 Private slot handling the highlighting of an entry of the completer. |
169 |
178 |
170 @param index index of the item (QModelIndex) |
179 @param index index of the item (QModelIndex) |
|
180 @return flah indicating a successful highlighting (boolean) |
171 """ |
181 """ |
172 if self.__suggestionsItem and \ |
182 if self.__suggestionsItem and \ |
173 self.__suggestionsItem.index().row() == index.row(): |
183 self.__suggestionsItem.index().row() == index.row(): |
174 return False |
184 return False |
175 |
185 |
197 self.__completer.setCompletionPrefix(txt) |
207 self.__completer.setCompletionPrefix(txt) |
198 self.__completer.complete() |
208 self.__completer.complete() |
199 |
209 |
200 def __getSuggestions(self): |
210 def __getSuggestions(self): |
201 """ |
211 """ |
202 Private slot to get search suggestions from the configured search engine. |
212 Private slot to get search suggestions from the configured search |
|
213 engine. |
203 """ |
214 """ |
204 searchText = self.text() |
215 searchText = self.text() |
205 if searchText: |
216 if searchText: |
206 self.__openSearchManager.currentEngine().requestSuggestions(searchText) |
217 self.__openSearchManager.currentEngine()\ |
|
218 .requestSuggestions(searchText) |
207 |
219 |
208 def __newSuggestions(self, suggestions): |
220 def __newSuggestions(self, suggestions): |
209 """ |
221 """ |
210 Private slot to receive a new list of suggestions. |
222 Private slot to receive a new list of suggestions. |
211 |
223 |
257 if not ct.title(): |
269 if not ct.title(): |
258 title = url.host() |
270 title = url.host() |
259 else: |
271 else: |
260 title = ct.title() |
272 title = ct.title() |
261 |
273 |
262 action = self.__enginesMenu.addAction(self.trUtf8("Add '{0}'").format(title), |
274 action = self.__enginesMenu.addAction( |
263 self.__addEngineFromUrl) |
275 self.trUtf8("Add '{0}'").format(title), |
|
276 self.__addEngineFromUrl) |
264 action.setData(url) |
277 action.setData(url) |
265 action.setIcon(ct.icon()) |
278 action.setIcon(ct.icon()) |
266 |
279 |
267 self.__enginesMenu.addSeparator() |
280 self.__enginesMenu.addSeparator() |
268 self.__enginesMenu.addAction(self.__mw.searchEnginesAction()) |
281 self.__enginesMenu.addAction(self.__mw.searchEnginesAction()) |
357 if self.__suggestionsEnabled: |
370 if self.__suggestionsEnabled: |
358 newEngine.suggestions.connect(self.__newSuggestions) |
371 newEngine.suggestions.connect(self.__newSuggestions) |
359 |
372 |
360 self.setInactiveText(self.__openSearchManager.currentEngineName()) |
373 self.setInactiveText(self.__openSearchManager.currentEngineName()) |
361 self.__currentEngine = self.__openSearchManager.currentEngineName() |
374 self.__currentEngine = self.__openSearchManager.currentEngineName() |
362 self.__engineButton.setIcon( |
375 self.__engineButton.setIcon(QIcon(QPixmap.fromImage( |
363 QIcon(QPixmap.fromImage(self.__openSearchManager.currentEngine().image()))) |
376 self.__openSearchManager.currentEngine().image()))) |
364 self.__suggestions = [] |
377 self.__suggestions = [] |
365 self.__setupCompleterMenu() |
378 self.__setupCompleterMenu() |
366 |
379 |
367 def __engineImageChanged(self): |
380 def __engineImageChanged(self): |
368 """ |
381 """ |
369 Private slot to handle a change of the current search engine icon. |
382 Private slot to handle a change of the current search engine icon. |
370 """ |
383 """ |
371 self.__engineButton.setIcon( |
384 self.__engineButton.setIcon(QIcon(QPixmap.fromImage( |
372 QIcon(QPixmap.fromImage(self.__openSearchManager.currentEngine().image()))) |
385 self.__openSearchManager.currentEngine().image()))) |
373 |
386 |
374 def mousePressEvent(self, evt): |
387 def mousePressEvent(self, evt): |
375 """ |
388 """ |
376 Protected method called by a mouse press event. |
389 Protected method called by a mouse press event. |
377 |
390 |