119 self.setSizeAct = \ |
119 self.setSizeAct = \ |
120 QAction(UI.PixmapCache.getIcon("sceneSize.png"), |
120 QAction(UI.PixmapCache.getIcon("sceneSize.png"), |
121 self.trUtf8("Set size"), self) |
121 self.trUtf8("Set size"), self) |
122 self.setSizeAct.triggered[()].connect(self.__setSize) |
122 self.setSizeAct.triggered[()].connect(self.__setSize) |
123 |
123 |
|
124 self.rescanAct = \ |
|
125 QAction(UI.PixmapCache.getIcon("rescan.png"), |
|
126 self.trUtf8("Re-Scan"), self) |
|
127 self.rescanAct.triggered[()].connect(self.__rescan) |
|
128 |
124 self.relayoutAct = \ |
129 self.relayoutAct = \ |
125 QAction(UI.PixmapCache.getIcon("reload.png"), |
130 QAction(UI.PixmapCache.getIcon("relayout.png"), |
126 self.trUtf8("Re-Layout"), self) |
131 self.trUtf8("Re-Layout"), self) |
127 self.relayoutAct.triggered[()].connect(self.__relayout) |
132 self.relayoutAct.triggered[()].connect(self.__relayout) |
128 |
133 |
129 self.alignLeftAct = \ |
134 self.alignLeftAct = \ |
130 QAction(UI.PixmapCache.getIcon("shapesAlignLeft.png"), |
135 QAction(UI.PixmapCache.getIcon("shapesAlignLeft.png"), |
228 toolBar.addAction(self.incHeightAct) |
233 toolBar.addAction(self.incHeightAct) |
229 toolBar.addAction(self.decWidthAct) |
234 toolBar.addAction(self.decWidthAct) |
230 toolBar.addAction(self.decHeightAct) |
235 toolBar.addAction(self.decHeightAct) |
231 toolBar.addAction(self.setSizeAct) |
236 toolBar.addAction(self.setSizeAct) |
232 toolBar.addSeparator() |
237 toolBar.addSeparator() |
|
238 toolBar.addAction(self.rescanAct) |
233 toolBar.addAction(self.relayoutAct) |
239 toolBar.addAction(self.relayoutAct) |
234 |
240 |
235 return toolBar |
241 return toolBar |
236 |
242 |
237 def filteredItems(self, items, itemType=UMLItem): |
243 def filteredItems(self, items, itemType=UMLItem): |
363 self.trUtf8("""<p>The file <b>{0}</b> could not be saved.</p>""") |
369 self.trUtf8("""<p>The file <b>{0}</b> could not be saved.</p>""") |
364 .format(fname)) |
370 .format(fname)) |
365 |
371 |
366 def __relayout(self): |
372 def __relayout(self): |
367 """ |
373 """ |
368 Private method to handle the re-layout context menu entry. |
374 Private slot to handle the re-layout context menu entry. |
369 """ |
375 """ |
370 self.__itemId = -1 |
376 self.__itemId = -1 |
371 self.scene().clear() |
377 self.scene().clear() |
372 self.relayout.emit() |
378 self.relayout.emit() |
|
379 |
|
380 def __rescan(self): |
|
381 """ |
|
382 Private slot to handle the re-scan context menu entry. |
|
383 """ |
|
384 # 1. save positions of all items and names of selected items |
|
385 itemPositions = {} |
|
386 selectedItems = [] |
|
387 for item in self.filteredItems(self.scene().items(), UMLItem): |
|
388 name = item.getName() |
|
389 if name: |
|
390 itemPositions[name] = (item.x(), item.y()) |
|
391 if item.isSelected(): |
|
392 selectedItems.append(name) |
|
393 |
|
394 # 2. save |
|
395 |
|
396 # 2. re-layout the diagram |
|
397 self.__relayout() |
|
398 |
|
399 # 3. move known items to the saved positions |
|
400 for item in self.filteredItems(self.scene().items(), UMLItem): |
|
401 name = item.getName() |
|
402 if name in itemPositions: |
|
403 item.setPos(*itemPositions[name]) |
|
404 if name in selectedItems: |
|
405 item.setSelected(True) |
373 |
406 |
374 def printDiagram(self): |
407 def printDiagram(self): |
375 """ |
408 """ |
376 Public slot called to print the diagram. |
409 Public slot called to print the diagram. |
377 """ |
410 """ |
629 @param id of the item to search for (integer) |
662 @param id of the item to search for (integer) |
630 @return item found (UMLItem) or None |
663 @return item found (UMLItem) or None |
631 """ |
664 """ |
632 for item in self.scene().items(): |
665 for item in self.scene().items(): |
633 try: |
666 try: |
634 itemID = item.getId() |
667 if item.getId() == id: |
|
668 return item |
635 except AttributeError: |
669 except AttributeError: |
636 continue |
670 continue |
637 |
671 |
638 if itemID == id: |
672 return None |
639 return item |
673 |
|
674 def findItemByName(self, name): |
|
675 """ |
|
676 Public method to find an UML item based on it's name. |
|
677 |
|
678 @param name name to look for (string) |
|
679 @return item found (UMLItem) or None |
|
680 """ |
|
681 for item in self.scene().items(): |
|
682 try: |
|
683 if item.getName() == name: |
|
684 return item |
|
685 except AttributeError: |
|
686 continue |
640 |
687 |
641 return None |
688 return None |
642 |
689 |
643 def getPersistenceData(self): |
690 def getPersistenceData(self): |
644 """ |
691 """ |