Helpviewer/HelpWindow.py

changeset 2411
aec0a8a6e548
parent 2400
c1726b754f96
child 2525
8b507a9a2d40
child 2697
1cd7fa670b05
equal deleted inserted replaced
2410:dfd7d0718210 2411:aec0a8a6e548
15 QDesktopServices, QKeySequence, QComboBox, QFont, QFontMetrics, QLabel, \ 15 QDesktopServices, QKeySequence, QComboBox, QFont, QFontMetrics, QLabel, \
16 QSplitter, QMenu, QToolButton, QLineEdit, QApplication, QWhatsThis, QDialog, \ 16 QSplitter, QMenu, QToolButton, QLineEdit, QApplication, QWhatsThis, QDialog, \
17 QHBoxLayout, QProgressBar, QAction, QIcon 17 QHBoxLayout, QProgressBar, QAction, QIcon
18 from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest 18 from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest
19 from PyQt4.QtWebKit import QWebSettings, QWebDatabase, QWebSecurityOrigin, QWebPage 19 from PyQt4.QtWebKit import QWebSettings, QWebDatabase, QWebSecurityOrigin, QWebPage
20 from PyQt4.QtHelp import QHelpEngine, QHelpEngineCore, QHelpSearchQuery 20 try:
21 from PyQt4.QtHelp import QHelpEngine, QHelpEngineCore, QHelpSearchQuery
22 QTHELP_AVAILABLE = True
23 except ImportError:
24 QTHELP_AVAILABLE = False
21 25
22 from .Network.NetworkAccessManager import SSL_AVAILABLE 26 from .Network.NetworkAccessManager import SSL_AVAILABLE
23 27
24 from .data import icons_rc # __IGNORE_WARNING__ 28 from .data import icons_rc # __IGNORE_WARNING__
25 from .data import html_rc # __IGNORE_WARNING__ 29 from .data import html_rc # __IGNORE_WARNING__
56 helpwindows = [] 60 helpwindows = []
57 61
58 maxMenuFilePathLen = 75 62 maxMenuFilePathLen = 75
59 63
60 _fromEric = False 64 _fromEric = False
65 useQtHelp = QTHELP_AVAILABLE
61 66
62 _networkAccessManager = None 67 _networkAccessManager = None
63 _cookieJar = None 68 _cookieJar = None
64 _helpEngine = None 69 _helpEngine = None
65 _bookmarksManager = None 70 _bookmarksManager = None
114 from .HelpBrowserWV import HelpBrowser 119 from .HelpBrowserWV import HelpBrowser
115 from .HelpTabWidget import HelpTabWidget 120 from .HelpTabWidget import HelpTabWidget
116 from .AdBlock.AdBlockIcon import AdBlockIcon 121 from .AdBlock.AdBlockIcon import AdBlockIcon
117 from .VirusTotalApi import VirusTotalAPI 122 from .VirusTotalApi import VirusTotalAPI
118 123
124 HelpWindow.setUseQtHelp(self.fromEric)
125
119 if not self.fromEric: 126 if not self.fromEric:
120 self.setStyle(Preferences.getUI("Style"), Preferences.getUI("StyleSheet")) 127 self.setStyle(Preferences.getUI("Style"), Preferences.getUI("StyleSheet"))
121 128
122 self.__helpEngine = \ 129 if self.useQtHelp:
123 QHelpEngine(os.path.join(Utilities.getConfigDir(), 130 self.__helpEngine = \
124 "browser", "eric5help.qhc"), self) 131 QHelpEngine(os.path.join(Utilities.getConfigDir(),
125 self.__helpEngine.warning.connect(self.__warning) 132 "browser", "eric5help.qhc"), self)
133 self.__helpEngine.warning.connect(self.__warning)
134 else:
135 self.__helpEngine = None
126 self.__helpInstaller = None 136 self.__helpInstaller = None
127 137
128 self.__zoomWidget = E5ZoomWidget(UI.PixmapCache.getPixmap("zoomOut.png"), 138 self.__zoomWidget = E5ZoomWidget(UI.PixmapCache.getPixmap("zoomOut.png"),
129 UI.PixmapCache.getPixmap("zoomIn.png"), 139 UI.PixmapCache.getPixmap("zoomIn.png"),
130 UI.PixmapCache.getPixmap("zoomReset.png"), self) 140 UI.PixmapCache.getPixmap("zoomReset.png"), self)
150 QSizePolicy.Preferred, QSizePolicy.Expanding) 160 QSizePolicy.Preferred, QSizePolicy.Expanding)
151 centralWidget.setLayout(layout) 161 centralWidget.setLayout(layout)
152 self.setCentralWidget(centralWidget) 162 self.setCentralWidget(centralWidget)
153 self.findDlg.hide() 163 self.findDlg.hide()
154 164
155 # setup the TOC widget 165 if self.useQtHelp:
156 self.__tocWindow = HelpTocWidget(self.__helpEngine, self) 166 # setup the TOC widget
157 self.__tocDock = QDockWidget(self.trUtf8("Contents"), self) 167 self.__tocWindow = HelpTocWidget(self.__helpEngine, self)
158 self.__tocDock.setObjectName("TocWindow") 168 self.__tocDock = QDockWidget(self.trUtf8("Contents"), self)
159 self.__tocDock.setWidget(self.__tocWindow) 169 self.__tocDock.setObjectName("TocWindow")
160 self.addDockWidget(Qt.LeftDockWidgetArea, self.__tocDock) 170 self.__tocDock.setWidget(self.__tocWindow)
161 171 self.addDockWidget(Qt.LeftDockWidgetArea, self.__tocDock)
162 # setup the index widget 172
163 self.__indexWindow = HelpIndexWidget(self.__helpEngine, self) 173 # setup the index widget
164 self.__indexDock = QDockWidget(self.trUtf8("Index"), self) 174 self.__indexWindow = HelpIndexWidget(self.__helpEngine, self)
165 self.__indexDock.setObjectName("IndexWindow") 175 self.__indexDock = QDockWidget(self.trUtf8("Index"), self)
166 self.__indexDock.setWidget(self.__indexWindow) 176 self.__indexDock.setObjectName("IndexWindow")
167 self.addDockWidget(Qt.LeftDockWidgetArea, self.__indexDock) 177 self.__indexDock.setWidget(self.__indexWindow)
168 178 self.addDockWidget(Qt.LeftDockWidgetArea, self.__indexDock)
169 # setup the search widget 179
170 self.__searchWord = searchWord 180 # setup the search widget
171 self.__indexing = False 181 self.__searchWord = searchWord
172 self.__indexingProgress = None 182 self.__indexing = False
173 self.__searchEngine = self.__helpEngine.searchEngine() 183 self.__indexingProgress = None
174 self.__searchEngine.indexingStarted.connect(self.__indexingStarted) 184 self.__searchEngine = self.__helpEngine.searchEngine()
175 self.__searchEngine.indexingFinished.connect(self.__indexingFinished) 185 self.__searchEngine.indexingStarted.connect(self.__indexingStarted)
176 self.__searchWindow = HelpSearchWidget(self.__searchEngine, self) 186 self.__searchEngine.indexingFinished.connect(self.__indexingFinished)
177 self.__searchDock = QDockWidget(self.trUtf8("Search"), self) 187 self.__searchWindow = HelpSearchWidget(self.__searchEngine, self)
178 self.__searchDock.setObjectName("SearchWindow") 188 self.__searchDock = QDockWidget(self.trUtf8("Search"), self)
179 self.__searchDock.setWidget(self.__searchWindow) 189 self.__searchDock.setObjectName("SearchWindow")
180 self.addDockWidget(Qt.LeftDockWidgetArea, self.__searchDock) 190 self.__searchDock.setWidget(self.__searchWindow)
191 self.addDockWidget(Qt.LeftDockWidgetArea, self.__searchDock)
181 192
182 if Preferences.getHelp("SaveGeometry"): 193 if Preferences.getHelp("SaveGeometry"):
183 g = Preferences.getGeometry("HelpViewerGeometry") 194 g = Preferences.getGeometry("HelpViewerGeometry")
184 else: 195 else:
185 g = QByteArray() 196 g = QByteArray()
216 QDesktopServices.setUrlHandler("http", self.__linkActivated) 227 QDesktopServices.setUrlHandler("http", self.__linkActivated)
217 QDesktopServices.setUrlHandler("https", self.__linkActivated) 228 QDesktopServices.setUrlHandler("https", self.__linkActivated)
218 229
219 # setup connections 230 # setup connections
220 self.__activating = False 231 self.__activating = False
221 # TOC window 232 if self.useQtHelp:
222 self.__tocWindow.linkActivated.connect(self.__linkActivated) 233 # TOC window
223 self.__tocWindow.escapePressed.connect(self.__activateCurrentBrowser) 234 self.__tocWindow.linkActivated.connect(self.__linkActivated)
224 # index window 235 self.__tocWindow.escapePressed.connect(self.__activateCurrentBrowser)
225 self.__indexWindow.linkActivated.connect(self.__linkActivated) 236 # index window
226 self.__indexWindow.linksActivated.connect(self.__linksActivated) 237 self.__indexWindow.linkActivated.connect(self.__linkActivated)
227 self.__indexWindow.escapePressed.connect(self.__activateCurrentBrowser) 238 self.__indexWindow.linksActivated.connect(self.__linksActivated)
228 # search window 239 self.__indexWindow.escapePressed.connect(self.__activateCurrentBrowser)
229 self.__searchWindow.linkActivated.connect(self.__linkActivated) 240 # search window
230 self.__searchWindow.escapePressed.connect(self.__activateCurrentBrowser) 241 self.__searchWindow.linkActivated.connect(self.__linkActivated)
242 self.__searchWindow.escapePressed.connect(self.__activateCurrentBrowser)
231 243
232 state = Preferences.getHelp("HelpViewerState") 244 state = Preferences.getHelp("HelpViewerState")
233 self.restoreState(state) 245 self.restoreState(state)
234 246
235 self.__initHelpDb() 247 self.__initHelpDb()
240 self.__virusTotal.fileScanReport.connect(self.__virusTotalFileScanReport) 252 self.__virusTotal.fileScanReport.connect(self.__virusTotalFileScanReport)
241 253
242 self.__previewer = None 254 self.__previewer = None
243 self.__shutdownCalled = False 255 self.__shutdownCalled = False
244 256
245 QTimer.singleShot(0, self.__lookForNewDocumentation) 257 if self.useQtHelp:
246 if self.__searchWord is not None: 258 QTimer.singleShot(0, self.__lookForNewDocumentation)
247 QTimer.singleShot(0, self.__searchForWord) 259 if self.__searchWord is not None:
260 QTimer.singleShot(0, self.__searchForWord)
248 261
249 QTimer.singleShot(0, syncMgr.loadSettings) 262 QTimer.singleShot(0, syncMgr.loadSettings)
250 263
251 def __setIconDatabasePath(self, enable=True): 264 def __setIconDatabasePath(self, enable=True):
252 """ 265 """
1010 if not self.initShortcutsOnly: 1023 if not self.initShortcutsOnly:
1011 self.greaseMonkeyAct.triggered[()].connect( 1024 self.greaseMonkeyAct.triggered[()].connect(
1012 self.__showGreaseMonkeyConfigDialog) 1025 self.__showGreaseMonkeyConfigDialog)
1013 self.__actions.append(self.greaseMonkeyAct) 1026 self.__actions.append(self.greaseMonkeyAct)
1014 1027
1015 self.syncTocAct = E5Action(self.trUtf8('Sync with Table of Contents'), 1028 if self.useQtHelp or self.initShortcutsOnly:
1016 UI.PixmapCache.getIcon("syncToc.png"), 1029 self.syncTocAct = E5Action(self.trUtf8('Sync with Table of Contents'),
1017 self.trUtf8('Sync with Table of Contents'), 1030 UI.PixmapCache.getIcon("syncToc.png"),
1018 0, 0, self, 'help_sync_toc') 1031 self.trUtf8('Sync with Table of Contents'),
1019 self.syncTocAct.setStatusTip(self.trUtf8( 1032 0, 0, self, 'help_sync_toc')
1020 'Synchronizes the table of contents with current page')) 1033 self.syncTocAct.setStatusTip(self.trUtf8(
1021 self.syncTocAct.setWhatsThis(self.trUtf8( 1034 'Synchronizes the table of contents with current page'))
1022 """<b>Sync with Table of Contents</b>""" 1035 self.syncTocAct.setWhatsThis(self.trUtf8(
1023 """<p>Synchronizes the table of contents with current page.</p>""" 1036 """<b>Sync with Table of Contents</b>"""
1024 )) 1037 """<p>Synchronizes the table of contents with current page.</p>"""
1025 if not self.initShortcutsOnly: 1038 ))
1026 self.syncTocAct.triggered[()].connect(self.__syncTOC) 1039 if not self.initShortcutsOnly:
1027 self.__actions.append(self.syncTocAct) 1040 self.syncTocAct.triggered[()].connect(self.__syncTOC)
1028 1041 self.__actions.append(self.syncTocAct)
1029 self.showTocAct = E5Action(self.trUtf8('Table of Contents'), 1042
1030 self.trUtf8('Table of Contents'), 1043 self.showTocAct = E5Action(self.trUtf8('Table of Contents'),
1031 0, 0, self, 'help_show_toc') 1044 self.trUtf8('Table of Contents'),
1032 self.showTocAct.setStatusTip(self.trUtf8( 1045 0, 0, self, 'help_show_toc')
1033 'Shows the table of contents window')) 1046 self.showTocAct.setStatusTip(self.trUtf8(
1034 self.showTocAct.setWhatsThis(self.trUtf8( 1047 'Shows the table of contents window'))
1035 """<b>Table of Contents</b>""" 1048 self.showTocAct.setWhatsThis(self.trUtf8(
1036 """<p>Shows the table of contents window.</p>""" 1049 """<b>Table of Contents</b>"""
1037 )) 1050 """<p>Shows the table of contents window.</p>"""
1038 if not self.initShortcutsOnly: 1051 ))
1039 self.showTocAct.triggered[()].connect(self.__showTocWindow) 1052 if not self.initShortcutsOnly:
1040 self.__actions.append(self.showTocAct) 1053 self.showTocAct.triggered[()].connect(self.__showTocWindow)
1041 1054 self.__actions.append(self.showTocAct)
1042 self.showIndexAct = E5Action(self.trUtf8('Index'), 1055
1043 self.trUtf8('Index'), 1056 self.showIndexAct = E5Action(self.trUtf8('Index'),
1044 0, 0, self, 'help_show_index') 1057 self.trUtf8('Index'),
1045 self.showIndexAct.setStatusTip(self.trUtf8( 1058 0, 0, self, 'help_show_index')
1046 'Shows the index window')) 1059 self.showIndexAct.setStatusTip(self.trUtf8(
1047 self.showIndexAct.setWhatsThis(self.trUtf8( 1060 'Shows the index window'))
1048 """<b>Index</b>""" 1061 self.showIndexAct.setWhatsThis(self.trUtf8(
1049 """<p>Shows the index window.</p>""" 1062 """<b>Index</b>"""
1050 )) 1063 """<p>Shows the index window.</p>"""
1051 if not self.initShortcutsOnly: 1064 ))
1052 self.showIndexAct.triggered[()].connect(self.__showIndexWindow) 1065 if not self.initShortcutsOnly:
1053 self.__actions.append(self.showIndexAct) 1066 self.showIndexAct.triggered[()].connect(self.__showIndexWindow)
1054 1067 self.__actions.append(self.showIndexAct)
1055 self.showSearchAct = E5Action(self.trUtf8('Search'), 1068
1056 self.trUtf8('Search'), 1069 self.showSearchAct = E5Action(self.trUtf8('Search'),
1057 0, 0, self, 'help_show_search') 1070 self.trUtf8('Search'),
1058 self.showSearchAct.setStatusTip(self.trUtf8( 1071 0, 0, self, 'help_show_search')
1059 'Shows the search window')) 1072 self.showSearchAct.setStatusTip(self.trUtf8(
1060 self.showSearchAct.setWhatsThis(self.trUtf8( 1073 'Shows the search window'))
1061 """<b>Search</b>""" 1074 self.showSearchAct.setWhatsThis(self.trUtf8(
1062 """<p>Shows the search window.</p>""" 1075 """<b>Search</b>"""
1063 )) 1076 """<p>Shows the search window.</p>"""
1064 if not self.initShortcutsOnly: 1077 ))
1065 self.showSearchAct.triggered[()].connect(self.__showSearchWindow) 1078 if not self.initShortcutsOnly:
1066 self.__actions.append(self.showSearchAct) 1079 self.showSearchAct.triggered[()].connect(self.__showSearchWindow)
1067 1080 self.__actions.append(self.showSearchAct)
1068 self.manageQtHelpDocsAct = E5Action(self.trUtf8('Manage QtHelp Documents'), 1081
1069 self.trUtf8('Manage QtHelp &Documents'), 1082 self.manageQtHelpDocsAct = E5Action(self.trUtf8('Manage QtHelp Documents'),
1070 0, 0, self, 'help_qthelp_documents') 1083 self.trUtf8('Manage QtHelp &Documents'),
1071 self.manageQtHelpDocsAct.setStatusTip(self.trUtf8( 1084 0, 0, self, 'help_qthelp_documents')
1072 'Shows a dialog to manage the QtHelp documentation set')) 1085 self.manageQtHelpDocsAct.setStatusTip(self.trUtf8(
1073 self.manageQtHelpDocsAct.setWhatsThis(self.trUtf8( 1086 'Shows a dialog to manage the QtHelp documentation set'))
1074 """<b>Manage QtHelp Documents</b>""" 1087 self.manageQtHelpDocsAct.setWhatsThis(self.trUtf8(
1075 """<p>Shows a dialog to manage the QtHelp documentation set.</p>""" 1088 """<b>Manage QtHelp Documents</b>"""
1076 )) 1089 """<p>Shows a dialog to manage the QtHelp documentation set.</p>"""
1077 if not self.initShortcutsOnly: 1090 ))
1078 self.manageQtHelpDocsAct.triggered[()].connect( 1091 if not self.initShortcutsOnly:
1079 self.__manageQtHelpDocumentation) 1092 self.manageQtHelpDocsAct.triggered[()].connect(
1080 self.__actions.append(self.manageQtHelpDocsAct) 1093 self.__manageQtHelpDocumentation)
1081 1094 self.__actions.append(self.manageQtHelpDocsAct)
1082 self.manageQtHelpFiltersAct = E5Action(self.trUtf8('Manage QtHelp Filters'), 1095
1083 self.trUtf8('Manage QtHelp &Filters'), 1096 self.manageQtHelpFiltersAct = E5Action(self.trUtf8('Manage QtHelp Filters'),
1084 0, 0, self, 'help_qthelp_filters') 1097 self.trUtf8('Manage QtHelp &Filters'),
1085 self.manageQtHelpFiltersAct.setStatusTip(self.trUtf8( 1098 0, 0, self, 'help_qthelp_filters')
1086 'Shows a dialog to manage the QtHelp filters')) 1099 self.manageQtHelpFiltersAct.setStatusTip(self.trUtf8(
1087 self.manageQtHelpFiltersAct.setWhatsThis(self.trUtf8( 1100 'Shows a dialog to manage the QtHelp filters'))
1088 """<b>Manage QtHelp Filters</b>""" 1101 self.manageQtHelpFiltersAct.setWhatsThis(self.trUtf8(
1089 """<p>Shows a dialog to manage the QtHelp filters.</p>""" 1102 """<b>Manage QtHelp Filters</b>"""
1090 )) 1103 """<p>Shows a dialog to manage the QtHelp filters.</p>"""
1091 if not self.initShortcutsOnly: 1104 ))
1092 self.manageQtHelpFiltersAct.triggered[()].connect(self.__manageQtHelpFilters) 1105 if not self.initShortcutsOnly:
1093 self.__actions.append(self.manageQtHelpFiltersAct) 1106 self.manageQtHelpFiltersAct.triggered[()].connect(
1094 1107 self.__manageQtHelpFilters)
1095 self.reindexDocumentationAct = E5Action(self.trUtf8('Reindex Documentation'), 1108 self.__actions.append(self.manageQtHelpFiltersAct)
1096 self.trUtf8('&Reindex Documentation'), 1109
1097 0, 0, self, 'help_qthelp_reindex') 1110 self.reindexDocumentationAct = E5Action(self.trUtf8('Reindex Documentation'),
1098 self.reindexDocumentationAct.setStatusTip(self.trUtf8( 1111 self.trUtf8('&Reindex Documentation'),
1099 'Reindexes the documentation set')) 1112 0, 0, self, 'help_qthelp_reindex')
1100 self.reindexDocumentationAct.setWhatsThis(self.trUtf8( 1113 self.reindexDocumentationAct.setStatusTip(self.trUtf8(
1101 """<b>Reindex Documentation</b>""" 1114 'Reindexes the documentation set'))
1102 """<p>Reindexes the documentation set.</p>""" 1115 self.reindexDocumentationAct.setWhatsThis(self.trUtf8(
1103 )) 1116 """<b>Reindex Documentation</b>"""
1104 if not self.initShortcutsOnly: 1117 """<p>Reindexes the documentation set.</p>"""
1105 self.reindexDocumentationAct.triggered[()].connect( 1118 ))
1106 self.__searchEngine.reindexDocumentation) 1119 if not self.initShortcutsOnly:
1107 self.__actions.append(self.reindexDocumentationAct) 1120 self.reindexDocumentationAct.triggered[()].connect(
1121 self.__searchEngine.reindexDocumentation)
1122 self.__actions.append(self.reindexDocumentationAct)
1108 1123
1109 self.clearPrivateDataAct = E5Action(self.trUtf8('Clear private data'), 1124 self.clearPrivateDataAct = E5Action(self.trUtf8('Clear private data'),
1110 self.trUtf8('&Clear private data'), 1125 self.trUtf8('&Clear private data'),
1111 0, 0, 1126 0, 0,
1112 self, 'help_clear_private_data') 1127 self, 'help_clear_private_data')
1367 menu.addAction(self.forwardAct) 1382 menu.addAction(self.forwardAct)
1368 menu.addAction(self.homeAct) 1383 menu.addAction(self.homeAct)
1369 menu.addSeparator() 1384 menu.addSeparator()
1370 menu.addAction(self.stopAct) 1385 menu.addAction(self.stopAct)
1371 menu.addAction(self.reloadAct) 1386 menu.addAction(self.reloadAct)
1372 menu.addSeparator() 1387 if self.useQtHelp:
1373 menu.addAction(self.syncTocAct) 1388 menu.addSeparator()
1389 menu.addAction(self.syncTocAct)
1374 1390
1375 from .History.HistoryMenu import HistoryMenu 1391 from .History.HistoryMenu import HistoryMenu
1376 self.historyMenu = HistoryMenu(self, self.tabWidget) 1392 self.historyMenu = HistoryMenu(self, self.tabWidget)
1377 self.historyMenu.setTearOffEnabled(True) 1393 self.historyMenu.setTearOffEnabled(True)
1378 self.historyMenu.setTitle(self.trUtf8('H&istory')) 1394 self.historyMenu.setTitle(self.trUtf8('H&istory'))
1421 self.__userAgentMenu = UserAgentMenu(self.trUtf8("Global User Agent")) 1437 self.__userAgentMenu = UserAgentMenu(self.trUtf8("Global User Agent"))
1422 menu.addMenu(self.__userAgentMenu) 1438 menu.addMenu(self.__userAgentMenu)
1423 menu.addAction(self.userAgentManagerAct) 1439 menu.addAction(self.userAgentManagerAct)
1424 menu.addSeparator() 1440 menu.addSeparator()
1425 1441
1426 menu.addAction(self.manageQtHelpDocsAct) 1442 if self.useQtHelp:
1427 menu.addAction(self.manageQtHelpFiltersAct) 1443 menu.addAction(self.manageQtHelpDocsAct)
1428 menu.addAction(self.reindexDocumentationAct) 1444 menu.addAction(self.manageQtHelpFiltersAct)
1429 menu.addSeparator() 1445 menu.addAction(self.reindexDocumentationAct)
1446 menu.addSeparator()
1430 menu.addAction(self.clearPrivateDataAct) 1447 menu.addAction(self.clearPrivateDataAct)
1431 menu.addAction(self.clearIconsAct) 1448 menu.addAction(self.clearIconsAct)
1432 1449
1433 menu = mb.addMenu(self.trUtf8("&Tools")) 1450 menu = mb.addMenu(self.trUtf8("&Tools"))
1434 menu.setTearOffEnabled(True) 1451 menu.setTearOffEnabled(True)
1440 menu.addAction(self.toolsMonitorAct) 1457 menu.addAction(self.toolsMonitorAct)
1441 1458
1442 menu = mb.addMenu(self.trUtf8("&Window")) 1459 menu = mb.addMenu(self.trUtf8("&Window"))
1443 menu.setTearOffEnabled(True) 1460 menu.setTearOffEnabled(True)
1444 menu.addAction(self.showDownloadManagerAct) 1461 menu.addAction(self.showDownloadManagerAct)
1445 menu.addSeparator() 1462 if self.useQtHelp:
1446 menu.addAction(self.showTocAct) 1463 menu.addSeparator()
1447 menu.addAction(self.showIndexAct) 1464 menu.addAction(self.showTocAct)
1448 menu.addAction(self.showSearchAct) 1465 menu.addAction(self.showIndexAct)
1466 menu.addAction(self.showSearchAct)
1449 1467
1450 mb.addSeparator() 1468 mb.addSeparator()
1451 1469
1452 menu = mb.addMenu(self.trUtf8('&Help')) 1470 menu = mb.addMenu(self.trUtf8('&Help'))
1453 menu.setTearOffEnabled(True) 1471 menu.setTearOffEnabled(True)
1497 findtb.setIconSize(UI.Config.ToolBarIconSize) 1515 findtb.setIconSize(UI.Config.ToolBarIconSize)
1498 findtb.addAction(self.findAct) 1516 findtb.addAction(self.findAct)
1499 findtb.addAction(self.findNextAct) 1517 findtb.addAction(self.findNextAct)
1500 findtb.addAction(self.findPrevAct) 1518 findtb.addAction(self.findPrevAct)
1501 1519
1502 filtertb = self.addToolBar(self.trUtf8("Filter")) 1520 if self.useQtHelp:
1503 filtertb.setObjectName("FilterToolBar") 1521 filtertb = self.addToolBar(self.trUtf8("Filter"))
1504 self.filterCombo = QComboBox() 1522 filtertb.setObjectName("FilterToolBar")
1505 self.filterCombo.setMinimumWidth( 1523 self.filterCombo = QComboBox()
1506 QFontMetrics(QFont()).width("ComboBoxWithEnoughWidth")) 1524 self.filterCombo.setMinimumWidth(
1507 filtertb.addWidget(QLabel(self.trUtf8("Filtered by: "))) 1525 QFontMetrics(QFont()).width("ComboBoxWithEnoughWidth"))
1508 filtertb.addWidget(self.filterCombo) 1526 filtertb.addWidget(QLabel(self.trUtf8("Filtered by: ")))
1509 self.__helpEngine.setupFinished.connect(self.__setupFilterCombo) 1527 filtertb.addWidget(self.filterCombo)
1510 self.filterCombo.activated[str].connect(self.__filterQtHelpDocumentation) 1528 self.__helpEngine.setupFinished.connect(self.__setupFilterCombo)
1511 self.__setupFilterCombo() 1529 self.filterCombo.activated[str].connect(self.__filterQtHelpDocumentation)
1530 self.__setupFilterCombo()
1512 1531
1513 settingstb = self.addToolBar(self.trUtf8("Settings")) 1532 settingstb = self.addToolBar(self.trUtf8("Settings"))
1514 settingstb.setObjectName("SettingsToolBar") 1533 settingstb.setObjectName("SettingsToolBar")
1515 settingstb.setIconSize(UI.Config.ToolBarIconSize) 1534 settingstb.setIconSize(UI.Config.ToolBarIconSize)
1516 settingstb.addAction(self.prefAct) 1535 settingstb.addAction(self.prefAct)
1984 2003
1985 self.syncManager().close() 2004 self.syncManager().close()
1986 2005
1987 self.searchEdit.openSearchManager().close() 2006 self.searchEdit.openSearchManager().close()
1988 2007
1989 self.__searchEngine.cancelIndexing() 2008 if self.useQtHelp:
1990 self.__searchEngine.cancelSearching() 2009 self.__searchEngine.cancelIndexing()
1991 2010 self.__searchEngine.cancelSearching()
1992 if self.__helpInstaller: 2011
1993 self.__helpInstaller.stop() 2012 if self.__helpInstaller:
2013 self.__helpInstaller.stop()
1994 2014
1995 self.searchEdit.saveSearches() 2015 self.searchEdit.saveSearches()
1996 2016
1997 state = self.saveState() 2017 state = self.saveState()
1998 Preferences.setHelp("HelpViewerState", state) 2018 Preferences.setHelp("HelpViewerState", state)
2281 if dlg.exec_() == QDialog.Accepted: 2301 if dlg.exec_() == QDialog.Accepted:
2282 dlg.storeData() 2302 dlg.storeData()
2283 self.__initWebSettings() 2303 self.__initWebSettings()
2284 2304
2285 @classmethod 2305 @classmethod
2306 def setUseQtHelp(cls, use):
2307 """
2308 Class method to set the QtHelp usage.
2309
2310 @param use flag indicating usage (boolean)
2311 """
2312 if use:
2313 cls.useQtHelp = use and QTHELP_AVAILABLE
2314 else:
2315 cls.useQtHelp = False
2316
2317 @classmethod
2286 def helpEngine(cls): 2318 def helpEngine(cls):
2287 """ 2319 """
2288 Class method to get a reference to the help engine. 2320 Class method to get a reference to the help engine.
2289 2321
2290 @return reference to the help engine (QHelpEngine) 2322 @return reference to the help engine (QHelpEngine)
2291 """ 2323 """
2292 if cls._helpEngine is None: 2324 if cls.useQtHelp:
2293 cls._helpEngine = \ 2325 if cls._helpEngine is None:
2294 QHelpEngine(os.path.join(Utilities.getConfigDir(), 2326 cls._helpEngine = \
2295 "browser", "eric5help.qhc")) 2327 QHelpEngine(os.path.join(Utilities.getConfigDir(),
2296 return cls._helpEngine 2328 "browser", "eric5help.qhc"))
2329 return cls._helpEngine
2330 else:
2331 return None
2297 2332
2298 @classmethod 2333 @classmethod
2299 def networkAccessManager(cls): 2334 def networkAccessManager(cls):
2300 """ 2335 """
2301 Class method to get a reference to the network access manager. 2336 Class method to get a reference to the network access manager.
2366 2401
2367 def __syncTOC(self): 2402 def __syncTOC(self):
2368 """ 2403 """
2369 Private slot to synchronize the TOC with the currently shown page. 2404 Private slot to synchronize the TOC with the currently shown page.
2370 """ 2405 """
2371 QApplication.setOverrideCursor(Qt.WaitCursor) 2406 if self.useQtHelp:
2372 url = self.currentBrowser().source() 2407 QApplication.setOverrideCursor(Qt.WaitCursor)
2373 self.__showTocWindow() 2408 url = self.currentBrowser().source()
2374 if not self.__tocWindow.syncToContent(url): 2409 self.__showTocWindow()
2375 self.statusBar().showMessage( 2410 if not self.__tocWindow.syncToContent(url):
2376 self.trUtf8("Could not find an associated content."), 5000) 2411 self.statusBar().showMessage(
2377 QApplication.restoreOverrideCursor() 2412 self.trUtf8("Could not find an associated content."), 5000)
2413 QApplication.restoreOverrideCursor()
2378 2414
2379 def __showTocWindow(self): 2415 def __showTocWindow(self):
2380 """ 2416 """
2381 Private method to show the table of contents window. 2417 Private method to show the table of contents window.
2382 """ 2418 """
2383 self.__activateDock(self.__tocWindow) 2419 if self.useQtHelp:
2420 self.__activateDock(self.__tocWindow)
2384 2421
2385 def __hideTocWindow(self): 2422 def __hideTocWindow(self):
2386 """ 2423 """
2387 Private method to hide the table of contents window. 2424 Private method to hide the table of contents window.
2388 """ 2425 """
2389 self.__tocDock.hide() 2426 if self.useQtHelp:
2427 self.__tocDock.hide()
2390 2428
2391 def __showIndexWindow(self): 2429 def __showIndexWindow(self):
2392 """ 2430 """
2393 Private method to show the index window. 2431 Private method to show the index window.
2394 """ 2432 """
2395 self.__activateDock(self.__indexWindow) 2433 if self.useQtHelp:
2434 self.__activateDock(self.__indexWindow)
2396 2435
2397 def __hideIndexWindow(self): 2436 def __hideIndexWindow(self):
2398 """ 2437 """
2399 Private method to hide the index window. 2438 Private method to hide the index window.
2400 """ 2439 """
2401 self.__indexDock.hide() 2440 if self.useQtHelp:
2441 self.__indexDock.hide()
2402 2442
2403 def __showSearchWindow(self): 2443 def __showSearchWindow(self):
2404 """ 2444 """
2405 Private method to show the search window. 2445 Private method to show the search window.
2406 """ 2446 """
2407 self.__activateDock(self.__searchWindow) 2447 if self.useQtHelp:
2448 self.__activateDock(self.__searchWindow)
2408 2449
2409 def __hideSearchWindow(self): 2450 def __hideSearchWindow(self):
2410 """ 2451 """
2411 Private method to hide the search window. 2452 Private method to hide the search window.
2412 """ 2453 """
2413 self.__searchDock.hide() 2454 if self.useQtHelp:
2455 self.__searchDock.hide()
2414 2456
2415 def __activateDock(self, widget): 2457 def __activateDock(self, widget):
2416 """ 2458 """
2417 Private method to activate the dock widget of the given widget. 2459 Private method to activate the dock widget of the given widget.
2418 2460
2424 2466
2425 def __setupFilterCombo(self): 2467 def __setupFilterCombo(self):
2426 """ 2468 """
2427 Private slot to setup the filter combo box. 2469 Private slot to setup the filter combo box.
2428 """ 2470 """
2429 curFilter = self.filterCombo.currentText() 2471 if self.useQtHelp:
2430 if not curFilter: 2472 curFilter = self.filterCombo.currentText()
2431 curFilter = self.__helpEngine.currentFilter() 2473 if not curFilter:
2432 self.filterCombo.clear() 2474 curFilter = self.__helpEngine.currentFilter()
2433 self.filterCombo.addItems(self.__helpEngine.customFilters()) 2475 self.filterCombo.clear()
2434 idx = self.filterCombo.findText(curFilter) 2476 self.filterCombo.addItems(self.__helpEngine.customFilters())
2435 if idx < 0: 2477 idx = self.filterCombo.findText(curFilter)
2436 idx = 0 2478 if idx < 0:
2437 self.filterCombo.setCurrentIndex(idx) 2479 idx = 0
2480 self.filterCombo.setCurrentIndex(idx)
2438 2481
2439 def __filterQtHelpDocumentation(self, customFilter): 2482 def __filterQtHelpDocumentation(self, customFilter):
2440 """ 2483 """
2441 Private slot to filter the QtHelp documentation. 2484 Private slot to filter the QtHelp documentation.
2442 2485
2443 @param customFilter name of filter to be applied (string) 2486 @param customFilter name of filter to be applied (string)
2444 """ 2487 """
2445 self.__helpEngine.setCurrentFilter(customFilter) 2488 if self.__helpEngine:
2489 self.__helpEngine.setCurrentFilter(customFilter)
2446 2490
2447 def __manageQtHelpDocumentation(self): 2491 def __manageQtHelpDocumentation(self):
2448 """ 2492 """
2449 Private slot to manage the QtHelp documentation database. 2493 Private slot to manage the QtHelp documentation database.
2450 """ 2494 """
2451 from .QtHelpDocumentationDialog import QtHelpDocumentationDialog 2495 if self.useQtHelp:
2452 dlg = QtHelpDocumentationDialog(self.__helpEngine, self) 2496 from .QtHelpDocumentationDialog import QtHelpDocumentationDialog
2453 dlg.exec_() 2497 dlg = QtHelpDocumentationDialog(self.__helpEngine, self)
2454 if dlg.hasChanges(): 2498 dlg.exec_()
2455 for i in sorted(dlg.getTabsToClose(), reverse=True): 2499 if dlg.hasChanges():
2456 self.tabWidget.closeBrowserAt(i) 2500 for i in sorted(dlg.getTabsToClose(), reverse=True):
2457 self.__helpEngine.setupData() 2501 self.tabWidget.closeBrowserAt(i)
2502 self.__helpEngine.setupData()
2458 2503
2459 def getSourceFileList(self): 2504 def getSourceFileList(self):
2460 """ 2505 """
2461 Public method to get a list of all opened source files. 2506 Public method to get a list of all opened source files.
2462 2507
2466 2511
2467 def __manageQtHelpFilters(self): 2512 def __manageQtHelpFilters(self):
2468 """ 2513 """
2469 Private slot to manage the QtHelp filters. 2514 Private slot to manage the QtHelp filters.
2470 """ 2515 """
2471 from .QtHelpFiltersDialog import QtHelpFiltersDialog 2516 if self.useQtHelp:
2472 dlg = QtHelpFiltersDialog(self.__helpEngine, self) 2517 from .QtHelpFiltersDialog import QtHelpFiltersDialog
2473 dlg.exec_() 2518 dlg = QtHelpFiltersDialog(self.__helpEngine, self)
2519 dlg.exec_()
2474 2520
2475 def __indexingStarted(self): 2521 def __indexingStarted(self):
2476 """ 2522 """
2477 Private slot to handle the start of the indexing process. 2523 Private slot to handle the start of the indexing process.
2478 """ 2524 """
2479 self.__indexing = True 2525 if self.useQtHelp:
2480 if self.__indexingProgress is None: 2526 self.__indexing = True
2481 self.__indexingProgress = QWidget() 2527 if self.__indexingProgress is None:
2482 layout = QHBoxLayout(self.__indexingProgress) 2528 self.__indexingProgress = QWidget()
2483 layout.setMargin(0) 2529 layout = QHBoxLayout(self.__indexingProgress)
2484 sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) 2530 layout.setMargin(0)
2485 2531 sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
2486 label = QLabel(self.trUtf8("Updating search index")) 2532
2487 label.setSizePolicy(sizePolicy) 2533 label = QLabel(self.trUtf8("Updating search index"))
2488 layout.addWidget(label) 2534 label.setSizePolicy(sizePolicy)
2489 2535 layout.addWidget(label)
2490 progressBar = QProgressBar() 2536
2491 progressBar.setRange(0, 0) 2537 progressBar = QProgressBar()
2492 progressBar.setTextVisible(False) 2538 progressBar.setRange(0, 0)
2493 progressBar.setFixedHeight(16) 2539 progressBar.setTextVisible(False)
2494 progressBar.setSizePolicy(sizePolicy) 2540 progressBar.setFixedHeight(16)
2495 layout.addWidget(progressBar) 2541 progressBar.setSizePolicy(sizePolicy)
2496 2542 layout.addWidget(progressBar)
2497 self.statusBar().insertPermanentWidget(0, self.__indexingProgress) 2543
2544 self.statusBar().insertPermanentWidget(0, self.__indexingProgress)
2498 2545
2499 def __indexingFinished(self): 2546 def __indexingFinished(self):
2500 """ 2547 """
2501 Private slot to handle the start of the indexing process. 2548 Private slot to handle the start of the indexing process.
2502 """ 2549 """
2503 self.statusBar().removeWidget(self.__indexingProgress) 2550 if self.useQtHelp:
2504 self.__indexingProgress = None 2551 self.statusBar().removeWidget(self.__indexingProgress)
2505 self.__indexing = False 2552 self.__indexingProgress = None
2506 if self.__searchWord is not None: 2553 self.__indexing = False
2507 self.__searchForWord() 2554 if self.__searchWord is not None:
2555 self.__searchForWord()
2508 2556
2509 def __searchForWord(self): 2557 def __searchForWord(self):
2510 """ 2558 """
2511 Private slot to search for a word. 2559 Private slot to search for a word.
2512 """ 2560 """
2513 if not self.__indexing and self.__searchWord is not None: 2561 if self.useQtHelp and not self.__indexing and self.__searchWord is not None:
2514 self.__searchDock.show() 2562 self.__searchDock.show()
2515 self.__searchDock.raise_() 2563 self.__searchDock.raise_()
2516 query = QHelpSearchQuery(QHelpSearchQuery.DEFAULT, [self.__searchWord]) 2564 query = QHelpSearchQuery(QHelpSearchQuery.DEFAULT, [self.__searchWord])
2517 self.__searchEngine.search([query]) 2565 self.__searchEngine.search([query])
2518 self.__searchWord = None 2566 self.__searchWord = None
2521 """ 2569 """
2522 Public method to search for a word. 2570 Public method to search for a word.
2523 2571
2524 @param word word to search for (string) 2572 @param word word to search for (string)
2525 """ 2573 """
2526 self.__searchWord = word 2574 if self.useQtHelp:
2527 self.__searchForWord() 2575 self.__searchWord = word
2576 self.__searchForWord()
2528 2577
2529 def __lookForNewDocumentation(self): 2578 def __lookForNewDocumentation(self):
2530 """ 2579 """
2531 Private slot to look for new documentation to be loaded into the 2580 Private slot to look for new documentation to be loaded into the
2532 help database. 2581 help database.
2533 """ 2582 """
2534 from .HelpDocsInstaller import HelpDocsInstaller 2583 if self.useQtHelp:
2535 self.__helpInstaller = HelpDocsInstaller(self.__helpEngine.collectionFile()) 2584 from .HelpDocsInstaller import HelpDocsInstaller
2536 self.__helpInstaller.errorMessage.connect(self.__showInstallationError) 2585 self.__helpInstaller = HelpDocsInstaller(self.__helpEngine.collectionFile())
2537 self.__helpInstaller.docsInstalled.connect(self.__docsInstalled) 2586 self.__helpInstaller.errorMessage.connect(self.__showInstallationError)
2538 2587 self.__helpInstaller.docsInstalled.connect(self.__docsInstalled)
2539 self.statusBar().showMessage(self.trUtf8("Looking for Documentation...")) 2588
2540 self.__helpInstaller.installDocs() 2589 self.statusBar().showMessage(self.trUtf8("Looking for Documentation..."))
2590 self.__helpInstaller.installDocs()
2541 2591
2542 def __showInstallationError(self, message): 2592 def __showInstallationError(self, message):
2543 """ 2593 """
2544 Private slot to show installation errors. 2594 Private slot to show installation errors.
2545 2595
2553 """ 2603 """
2554 Private slot handling the end of documentation installation. 2604 Private slot handling the end of documentation installation.
2555 2605
2556 @param installed flag indicating that documents were installed (boolean) 2606 @param installed flag indicating that documents were installed (boolean)
2557 """ 2607 """
2558 if installed: 2608 if self.useQtHelp:
2559 self.__helpEngine.setupData() 2609 if installed:
2560 self.statusBar().clearMessage() 2610 self.__helpEngine.setupData()
2611 self.statusBar().clearMessage()
2561 2612
2562 def __initHelpDb(self): 2613 def __initHelpDb(self):
2563 """ 2614 """
2564 Private slot to initialize the documentation database. 2615 Private slot to initialize the documentation database.
2565 """ 2616 """
2566 if not self.__helpEngine.setupData(): 2617 if self.useQtHelp:
2567 return 2618 if not self.__helpEngine.setupData():
2568 2619 return
2569 unfiltered = self.trUtf8("Unfiltered") 2620
2570 if unfiltered not in self.__helpEngine.customFilters(): 2621 unfiltered = self.trUtf8("Unfiltered")
2571 hc = QHelpEngineCore(self.__helpEngine.collectionFile()) 2622 if unfiltered not in self.__helpEngine.customFilters():
2572 hc.setupData() 2623 hc = QHelpEngineCore(self.__helpEngine.collectionFile())
2573 hc.addCustomFilter(unfiltered, []) 2624 hc.setupData()
2574 hc = None 2625 hc.addCustomFilter(unfiltered, [])
2575 del hc 2626 hc = None
2576 2627 del hc
2577 self.__helpEngine.blockSignals(True) 2628
2578 self.__helpEngine.setCurrentFilter(unfiltered) 2629 self.__helpEngine.blockSignals(True)
2579 self.__helpEngine.blockSignals(False) 2630 self.__helpEngine.setCurrentFilter(unfiltered)
2580 self.__helpEngine.setupData() 2631 self.__helpEngine.blockSignals(False)
2632 self.__helpEngine.setupData()
2581 2633
2582 def __warning(self, msg): 2634 def __warning(self, msg):
2583 """ 2635 """
2584 Private slot handling warnings from the help engine. 2636 Private slot handling warnings from the help engine.
2585 2637
2812 @return icon for the URL (QIcon) 2864 @return icon for the URL (QIcon)
2813 """ 2865 """
2814 scheme = url.scheme() 2866 scheme = url.scheme()
2815 if scheme in ["eric", "about"]: 2867 if scheme in ["eric", "about"]:
2816 return UI.PixmapCache.getIcon("ericWeb.png") 2868 return UI.PixmapCache.getIcon("ericWeb.png")
2817 elif scheme == "qthelp": 2869 elif scheme == "qthelp" and QTHELP_AVAILABLE:
2818 return UI.PixmapCache.getIcon("qthelp.png") 2870 return UI.PixmapCache.getIcon("qthelp.png")
2819 elif scheme == "file": 2871 elif scheme == "file":
2820 return UI.PixmapCache.getIcon("fileMisc.png") 2872 return UI.PixmapCache.getIcon("fileMisc.png")
2821 elif scheme == "abp": 2873 elif scheme == "abp":
2822 return UI.PixmapCache.getIcon("adBlockPlus.png") 2874 return UI.PixmapCache.getIcon("adBlockPlus.png")

eric ide

mercurial