src/eric7/WebBrowser/WebBrowserTabWidget.py

branch
eric7
changeset 9413
80c06d472826
parent 9278
36448ca469c2
child 9473
3f23dbf37dbe
equal deleted inserted replaced
9412:45e7bb09c120 9413:80c06d472826
12 from PyQt6.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QMarginsF 12 from PyQt6.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QMarginsF
13 from PyQt6.QtGui import QIcon, QPixmap, QPainter, QPageLayout 13 from PyQt6.QtGui import QIcon, QPixmap, QPainter, QPageLayout
14 from PyQt6.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, QDialog 14 from PyQt6.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, QDialog
15 from PyQt6.QtPrintSupport import QPrinter, QPrintDialog, QAbstractPrintDialog 15 from PyQt6.QtPrintSupport import QPrinter, QPrintDialog, QAbstractPrintDialog
16 16
17 from EricWidgets.EricTabWidget import EricTabWidget 17 from eric7.EricWidgets.EricTabWidget import EricTabWidget
18 from EricWidgets import EricMessageBox 18 from eric7.EricWidgets import EricMessageBox
19 from EricWidgets.EricApplication import ericApp 19 from eric7.EricWidgets.EricApplication import ericApp
20 from EricGui.EricOverrideCursor import EricOverrideCursor 20 from eric7.EricGui.EricOverrideCursor import EricOverrideCursor
21 21
22 from .WebBrowserView import WebBrowserView 22 from .WebBrowserView import WebBrowserView
23 from .WebBrowserPage import WebBrowserPage 23 from .WebBrowserPage import WebBrowserPage
24 from .Tools import WebBrowserTools 24 from .Tools import WebBrowserTools
25 from . import WebInspector 25 from . import WebInspector
26 26
27 import UI.PixmapCache 27 from eric7.EricGui import EricPixmapCache
28 28
29 import Utilities 29 from eric7 import Globals, Preferences, Utilities
30 import Preferences
31 import Globals
32 30
33 31
34 def isCupsAvailable(): 32 def isCupsAvailable():
35 """ 33 """
36 Static method to test the availability of CUPS. 34 Static method to test the availability of CUPS.
116 self.__navigationMenu = QMenu(self) 114 self.__navigationMenu = QMenu(self)
117 self.__navigationMenu.aboutToShow.connect(self.__showNavigationMenu) 115 self.__navigationMenu.aboutToShow.connect(self.__showNavigationMenu)
118 self.__navigationMenu.triggered.connect(self.__navigationMenuTriggered) 116 self.__navigationMenu.triggered.connect(self.__navigationMenuTriggered)
119 117
120 self.__navigationButton = QToolButton(self) 118 self.__navigationButton = QToolButton(self)
121 self.__navigationButton.setIcon(UI.PixmapCache.getIcon("1downarrow")) 119 self.__navigationButton.setIcon(EricPixmapCache.getIcon("1downarrow"))
122 self.__navigationButton.setToolTip(self.tr("Show a navigation menu")) 120 self.__navigationButton.setToolTip(self.tr("Show a navigation menu"))
123 self.__navigationButton.setPopupMode( 121 self.__navigationButton.setPopupMode(
124 QToolButton.ToolButtonPopupMode.InstantPopup 122 QToolButton.ToolButtonPopupMode.InstantPopup
125 ) 123 )
126 self.__navigationButton.setMenu(self.__navigationMenu) 124 self.__navigationButton.setMenu(self.__navigationMenu)
129 127
130 self.__closedTabsMenu = QMenu(self) 128 self.__closedTabsMenu = QMenu(self)
131 self.__closedTabsMenu.aboutToShow.connect(self.__aboutToShowClosedTabsMenu) 129 self.__closedTabsMenu.aboutToShow.connect(self.__aboutToShowClosedTabsMenu)
132 130
133 self.__closedTabsButton = QToolButton(self) 131 self.__closedTabsButton = QToolButton(self)
134 self.__closedTabsButton.setIcon(UI.PixmapCache.getIcon("trash")) 132 self.__closedTabsButton.setIcon(EricPixmapCache.getIcon("trash"))
135 self.__closedTabsButton.setToolTip( 133 self.__closedTabsButton.setToolTip(
136 self.tr("Show a navigation menu for closed tabs") 134 self.tr("Show a navigation menu for closed tabs")
137 ) 135 )
138 self.__closedTabsButton.setPopupMode( 136 self.__closedTabsButton.setPopupMode(
139 QToolButton.ToolButtonPopupMode.InstantPopup 137 QToolButton.ToolButtonPopupMode.InstantPopup
146 self.tabCloseRequested.connect(self.closeBrowserAt) 144 self.tabCloseRequested.connect(self.closeBrowserAt)
147 145
148 self.setCornerWidget(self.__rightCornerWidget, Qt.Corner.TopRightCorner) 146 self.setCornerWidget(self.__rightCornerWidget, Qt.Corner.TopRightCorner)
149 147
150 self.__newTabButton = QToolButton(self) 148 self.__newTabButton = QToolButton(self)
151 self.__newTabButton.setIcon(UI.PixmapCache.getIcon("plus")) 149 self.__newTabButton.setIcon(EricPixmapCache.getIcon("plus"))
152 self.__newTabButton.setToolTip(self.tr("Open a new web browser tab")) 150 self.__newTabButton.setToolTip(self.tr("Open a new web browser tab"))
153 self.setCornerWidget(self.__newTabButton, Qt.Corner.TopLeftCorner) 151 self.setCornerWidget(self.__newTabButton, Qt.Corner.TopLeftCorner)
154 self.__newTabButton.clicked.connect(self.__newBrowser) 152 self.__newTabButton.clicked.connect(self.__newBrowser)
155 153
156 self.__initTabContextMenu() 154 self.__initTabContextMenu()
161 """ 159 """
162 Private method to create the tab context menu. 160 Private method to create the tab context menu.
163 """ 161 """
164 self.__tabContextMenu = QMenu(self) 162 self.__tabContextMenu = QMenu(self)
165 self.tabContextNewAct = self.__tabContextMenu.addAction( 163 self.tabContextNewAct = self.__tabContextMenu.addAction(
166 UI.PixmapCache.getIcon("tabNew"), self.tr("New Tab"), self.newBrowser 164 EricPixmapCache.getIcon("tabNew"), self.tr("New Tab"), self.newBrowser
167 ) 165 )
168 self.__tabContextMenu.addSeparator() 166 self.__tabContextMenu.addSeparator()
169 self.leftMenuAct = self.__tabContextMenu.addAction( 167 self.leftMenuAct = self.__tabContextMenu.addAction(
170 UI.PixmapCache.getIcon("1leftarrow"), 168 EricPixmapCache.getIcon("1leftarrow"),
171 self.tr("Move Left"), 169 self.tr("Move Left"),
172 self.__tabContextMenuMoveLeft, 170 self.__tabContextMenuMoveLeft,
173 ) 171 )
174 self.rightMenuAct = self.__tabContextMenu.addAction( 172 self.rightMenuAct = self.__tabContextMenu.addAction(
175 UI.PixmapCache.getIcon("1rightarrow"), 173 EricPixmapCache.getIcon("1rightarrow"),
176 self.tr("Move Right"), 174 self.tr("Move Right"),
177 self.__tabContextMenuMoveRight, 175 self.__tabContextMenuMoveRight,
178 ) 176 )
179 self.__tabContextMenu.addSeparator() 177 self.__tabContextMenu.addSeparator()
180 self.tabContextCloneAct = self.__tabContextMenu.addAction( 178 self.tabContextCloneAct = self.__tabContextMenu.addAction(
181 self.tr("Duplicate Page"), self.__tabContextMenuClone 179 self.tr("Duplicate Page"), self.__tabContextMenuClone
182 ) 180 )
183 self.__tabContextMenu.addSeparator() 181 self.__tabContextMenu.addSeparator()
184 self.tabContextCloseAct = self.__tabContextMenu.addAction( 182 self.tabContextCloseAct = self.__tabContextMenu.addAction(
185 UI.PixmapCache.getIcon("tabClose"), 183 EricPixmapCache.getIcon("tabClose"),
186 self.tr("Close"), 184 self.tr("Close"),
187 self.__tabContextMenuClose, 185 self.__tabContextMenuClose,
188 ) 186 )
189 self.tabContextCloseOthersAct = self.__tabContextMenu.addAction( 187 self.tabContextCloseOthersAct = self.__tabContextMenu.addAction(
190 UI.PixmapCache.getIcon("tabCloseOther"), 188 EricPixmapCache.getIcon("tabCloseOther"),
191 self.tr("Close Others"), 189 self.tr("Close Others"),
192 self.__tabContextMenuCloseOthers, 190 self.__tabContextMenuCloseOthers,
193 ) 191 )
194 self.__tabContextMenu.addAction(self.tr("Close All"), self.closeAllBrowsers) 192 self.__tabContextMenu.addAction(self.tr("Close All"), self.closeAllBrowsers)
195 self.__tabContextMenu.addSeparator() 193 self.__tabContextMenu.addSeparator()
196 self.__tabContextMenu.addAction( 194 self.__tabContextMenu.addAction(
197 UI.PixmapCache.getIcon("printPreview"), 195 EricPixmapCache.getIcon("printPreview"),
198 self.tr("Print Preview"), 196 self.tr("Print Preview"),
199 self.__tabContextMenuPrintPreview, 197 self.__tabContextMenuPrintPreview,
200 ) 198 )
201 self.__tabContextMenu.addAction( 199 self.__tabContextMenu.addAction(
202 UI.PixmapCache.getIcon("print"), 200 EricPixmapCache.getIcon("print"),
203 self.tr("Print"), 201 self.tr("Print"),
204 self.__tabContextMenuPrint, 202 self.__tabContextMenuPrint,
205 ) 203 )
206 self.__tabContextMenu.addAction( 204 self.__tabContextMenu.addAction(
207 UI.PixmapCache.getIcon("printPdf"), 205 EricPixmapCache.getIcon("printPdf"),
208 self.tr("Print as PDF"), 206 self.tr("Print as PDF"),
209 self.__tabContextMenuPrintPdf, 207 self.__tabContextMenuPrintPdf,
210 ) 208 )
211 self.__tabContextMenu.addSeparator() 209 self.__tabContextMenu.addSeparator()
212 if hasattr(WebBrowserPage, "isAudioMuted"): 210 if hasattr(WebBrowserPage, "isAudioMuted"):
215 ) 213 )
216 self.__tabContextMenu.addSeparator() 214 self.__tabContextMenu.addSeparator()
217 else: 215 else:
218 self.__audioAct = None 216 self.__audioAct = None
219 self.__tabContextMenu.addAction( 217 self.__tabContextMenu.addAction(
220 UI.PixmapCache.getIcon("reload"), 218 EricPixmapCache.getIcon("reload"),
221 self.tr("Reload All"), 219 self.tr("Reload All"),
222 self.reloadAllBrowsers, 220 self.reloadAllBrowsers,
223 ) 221 )
224 self.__tabContextMenu.addSeparator() 222 self.__tabContextMenu.addSeparator()
225 self.__tabContextMenu.addAction( 223 self.__tabContextMenu.addAction(
226 UI.PixmapCache.getIcon("addBookmark"), 224 EricPixmapCache.getIcon("addBookmark"),
227 self.tr("Bookmark All Tabs"), 225 self.tr("Bookmark All Tabs"),
228 self.__mainWindow.bookmarkAll, 226 self.__mainWindow.bookmarkAll,
229 ) 227 )
230 228
231 self.__tabBackContextMenu = QMenu(self) 229 self.__tabBackContextMenu = QMenu(self)
232 self.__tabBackContextMenu.addAction(self.tr("Close All"), self.closeAllBrowsers) 230 self.__tabBackContextMenu.addAction(self.tr("Close All"), self.closeAllBrowsers)
233 self.__tabBackContextMenu.addAction( 231 self.__tabBackContextMenu.addAction(
234 UI.PixmapCache.getIcon("reload"), 232 EricPixmapCache.getIcon("reload"),
235 self.tr("Reload All"), 233 self.tr("Reload All"),
236 self.reloadAllBrowsers, 234 self.reloadAllBrowsers,
237 ) 235 )
238 self.__tabBackContextMenu.addAction( 236 self.__tabBackContextMenu.addAction(
239 UI.PixmapCache.getIcon("addBookmark"), 237 EricPixmapCache.getIcon("addBookmark"),
240 self.tr("Bookmark All Tabs"), 238 self.tr("Bookmark All Tabs"),
241 self.__mainWindow.bookmarkAll, 239 self.__mainWindow.bookmarkAll,
242 ) 240 )
243 self.__tabBackContextMenu.addSeparator() 241 self.__tabBackContextMenu.addSeparator()
244 self.__restoreClosedTabAct = self.__tabBackContextMenu.addAction( 242 self.__restoreClosedTabAct = self.__tabBackContextMenu.addAction(
245 UI.PixmapCache.getIcon("trash"), self.tr("Restore Closed Tab") 243 EricPixmapCache.getIcon("trash"), self.tr("Restore Closed Tab")
246 ) 244 )
247 self.__restoreClosedTabAct.setEnabled(False) 245 self.__restoreClosedTabAct.setEnabled(False)
248 self.__restoreClosedTabAct.setData(0) 246 self.__restoreClosedTabAct.setData(0)
249 self.__restoreClosedTabAct.triggered.connect( 247 self.__restoreClosedTabAct.triggered.connect(
250 lambda: self.restoreClosedTab(self.__restoreClosedTabAct) 248 lambda: self.restoreClosedTab(self.__restoreClosedTabAct)
268 self.tabContextCloseOthersAct.setEnabled(self.count() > 1) 266 self.tabContextCloseOthersAct.setEnabled(self.count() > 1)
269 267
270 if self.__audioAct is not None: 268 if self.__audioAct is not None:
271 if self.widget(self.__tabContextMenuIndex).page().isAudioMuted(): 269 if self.widget(self.__tabContextMenuIndex).page().isAudioMuted():
272 self.__audioAct.setText(self.tr("Unmute Tab")) 270 self.__audioAct.setText(self.tr("Unmute Tab"))
273 self.__audioAct.setIcon(UI.PixmapCache.getIcon("audioVolumeHigh")) 271 self.__audioAct.setIcon(EricPixmapCache.getIcon("audioVolumeHigh"))
274 else: 272 else:
275 self.__audioAct.setText(self.tr("Mute Tab")) 273 self.__audioAct.setText(self.tr("Mute Tab"))
276 self.__audioAct.setIcon(UI.PixmapCache.getIcon("audioVolumeMuted")) 274 self.__audioAct.setIcon(EricPixmapCache.getIcon("audioVolumeMuted"))
277 275
278 self.__tabContextMenu.popup(coord) 276 self.__tabContextMenu.popup(coord)
279 277
280 def __tabContextMenuMoveLeft(self): 278 def __tabContextMenuMoveLeft(self):
281 """ 279 """
368 pix = QPixmap(32, 32) 366 pix = QPixmap(32, 32)
369 pix.fill(Qt.GlobalColor.transparent) 367 pix.fill(Qt.GlobalColor.transparent)
370 painter = QPainter(pix) 368 painter = QPainter(pix)
371 icon.paint(painter, 0, 0, 22, 22) 369 icon.paint(painter, 0, 0, 22, 22)
372 if page.isAudioMuted(): 370 if page.isAudioMuted():
373 audioIcon = UI.PixmapCache.getIcon("audioMuted") 371 audioIcon = EricPixmapCache.getIcon("audioMuted")
374 else: 372 else:
375 audioIcon = UI.PixmapCache.getIcon("audioPlaying") 373 audioIcon = EricPixmapCache.getIcon("audioPlaying")
376 audioIcon.paint(painter, 13, 13, 18, 18) 374 audioIcon.paint(painter, 13, 13, 18, 18)
377 painter.end() 375 painter.end()
378 self.setTabIcon(index, QIcon(pix)) 376 self.setTabIcon(index, QIcon(pix))
379 else: 377 else:
380 self.setTabIcon(index, icon) 378 self.setTabIcon(index, icon)
414 412
415 from .UrlBar.UrlBar import UrlBar 413 from .UrlBar.UrlBar import UrlBar
416 414
417 urlbar = UrlBar(self.__mainWindow, self) 415 urlbar = UrlBar(self.__mainWindow, self)
418 if self.__historyCompleter is None: 416 if self.__historyCompleter is None:
419 import WebBrowser.WebBrowserWindow 417 from eric7.WebBrowser.WebBrowserWindow import WebBrowserWindow
420 from .History.HistoryCompleter import ( 418 from .History.HistoryCompleter import (
421 HistoryCompletionModel, 419 HistoryCompletionModel,
422 HistoryCompleter, 420 HistoryCompleter,
423 ) 421 )
424 422
425 histMgr = WebBrowser.WebBrowserWindow.WebBrowserWindow.historyManager() 423 histMgr = WebBrowserWindow.historyManager()
426 self.__historyCompletionModel = HistoryCompletionModel(self) 424 self.__historyCompletionModel = HistoryCompletionModel(self)
427 self.__historyCompletionModel.setSourceModel(histMgr.historyFilterModel()) 425 self.__historyCompletionModel.setSourceModel(histMgr.historyFilterModel())
428 self.__historyCompleter = HistoryCompleter( 426 self.__historyCompleter = HistoryCompleter(
429 self.__historyCompletionModel, self 427 self.__historyCompletionModel, self
430 ) 428 )
925 index = self.indexOf(browser) 923 index = self.indexOf(browser)
926 if progress == 0: 924 if progress == 0:
927 # page loading has started 925 # page loading has started
928 anim = self.animationLabel(index, "loadingAnimation", 40) 926 anim = self.animationLabel(index, "loadingAnimation", 40)
929 if not anim: 927 if not anim:
930 self.setTabIcon(index, UI.PixmapCache.getIcon("loading")) 928 self.setTabIcon(index, EricPixmapCache.getIcon("loading"))
931 else: 929 else:
932 self.setTabIcon(index, QIcon()) 930 self.setTabIcon(index, QIcon())
933 self.setTabText(index, self.tr("Loading...")) 931 self.setTabText(index, self.tr("Loading..."))
934 self.setTabToolTip(index, self.tr("Loading...")) 932 self.setTabToolTip(index, self.tr("Loading..."))
935 self.showMessage.emit(self.tr("Loading...")) 933 self.showMessage.emit(self.tr("Loading..."))
936 934
937 self.__mainWindow.setLoadingActions(True) 935 self.__mainWindow.setLoadingActions(True)
938 elif progress == 100: 936 elif progress == 100:
939 import WebBrowser.WebBrowserWindow 937 from eric7.WebBrowser.WebBrowserWindow import WebBrowserWindow
940 938
941 self.resetAnimation(index) 939 self.resetAnimation(index)
942 self.setTabIcon( 940 self.setTabIcon(index, WebBrowserWindow.icon(browser.url()))
943 index, WebBrowser.WebBrowserWindow.WebBrowserWindow.icon(browser.url())
944 )
945 self.showMessage.emit(self.tr("Finished loading")) 941 self.showMessage.emit(self.tr("Finished loading"))
946 942
947 self.__mainWindow.setLoadingActions(False) 943 self.__mainWindow.setLoadingActions(False)
948 944
949 def __iconChanged(self, browser): 945 def __iconChanged(self, browser):
988 ), 984 ),
989 modal=True, 985 modal=True,
990 parent=self, 986 parent=self,
991 ) 987 )
992 quitButton = mb.addButton(self.tr("&Quit"), EricMessageBox.AcceptRole) 988 quitButton = mb.addButton(self.tr("&Quit"), EricMessageBox.AcceptRole)
993 quitButton.setIcon(UI.PixmapCache.getIcon("exit")) 989 quitButton.setIcon(EricPixmapCache.getIcon("exit"))
994 closeTabButton = mb.addButton( 990 closeTabButton = mb.addButton(
995 self.tr("C&lose Current Tab"), EricMessageBox.AcceptRole 991 self.tr("C&lose Current Tab"), EricMessageBox.AcceptRole
996 ) 992 )
997 closeTabButton.setIcon(UI.PixmapCache.getIcon("tabClose")) 993 closeTabButton.setIcon(EricPixmapCache.getIcon("tabClose"))
998 mb.addButton(EricMessageBox.Cancel) 994 mb.addButton(EricMessageBox.Cancel)
999 mb.exec() 995 mb.exec()
1000 if mb.clickedButton() == quitButton: 996 if mb.clickedButton() == quitButton:
1001 return True 997 return True
1002 else: 998 else:

eric ide

mercurial