src/eric7/PdfViewer/PdfInfoWidget.py

branch
pdf_viewer
changeset 9702
7c973954919d
child 9704
6e1650b9b3b5
equal deleted inserted replaced
9700:b74a13a382a8 9702:7c973954919d
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing an info widget showing data of a PDF document.
8 """
9
10 from PyQt6.QtCore import Qt, pyqtSlot, QFileInfo
11 from PyQt6.QtPdf import QPdfDocument
12 from PyQt6.QtWidgets import QWidget, QFormLayout, QLabel
13
14 from eric7.Globals import dataString
15
16
17 class PdfInfoWidget(QWidget):
18 """
19 Class implementing an info widget showing data of a PDF document.
20 """
21
22 def __init__(self, document, parent=None):
23 """
24 Constructor
25
26 @param document reference to the PDF document object
27 @type QPdfDocument
28 @param parent reference to the parent widget (defaults to None)
29 @type QWidget (optional)
30 """
31 super().__init__(parent)
32
33 self.__document = document
34
35 self.__layout = QFormLayout(self)
36 self.__layout.setRowWrapPolicy(QFormLayout.RowWrapPolicy.WrapLongRows)
37 self.__layout.setFieldGrowthPolicy(
38 QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow
39 )
40 self.__layout.setFormAlignment(
41 Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignTop
42 )
43 self.__layout.setLabelAlignment(Qt.AlignmentFlag.AlignRight)
44
45 self.__infoLabels = {
46 "filePath": QLabel(),
47 "fileSize": QLabel(),
48 "title": QLabel(),
49 "subject": QLabel(),
50 "author": QLabel(),
51 "creator": QLabel(),
52 "producer": QLabel(),
53 "pages": QLabel(),
54 "creationDate": QLabel(),
55 "modificationDate": QLabel(),
56 "keywords": QLabel(),
57 "security": QLabel(),
58 }
59 for label in self.__infoLabels.values():
60 label.setWordWrap(True)
61 self.__layout.addRow(self.tr("File Path:"), self.__infoLabels["filePath"])
62 self.__layout.addRow(self.tr("File Size:"), self.__infoLabels["fileSize"])
63 self.__layout.addRow(self.tr("Title:"), self.__infoLabels["title"])
64 self.__layout.addRow(self.tr("Subject:"), self.__infoLabels["subject"])
65 self.__layout.addRow(self.tr("Author:"), self.__infoLabels["author"])
66 self.__layout.addRow(self.tr("Created with:"), self.__infoLabels["creator"])
67 self.__layout.addRow(self.tr("Creator:"), self.__infoLabels["producer"])
68 self.__layout.addRow(self.tr("Pages:"), self.__infoLabels["pages"])
69 self.__layout.addRow(self.tr("Created at:"), self.__infoLabels["creationDate"])
70 self.__layout.addRow(
71 self.tr("Last Modified at:"), self.__infoLabels["modificationDate"]
72 )
73 self.__layout.addRow(self.tr("Keywords:"), self.__infoLabels["keywords"])
74 self.__layout.addRow(self.tr("Security:"), self.__infoLabels["security"])
75 #self.__layout.addRow(self.tr(""), self.__infoLabels[""])
76 # TODO: add more info labels
77
78 self.setLayout(self.__layout)
79
80 self.__document.statusChanged.connect(self.__populateInfoLabels)
81 self.__document.pageCountChanged.connect(self.__handlePageCountChanged)
82 self.__document.passwordChanged.connect(self.__handlePasswordChanged)
83
84 @pyqtSlot(QPdfDocument.Status)
85 def __populateInfoLabels(self, status):
86 """
87 Private slot to populate the info labels upon a change of the document status.
88
89 @param status document status
90 @type QPdfDocument.Status
91 """
92 ready = status == QPdfDocument.Status.Ready
93
94 self.__infoLabels["title"].setText(
95 self.__document.metaData(QPdfDocument.MetaDataField.Title) if ready else ""
96 )
97 self.__infoLabels["subject"].setText(
98 self.__document.metaData(QPdfDocument.MetaDataField.Subject)
99 if ready
100 else ""
101 )
102 self.__infoLabels["author"].setText(
103 self.__document.metaData(QPdfDocument.MetaDataField.Author) if ready else ""
104 )
105 self.__infoLabels["creator"].setText(
106 self.__document.metaData(QPdfDocument.MetaDataField.Creator)
107 if ready
108 else ""
109 )
110 self.__infoLabels["producer"].setText(
111 self.__document.metaData(QPdfDocument.MetaDataField.Producer)
112 if ready
113 else ""
114 )
115 self.__infoLabels["pages"].setText(
116 str(self.__document.pageCount()) if ready else ""
117 )
118 self.__infoLabels["creationDate"].setText(
119 self.__document.metaData(QPdfDocument.MetaDataField.CreationDate).toString(
120 "yyyy-MM-dd hh:mm:ss t"
121 ) if ready
122 else ""
123 )
124 self.__infoLabels["modificationDate"].setText(
125 self.__document.metaData(
126 QPdfDocument.MetaDataField.ModificationDate
127 ).toString("yyyy-MM-dd hh:mm:ss t")
128 if ready
129 else ""
130 )
131 self.__infoLabels["keywords"].setText(
132 self.__document.metaData(QPdfDocument.MetaDataField.Keywords)
133 if ready
134 else ""
135 )
136
137 if ready:
138 self.__handlePasswordChanged()
139 else:
140 self.__infoLabels["security"].setText("")
141
142 @pyqtSlot(int)
143 def __handlePageCountChanged(self, pageCount):
144 """
145 Private slot to handle a change of the page count.
146
147 @param pageCount changed page count
148 @type int
149 """
150 self.__infoLabels["pages"].setText(str(pageCount))
151
152 @pyqtSlot()
153 def __handlePasswordChanged(self):
154 """
155 Private slot to handle a change of the password.
156 """
157 self.__infoLabels["security"].setText(
158 self.tr("Encrypted")
159 if self.__document.password()
160 else self.tr("Not Encrypted")
161 )
162
163 def setFileName(self, filename):
164 """
165 Public method to set the file name info.
166
167 @param filename DESCRIPTION
168 @type TYPE
169 """
170 self.__infoLabels["filePath"].setText(filename)
171 if filename:
172 fi = QFileInfo(filename)
173 fileSize = fi.size()
174 self.__infoLabels["fileSize"].setText(dataString(fileSize))
175 else:
176 self.__infoLabels["fileSize"].setText("")

eric ide

mercurial