src/eric7/Graphics/SvgDiagram.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
--- a/src/eric7/Graphics/SvgDiagram.py	Wed Jul 13 11:16:20 2022 +0200
+++ b/src/eric7/Graphics/SvgDiagram.py	Wed Jul 13 14:55:47 2022 +0200
@@ -25,19 +25,43 @@
     """
     Class implementing a dialog showing a SVG graphic.
     """
+
     ZoomLevels = [
-        1, 3, 5, 7, 9,
-        10, 20, 30, 50, 67, 80, 90,
+        1,
+        3,
+        5,
+        7,
+        9,
+        10,
+        20,
+        30,
+        50,
+        67,
+        80,
+        90,
         100,
-        110, 120, 133, 150, 170, 200, 240, 300, 400,
-        500, 600, 700, 800, 900, 1000,
+        110,
+        120,
+        133,
+        150,
+        170,
+        200,
+        240,
+        300,
+        400,
+        500,
+        600,
+        700,
+        800,
+        900,
+        1000,
     ]
     ZoomLevelDefault = 100
-    
+
     def __init__(self, svgFile, parent=None, name=None):
         """
         Constructor
-        
+
         @param svgFile filename of a SVG graphics file to show
         @type str
         @param parent parent widget of the view
@@ -51,62 +75,60 @@
         else:
             self.setObjectName("SvgDiagram")
         self.setWindowTitle(self.tr("SVG-Viewer"))
-        
+
         self.svgWidget = QSvgWidget()
         self.svgWidget.setObjectName("svgWidget")
         self.svgWidget.setBackgroundRole(QPalette.ColorRole.Base)
         self.svgWidget.setSizePolicy(
-            QSizePolicy.Policy.Ignored, QSizePolicy.Policy.Ignored)
-        
+            QSizePolicy.Policy.Ignored, QSizePolicy.Policy.Ignored
+        )
+
         self.svgView = QScrollArea()
         self.svgView.setObjectName("svgView")
         self.svgView.setBackgroundRole(QPalette.ColorRole.Dark)
         self.svgView.setWidget(self.svgWidget)
-        
+
         self.setCentralWidget(self.svgView)
-        
+
         self.__zoomWidget = EricZoomWidget(
             UI.PixmapCache.getPixmap("zoomOut"),
             UI.PixmapCache.getPixmap("zoomIn"),
-            UI.PixmapCache.getPixmap("zoomReset"), self)
+            UI.PixmapCache.getPixmap("zoomReset"),
+            self,
+        )
         self.statusBar().addPermanentWidget(self.__zoomWidget)
-        self.__zoomWidget.setMapping(
-            SvgDiagram.ZoomLevels, SvgDiagram.ZoomLevelDefault)
+        self.__zoomWidget.setMapping(SvgDiagram.ZoomLevels, SvgDiagram.ZoomLevelDefault)
         self.__zoomWidget.valueChanged.connect(self.__doZoom)
-        
+
         # polish up the dialog
         self.resize(QSize(800, 600).expandedTo(self.minimumSizeHint()))
-        
+
         self.zoom = 1.0
         self.svgFile = svgFile
         self.svgWidget.load(self.svgFile)
         self.svgWidget.resize(self.svgWidget.renderer().defaultSize())
-        
+
         self.__initActions()
         self.__initContextMenu()
         self.__initToolBars()
-        
+
         self.grabGesture(Qt.GestureType.PinchGesture)
-        
+
     def __initActions(self):
         """
         Private method to initialize the view actions.
         """
-        self.closeAct = QAction(
-            UI.PixmapCache.getIcon("close"),
-            self.tr("Close"), self)
+        self.closeAct = QAction(UI.PixmapCache.getIcon("close"), self.tr("Close"), self)
         self.closeAct.triggered.connect(self.close)
-        
-        self.printAct = QAction(
-            UI.PixmapCache.getIcon("print"),
-            self.tr("Print"), self)
+
+        self.printAct = QAction(UI.PixmapCache.getIcon("print"), self.tr("Print"), self)
         self.printAct.triggered.connect(self.__printDiagram)
-        
+
         self.printPreviewAct = QAction(
-            UI.PixmapCache.getIcon("printPreview"),
-            self.tr("Print Preview"), self)
+            UI.PixmapCache.getIcon("printPreview"), self.tr("Print Preview"), self
+        )
         self.printPreviewAct.triggered.connect(self.__printPreviewDiagram)
-        
+
     def __initContextMenu(self):
         """
         Private method to initialize the context menu.
@@ -116,19 +138,19 @@
         self.__menu.addSeparator()
         self.__menu.addAction(self.printPreviewAct)
         self.__menu.addAction(self.printAct)
-        
+
         self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
         self.customContextMenuRequested.connect(self.__showContextMenu)
