64 |
65 |
65 self.__initActions() |
66 self.__initActions() |
66 |
67 |
67 scene.changed.connect(self.__sceneChanged) |
68 scene.changed.connect(self.__sceneChanged) |
68 |
69 |
69 self.grabGesture(Qt.PinchGesture) |
70 self.grabGesture(Qt.GestureType.PinchGesture) |
70 |
71 |
71 def __initActions(self): |
72 def __initActions(self): |
72 """ |
73 """ |
73 Private method to initialize the view actions. |
74 Private method to initialize the view actions. |
74 """ |
75 """ |
75 self.alignMapper = QSignalMapper(self) |
76 self.alignMapper = QSignalMapper(self) |
76 self.alignMapper.mapped[int].connect(self.__alignShapes) |
77 try: |
|
78 self.alignMapper.mappedInt.connect(self.__alignShapes) |
|
79 except AttributeError: |
|
80 # pre Qt 5.15 |
|
81 self.alignMapper.mapped[int].connect(self.__alignShapes) |
77 |
82 |
78 self.deleteShapeAct = QAction( |
83 self.deleteShapeAct = QAction( |
79 UI.PixmapCache.getIcon("deleteShape"), |
84 UI.PixmapCache.getIcon("deleteShape"), |
80 self.tr("Delete shapes"), self) |
85 self.tr("Delete shapes"), self) |
81 self.deleteShapeAct.triggered.connect(self.__deleteShape) |
86 self.deleteShapeAct.triggered.connect(self.__deleteShape) |
124 self.relayoutAct.triggered.connect(self.__relayout) |
129 self.relayoutAct.triggered.connect(self.__relayout) |
125 |
130 |
126 self.alignLeftAct = QAction( |
131 self.alignLeftAct = QAction( |
127 UI.PixmapCache.getIcon("shapesAlignLeft"), |
132 UI.PixmapCache.getIcon("shapesAlignLeft"), |
128 self.tr("Align Left"), self) |
133 self.tr("Align Left"), self) |
129 self.alignMapper.setMapping(self.alignLeftAct, Qt.AlignLeft) |
134 self.alignMapper.setMapping( |
|
135 self.alignLeftAct, Qt.AlignmentFlag.AlignLeft) |
130 self.alignLeftAct.triggered.connect(self.alignMapper.map) |
136 self.alignLeftAct.triggered.connect(self.alignMapper.map) |
131 |
137 |
132 self.alignHCenterAct = QAction( |
138 self.alignHCenterAct = QAction( |
133 UI.PixmapCache.getIcon("shapesAlignHCenter"), |
139 UI.PixmapCache.getIcon("shapesAlignHCenter"), |
134 self.tr("Align Center Horizontal"), self) |
140 self.tr("Align Center Horizontal"), self) |
135 self.alignMapper.setMapping(self.alignHCenterAct, Qt.AlignHCenter) |
141 self.alignMapper.setMapping( |
|
142 self.alignHCenterAct, Qt.AlignmentFlag.AlignHCenter) |
136 self.alignHCenterAct.triggered.connect(self.alignMapper.map) |
143 self.alignHCenterAct.triggered.connect(self.alignMapper.map) |
137 |
144 |
138 self.alignRightAct = QAction( |
145 self.alignRightAct = QAction( |
139 UI.PixmapCache.getIcon("shapesAlignRight"), |
146 UI.PixmapCache.getIcon("shapesAlignRight"), |
140 self.tr("Align Right"), self) |
147 self.tr("Align Right"), self) |
141 self.alignMapper.setMapping(self.alignRightAct, Qt.AlignRight) |
148 self.alignMapper.setMapping( |
|
149 self.alignRightAct, Qt.AlignmentFlag.AlignRight) |
142 self.alignRightAct.triggered.connect(self.alignMapper.map) |
150 self.alignRightAct.triggered.connect(self.alignMapper.map) |
143 |
151 |
144 self.alignTopAct = QAction( |
152 self.alignTopAct = QAction( |
145 UI.PixmapCache.getIcon("shapesAlignTop"), |
153 UI.PixmapCache.getIcon("shapesAlignTop"), |
146 self.tr("Align Top"), self) |
154 self.tr("Align Top"), self) |
147 self.alignMapper.setMapping(self.alignTopAct, Qt.AlignTop) |
155 self.alignMapper.setMapping( |
|
156 self.alignTopAct, Qt.AlignmentFlag.AlignTop) |
148 self.alignTopAct.triggered.connect(self.alignMapper.map) |
157 self.alignTopAct.triggered.connect(self.alignMapper.map) |
149 |
158 |
150 self.alignVCenterAct = QAction( |
159 self.alignVCenterAct = QAction( |
151 UI.PixmapCache.getIcon("shapesAlignVCenter"), |
160 UI.PixmapCache.getIcon("shapesAlignVCenter"), |
152 self.tr("Align Center Vertical"), self) |
161 self.tr("Align Center Vertical"), self) |
153 self.alignMapper.setMapping(self.alignVCenterAct, Qt.AlignVCenter) |
162 self.alignMapper.setMapping( |
|
163 self.alignVCenterAct, Qt.AlignmentFlag.AlignVCenter) |
154 self.alignVCenterAct.triggered.connect(self.alignMapper.map) |
164 self.alignVCenterAct.triggered.connect(self.alignMapper.map) |
155 |
165 |
156 self.alignBottomAct = QAction( |
166 self.alignBottomAct = QAction( |
157 UI.PixmapCache.getIcon("shapesAlignBottom"), |
167 UI.PixmapCache.getIcon("shapesAlignBottom"), |
158 self.tr("Align Bottom"), self) |
168 self.tr("Align Bottom"), self) |
159 self.alignMapper.setMapping(self.alignBottomAct, Qt.AlignBottom) |
169 self.alignMapper.setMapping( |
|
170 self.alignBottomAct, Qt.AlignmentFlag.AlignBottom) |
160 self.alignBottomAct.triggered.connect(self.alignMapper.map) |
171 self.alignBottomAct.triggered.connect(self.alignMapper.map) |
161 |
172 |
162 def __checkSizeActions(self): |
173 def __checkSizeActions(self): |
163 """ |
174 """ |
164 Private slot to set the enabled state of the size actions. |
175 Private slot to set the enabled state of the size actions. |
306 from .UMLSceneSizeDialog import UMLSceneSizeDialog |
317 from .UMLSceneSizeDialog import UMLSceneSizeDialog |
307 rect = self._getDiagramRect(10) |
318 rect = self._getDiagramRect(10) |
308 sceneRect = self.scene().sceneRect() |
319 sceneRect = self.scene().sceneRect() |
309 dlg = UMLSceneSizeDialog(sceneRect.width(), sceneRect.height(), |
320 dlg = UMLSceneSizeDialog(sceneRect.width(), sceneRect.height(), |
310 rect.width(), rect.height(), self) |
321 rect.width(), rect.height(), self) |
311 if dlg.exec() == QDialog.Accepted: |
322 if dlg.exec() == QDialog.DialogCode.Accepted: |
312 width, height = dlg.getData() |
323 width, height = dlg.getData() |
313 self.setSceneSize(width, height) |
324 self.setSceneSize(width, height) |
314 self.__checkSizeActions() |
325 self.__checkSizeActions() |
315 |
326 |
316 def autoAdjustSceneSize(self, limit=False): |
327 def autoAdjustSceneSize(self, limit=False): |
398 |
409 |
399 def printDiagram(self): |
410 def printDiagram(self): |
400 """ |
411 """ |
401 Public slot called to print the diagram. |
412 Public slot called to print the diagram. |
402 """ |
413 """ |
403 printer = QPrinter(mode=QPrinter.ScreenResolution) |
414 printer = QPrinter(mode=QPrinter.PrinterMode.ScreenResolution) |
404 printer.setFullPage(True) |
415 printer.setFullPage(True) |
405 if Preferences.getPrinter("ColorMode"): |
416 if Preferences.getPrinter("ColorMode"): |
406 printer.setColorMode(QPrinter.Color) |
417 printer.setColorMode(QPrinter.ColorMode.Color) |
407 else: |
418 else: |
408 printer.setColorMode(QPrinter.GrayScale) |
419 printer.setColorMode(QPrinter.ColorMode.GrayScale) |
409 if Preferences.getPrinter("FirstPageFirst"): |
420 if Preferences.getPrinter("FirstPageFirst"): |
410 printer.setPageOrder(QPrinter.FirstPageFirst) |
421 printer.setPageOrder(QPrinter.PageOrder.FirstPageFirst) |
411 else: |
422 else: |
412 printer.setPageOrder(QPrinter.LastPageFirst) |
423 printer.setPageOrder(QPrinter.PageOrder.LastPageFirst) |
413 printer.setPageMargins( |
424 printer.setPageMargins( |
414 Preferences.getPrinter("LeftMargin") * 10, |
425 Preferences.getPrinter("LeftMargin") * 10, |
415 Preferences.getPrinter("TopMargin") * 10, |
426 Preferences.getPrinter("TopMargin") * 10, |
416 Preferences.getPrinter("RightMargin") * 10, |
427 Preferences.getPrinter("RightMargin") * 10, |
417 Preferences.getPrinter("BottomMargin") * 10, |
428 Preferences.getPrinter("BottomMargin") * 10, |
418 QPrinter.Millimeter |
429 QPrinter.Unit.Millimeter |
419 ) |
430 ) |
420 printerName = Preferences.getPrinter("PrinterName") |
431 printerName = Preferences.getPrinter("PrinterName") |
421 if printerName: |
432 if printerName: |
422 printer.setPrinterName(printerName) |
433 printer.setPrinterName(printerName) |
423 |
434 |
430 """ |
441 """ |
431 Public slot called to show a print preview of the diagram. |
442 Public slot called to show a print preview of the diagram. |
432 """ |
443 """ |
433 from PyQt5.QtPrintSupport import QPrintPreviewDialog |
444 from PyQt5.QtPrintSupport import QPrintPreviewDialog |
434 |
445 |
435 printer = QPrinter(mode=QPrinter.ScreenResolution) |
446 printer = QPrinter(mode=QPrinter.PrinterMode.ScreenResolution) |
436 printer.setFullPage(True) |
447 printer.setFullPage(True) |
437 if Preferences.getPrinter("ColorMode"): |
448 if Preferences.getPrinter("ColorMode"): |
438 printer.setColorMode(QPrinter.Color) |
449 printer.setColorMode(QPrinter.ColorMode.Color) |
439 else: |
450 else: |
440 printer.setColorMode(QPrinter.GrayScale) |
451 printer.setColorMode(QPrinter.ColorMode.GrayScale) |
441 if Preferences.getPrinter("FirstPageFirst"): |
452 if Preferences.getPrinter("FirstPageFirst"): |
442 printer.setPageOrder(QPrinter.FirstPageFirst) |
453 printer.setPageOrder(QPrinter.PageOrder.FirstPageFirst) |
443 else: |
454 else: |
444 printer.setPageOrder(QPrinter.LastPageFirst) |
455 printer.setPageOrder(QPrinter.PageOrder.LastPageFirst) |
445 printer.setPageMargins( |
456 printer.setPageMargins( |
446 Preferences.getPrinter("LeftMargin") * 10, |
457 Preferences.getPrinter("LeftMargin") * 10, |
447 Preferences.getPrinter("TopMargin") * 10, |
458 Preferences.getPrinter("TopMargin") * 10, |
448 Preferences.getPrinter("RightMargin") * 10, |
459 Preferences.getPrinter("RightMargin") * 10, |
449 Preferences.getPrinter("BottomMargin") * 10, |
460 Preferences.getPrinter("BottomMargin") * 10, |
450 QPrinter.Millimeter |
461 QPrinter.Unit.Millimeter |
451 ) |
462 ) |
452 printerName = Preferences.getPrinter("PrinterName") |
463 printerName = Preferences.getPrinter("PrinterName") |
453 if printerName: |
464 if printerName: |
454 printer.setPrinterName(printerName) |
465 printer.setPrinterName(printerName) |
455 |
466 |
486 |
497 |
487 # step 2: find the index of the item to align in relation to |
498 # step 2: find the index of the item to align in relation to |
488 amount = None |
499 amount = None |
489 for i, item in enumerate(items): |
500 for i, item in enumerate(items): |
490 rect = item.sceneBoundingRect() |
501 rect = item.sceneBoundingRect() |
491 if alignment == Qt.AlignLeft: |
502 if alignment == Qt.AlignmentFlag.AlignLeft: |
492 if amount is None or rect.x() < amount: |
503 if amount is None or rect.x() < amount: |
493 amount = rect.x() |
504 amount = rect.x() |
494 index = i |
505 index = i |
495 elif alignment == Qt.AlignRight: |
506 elif alignment == Qt.AlignmentFlag.AlignRight: |
496 if amount is None or rect.x() + rect.width() > amount: |
507 if amount is None or rect.x() + rect.width() > amount: |
497 amount = rect.x() + rect.width() |
508 amount = rect.x() + rect.width() |
498 index = i |
509 index = i |
499 elif alignment == Qt.AlignHCenter: |
510 elif alignment == Qt.AlignmentFlag.AlignHCenter: |
500 if amount is None or rect.width() > amount: |
511 if amount is None or rect.width() > amount: |
501 amount = rect.width() |
512 amount = rect.width() |
502 index = i |
513 index = i |
503 elif alignment == Qt.AlignTop: |
514 elif alignment == Qt.AlignmentFlag.AlignTop: |
504 if amount is None or rect.y() < amount: |
515 if amount is None or rect.y() < amount: |
505 amount = rect.y() |
516 amount = rect.y() |
506 index = i |
517 index = i |
507 elif alignment == Qt.AlignBottom: |
518 elif alignment == Qt.AlignmentFlag.AlignBottom: |
508 if amount is None or rect.y() + rect.height() > amount: |
519 if amount is None or rect.y() + rect.height() > amount: |
509 amount = rect.y() + rect.height() |
520 amount = rect.y() + rect.height() |
510 index = i |
521 index = i |
511 elif alignment == Qt.AlignVCenter: |
522 elif alignment == Qt.AlignmentFlag.AlignVCenter: |
512 if amount is None or rect.height() > amount: |
523 if amount is None or rect.height() > amount: |
513 amount = rect.height() |
524 amount = rect.height() |
514 index = i |
525 index = i |
515 rect = items[index].sceneBoundingRect() |
526 rect = items[index].sceneBoundingRect() |
516 |
527 |
518 for i, item in enumerate(items): |
529 for i, item in enumerate(items): |
519 if i == index: |
530 if i == index: |
520 continue |
531 continue |
521 itemrect = item.sceneBoundingRect() |
532 itemrect = item.sceneBoundingRect() |
522 xOffset = yOffset = 0 |
533 xOffset = yOffset = 0 |
523 if alignment == Qt.AlignLeft: |
534 if alignment == Qt.AlignmentFlag.AlignLeft: |
524 xOffset = rect.x() - itemrect.x() |
535 xOffset = rect.x() - itemrect.x() |
525 elif alignment == Qt.AlignRight: |
536 elif alignment == Qt.AlignmentFlag.AlignRight: |
526 xOffset = ( |
537 xOffset = ( |
527 (rect.x() + rect.width()) - |
538 (rect.x() + rect.width()) - |
528 (itemrect.x() + itemrect.width()) |
539 (itemrect.x() + itemrect.width()) |
529 ) |
540 ) |
530 elif alignment == Qt.AlignHCenter: |
541 elif alignment == Qt.AlignmentFlag.AlignHCenter: |
531 xOffset = ( |
542 xOffset = ( |
532 (rect.x() + rect.width() // 2) - |
543 (rect.x() + rect.width() // 2) - |
533 (itemrect.x() + itemrect.width() // 2) |
544 (itemrect.x() + itemrect.width() // 2) |
534 ) |
545 ) |
535 elif alignment == Qt.AlignTop: |
546 elif alignment == Qt.AlignmentFlag.AlignTop: |
536 yOffset = rect.y() - itemrect.y() |
547 yOffset = rect.y() - itemrect.y() |
537 elif alignment == Qt.AlignBottom: |
548 elif alignment == Qt.AlignmentFlag.AlignBottom: |
538 yOffset = ( |
549 yOffset = ( |
539 (rect.y() + rect.height()) - |
550 (rect.y() + rect.height()) - |
540 (itemrect.y() + itemrect.height()) |
551 (itemrect.y() + itemrect.height()) |
541 ) |
552 ) |
542 elif alignment == Qt.AlignVCenter: |
553 elif alignment == Qt.AlignmentFlag.AlignVCenter: |
543 yOffset = ( |
554 yOffset = ( |
544 (rect.y() + rect.height() // 2) - |
555 (rect.y() + rect.height() // 2) - |
545 (itemrect.y() + itemrect.height() // 2) |
556 (itemrect.y() + itemrect.height() // 2) |
546 ) |
557 ) |
547 item.moveBy(xOffset, yOffset) |
558 item.moveBy(xOffset, yOffset) |