Helpviewer/PageScreenDialog.py

changeset 1620
8172cc5d4dda
child 2302
f29e9405c851
equal deleted inserted replaced
1619:56348a48c5e0 1620:8172cc5d4dda
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2012 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog to save a screenshot of a web page.
8 """
9
10 from PyQt4.QtCore import pyqtSlot, QFile, QFileInfo
11 from PyQt4.QtGui import QDialog, QDialogButtonBox, QAbstractButton, QImage, QPainter, \
12 QPixmap
13
14 from E5Gui import E5FileDialog, E5MessageBox
15
16 from .Ui_PageScreenDialog import Ui_PageScreenDialog
17
18
19 class PageScreenDialog(QDialog, Ui_PageScreenDialog):
20 """
21 Class documentation goes here.
22 """
23 def __init__(self, view, parent=None):
24 """
25 Constructor
26
27 @param view reference to the web view containing the page to be saved
28 (HelpBrowser)
29 @param parent reference to the parent widget (QWidget)
30 """
31 super().__init__(parent)
32 self.setupUi(self)
33
34 self.__view = view
35 self.__createPixmap()
36 self.pageScreenLabel.setPixmap(self.__pagePixmap)
37
38 def __createPixmap(self):
39 """
40 Private slot to create a pixmap of the associated view's page.
41 """
42 page = self.__view.page()
43 origSize = page.viewportSize()
44 page.setViewportSize(page.mainFrame().contentsSize())
45
46 image = QImage(page.viewportSize(), QImage.Format_ARGB32)
47 painter = QPainter(image)
48 page.mainFrame().render(painter)
49 painter.end()
50
51 self.__pagePixmap = QPixmap.fromImage(image)
52
53 page.setViewportSize(origSize)
54
55 def __savePageScreen(self):
56 """
57 Private slot to save the page screen.
58
59 @return flag indicating success (boolean)
60 """
61 fileName = E5FileDialog.getSaveFileName(
62 self,
63 self.trUtf8("Save Page Screen"),
64 self.trUtf8("screen.png"),
65 self.trUtf8("Portable Network Graphics File (*.png)"),
66 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
67 if not fileName:
68 return False
69
70 if QFileInfo(fileName).exists():
71 res = E5MessageBox.yesNo(self,
72 self.trUtf8("Save Page Screen"),
73 self.trUtf8("<p>The file <b>{0}</b> already exists."
74 " Overwrite it?</p>").format(fileName),
75 icon=E5MessageBox.Warning)
76 if not res:
77 return False
78
79 file = QFile(fileName)
80 if not file.open(QFile.WriteOnly):
81 E5MessageBox.warning(self, self.trUtf8("Save Page Screen"),
82 self.trUtf8("Cannot write file '{0}:\n{1}.")\
83 .format(fileName, file.errorString()))
84 return False
85
86 res = self.__pagePixmap.save(file)
87 file.close()
88
89 if not res:
90 E5MessageBox.warning(self, self.trUtf8("Save Page Screen"),
91 self.trUtf8("Cannot write file '{0}:\n{1}.")\
92 .format(fileName, file.errorString()))
93 return False
94
95 return True
96
97 @pyqtSlot(QAbstractButton)
98 def on_buttonBox_clicked(self, button):
99 """
100 Private slot to handle clicks of the dialog buttons.
101
102 @param button button that was clicked (QAbstractButton)
103 """
104 if button == self.buttonBox.button(QDialogButtonBox.Cancel):
105 self.reject()
106 elif button == self.buttonBox.button(QDialogButtonBox.Save):
107 if self.__savePageScreen():
108 self.accept()

eric ide

mercurial