def getOglActors(self, xmlOglActors: NodeList) -> OglActors: """ Parse the XML elements given and build data layer for PyUt actors. Args: xmlOglActors: XML 'GraphicActor' elements Returns: A dictionary of OglActor objects """ oglActors: OglActors = cast(OglActors, {}) for xmlOglActor in xmlOglActors: pyutActor: PyutActor = PyutActor() # Building OGL Actor height: int = PyutUtils.strFloatToInt(xmlOglActor.getAttribute(PyutXmlConstants.ATTR_HEIGHT)) width: int = PyutUtils.strFloatToInt(xmlOglActor.getAttribute(PyutXmlConstants.ATTR_WIDTH)) oglActor: OglActor = OglActor(pyutActor, width, height) xmlActor: Element = xmlOglActor.getElementsByTagName(PyutXmlConstants.ELEMENT_MODEL_ACTOR)[0] pyutActor.setId(int(xmlActor.getAttribute(PyutXmlConstants.ATTR_ID))) pyutActor.setName(xmlActor.getAttribute(PyutXmlConstants.ATTR_NAME)) pyutActor.setFilename(xmlActor.getAttribute(PyutXmlConstants.ATTR_FILENAME)) # Adding properties necessary to place shape on a diagram frame x = PyutUtils.strFloatToInt(xmlOglActor.getAttribute(PyutXmlConstants.ATTR_X)) y = PyutUtils.strFloatToInt(xmlOglActor.getAttribute(PyutXmlConstants.ATTR_Y)) oglActor.SetPosition(x, y) oglActors[pyutActor.getId()] = oglActor return oglActors
def createNewActor(self, x, y): """ Add a new actor at (x, y). @return PyutActor : the newly created PyutActor """ pyutActor: PyutActor = PyutActor() oglActor: OglActor = OglActor(pyutActor) self.addShape(oglActor, x, y) self.Refresh() return pyutActor
def _getOglActors(self, xmlOglActors, dicoOglObjects, dicoLink, dicoFather, umlFrame): """ Parse the XML elements given and build data layer for PyUT actors. @param Element[] xmlOglActors : XML 'GraphicActor' elements @param {id / srcName, OglObject} dicoOglObjects : OGL objects loaded @param {id / srcName, OglLink} dicoLink : OGL links loaded @param {id / srcName, id / srcName} dicoFather: Inheritance @param UmlFrame umlFrame : Where to draw @since 2.0 @author Philippe Waelti <*****@*****.**> """ oldData = 0 for xmlOglActor in xmlOglActors: pyutActor = PyutActor() # Building OGL Actor height = int(xmlOglActor.getAttribute('height')) width = int(xmlOglActor.getAttribute('width')) oglActor = OglActor(pyutActor, width, height) xmlActor = xmlOglActor.getElementsByTagName('Actor')[0] # Backward compatibility (pyut v1.0). If id not present, # auto set by the instantiation of object if xmlActor.hasAttribute('id'): pyutActor.setId(int(xmlActor.getAttribute('id'))) else: oldData = 1 # adding name for this class pyutActor.setName(xmlActor.getAttribute('name').encode("charmap")) # adding fathers self._getFathers(xmlActor.getElementsByTagName("Father"), dicoFather, pyutActor.getId()) # Update dicos dicoLink[pyutActor.getId()] = self._getLinks(xmlActor) dicoOglObjects[pyutActor.getId()] = oglActor # Update UML Frame x = int(xmlOglActor.getAttribute('x')) y = int(xmlOglActor.getAttribute('y')) umlFrame.addShape(oglActor, x, y) return oldData
def onPaste(self, event: CommandEvent): """ Args: event: """ if len(self._clipboard) == 0: return self.logger.info(f'Pasting {len(self._clipboard)} objects') frame = self._mediator.getUmlFrame() if frame == -1: PyutUtils.displayError(_("No frame to paste into")) return # put the objects in the clipboard and remove them from the diagram x, y = 100, 100 for clipboardObject in self._clipboard: obj: PyutObject = copy(clipboardObject) if isinstance(obj, PyutClass): po: OglObject = OglClass(obj) elif isinstance(obj, PyutNote): po = OglNote(obj) elif isinstance(obj, PyutActor): po = OglActor(obj) elif isinstance(obj, PyutUseCase): po = OglUseCase(obj) else: self.logger.error(f'Error when try to paste object: {obj}') return self.logger.info(f'Pasting: {po=}') self._mediator.getUmlFrame().addShape(po, x, y) x += 20 y += 20 canvas = po.GetDiagram().GetPanel() # the frame that contains the shape # specify the canvas on which we will paint dc: ClientDC = ClientDC(canvas) canvas.PrepareDC(dc) self._treeNotebookHandler.setModified(True) self._mediator.updateTitle() canvas.Refresh()
def _OnMnuEditPaste(self, event: CommandEvent): """ Args: event: """ if len(self._clipboard) == 0: return frame = self._ctrl.getUmlFrame() if frame == -1: PyutUtils.displayError(_("No frame to paste into")) return # put the objects in the clipboard and remove them from the diagram x, y = 100, 100 for obj in self._clipboard: obj = copy(obj) # this is a PyutObject if isinstance(obj, PyutClass): po = OglClass(obj) elif isinstance(obj, PyutNote): po = OglNote(obj) elif isinstance(obj, PyutActor): po = OglActor(obj) elif isinstance(obj, PyutUseCase): po = OglUseCase(obj) else: self.logger.error("Error when try to paste object") return self._ctrl.getUmlFrame().addShape(po, x, y) x += 20 y += 20 canvas = po.GetDiagram().GetPanel() # the canvas that contain the shape # specify the canvas on which we will paint dc = ClientDC(canvas) canvas.PrepareDC(dc) self._mainFileHandlingUI.setModified(True) self._ctrl.updateTitle() canvas.Refresh()
def oglActorToXml(self, oglActor: OglActor, xmlDoc: Document) -> Element: """ Exporting an OglActor to a minidom Element. Args: oglActor: Actor to convert xmlDoc: xml document Returns: New minidom element """ root: Element = xmlDoc.createElement( PyutXmlConstants.ELEMENT_GRAPHIC_ACTOR) self.__appendOglBase(oglActor, root) root.appendChild(self._pyutActorToXml(oglActor.getPyutObject(), xmlDoc)) return root
def _getOglActors(self, xmlOglActors, dicoOglObjects, dicoLink, dicoFather, umlFrame): """ Parse the XML elements given and build data layer for PyUT actors. @param Element[] xmlOglActors : XML 'GraphicActor' elements @param {id / srcName, OglObject} dicoOglObjects : OGL objects loaded @param {id / srcName, OglLink} dicoLink : OGL links loaded @param {id / srcName, id / srcName} dicoFather: Inheritance @param UmlFrame umlFrame : Where to draw """ for xmlOglActor in xmlOglActors: pyutActor = PyutActor() # Building OGL Actor height = float(xmlOglActor.getAttribute('height')) width = float(xmlOglActor.getAttribute('width')) oglActor = OglActor(pyutActor, width, height) xmlActor = xmlOglActor.getElementsByTagName('Actor')[0] pyutActor.setId(int(xmlActor.getAttribute('id'))) # adding name for this class # pyutActor.setName(xmlActor.getAttribute('name').encode("charmap")) # Python 3 is already UTF-8 pyutActor.setName(xmlActor.getAttribute('name')) # adding associated filename ([email protected]) pyutActor.setFilename(xmlActor.getAttribute('filename')) # Update dicos dicoOglObjects[pyutActor.getId()] = oglActor # Update UML Frame x = float(xmlOglActor.getAttribute('x')) y = float(xmlOglActor.getAttribute('y')) umlFrame.addShape(oglActor, x, y)