-        
+
     def __showContextMenu(self, coord):
         """
         Private slot to show the context menu of the listview.
-        
+
         @param coord the position of the mouse pointer
         @type QPoint
         """
         self.__menu.popup(self.mapToGlobal(coord))
-        
+
     def __initToolBars(self):
         """
         Private method to populate the toolbars with our actions.
@@ -136,28 +158,28 @@
         self.windowToolBar = QToolBar(self.tr("Window"), self)
         self.windowToolBar.setIconSize(UI.Config.ToolBarIconSize)
         self.windowToolBar.addAction(self.closeAct)
-        
+
         self.graphicsToolBar = QToolBar(self.tr("Graphics"), self)
         self.graphicsToolBar.setIconSize(UI.Config.ToolBarIconSize)
         self.graphicsToolBar.addAction(self.printPreviewAct)
         self.graphicsToolBar.addAction(self.printAct)
-        
+
         self.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.windowToolBar)
         self.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.graphicsToolBar)
-        
+
     def getDiagramName(self):
         """
         Public method to retrieve a name for the diagram.
-        
+
         @return name for the diagram
         @rtype str
         """
         return self.svgFile
-    
+
     def wheelEvent(self, evt):
         """
         Protected method to handle wheel events.
-        
+
         @param evt reference to the wheel event
         @type QWheelEvent
         """
@@ -169,13 +191,13 @@
                 self.__zoomIn()
             evt.accept()
             return
-        
+
         super().wheelEvent(evt)
-    
+
     def event(self, evt):
         """
         Public method handling events.
-        
+
         @param evt reference to the event
         @type QEvent
         @return flag indicating, if the event was handled
@@ -184,13 +206,13 @@
         if evt.type() == QEvent.Type.Gesture:
             self.gestureEvent(evt)
             return True
-        
+
         return super().event(evt)
-    
+
     def gestureEvent(self, evt):
         """
         Protected method handling gesture events.
-        
+
         @param evt reference to the gesture event
         @type QGestureEvent
         """
@@ -201,28 +223,28 @@
             elif pinch.state() == Qt.GestureState.GestureUpdated:
                 self.__doZoom(int(pinch.totalScaleFactor() * 100))
             evt.accept()
-    
+
     ###########################################################################
     ## Private menu handling methods below.
     ###########################################################################
-    
+
     def __adjustScrollBar(self, scrollBar, factor):
         """
         Private method to adjust a scrollbar by a certain factor.
-        
+
         @param scrollBar reference to the scrollbar object
         @type QScrollBar
         @param factor factor to adjust by
         @type float
         """
         scrollBar.setValue(
-            int(factor * scrollBar.value() +
-                ((factor - 1) * scrollBar.pageStep() / 2)))
-        
+            int(factor * scrollBar.value() + ((factor - 1) * scrollBar.pageStep() / 2))
+        )
+
     def __levelForZoom(self, zoom):
         """
         Private method determining the zoom level index given a zoom factor.
-        
+
         @param zoom zoom factor
         @type int
         @return index of zoom factor
@@ -235,24 +257,24 @@
                 if zoom <= SvgDiagram.ZoomLevels[index]:
                     break
         return index
-    
+
     def __doZoom(self, value):
         """
         Private method to set the zoom value in percent.
-        
+
         @param value zoom value in percent
         @type int
         """
         oldValue = self.__zoom()
         if value != oldValue:
             self.svgWidget.resize(value / 100 * self.svgWidget.sizeHint())
-            
+
             factor = value / oldValue
             self.__adjustScrollBar(self.svgView.horizontalScrollBar(), factor)
             self.__adjustScrollBar(self.svgView.verticalScrollBar(), factor)
-            
+
             self.__zoomWidget.setValue(value)
-        
+
     def __zoomIn(self):
         """
         Private method to zoom into the SVG.
@@ -260,7 +282,7 @@
         index = self.__levelForZoom(self.__zoom())
         if index < len(SvgDiagram.ZoomLevels) - 1:
             self.__doZoom(SvgDiagram.ZoomLevels[index + 1])
-        
+
     def __zoomOut(self):
         """
         Private method to zoom out of the SVG.
@@ -268,23 +290,22 @@
         index = self.__levelForZoom(self.__zoom())
         if index > 0:
             self.__doZoom(SvgDiagram.ZoomLevels[index - 1])
-        
+
     def __zoomReset(self):
         """
         Private method to reset the zoom value.
         """
         self.__doZoom(SvgDiagram.ZoomLevels[SvgDiagram.ZoomLevelDefault])
-        
+
     def __zoom(self):
         """
         Private method to get the current zoom factor in percent.
-        
+
         @return current zoom factor in percent
         @rtype int
         """
-        return int(self.svgWidget.width() /
-                   self.svgWidget.sizeHint().width() * 100.0)
-        
+        return int(self.svgWidget.width() / self.svgWidget.sizeHint().width() * 100.0)
+
     def __printDiagram(self):
         """
         Private slot called to print the diagram.
