eric6/Graphics/UMLGraphicsView.py

branch
maintenance
changeset 7286
7eb04391adf7
parent 6989
8b8cadf8d7e9
parent 7254
f00d825fbdb3
child 7362
028bf21bb5a2
equal deleted inserted replaced
7226:babe80d84a3e 7286:7eb04391adf7
5 5
6 """ 6 """
7 Module implementing a subclass of E5GraphicsView for our diagrams. 7 Module implementing a subclass of E5GraphicsView for our diagrams.
8 """ 8 """
9 9
10 from __future__ import unicode_literals 10
11 11 from PyQt5.QtCore import (
12 from PyQt5.QtCore import pyqtSignal, Qt, QSignalMapper, QFileInfo, QEvent, \ 12 pyqtSignal, Qt, QSignalMapper, QFileInfo, QEvent, QRectF
13 QRectF 13 )
14 from PyQt5.QtWidgets import QGraphicsView, QAction, QToolBar, QDialog 14 from PyQt5.QtWidgets import QGraphicsView, QAction, QToolBar, QDialog
15 from PyQt5.QtPrintSupport import QPrinter, QPrintDialog 15 from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
16 16
17 from E5Graphics.E5GraphicsView import E5GraphicsView 17 from E5Graphics.E5GraphicsView import E5GraphicsView
18 18
23 23
24 import UI.Config 24 import UI.Config
25 import UI.PixmapCache 25 import UI.PixmapCache
26 26
27 import Preferences 27 import Preferences
28 from Globals import qVersionTuple
29 28
30 29
31 class UMLGraphicsView(E5GraphicsView): 30 class UMLGraphicsView(E5GraphicsView):
32 """ 31 """
33 Class implementing a specialized E5GraphicsView for our diagrams. 32 Class implementing a specialized E5GraphicsView for our diagrams.
75 Private method to initialize the view actions. 74 Private method to initialize the view actions.
76 """ 75 """
77 self.alignMapper = QSignalMapper(self) 76 self.alignMapper = QSignalMapper(self)
78 self.alignMapper.mapped[int].connect(self.__alignShapes) 77 self.alignMapper.mapped[int].connect(self.__alignShapes)
79 78
80 self.deleteShapeAct = \ 79 self.deleteShapeAct = QAction(
81 QAction(UI.PixmapCache.getIcon("deleteShape.png"), 80 UI.PixmapCache.getIcon("deleteShape.png"),
82 self.tr("Delete shapes"), self) 81 self.tr("Delete shapes"), self)
83 self.deleteShapeAct.triggered.connect(self.__deleteShape) 82 self.deleteShapeAct.triggered.connect(self.__deleteShape)
84 83
85 self.incWidthAct = \ 84 self.incWidthAct = QAction(
86 QAction(UI.PixmapCache.getIcon("sceneWidthInc.png"), 85 UI.PixmapCache.getIcon("sceneWidthInc.png"),
87 self.tr("Increase width by {0} points").format( 86 self.tr("Increase width by {0} points").format(
88 self.deltaSize), 87 self.deltaSize),
89 self) 88 self)
90 self.incWidthAct.triggered.connect(self.__incWidth) 89 self.incWidthAct.triggered.connect(self.__incWidth)
91 90
92 self.incHeightAct = \ 91 self.incHeightAct = QAction(
93 QAction(UI.PixmapCache.getIcon("sceneHeightInc.png"), 92 UI.PixmapCache.getIcon("sceneHeightInc.png"),
94 self.tr("Increase height by {0} points").format( 93 self.tr("Increase height by {0} points").format(
95 self.deltaSize), 94 self.deltaSize),
96 self) 95 self)
97 self.incHeightAct.triggered.connect(self.__incHeight) 96 self.incHeightAct.triggered.connect(self.__incHeight)
98 97
99 self.decWidthAct = \ 98 self.decWidthAct = QAction(
100 QAction(UI.PixmapCache.getIcon("sceneWidthDec.png"), 99 UI.PixmapCache.getIcon("sceneWidthDec.png"),
101 self.tr("Decrease width by {0} points").format( 100 self.tr("Decrease width by {0} points").format(
102 self.deltaSize), 101 self.deltaSize),
103 self) 102 self)
104 self.decWidthAct.triggered.connect(self.__decWidth) 103 self.decWidthAct.triggered.connect(self.__decWidth)
105 104
106 self.decHeightAct = \ 105 self.decHeightAct = QAction(
107 QAction(UI.PixmapCache.getIcon("sceneHeightDec.png"), 106 UI.PixmapCache.getIcon("sceneHeightDec.png"),
108 self.tr("Decrease height by {0} points").format( 107 self.tr("Decrease height by {0} points").format(
109 self.deltaSize), 108 self.deltaSize),
110 self) 109 self)
111 self.decHeightAct.triggered.connect(self.__decHeight) 110 self.decHeightAct.triggered.connect(self.__decHeight)
112 111
113 self.setSizeAct = \ 112 self.setSizeAct = QAction(
114 QAction(UI.PixmapCache.getIcon("sceneSize.png"), 113 UI.PixmapCache.getIcon("sceneSize.png"),
115 self.tr("Set size"), self) 114 self.tr("Set size"), self)
116 self.setSizeAct.triggered.connect(self.__setSize) 115 self.setSizeAct.triggered.connect(self.__setSize)
117 116
118 self.rescanAct = \ 117 self.rescanAct = QAction(
119 QAction(UI.PixmapCache.getIcon("rescan.png"), 118 UI.PixmapCache.getIcon("rescan.png"),
120 self.tr("Re-Scan"), self) 119 self.tr("Re-Scan"), self)
121 self.rescanAct.triggered.connect(self.__rescan) 120 self.rescanAct.triggered.connect(self.__rescan)
122 121
123 self.relayoutAct = \ 122 self.relayoutAct = QAction(
124 QAction(UI.PixmapCache.getIcon("relayout.png"), 123 UI.PixmapCache.getIcon("relayout.png"),
125 self.tr("Re-Layout"), self) 124 self.tr("Re-Layout"), self)
126 self.relayoutAct.triggered.connect(self.__relayout) 125 self.relayoutAct.triggered.connect(self.__relayout)
127 126
128 self.alignLeftAct = \ 127 self.alignLeftAct = QAction(
129 QAction(UI.PixmapCache.getIcon("shapesAlignLeft.png"), 128 UI.PixmapCache.getIcon("shapesAlignLeft.png"),
130 self.tr("Align Left"), self) 129 self.tr("Align Left"), self)
131 self.alignMapper.setMapping(self.alignLeftAct, Qt.AlignLeft) 130 self.alignMapper.setMapping(self.alignLeftAct, Qt.AlignLeft)
132 self.alignLeftAct.triggered.connect(self.alignMapper.map) 131 self.alignLeftAct.triggered.connect(self.alignMapper.map)
133 132
134 self.alignHCenterAct = \ 133 self.alignHCenterAct = QAction(
135 QAction(UI.PixmapCache.getIcon("shapesAlignHCenter.png"), 134 UI.PixmapCache.getIcon("shapesAlignHCenter.png"),
136 self.tr("Align Center Horizontal"), self) 135 self.tr("Align Center Horizontal"), self)
137 self.alignMapper.setMapping(self.alignHCenterAct, Qt.AlignHCenter) 136 self.alignMapper.setMapping(self.alignHCenterAct, Qt.AlignHCenter)
138 self.alignHCenterAct.triggered.connect(self.alignMapper.map) 137 self.alignHCenterAct.triggered.connect(self.alignMapper.map)
139 138
140 self.alignRightAct = \ 139 self.alignRightAct = QAction(
141 QAction(UI.PixmapCache.getIcon("shapesAlignRight.png"), 140 UI.PixmapCache.getIcon("shapesAlignRight.png"),
142 self.tr("Align Right"), self) 141 self.tr("Align Right"), self)
143 self.alignMapper.setMapping(self.alignRightAct, Qt.AlignRight) 142 self.alignMapper.setMapping(self.alignRightAct, Qt.AlignRight)
144 self.alignRightAct.triggered.connect(self.alignMapper.map) 143 self.alignRightAct.triggered.connect(self.alignMapper.map)
145 144
146 self.alignTopAct = \ 145 self.alignTopAct = QAction(
147 QAction(UI.PixmapCache.getIcon("shapesAlignTop.png"), 146 UI.PixmapCache.getIcon("shapesAlignTop.png"),
148 self.tr("Align Top"), self) 147 self.tr("Align Top"), self)
149 self.alignMapper.setMapping(self.alignTopAct, Qt.AlignTop) 148 self.alignMapper.setMapping(self.alignTopAct, Qt.AlignTop)
150 self.alignTopAct.triggered.connect(self.alignMapper.map) 149 self.alignTopAct.triggered.connect(self.alignMapper.map)
151 150
152 self.alignVCenterAct = \ 151 self.alignVCenterAct = QAction(
153 QAction(UI.PixmapCache.getIcon("shapesAlignVCenter.png"), 152 UI.PixmapCache.getIcon("shapesAlignVCenter.png"),
154 self.tr("Align Center Vertical"), self) 153 self.tr("Align Center Vertical"), self)
155 self.alignMapper.setMapping(self.alignVCenterAct, Qt.AlignVCenter) 154 self.alignMapper.setMapping(self.alignVCenterAct, Qt.AlignVCenter)
156 self.alignVCenterAct.triggered.connect(self.alignMapper.map) 155 self.alignVCenterAct.triggered.connect(self.alignMapper.map)
157 156
158 self.alignBottomAct = \ 157 self.alignBottomAct = QAction(
159 QAction(UI.PixmapCache.getIcon("shapesAlignBottom.png"), 158 UI.PixmapCache.getIcon("shapesAlignBottom.png"),
160 self.tr("Align Bottom"), self) 159 self.tr("Align Bottom"), self)
161 self.alignMapper.setMapping(self.alignBottomAct, Qt.AlignBottom) 160 self.alignMapper.setMapping(self.alignBottomAct, Qt.AlignBottom)
162 self.alignBottomAct.triggered.connect(self.alignMapper.map) 161 self.alignBottomAct.triggered.connect(self.alignMapper.map)
163 162
164 def __checkSizeActions(self): 163 def __checkSizeActions(self):
165 """ 164 """
523 itemrect = item.sceneBoundingRect() 522 itemrect = item.sceneBoundingRect()
524 xOffset = yOffset = 0 523 xOffset = yOffset = 0
525 if alignment == Qt.AlignLeft: 524 if alignment == Qt.AlignLeft:
526 xOffset = rect.x() - itemrect.x() 525 xOffset = rect.x() - itemrect.x()
527 elif alignment == Qt.AlignRight: 526 elif alignment == Qt.AlignRight:
528 xOffset = (rect.x() + rect.width()) - \ 527 xOffset = (
529 (itemrect.x() + itemrect.width()) 528 (rect.x() + rect.width()) -
529 (itemrect.x() + itemrect.width())
530 )
530 elif alignment == Qt.AlignHCenter: 531 elif alignment == Qt.AlignHCenter:
531 xOffset = (rect.x() + rect.width() // 2) - \ 532 xOffset = (
532 (itemrect.x() + itemrect.width() // 2) 533 (rect.x() + rect.width() // 2) -
534 (itemrect.x() + itemrect.width() // 2)
535 )
533 elif alignment == Qt.AlignTop: 536 elif alignment == Qt.AlignTop:
534 yOffset = rect.y() - itemrect.y() 537 yOffset = rect.y() - itemrect.y()
535 elif alignment == Qt.AlignBottom: 538 elif alignment == Qt.AlignBottom:
536 yOffset = (rect.y() + rect.height()) - \ 539 yOffset = (
537 (itemrect.y() + itemrect.height()) 540 (rect.y() + rect.height()) -
541 (itemrect.y() + itemrect.height())
542 )
538 elif alignment == Qt.AlignVCenter: 543 elif alignment == Qt.AlignVCenter:
539 yOffset = (rect.y() + rect.height() // 2) - \ 544 yOffset = (
540 (itemrect.y() + itemrect.height() // 2) 545 (rect.y() + rect.height() // 2) -
546 (itemrect.y() + itemrect.height() // 2)
547 )
541 item.moveBy(xOffset, yOffset) 548 item.moveBy(xOffset, yOffset)
542 549
543 self.scene().update() 550 self.scene().update()
544 551
545 def __itemsBoundingRect(self, items): 552 def __itemsBoundingRect(self, items):
600 Protected method to handle wheel events. 607 Protected method to handle wheel events.
601 608
602 @param evt reference to the wheel event (QWheelEvent) 609 @param evt reference to the wheel event (QWheelEvent)
603 """ 610 """
604 if evt.modifiers() & Qt.ControlModifier: 611 if evt.modifiers() & Qt.ControlModifier:
605 if qVersionTuple() >= (5, 0, 0): 612 delta = evt.angleDelta().y()
606 delta = evt.angleDelta().y()
607 else:
608 delta = evt.delta()
609 if delta < 0: 613 if delta < 0:
610 self.zoomOut() 614 self.zoomOut()
611 elif delta > 0: 615 elif delta > 0:
612 self.zoomIn() 616 self.zoomIn()
613 evt.accept() 617 evt.accept()
750 if not itm.parseItemDataString(version, itemData): 754 if not itm.parseItemDataString(version, itemData):
751 return False, linenum 755 return False, linenum
752 except ValueError: 756 except ValueError:
753 return False, linenum 757 return False, linenum
754 elif key == "association": 758 elif key == "association":
755 srcId, dstId, assocType, topToBottom = \ 759 srcId, dstId, assocType, topToBottom = (
756 AssociationItem.parseAssociationItemDataString( 760 AssociationItem.parseAssociationItemDataString(
757 value.strip()) 761 value.strip())
762 )
758 assoc = AssociationItem(umlItems[srcId], umlItems[dstId], 763 assoc = AssociationItem(umlItems[srcId], umlItems[dstId],
759 assocType, topToBottom) 764 assocType, topToBottom)
760 self.scene().addItem(assoc) 765 self.scene().addItem(assoc)
761 766
762 return True, -1 767 return True, -1

eric ide

mercurial