diff -r a18ddbbc5c58 -r c4199b88cf60 Viewer.py --- a/Viewer.py Mon Oct 13 16:07:52 2008 +0200 +++ b/Viewer.py Fri Oct 17 16:22:15 2008 +0200 @@ -444,11 +444,11 @@ wires = self.Wires.keys() comments = self.Comments.keys() if sort_blocks: - blocks.sort(lambda x,y:self.Blocks[x].__cmp__(self.Blocks[y])) + blocks.sort(lambda x, y: cmp(self.Blocks[x], self.Blocks[y])) if sort_wires: - wires.sort(lambda x,y:self.Wires[x].__cmp__(self.Wires[y])) + wires.sort(lambda x, y: cmp(self.Wires[x], self.Wires[y])) if sort_comments: - comments.sort(lambda x,y:self.Comments[x].__cmp__(self.Comments[y])) + comments.sort(lambda x, y: cmp(self.Comments[x], self.Comments[y])) return blocks + wires + comments def RefreshVisibleElements(self, xp = None, yp = None): @@ -2430,7 +2430,7 @@ #------------------------------------------------------------------------------- def Cut(self): - if not self.Debug and (self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement)): + if not self.Debug and (self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement) or isinstance(self.SelectedElement, Graphic_Group)): self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone(self)) rect = self.SelectedElement.GetRedrawRect(1, 1) self.SelectedElement.Delete() @@ -2442,12 +2442,12 @@ self.RefreshRect(self.GetScrolledRect(rect), False) def Copy(self): - if not self.Debug and (self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement)): + if not self.Debug and (self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement) or isinstance(self.SelectedElement, Graphic_Group)): self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone(self)) def Paste(self): element = self.ParentWindow.GetCopyBuffer() - if not self.Debug and element is not None and self.CanAddBlock(element): + if not self.Debug and element is not None and self.CanAddElement(element): block = self.CopyBlock(element, wx.Point(*self.CalcUnscrolledPosition(30, 30))) if self.SelectedElement is not None: self.SelectedElement.SetSelected(False) @@ -2458,9 +2458,15 @@ self.RefreshVisibleElements() self.ParentWindow.RefreshVariablePanel(self.TagName) self.ParentWindow.RefreshInstancesTree() - - def CanAddBlock(self, block): - if self.CurrentLanguage == "SFC": + else: + message = wx.MessageDialog(self, "You can't paste the element in buffer here!", "Error", wx.OK|wx.ICON_ERROR) + message.ShowModal() + message.Destroy() + + def CanAddElement(self, block): + if isinstance(block, Graphic_Group): + return block.CanAddBlocks(self) + elif self.CurrentLanguage == "SFC": return True elif self.CurrentLanguage == "LD" and not isinstance(block, (SFC_Step, SFC_Transition, SFC_Divergence, SFC_Jump, SFC_ActionBlock)): return True @@ -2468,63 +2474,75 @@ return True return False + def GenerateNewName(self, element): + if isinstance(element, FBD_Block): + names = [varname.upper() for varname in self.Controler.GetEditedElementVariables(self.TagName, self.Debug)] + format = "Block%d" + elif isinstance(element, SFC_Step): + names = [block.GetName().upper() for block in self.Blocks if isinstance(block, SFC_Step)] + format = "Step%d" + i = 1 + while (format%i).upper() in names: + i += 1 + return format%i + + def IsNamedElement(self, element): + return isinstance(element, FBD_Block) and element.GetName() != "" or isinstance(element, SFC_Step) + def CopyBlock(self, element, pos): id = self.GetNewId() - if isinstance(element, FBD_Block) and element.GetName() != "" or isinstance(element, SFC_Step): - if isinstance(element, FBD_Block): - names = [varname.upper() for varname in self.Controler.GetEditedElementVariables(self.TagName, self.Debug)] - format = "Block%d" - elif isinstance(element, SFC_Step): - names = [block.GetName().upper() for block in self.Blocks if isinstance(block, SFC_Step)] - format = "Step%d" - i = 1 - while (format%i).upper() in names: - i += 1 - name = format%i - block = element.Clone(self, id, name, pos) + if isinstance(element, Graphic_Group): + block = element.Clone(self, pos=pos) else: - name = None - block = element.Clone(self, id, pos=pos) + if self.IsNamedElement(element): + name = self.GenerateNewName(element) + block = element.Clone(self, id, name, pos) + else: + name = None + block = element.Clone(self, id, pos=pos) + self.AddBlockInModel(block) + return block + + def AddBlockInModel(self, block): if isinstance(block, Comment): self.AddComment(block) - self.Controler.AddEditedElementComment(self.TagName, id) + self.Controler.AddEditedElementComment(self.TagName, block.GetId()) self.RefreshCommentModel(block) else: self.AddBlock(block) if isinstance(block, FBD_Block): - self.Controler.AddEditedElementBlock(self.TagName, id, block.GetType(), name) + self.Controler.AddEditedElementBlock(self.TagName, block.GetId(), block.GetType(), block.GetName()) self.RefreshBlockModel(block) elif isinstance(block, FBD_Variable): - self.Controler.AddEditedElementVariable(self.TagName, id, block.GetType()) + self.Controler.AddEditedElementVariable(self.TagName, block.GetId(), block.GetType()) self.RefreshVariableModel(block) elif isinstance(block, FBD_Connector): - self.Controler.AddEditedElementConnection(self.TagName, id, block.GetType()) + self.Controler.AddEditedElementConnection(self.TagName, block.GetId(), block.GetType()) self.RefreshConnectionModel(block) elif isinstance(block, LD_Contact): - self.Controler.AddEditedElementContact(self.TagName, id) + self.Controler.AddEditedElementContact(self.TagName, block.GetId()) self.RefreshContactModel(block) elif isinstance(block, LD_Coil): - self.Controler.AddEditedElementCoil(self.TagName, id) + self.Controler.AddEditedElementCoil(self.TagName, block.GetId()) self.RefreshCoilModel(block) elif isinstance(block, LD_PowerRail): - self.Controler.AddEditedElementPowerRail(self.TagName, id, block.GetType()) + self.Controler.AddEditedElementPowerRail(self.TagName, block.GetId(), block.GetType()) self.RefreshPowerRailModel(block) elif isinstance(block, SFC_Step): - self.Controler.AddEditedElementStep(self.TagName, id) + self.Controler.AddEditedElementStep(self.TagName, block.GetId()) self.RefreshStepModel(block) elif isinstance(block, SFC_Transition): - self.Controler.AddEditedElementTransition(self.TagName, id) + self.Controler.AddEditedElementTransition(self.TagName, block.GetId()) self.RefreshTransitionModel(block) elif isinstance(block, SFC_Divergence): - self.Controler.AddEditedElementDivergence(self.TagName, id, block.GetType()) + self.Controler.AddEditedElementDivergence(self.TagName, block.GetId(), block.GetType()) self.RefreshDivergenceModel(block) elif isinstance(block, SFC_Jump): - self.Controler.AddEditedElementJump(self.TagName, id) + self.Controler.AddEditedElementJump(self.TagName, block.GetId()) self.RefreshJumpModel(block) elif isinstance(block, SFC_ActionBlock): - self.Controler.AddEditedElementActionBlock(self.TagName, id) + self.Controler.AddEditedElementActionBlock(self.TagName, block.GetId()) self.RefreshActionBlockModel(block) - return block #-------------------------------------------------------------------------------