WebBrowser/WebBrowserTabWidget.py

branch
QtWebEngine
changeset 4792
f55fa7eb3cf3
parent 4790
deeea3d64858
child 4795
6e0a26c633b2
equal deleted inserted replaced
4791:a1e53a9ffcf3 4792:f55fa7eb3cf3
12 import os 12 import os
13 13
14 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl 14 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl
15 from PyQt5.QtGui import QIcon 15 from PyQt5.QtGui import QIcon
16 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, QDialog 16 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, QDialog
17 ##from PyQt5.QtPrintSupport import QPrinter, QPrintDialog 17 from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
18 ##from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest 18 ##from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
19 19
20 from E5Gui.E5TabWidget import E5TabWidget 20 from E5Gui.E5TabWidget import E5TabWidget
21 from E5Gui import E5MessageBox 21 from E5Gui import E5MessageBox
22 from E5Gui.E5Application import e5App 22 from E5Gui.E5Application import e5App
23 23
24 from .WebBrowserView import WebBrowserView 24 from .WebBrowserView import WebBrowserView
25 from .Tools import WebBrowserTools
25 from . import WebInspector 26 from . import WebInspector
26 27
27 import UI.PixmapCache 28 import UI.PixmapCache
28 29
29 import Utilities 30 import Utilities
169 self.tabContextCloseOthersAct = self.__tabContextMenu.addAction( 170 self.tabContextCloseOthersAct = self.__tabContextMenu.addAction(
170 UI.PixmapCache.getIcon("tabCloseOther.png"), 171 UI.PixmapCache.getIcon("tabCloseOther.png"),
171 self.tr("Close Others"), self.__tabContextMenuCloseOthers) 172 self.tr("Close Others"), self.__tabContextMenuCloseOthers)
172 self.__tabContextMenu.addAction( 173 self.__tabContextMenu.addAction(
173 self.tr('Close All'), self.closeAllBrowsers) 174 self.tr('Close All'), self.closeAllBrowsers)
174 # TODO: Print 175 self.__tabContextMenu.addSeparator()
175 ## self.__tabContextMenu.addSeparator() 176 self.__tabContextMenu.addAction(
176 ## self.__tabContextMenu.addAction( 177 UI.PixmapCache.getIcon("printPreview.png"),
177 ## UI.PixmapCache.getIcon("printPreview.png"), 178 self.tr('Print Preview'), self.__tabContextMenuPrintPreview)
178 ## self.tr('Print Preview'), self.__tabContextMenuPrintPreview) 179 self.__tabContextMenu.addAction(
179 ## self.__tabContextMenu.addAction( 180 UI.PixmapCache.getIcon("print.png"),
180 ## UI.PixmapCache.getIcon("print.png"), 181 self.tr('Print'), self.__tabContextMenuPrint)
181 ## self.tr('Print'), self.__tabContextMenuPrint) 182 self.__tabContextMenu.addAction(
182 ## self.__tabContextMenu.addAction( 183 UI.PixmapCache.getIcon("printPdf.png"),
183 ## UI.PixmapCache.getIcon("printPdf.png"), 184 self.tr('Print as PDF'), self.__tabContextMenuPrintPdf)
184 ## self.tr('Print as PDF'), self.__tabContextMenuPrintPdf)
185 self.__tabContextMenu.addSeparator() 185 self.__tabContextMenu.addSeparator()
186 self.__tabContextMenu.addAction( 186 self.__tabContextMenu.addAction(
187 UI.PixmapCache.getIcon("reload.png"), 187 UI.PixmapCache.getIcon("reload.png"),
188 self.tr('Reload All'), self.reloadAllBrowsers) 188 self.tr('Reload All'), self.reloadAllBrowsers)
189 self.__tabContextMenu.addSeparator() 189 self.__tabContextMenu.addSeparator()
269 index = self.__tabContextMenuIndex 269 index = self.__tabContextMenuIndex
270 for i in list(range(self.count() - 1, index, -1)) + \ 270 for i in list(range(self.count() - 1, index, -1)) + \
271 list(range(index - 1, -1, -1)): 271 list(range(index - 1, -1, -1)):
272 self.closeBrowserAt(i) 272 self.closeBrowserAt(i)
273 273
274 # TODO: Print 274 def __tabContextMenuPrint(self):
275 ## def __tabContextMenuPrint(self): 275 """
276 ## """ 276 Private method to print the selected tab.
277 ## Private method to print the selected tab. 277 """
278 ## """ 278 browser = self.widget(self.__tabContextMenuIndex)
279 ## browser = self.widget(self.__tabContextMenuIndex) 279 self.printBrowser(browser)
280 ## self.printBrowser(browser) 280
281 ## 281 def __tabContextMenuPrintPdf(self):
282 ## def __tabContextMenuPrintPdf(self): 282 """
283 ## """ 283 Private method to print the selected tab as PDF.
284 ## Private method to print the selected tab as PDF. 284 """
285 ## """ 285 browser = self.widget(self.__tabContextMenuIndex)
286 ## browser = self.widget(self.__tabContextMenuIndex) 286 self.printBrowserPdf(browser)
287 ## self.printBrowserPdf(browser) 287
288 ## 288 def __tabContextMenuPrintPreview(self):
289 ## def __tabContextMenuPrintPreview(self): 289 """
290 ## """ 290 Private method to show a print preview of the selected tab.
291 ## Private method to show a print preview of the selected tab. 291 """
292 ## """ 292 browser = self.widget(self.__tabContextMenuIndex)
293 ## browser = self.widget(self.__tabContextMenuIndex) 293 self.printPreviewBrowser(browser)
294 ## self.printPreviewBrowser(browser) 294
295 ##
296 @pyqtSlot() 295 @pyqtSlot()
297 def __newBrowser(self): 296 def __newBrowser(self):
298 """ 297 """
299 Private slot to open a new browser tab. 298 Private slot to open a new browser tab.
300 """ 299 """
349 browser.loadFinished.connect(self.__loadFinished) 348 browser.loadFinished.connect(self.__loadFinished)
350 browser.iconChanged.connect(self.__iconChanged) 349 browser.iconChanged.connect(self.__iconChanged)
351 browser.search.connect(self.newBrowser) 350 browser.search.connect(self.newBrowser)
352 browser.page().windowCloseRequested.connect( 351 browser.page().windowCloseRequested.connect(
353 self.__windowCloseRequested) 352 self.__windowCloseRequested)
354 ## browser.page().printRequested.connect(self.__printRequested)
355 browser.zoomValueChanged.connect(self.browserZoomValueChanged) 353 browser.zoomValueChanged.connect(self.browserZoomValueChanged)
356 354
357 if position == -1: 355 if position == -1:
358 index = self.addTab(browser, self.tr("...")) 356 index = self.addTab(browser, self.tr("..."))
359 else: 357 else:
526 li = [] 524 li = []
527 for index in range(self.count()): 525 for index in range(self.count()):
528 li.append(self.widget(index)) 526 li.append(self.widget(index))
529 return li 527 return li
530 528
531 # TODO: Print 529 @pyqtSlot()
532 ## @pyqtSlot() 530 def printBrowser(self, browser=None):
533 ## def printBrowser(self, browser=None): 531 """
534 ## """ 532 Public slot called to print the displayed page.
535 ## Public slot called to print the displayed page. 533
536 ## 534 @param browser reference to the browser to be printed (WebBrowserView)
537 ## @param browser reference to the browser to be printed (WebBrowserView) 535 """
538 ## """ 536 if browser is None:
539 ## if browser is None: 537 browser = self.currentBrowser()
540 ## browser = self.currentBrowser() 538
541 ## 539 printer = QPrinter(mode=QPrinter.HighResolution)
542 ## browser.page().runJavaScript("window.print()") 540 if Preferences.getPrinter("ColorMode"):
543 ## self.__printRequested(browser.page().mainFrame()) 541 printer.setColorMode(QPrinter.Color)
544 ## 542 else:
545 ## def __printRequested(self, frame): 543 printer.setColorMode(QPrinter.GrayScale)
546 ## """ 544 if Preferences.getPrinter("FirstPageFirst"):
547 ## Private slot to handle a print request. 545 printer.setPageOrder(QPrinter.FirstPageFirst)
548 ## 546 else:
549 ## @param frame reference to the frame to be printed (QWebFrame) 547 printer.setPageOrder(QPrinter.LastPageFirst)
550 ## """ 548 printer.setPageMargins(
551 ## printer = QPrinter(mode=QPrinter.HighResolution) 549 Preferences.getPrinter("LeftMargin") * 10,
552 ## if Preferences.getPrinter("ColorMode"): 550 Preferences.getPrinter("TopMargin") * 10,
553 ## printer.setColorMode(QPrinter.Color) 551 Preferences.getPrinter("RightMargin") * 10,
554 ## else: 552 Preferences.getPrinter("BottomMargin") * 10,
555 ## printer.setColorMode(QPrinter.GrayScale) 553 QPrinter.Millimeter
556 ## if Preferences.getPrinter("FirstPageFirst"): 554 )
557 ## printer.setPageOrder(QPrinter.FirstPageFirst) 555 printerName = Preferences.getPrinter("PrinterName")
558 ## else: 556 if printerName:
559 ## printer.setPageOrder(QPrinter.LastPageFirst) 557 printer.setPrinterName(printerName)
560 ## printer.setPageMargins( 558 printer.setResolution(Preferences.getPrinter("Resolution"))
561 ## Preferences.getPrinter("LeftMargin") * 10, 559
562 ## Preferences.getPrinter("TopMargin") * 10, 560 printDialog = QPrintDialog(printer, self)
563 ## Preferences.getPrinter("RightMargin") * 10, 561 if printDialog.exec_() == QDialog.Accepted:
564 ## Preferences.getPrinter("BottomMargin") * 10, 562 browser.render(printer)
565 ## QPrinter.Millimeter 563
566 ## ) 564 @pyqtSlot()
567 ## printerName = Preferences.getPrinter("PrinterName") 565 def printBrowserPdf(self, browser=None):
568 ## if printerName: 566 """
569 ## printer.setPrinterName(printerName) 567 Public slot called to print the displayed page to PDF.
570 ## 568
571 ## printDialog = QPrintDialog(printer, self) 569 @param browser reference to the browser to be printed (HelpBrowser)
572 ## if printDialog.exec_() == QDialog.Accepted: 570 """
573 ## try: 571 if browser is None:
574 ## frame.print_(printer) 572 browser = self.currentBrowser()
575 ## except AttributeError: 573
576 ## E5MessageBox.critical( 574 printer = QPrinter(mode=QPrinter.HighResolution)
577 ## self, 575 if Preferences.getPrinter("ColorMode"):
578 ## self.tr("eric6 Web Browser"), 576 printer.setColorMode(QPrinter.Color)
579 ## self.tr( 577 else:
580 ## """<p>Printing is not available due to a bug in""" 578 printer.setColorMode(QPrinter.GrayScale)
581 ## """ PyQt5. Please upgrade.</p>""")) 579 printerName = Preferences.getPrinter("PrinterName")
582 ## return 580 if printerName:
583 ## 581 printer.setPrinterName(printerName)
584 ## @pyqtSlot() 582 printer.setOutputFormat(QPrinter.PdfFormat)
585 ## def printBrowserPdf(self, browser=None): 583 name = WebBrowserTools.getFileNameFromUrl(browser.url())
586 ## """ 584 if name:
587 ## Public slot called to print the displayed page to PDF. 585 name = name.rsplit('.', 1)[0]
588 ## 586 name += '.pdf'
589 ## @param browser reference to the browser to be printed (HelpBrowser) 587 printer.setOutputFileName(name)
590 ## """ 588 printer.setResolution(Preferences.getPrinter("Resolution"))
591 ## if browser is None: 589
592 ## browser = self.currentBrowser() 590 printDialog = QPrintDialog(printer, self)
593 ## 591 if printDialog.exec_() == QDialog.Accepted:
594 ## self.__printPdfRequested(browser.page().mainFrame()) 592 browser.render(printer)
595 ## 593
596 ## def __printPdfRequested(self, frame): 594 @pyqtSlot()
597 ## """ 595 def printPreviewBrowser(self, browser=None):
598 ## Private slot to handle a print to PDF request. 596 """
599 ## 597 Public slot called to show a print preview of the displayed file.
600 ## @param frame reference to the frame to be printed (QWebFrame) 598
601 ## """ 599 @param browser reference to the browser to be printed (HelpBrowserWV)
602 ## printer = QPrinter(mode=QPrinter.HighResolution) 600 """
603 ## if Preferences.getPrinter("ColorMode"): 601 from PyQt5.QtPrintSupport import QPrintPreviewDialog
604 ## printer.setColorMode(QPrinter.Color) 602
605 ## else: 603 if browser is None:
606 ## printer.setColorMode(QPrinter.GrayScale) 604 browser = self.currentBrowser()
607 ## printerName = Preferences.getPrinter("PrinterName") 605
608 ## if printerName: 606 printer = QPrinter(mode=QPrinter.HighResolution)
609 ## printer.setPrinterName(printerName) 607 if Preferences.getPrinter("ColorMode"):
610 ## printer.setOutputFormat(QPrinter.PdfFormat) 608 printer.setColorMode(QPrinter.Color)
611 ## name = frame.url().path().rsplit('/', 1)[-1] 609 else:
612 ## if name: 610 printer.setColorMode(QPrinter.GrayScale)
613 ## name = name.rsplit('.', 1)[0] 611 if Preferences.getPrinter("FirstPageFirst"):
614 ## name += '.pdf' 612 printer.setPageOrder(QPrinter.FirstPageFirst)
615 ## printer.setOutputFileName(name) 613 else:
616 ## 614 printer.setPageOrder(QPrinter.LastPageFirst)
617 ## printDialog = QPrintDialog(printer, self) 615 printer.setPageMargins(
618 ## if printDialog.exec_() == QDialog.Accepted: 616 Preferences.getPrinter("LeftMargin") * 10,
619 ## try: 617 Preferences.getPrinter("TopMargin") * 10,
620 ## frame.print_(printer) 618 Preferences.getPrinter("RightMargin") * 10,
621 ## except AttributeError: 619 Preferences.getPrinter("BottomMargin") * 10,
622 ## E5MessageBox.critical( 620 QPrinter.Millimeter
623 ## self, 621 )
624 ## self.tr("eric6 Web Browser"), 622 printerName = Preferences.getPrinter("PrinterName")
625 ## self.tr( 623 if printerName:
626 ## """<p>Printing is not available due to a bug in""" 624 printer.setPrinterName(printerName)
627 ## """ PyQt5. Please upgrade.</p>""")) 625 printer.setResolution(Preferences.getPrinter("Resolution"))
628 ## return 626
629 ## 627 preview = QPrintPreviewDialog(printer, self)
630 ## @pyqtSlot() 628 preview.paintRequested.connect(lambda p: browser.render(p))
631 ## def printPreviewBrowser(self, browser=None): 629 preview.exec_()
632 ## """ 630
633 ## Public slot called to show a print preview of the displayed file.
634 ##
635 ## @param browser reference to the browser to be printed (HelpBrowserWV)
636 ## """
637 ## from PyQt5.QtPrintSupport import QPrintPreviewDialog
638 ##
639 ## if browser is None:
640 ## browser = self.currentBrowser()
641 ##
642 ## printer = QPrinter(mode=QPrinter.HighResolution)
643 ## if Preferences.getPrinter("ColorMode"):
644 ## printer.setColorMode(QPrinter.Color)
645 ## else:
646 ## printer.setColorMode(QPrinter.GrayScale)
647 ## if Preferences.getPrinter("FirstPageFirst"):
648 ## printer.setPageOrder(QPrinter.FirstPageFirst)
649 ## else:
650 ## printer.setPageOrder(QPrinter.LastPageFirst)
651 ## printer.setPageMargins(
652 ## Preferences.getPrinter("LeftMargin") * 10,
653 ## Preferences.getPrinter("TopMargin") * 10,
654 ## Preferences.getPrinter("RightMargin") * 10,
655 ## Preferences.getPrinter("BottomMargin") * 10,
656 ## QPrinter.Millimeter
657 ## )
658 ## printerName = Preferences.getPrinter("PrinterName")
659 ## if printerName:
660 ## printer.setPrinterName(printerName)
661 ##
662 ## self.__printPreviewBrowser = browser
663 ## preview = QPrintPreviewDialog(printer, self)
664 ## preview.paintRequested.connect(self.__printPreview)
665 ## preview.exec_()
666 ##
667 ## def __printPreview(self, printer):
668 ## """
669 ## Private slot to generate a print preview.
670 ##
671 ## @param printer reference to the printer object (QPrinter)
672 ## """
673 ## try:
674 ## self.__printPreviewBrowser.print_(printer)
675 ## except AttributeError:
676 ## E5MessageBox.critical(
677 ## self,
678 ## self.tr("eric6 Web Browser"),
679 ## self.tr(
680 ## """<p>Printing is not available due to a bug in PyQt5."""
681 ## """Please upgrade.</p>"""))
682 ## return
683 ##
684 def __sourceChanged(self, url): 631 def __sourceChanged(self, url):
685 """ 632 """
686 Private slot to handle a change of a browsers source. 633 Private slot to handle a change of a browsers source.
687 634
688 @param url URL of the new site (QUrl) 635 @param url URL of the new site (QUrl)

eric ide

mercurial