src/eric7/Graphics/SvgDiagram.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
23 23
24 class SvgDiagram(EricMainWindow): 24 class SvgDiagram(EricMainWindow):
25 """ 25 """
26 Class implementing a dialog showing a SVG graphic. 26 Class implementing a dialog showing a SVG graphic.
27 """ 27 """
28
28 ZoomLevels = [ 29 ZoomLevels = [
29 1, 3, 5, 7, 9, 30 1,
30 10, 20, 30, 50, 67, 80, 90, 31 3,
32 5,
33 7,
34 9,
35 10,
36 20,
37 30,
38 50,
39 67,
40 80,
41 90,
31 100, 42 100,
32 110, 120, 133, 150, 170, 200, 240, 300, 400, 43 110,
33 500, 600, 700, 800, 900, 1000, 44 120,
45 133,
46 150,
47 170,
48 200,
49 240,
50 300,
51 400,
52 500,
53 600,
54 700,
55 800,
56 900,
57 1000,
34 ] 58 ]
35 ZoomLevelDefault = 100 59 ZoomLevelDefault = 100
36 60
37 def __init__(self, svgFile, parent=None, name=None): 61 def __init__(self, svgFile, parent=None, name=None):
38 """ 62 """
39 Constructor 63 Constructor
40 64
41 @param svgFile filename of a SVG graphics file to show 65 @param svgFile filename of a SVG graphics file to show
42 @type str 66 @type str
43 @param parent parent widget of the view 67 @param parent parent widget of the view
44 @type QWidget 68 @type QWidget
45 @param name name of the view widget 69 @param name name of the view widget
49 if name: 73 if name:
50 self.setObjectName(name) 74 self.setObjectName(name)
51 else: 75 else:
52 self.setObjectName("SvgDiagram") 76 self.setObjectName("SvgDiagram")
53 self.setWindowTitle(self.tr("SVG-Viewer")) 77 self.setWindowTitle(self.tr("SVG-Viewer"))
54 78
55 self.svgWidget = QSvgWidget() 79 self.svgWidget = QSvgWidget()
56 self.svgWidget.setObjectName("svgWidget") 80 self.svgWidget.setObjectName("svgWidget")
57 self.svgWidget.setBackgroundRole(QPalette.ColorRole.Base) 81 self.svgWidget.setBackgroundRole(QPalette.ColorRole.Base)
58 self.svgWidget.setSizePolicy( 82 self.svgWidget.setSizePolicy(
59 QSizePolicy.Policy.Ignored, QSizePolicy.Policy.Ignored) 83 QSizePolicy.Policy.Ignored, QSizePolicy.Policy.Ignored
60 84 )
85
61 self.svgView = QScrollArea() 86 self.svgView = QScrollArea()
62 self.svgView.setObjectName("svgView") 87 self.svgView.setObjectName("svgView")
63 self.svgView.setBackgroundRole(QPalette.ColorRole.Dark) 88 self.svgView.setBackgroundRole(QPalette.ColorRole.Dark)
64 self.svgView.setWidget(self.svgWidget) 89 self.svgView.setWidget(self.svgWidget)
65 90
66 self.setCentralWidget(self.svgView) 91 self.setCentralWidget(self.svgView)
67 92
68 self.__zoomWidget = EricZoomWidget( 93 self.__zoomWidget = EricZoomWidget(
69 UI.PixmapCache.getPixmap("zoomOut"), 94 UI.PixmapCache.getPixmap("zoomOut"),
70 UI.PixmapCache.getPixmap("zoomIn"), 95 UI.PixmapCache.getPixmap("zoomIn"),
71 UI.PixmapCache.getPixmap("zoomReset"), self) 96 UI.PixmapCache.getPixmap("zoomReset"),
97 self,
98 )
72 self.statusBar().addPermanentWidget(self.__zoomWidget) 99 self.statusBar().addPermanentWidget(self.__zoomWidget)
73 self.__zoomWidget.setMapping( 100 self.__zoomWidget.setMapping(SvgDiagram.ZoomLevels, SvgDiagram.ZoomLevelDefault)
74 SvgDiagram.ZoomLevels, SvgDiagram.ZoomLevelDefault)
75 self.__zoomWidget.valueChanged.connect(self.__doZoom) 101 self.__zoomWidget.valueChanged.connect(self.__doZoom)
76 102
77 # polish up the dialog 103 # polish up the dialog
78 self.resize(QSize(800, 600).expandedTo(self.minimumSizeHint())) 104 self.resize(QSize(800, 600).expandedTo(self.minimumSizeHint()))
79 105
80 self.zoom = 1.0 106 self.zoom = 1.0
81 self.svgFile = svgFile 107 self.svgFile = svgFile
82 self.svgWidget.load(self.svgFile) 108 self.svgWidget.load(self.svgFile)
83 self.svgWidget.resize(self.svgWidget.renderer().defaultSize()) 109 self.svgWidget.resize(self.svgWidget.renderer().defaultSize())
84 110
85 self.__initActions() 111 self.__initActions()
86 self.__initContextMenu() 112 self.__initContextMenu()
87 self.__initToolBars() 113 self.__initToolBars()
88 114
89 self.grabGesture(Qt.GestureType.PinchGesture) 115 self.grabGesture(Qt.GestureType.PinchGesture)
90 116
91 def __initActions(self): 117 def __initActions(self):
92 """ 118 """
93 Private method to initialize the view actions. 119 Private method to initialize the view actions.
94 """ 120 """
95 self.closeAct = QAction( 121 self.closeAct = QAction(UI.PixmapCache.getIcon("close"), self.tr("Close"), self)
96 UI.PixmapCache.getIcon("close"),
97 self.tr("Close"), self)
98 self.closeAct.triggered.connect(self.close) 122 self.closeAct.triggered.connect(self.close)
99 123
100 self.printAct = QAction( 124 self.printAct = QAction(UI.PixmapCache.getIcon("print"), self.tr("Print"), self)
101 UI.PixmapCache.getIcon("print"),
102 self.tr("Print"), self)
103 self.printAct.triggered.connect(self.__printDiagram) 125 self.printAct.triggered.connect(self.__printDiagram)
104 126
105 self.printPreviewAct = QAction( 127 self.printPreviewAct = QAction(
106 UI.PixmapCache.getIcon("printPreview"), 128 UI.PixmapCache.getIcon("printPreview"), self.tr("Print Preview"), self
107 self.tr("Print Preview"), self) 129 )
108 self.printPreviewAct.triggered.connect(self.__printPreviewDiagram) 130 self.printPreviewAct.triggered.connect(self.__printPreviewDiagram)
109 131
110 def __initContextMenu(self): 132 def __initContextMenu(self):
111 """ 133 """
112 Private method to initialize the context menu. 134 Private method to initialize the context menu.
113 """ 135 """
114 self.__menu = QMenu(self) 136 self.__menu = QMenu(self)
115 self.__menu.addAction(self.closeAct) 137 self.__menu.addAction(self.closeAct)
116 self.__menu.addSeparator() 138 self.__menu.addSeparator()
117 self.__menu.addAction(self.printPreviewAct) 139 self.__menu.addAction(self.printPreviewAct)
118 self.__menu.addAction(self.printAct) 140 self.__menu.addAction(self.printAct)
119 141
120 self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) 142 self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
121 self.customContextMenuRequested.connect(self.__showContextMenu) 143 self.customContextMenuRequested.connect(self.__showContextMenu)
122 144
123 def __showContextMenu(self, coord): 145 def __showContextMenu(self, coord):
124 """ 146 """
125 Private slot to show the context menu of the listview. 147 Private slot to show the context menu of the listview.
126 148
127 @param coord the position of the mouse pointer 149 @param coord the position of the mouse pointer
128 @type QPoint 150 @type QPoint
129 """ 151 """
130 self.__menu.popup(self.mapToGlobal(coord)) 152 self.__menu.popup(self.mapToGlobal(coord))
131 153
132 def __initToolBars(self): 154 def __initToolBars(self):
133 """ 155 """
134 Private method to populate the toolbars with our actions. 156 Private method to populate the toolbars with our actions.
135 """ 157 """
136 self.windowToolBar = QToolBar(self.tr("Window"), self) 158 self.windowToolBar = QToolBar(self.tr("Window"), self)
137 self.windowToolBar.setIconSize(UI.Config.ToolBarIconSize) 159 self.windowToolBar.setIconSize(UI.Config.ToolBarIconSize)
138 self.windowToolBar.addAction(self.closeAct) 160 self.windowToolBar.addAction(self.closeAct)
139 161
140 self.graphicsToolBar = QToolBar(self.tr("Graphics"), self) 162 self.graphicsToolBar = QToolBar(self.tr("Graphics"), self)
141 self.graphicsToolBar.setIconSize(UI.Config.ToolBarIconSize) 163 self.graphicsToolBar.setIconSize(UI.Config.ToolBarIconSize)
142 self.graphicsToolBar.addAction(self.printPreviewAct) 164 self.graphicsToolBar.addAction(self.printPreviewAct)
143 self.graphicsToolBar.addAction(self.printAct) 165 self.graphicsToolBar.addAction(self.printAct)
144 166
145 self.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.windowToolBar) 167 self.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.windowToolBar)
146 self.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.graphicsToolBar) 168 self.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.graphicsToolBar)
147 169
148 def getDiagramName(self): 170 def getDiagramName(self):
149 """ 171 """
150 Public method to retrieve a name for the diagram. 172 Public method to retrieve a name for the diagram.
151 173
152 @return name for the diagram 174 @return name for the diagram
153 @rtype str 175 @rtype str
154 """ 176 """
155 return self.svgFile 177 return self.svgFile
156 178
157 def wheelEvent(self, evt): 179 def wheelEvent(self, evt):
158 """ 180 """
159 Protected method to handle wheel events. 181 Protected method to handle wheel events.
160 182
161 @param evt reference to the wheel event 183 @param evt reference to the wheel event
162 @type QWheelEvent 184 @type QWheelEvent
163 """ 185 """
164 if evt.modifiers() & Qt.KeyboardModifier.ControlModifier: 186 if evt.modifiers() & Qt.KeyboardModifier.ControlModifier:
165 delta = evt.angleDelta().y() 187 delta = evt.angleDelta().y()
167 self.__zoomOut() 189 self.__zoomOut()
168 elif delta > 0: 190 elif delta > 0:
169 self.__zoomIn() 191 self.__zoomIn()
170 evt.accept() 192 evt.accept()
171 return 193 return
172 194
173 super().wheelEvent(evt) 195 super().wheelEvent(evt)
174 196
175 def event(self, evt): 197 def event(self, evt):
176 """ 198 """
177 Public method handling events. 199 Public method handling events.
178 200
179 @param evt reference to the event 201 @param evt reference to the event
180 @type QEvent 202 @type QEvent
181 @return flag indicating, if the event was handled 203 @return flag indicating, if the event was handled
182 @rtype bool 204 @rtype bool
183 """ 205 """
184 if evt.type() == QEvent.Type.Gesture: 206 if evt.type() == QEvent.Type.Gesture:
185 self.gestureEvent(evt) 207 self.gestureEvent(evt)
186 return True 208 return True
187 209
188 return super().event(evt) 210 return super().event(evt)
189 211
190 def gestureEvent(self, evt): 212 def gestureEvent(self, evt):
191 """ 213 """
192 Protected method handling gesture events. 214 Protected method handling gesture events.
193 215
194 @param evt reference to the gesture event 216 @param evt reference to the gesture event
195 @type QGestureEvent 217 @type QGestureEvent
196 """ 218 """
197 pinch = evt.gesture(Qt.GestureType.PinchGesture) 219 pinch = evt.gesture(Qt.GestureType.PinchGesture)
198 if pinch: 220 if pinch:
199 if pinch.state() == Qt.GestureState.GestureStarted: 221 if pinch.state() == Qt.GestureState.GestureStarted:
200 pinch.setTotalScaleFactor(self.__zoom() / 100) 222 pinch.setTotalScaleFactor(self.__zoom() / 100)
201 elif pinch.state() == Qt.GestureState.GestureUpdated: 223 elif pinch.state() == Qt.GestureState.GestureUpdated:
202 self.__doZoom(int(pinch.totalScaleFactor() * 100)) 224 self.__doZoom(int(pinch.totalScaleFactor() * 100))
203 evt.accept() 225 evt.accept()
204 226
205 ########################################################################### 227 ###########################################################################
206 ## Private menu handling methods below. 228 ## Private menu handling methods below.
207 ########################################################################### 229 ###########################################################################
208 230
209 def __adjustScrollBar(self, scrollBar, factor): 231 def __adjustScrollBar(self, scrollBar, factor):
210 """ 232 """
211 Private method to adjust a scrollbar by a certain factor. 233 Private method to adjust a scrollbar by a certain factor.
212 234
213 @param scrollBar reference to the scrollbar object 235 @param scrollBar reference to the scrollbar object
214 @type QScrollBar 236 @type QScrollBar
215 @param factor factor to adjust by 237 @param factor factor to adjust by
216 @type float 238 @type float
217 """ 239 """
218 scrollBar.setValue( 240 scrollBar.setValue(
219 int(factor * scrollBar.value() + 241 int(factor * scrollBar.value() + ((factor - 1) * scrollBar.pageStep() / 2))
220 ((factor - 1) * scrollBar.pageStep() / 2))) 242 )
221 243
222 def __levelForZoom(self, zoom): 244 def __levelForZoom(self, zoom):
223 """ 245 """
224 Private method determining the zoom level index given a zoom factor. 246 Private method determining the zoom level index given a zoom factor.
225 247
226 @param zoom zoom factor 248 @param zoom zoom factor
227 @type int 249 @type int
228 @return index of zoom factor 250 @return index of zoom factor
229 @rtype int 251 @rtype int
230 """ 252 """
233 except ValueError: 255 except ValueError:
234 for index in range(len(SvgDiagram.ZoomLevels)): 256 for index in range(len(SvgDiagram.ZoomLevels)):
235 if zoom <= SvgDiagram.ZoomLevels[index]: 257 if zoom <= SvgDiagram.ZoomLevels[index]:
236 break 258 break
237 return index 259 return index
238 260
239 def __doZoom(self, value): 261 def __doZoom(self, value):
240 """ 262 """
241 Private method to set the zoom value in percent. 263 Private method to set the zoom value in percent.
242 264
243 @param value zoom value in percent 265 @param value zoom value in percent
244 @type int 266 @type int
245 """ 267 """
246 oldValue = self.__zoom() 268 oldValue = self.__zoom()
247 if value != oldValue: 269 if value != oldValue:
248 self.svgWidget.resize(value / 100 * self.svgWidget.sizeHint()) 270 self.svgWidget.resize(value / 100 * self.svgWidget.sizeHint())
249 271
250 factor = value / oldValue 272 factor = value / oldValue
251 self.__adjustScrollBar(self.svgView.horizontalScrollBar(), factor) 273 self.__adjustScrollBar(self.svgView.horizontalScrollBar(), factor)
252 self.__adjustScrollBar(self.svgView.verticalScrollBar(), factor) 274 self.__adjustScrollBar(self.svgView.verticalScrollBar(), factor)
253 275
254 self.__zoomWidget.setValue(value) 276 self.__zoomWidget.setValue(value)
255 277
256 def __zoomIn(self): 278 def __zoomIn(self):
257 """ 279 """
258 Private method to zoom into the SVG. 280 Private method to zoom into the SVG.
259 """ 281 """
260 index = self.__levelForZoom(self.__zoom()) 282 index = self.__levelForZoom(self.__zoom())
261 if index < len(SvgDiagram.ZoomLevels) - 1: 283 if index < len(SvgDiagram.ZoomLevels) - 1:
262 self.__doZoom(SvgDiagram.ZoomLevels[index + 1]) 284 self.__doZoom(SvgDiagram.ZoomLevels[index + 1])
263 285
264 def __zoomOut(self): 286 def __zoomOut(self):
265 """ 287 """
266 Private method to zoom out of the SVG. 288 Private method to zoom out of the SVG.
267 """ 289 """
268 index = self.__levelForZoom(self.__zoom()) 290 index = self.__levelForZoom(self.__zoom())
269 if index > 0: 291 if index > 0:
270 self.__doZoom(SvgDiagram.ZoomLevels[index - 1]) 292 self.__doZoom(SvgDiagram.ZoomLevels[index - 1])
271 293
272 def __zoomReset(self): 294 def __zoomReset(self):
273 """ 295 """
274 Private method to reset the zoom value. 296 Private method to reset the zoom value.
275 """ 297 """
276 self.__doZoom(SvgDiagram.ZoomLevels[SvgDiagram.ZoomLevelDefault]) 298 self.__doZoom(SvgDiagram.ZoomLevels[SvgDiagram.ZoomLevelDefault])
277 299
278 def __zoom(self): 300 def __zoom(self):
279 """ 301 """
280 Private method to get the current zoom factor in percent. 302 Private method to get the current zoom factor in percent.
281 303
282 @return current zoom factor in percent 304 @return current zoom factor in percent
283 @rtype int 305 @rtype int
284 """ 306 """
285 return int(self.svgWidget.width() / 307 return int(self.svgWidget.width() / self.svgWidget.sizeHint().width() * 100.0)
286 self.svgWidget.sizeHint().width() * 100.0) 308
287
288 def __printDiagram(self): 309 def __printDiagram(self):
289 """ 310 """
290 Private slot called to print the diagram. 311 Private slot called to print the diagram.
291 """ 312 """
292 printer = QPrinter(mode=QPrinter.PrinterMode.ScreenResolution) 313 printer = QPrinter(mode=QPrinter.PrinterMode.ScreenResolution)
300 else: 321 else:
301 printer.setPageOrder(QPrinter.PageOrder.LastPageFirst) 322 printer.setPageOrder(QPrinter.PageOrder.LastPageFirst)
302 printerName = Preferences.getPrinter("PrinterName") 323 printerName = Preferences.getPrinter("PrinterName")
303 if printerName: 324 if printerName:
304 printer.setPrinterName(printerName) 325 printer.setPrinterName(printerName)
305 326
306 printDialog = QPrintDialog(printer, self) 327 printDialog = QPrintDialog(printer, self)
307 if printDialog.exec(): 328 if printDialog.exec():
308 self.__print(printer) 329 self.__print(printer)
309 330
310 def __printPreviewDiagram(self): 331 def __printPreviewDiagram(self):
311 """ 332 """
312 Private slot called to show a print preview of the diagram. 333 Private slot called to show a print preview of the diagram.
313 """ 334 """
314 from PyQt6.QtPrintSupport import QPrintPreviewDialog 335 from PyQt6.QtPrintSupport import QPrintPreviewDialog
315 336
316 printer = QPrinter(mode=QPrinter.PrinterMode.ScreenResolution) 337 printer = QPrinter(mode=QPrinter.PrinterMode.ScreenResolution)
317 printer.setFullPage(True) 338 printer.setFullPage(True)
318 if Preferences.getPrinter("ColorMode"): 339 if Preferences.getPrinter("ColorMode"):
319 printer.setColorMode(QPrinter.ColorMode.Color) 340 printer.setColorMode(QPrinter.ColorMode.Color)
320 else: 341 else:
321 printer.setColorMode(QPrinter.ColorMode.GrayScale) 342 printer.setColorMode(QPrinter.ColorMode.GrayScale)
322 if Preferences.getPrinter("FirstPageFirst"): 343 if Preferences.getPrinter("FirstPageFirst"):
323 printer.setPageOrder(QPrinter.PageOrder.FirstPageFirst) 344 printer.setPageOrder(QPrinter.PageOrder.FirstPageFirst)
324 else: 345 else:
325 printer.setPageOrder(QPrinter.PageOrder.LastPageFirst) 346 printer.setPageOrder(QPrinter.PageOrder.LastPageFirst)
326 printer.setPageMargins(QMarginsF( 347 printer.setPageMargins(
327 Preferences.getPrinter("LeftMargin") * 10, 348 QMarginsF(
328 Preferences.getPrinter("TopMargin") * 10, 349 Preferences.getPrinter("LeftMargin") * 10,
329 Preferences.getPrinter("RightMargin") * 10, 350 Preferences.getPrinter("TopMargin") * 10,
330 Preferences.getPrinter("BottomMargin") * 10), 351 Preferences.getPrinter("RightMargin") * 10,
331 QPageLayout.Unit.Millimeter 352 Preferences.getPrinter("BottomMargin") * 10,
353 ),
354 QPageLayout.Unit.Millimeter,
332 ) 355 )
333 printerName = Preferences.getPrinter("PrinterName") 356 printerName = Preferences.getPrinter("PrinterName")
334 if printerName: 357 if printerName:
335 printer.setPrinterName(printerName) 358 printer.setPrinterName(printerName)
336 359
337 preview = QPrintPreviewDialog(printer, self) 360 preview = QPrintPreviewDialog(printer, self)
338 preview.paintRequested[QPrinter].connect(self.__print) 361 preview.paintRequested[QPrinter].connect(self.__print)
339 preview.exec() 362 preview.exec()
340 363
341 def __print(self, printer): 364 def __print(self, printer):
342 """ 365 """
343 Private slot to the actual printing. 366 Private slot to the actual printing.
344 367
345 @param printer reference to the printer object 368 @param printer reference to the printer object
346 @type QPrinter 369 @type QPrinter
347 """ 370 """
348 painter = QPainter() 371 painter = QPainter()
349 painter.begin(printer) 372 painter.begin(printer)
352 font = QFont(["times"], 10) 375 font = QFont(["times"], 10)
353 painter.setFont(font) 376 painter.setFont(font)
354 fm = painter.fontMetrics() 377 fm = painter.fontMetrics()
355 fontHeight = fm.lineSpacing() 378 fontHeight = fm.lineSpacing()
356 marginX = ( 379 marginX = (
357 printer.pageLayout().paintRectPixels(printer.resolution()).x() - 380 printer.pageLayout().paintRectPixels(printer.resolution()).x()
358 printer.pageLayout().fullRectPixels(printer.resolution()).x() 381 - printer.pageLayout().fullRectPixels(printer.resolution()).x()
359 ) 382 )
360 marginX = ( 383 marginX = (
361 Preferences.getPrinter("LeftMargin") * 384 Preferences.getPrinter("LeftMargin") * int(printer.resolution() / 2.54)
362 int(printer.resolution() / 2.54) - marginX 385 - marginX
363 ) 386 )
364 marginY = ( 387 marginY = (
365 printer.pageLayout().paintRectPixels(printer.resolution()).y() - 388 printer.pageLayout().paintRectPixels(printer.resolution()).y()
366 printer.pageLayout().fullRectPixels(printer.resolution()).y() 389 - printer.pageLayout().fullRectPixels(printer.resolution()).y()
367 ) 390 )
368 marginY = ( 391 marginY = (
369 Preferences.getPrinter("TopMargin") * 392 Preferences.getPrinter("TopMargin") * int(printer.resolution() / 2.54)
370 int(printer.resolution() / 2.54) - marginY 393 - marginY
371 ) 394 )
372 395
373 width = ( 396 width = (
374 printer.width() - marginX - 397 printer.width()
375 Preferences.getPrinter("RightMargin") * 398 - marginX
376 int(printer.resolution() / 2.54) 399 - Preferences.getPrinter("RightMargin") * int(printer.resolution() / 2.54)
377 ) 400 )
378 height = ( 401 height = (
379 printer.height() - fontHeight - 4 - marginY - 402 printer.height()
380 Preferences.getPrinter("BottomMargin") * 403 - fontHeight
381 int(printer.resolution() / 2.54) 404 - 4
405 - marginY
406 - Preferences.getPrinter("BottomMargin") * int(printer.resolution() / 2.54)
382 ) 407 )
383 408
384 # write a foot note 409 # write a foot note
385 s = self.tr("Diagram: {0}").format(self.getDiagramName()) 410 s = self.tr("Diagram: {0}").format(self.getDiagramName())
386 tc = QColor(50, 50, 50) 411 tc = QColor(50, 50, 50)
387 painter.setPen(tc) 412 painter.setPen(tc)
388 painter.drawRect(marginX, marginY, width, height) 413 painter.drawRect(marginX, marginY, width, height)
389 painter.drawLine(marginX, marginY + height + 2, 414 painter.drawLine(
390 marginX + width, marginY + height + 2) 415 marginX, marginY + height + 2, marginX + width, marginY + height + 2
416 )
391 painter.setFont(font) 417 painter.setFont(font)
392 painter.drawText(marginX, marginY + height + 4, width, 418 painter.drawText(
393 fontHeight, Qt.AlignmentFlag.AlignRight, s) 419 marginX,
420 marginY + height + 4,
421 width,
422 fontHeight,
423 Qt.AlignmentFlag.AlignRight,
424 s,
425 )
394 426
395 # render the diagram 427 # render the diagram
396 painter.setViewport(marginX, marginY, width, height) 428 painter.setViewport(marginX, marginY, width, height)
397 self.svgWidget.renderer().render(painter) 429 self.svgWidget.renderer().render(painter)
398 painter.end() 430 painter.end()

eric ide

mercurial