Helpviewer/PageScreenDialog.py

Mon, 13 Feb 2012 19:02:09 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 13 Feb 2012 19:02:09 +0100
changeset 1620
8172cc5d4dda
child 2302
f29e9405c851
permissions
-rw-r--r--

Added code to save the current page as a screen shot.

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

eric ide

mercurial