@@ -302,17 +323,17 @@
         printerName = Preferences.getPrinter("PrinterName")
         if printerName:
             printer.setPrinterName(printerName)
-        
+
         printDialog = QPrintDialog(printer, self)
         if printDialog.exec():
             self.__print(printer)
-        
+
     def __printPreviewDiagram(self):
         """
         Private slot called to show a print preview of the diagram.
         """
         from PyQt6.QtPrintSupport import QPrintPreviewDialog
-        
+
         printer = QPrinter(mode=QPrinter.PrinterMode.ScreenResolution)
         printer.setFullPage(True)
         if Preferences.getPrinter("ColorMode"):
@@ -323,25 +344,27 @@
             printer.setPageOrder(QPrinter.PageOrder.FirstPageFirst)
         else:
             printer.setPageOrder(QPrinter.PageOrder.LastPageFirst)
-        printer.setPageMargins(QMarginsF(
-            Preferences.getPrinter("LeftMargin") * 10,
-            Preferences.getPrinter("TopMargin") * 10,
-            Preferences.getPrinter("RightMargin") * 10,
-            Preferences.getPrinter("BottomMargin") * 10),
-            QPageLayout.Unit.Millimeter
+        printer.setPageMargins(
+            QMarginsF(
+                Preferences.getPrinter("LeftMargin") * 10,
+                Preferences.getPrinter("TopMargin") * 10,
+                Preferences.getPrinter("RightMargin") * 10,
+                Preferences.getPrinter("BottomMargin") * 10,
+            ),
+            QPageLayout.Unit.Millimeter,
         )
         printerName = Preferences.getPrinter("PrinterName")
         if printerName:
             printer.setPrinterName(printerName)
-        
+
         preview = QPrintPreviewDialog(printer, self)
         preview.paintRequested[QPrinter].connect(self.__print)
         preview.exec()
-        
+
     def __print(self, printer):
         """
         Private slot to the actual printing.
-        
+
         @param printer reference to the printer object
         @type QPrinter
         """
@@ -354,31 +377,33 @@
         fm = painter.fontMetrics()
         fontHeight = fm.lineSpacing()
         marginX = (
-            printer.pageLayout().paintRectPixels(printer.resolution()).x() -
-            printer.pageLayout().fullRectPixels(printer.resolution()).x()
+            printer.pageLayout().paintRectPixels(printer.resolution()).x()
+            - printer.pageLayout().fullRectPixels(printer.resolution()).x()
         )
         marginX = (
-            Preferences.getPrinter("LeftMargin") *
-            int(printer.resolution() / 2.54) - marginX
+            Preferences.getPrinter("LeftMargin") * int(printer.resolution() / 2.54)
+            - marginX
         )
         marginY = (
-            printer.pageLayout().paintRectPixels(printer.resolution()).y() -
-            printer.pageLayout().fullRectPixels(printer.resolution()).y()
+            printer.pageLayout().paintRectPixels(printer.resolution()).y()
+            - printer.pageLayout().fullRectPixels(printer.resolution()).y()
         )
         marginY = (
-            Preferences.getPrinter("TopMargin") *
-            int(printer.resolution() / 2.54) - marginY
+            Preferences.getPrinter("TopMargin") * int(printer.resolution() / 2.54)
+            - marginY
         )
 
         width = (
-            printer.width() - marginX -
-            Preferences.getPrinter("RightMargin") *
-            int(printer.resolution() / 2.54)
+            printer.width()
+            - marginX
+            - Preferences.getPrinter("RightMargin") * int(printer.resolution() / 2.54)
         )
         height = (
-            printer.height() - fontHeight - 4 - marginY -
-            Preferences.getPrinter("BottomMargin") *
-            int(printer.resolution() / 2.54)
+            printer.height()
+            - fontHeight
+            - 4
+            - marginY
+            - Preferences.getPrinter("BottomMargin") * int(printer.resolution() / 2.54)
         )
 
         # write a foot note
@@ -386,11 +411,18 @@
         tc = QColor(50, 50, 50)
         painter.setPen(tc)
         painter.drawRect(marginX, marginY, width, height)
-        painter.drawLine(marginX, marginY + height + 2,
-                         marginX + width, marginY + height + 2)
+        painter.drawLine(
+            marginX, marginY + height + 2, marginX + width, marginY + height + 2
+        )
         painter.setFont(font)
-        painter.drawText(marginX, marginY + height + 4, width,
-                         fontHeight, Qt.AlignmentFlag.AlignRight, s)
+        painter.drawText(
+            marginX,
+            marginY + height + 4,
+            width,
+            fontHeight,
+            Qt.AlignmentFlag.AlignRight,
+            s,
+        )
 
         # render the diagram
         painter.setViewport(marginX, marginY, width, height)

eric ide

mercurial