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