Helpviewer/HelpWebSearchWidget.py

changeset 142
94ce651735db
parent 96
9624a110667d
child 453
a81097a85889
child 792
a13346916170
equal deleted inserted replaced
141:c76f1ec28766 142:94ce651735db
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 _openSearchManager = None
30
31 def __init__(self, parent = None): 29 def __init__(self, parent = None):
32 """ 30 """
33 Constructor 31 Constructor
34 32
35 @param inactiveText text to be shown on inactivity (string) 33 @param inactiveText text to be shown on inactivity (string)
37 """ 35 """
38 QWidget.__init__(self, parent) 36 QWidget.__init__(self, parent)
39 37
40 self.mw = parent 38 self.mw = parent
41 39
42 self.connect(HelpWebSearchWidget.openSearchManager(), 40 self.__openSearchManager = OpenSearchManager(self)
41 self.connect(self.__openSearchManager,
43 SIGNAL("currentEngineChanged()"), 42 SIGNAL("currentEngineChanged()"),
44 self.__currentEngineChanged) 43 self.__currentEngineChanged)
45 self.__currentEngine = "" 44 self.__currentEngine = ""
46 45
47 self.__layout = QHBoxLayout(self) 46 self.__layout = QHBoxLayout(self)
113 self.__recentSearches.insert(0, searchText) 112 self.__recentSearches.insert(0, searchText)
114 if len(self.__recentSearches) > self.__maxSavedSearches: 113 if len(self.__recentSearches) > self.__maxSavedSearches:
115 self.__recentSearches = self.__recentSearches[:self.__maxSavedSearches] 114 self.__recentSearches = self.__recentSearches[:self.__maxSavedSearches]
116 self.__setupCompleterMenu() 115 self.__setupCompleterMenu()
117 116
118 url = HelpWebSearchWidget.openSearchManager()\ 117 url = self.__openSearchManager.currentEngine().searchUrl(searchText)
119 .currentEngine()\
120 .searchUrl(searchText)
121 self.emit(SIGNAL("search"), url) 118 self.emit(SIGNAL("search"), url)
122 119
123 def __setupCompleterMenu(self): 120 def __setupCompleterMenu(self):
124 """ 121 """
125 Private method to create the completer menu. 122 Private method to create the completer menu.
218 """ 215 """
219 Private slot to get search suggestions from the configured search engine. 216 Private slot to get search suggestions from the configured search engine.
220 """ 217 """
221 searchText = self.__searchEdit.text() 218 searchText = self.__searchEdit.text()
222 if searchText: 219 if searchText:
223 HelpWebSearchWidget.openSearchManager()\ 220 self.__openSearchManager.currentEngine().requestSuggestions(searchText)
224 .currentEngine()\
225 .requestSuggestions(searchText)
226 221
227 def __newSuggestions(self, suggestions): 222 def __newSuggestions(self, suggestions):
228 """ 223 """
229 Private slot to receive a new list of suggestions. 224 Private slot to receive a new list of suggestions.
230 225
238 """ 233 """
239 Private slot to handle the display of the engines menu. 234 Private slot to handle the display of the engines menu.
240 """ 235 """
241 self.__enginesMenu.clear() 236 self.__enginesMenu.clear()
242 237
243 osm = HelpWebSearchWidget.openSearchManager() 238 engineNames = self.__openSearchManager.allEnginesNames()
244 engineNames = osm.allEnginesNames()
245 for engineName in engineNames: 239 for engineName in engineNames:
246 engine = osm.engine(engineName) 240 engine = self.__openSearchManager.engine(engineName)
247 action = OpenSearchEngineAction(engine, self.__enginesMenu) 241 action = OpenSearchEngineAction(engine, self.__enginesMenu)
248 action.setData(engineName) 242 action.setData(engineName)
249 self.connect(action, SIGNAL("triggered()"), self.__changeCurrentEngine) 243 self.connect(action, SIGNAL("triggered()"), self.__changeCurrentEngine)
250 self.__enginesMenu.addAction(action) 244 self.__enginesMenu.addAction(action)
251 245
252 if osm.currentEngineName() == engineName: 246 if self.__openSearchManager.currentEngineName() == engineName:
253 action.setCheckable(True) 247 action.setCheckable(True)
254 action.setChecked(True) 248 action.setChecked(True)
255 249
256 ct = self.mw.currentBrowser() 250 ct = self.mw.currentBrowser()
257 linkedResources = ct.linkedResources("search") 251 linkedResources = ct.linkedResources("search")
295 Private slot to handle the selection of a search engine. 289 Private slot to handle the selection of a search engine.
296 """ 290 """
297 action = self.sender() 291 action = self.sender()
298 if action is not None: 292 if action is not None:
299 name = action.data() 293 name = action.data()
300 HelpWebSearchWidget.openSearchManager().setCurrentEngineName(name) 294 self.__openSearchManager.setCurrentEngineName(name)
301 295
302 def __addEngineFromUrl(self): 296 def __addEngineFromUrl(self):
303 """ 297 """
304 Private slot to add a search engine given it's URL. 298 Private slot to add a search engine given it's URL.
305 """ 299 """
307 if action is not None: 301 if action is not None:
308 url = action.data() 302 url = action.data()
309 if not isinstance(url, QUrl): 303 if not isinstance(url, QUrl):
310 return 304 return
311 305
312 HelpWebSearchWidget.openSearchManager().addEngine(url) 306 self.__openSearchManager.addEngine(url)
313 307
314 def __searchButtonClicked(self): 308 def __searchButtonClicked(self):
315 """ 309 """
316 Private slot to show the search menu via the search button. 310 Private slot to show the search menu via the search button.
317 """ 311 """
349 """ 343 """
350 searches = Preferences.Prefs.settings.value('Help/WebSearches') 344 searches = Preferences.Prefs.settings.value('Help/WebSearches')
351 if searches is not None: 345 if searches is not None:
352 self.__recentSearches = searches 346 self.__recentSearches = searches
353 347
354 @classmethod 348 def openSearchManager(self):
355 def openSearchManager(cls): 349 """
356 """ 350 Public method to get a reference to the opensearch manager object.
357 Class method to get a reference to the opensearch manager object.
358 351
359 @return reference to the opensearch manager object (OpenSearchManager) 352 @return reference to the opensearch manager object (OpenSearchManager)
360 """ 353 """
361 if cls._openSearchManager is None: 354 return self.__openSearchManager
362 cls._openSearchManager = OpenSearchManager()
363 return cls._openSearchManager
364 355
365 def __currentEngineChanged(self): 356 def __currentEngineChanged(self):
366 """ 357 """
367 Private slot to track a change of the current search engine. 358 Private slot to track a change of the current search engine.
368 """ 359 """
369 osm = HelpWebSearchWidget.openSearchManager() 360 if self.__openSearchManager.engineExists(self.__currentEngine):
370 if osm.engineExists(self.__currentEngine): 361 oldEngine = self.__openSearchManager.engine(self.__currentEngine)
371 oldEngine = osm.engine(self.__currentEngine)
372 self.disconnect(oldEngine, SIGNAL("imageChanged()"), 362 self.disconnect(oldEngine, SIGNAL("imageChanged()"),
373 self.__engineImageChanged) 363 self.__engineImageChanged)
374 if self.__suggestionsEnabled: 364 if self.__suggestionsEnabled:
375 self.disconnect(oldEngine, SIGNAL("suggestions(const QStringList&)"), 365 self.disconnect(oldEngine, SIGNAL("suggestions(const QStringList&)"),
376 self.__newSuggestions) 366 self.__newSuggestions)
377 367
378 newEngine = osm.currentEngine() 368 newEngine = self.__openSearchManager.currentEngine()
379 if newEngine.networkAccessManager() is None: 369 if newEngine.networkAccessManager() is None:
380 newEngine.setNetworkAccessManager(self.mw.networkAccessManager()) 370 newEngine.setNetworkAccessManager(self.mw.networkAccessManager())
381 self.connect(newEngine, SIGNAL("imageChanged()"), 371 self.connect(newEngine, SIGNAL("imageChanged()"),
382 self.__engineImageChanged) 372 self.__engineImageChanged)
383 if self.__suggestionsEnabled: 373 if self.__suggestionsEnabled:
384 self.connect(newEngine, SIGNAL("suggestions(const QStringList&)"), 374 self.connect(newEngine, SIGNAL("suggestions(const QStringList&)"),
385 self.__newSuggestions) 375 self.__newSuggestions)
386 376
387 self.__searchEdit.setInactiveText(osm.currentEngineName()) 377 self.__searchEdit.setInactiveText(self.__openSearchManager.currentEngineName())
388 self.__currentEngine = osm.currentEngineName() 378 self.__currentEngine = self.__openSearchManager.currentEngineName()
389 self.__engineButton.setIcon( 379 self.__engineButton.setIcon(
390 QIcon(QPixmap.fromImage(osm.currentEngine().image()))) 380 QIcon(QPixmap.fromImage(self.__openSearchManager.currentEngine().image())))
391 self.__suggestions = [] 381 self.__suggestions = []
392 self.__setupCompleterMenu() 382 self.__setupCompleterMenu()
393 383
394 def __engineImageChanged(self): 384 def __engineImageChanged(self):
395 """ 385 """
396 Private slot to handle a change of the current search engine icon. 386 Private slot to handle a change of the current search engine icon.
397 """ 387 """
398 osm = HelpWebSearchWidget.openSearchManager()
399 self.__engineButton.setIcon( 388 self.__engineButton.setIcon(
400 QIcon(QPixmap.fromImage(osm.currentEngine().image()))) 389 QIcon(QPixmap.fromImage(self.__openSearchManager.currentEngine().image())))

eric ide

mercurial