diff -r 25ffba02b6a8 -r ed27a676d5c9 Viewer.py --- a/Viewer.py Fri Jul 24 10:47:35 2009 +0200 +++ b/Viewer.py Fri Jul 24 11:07:33 2009 +0200 @@ -2564,7 +2564,9 @@ def Cut(self): 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)) + blocks, wires = self.SelectedElement.GetDefinition() + text = self.Controler.GetEditedElementInstancesCopy(self.TagName, blocks, wires, self.Debug) + self.ParentWindow.SetCopyBuffer(text) rect = self.SelectedElement.GetRedrawRect(1, 1) self.SelectedElement.Delete() self.SelectedElement = None @@ -2576,42 +2578,30 @@ def Copy(self): 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)) + blocks, wires = self.SelectedElement.GetDefinition() + text = self.Controler.GetEditedElementInstancesCopy(self.TagName, blocks, wires, self.Debug) + self.ParentWindow.SetCopyBuffer(text) def Paste(self): - element = self.ParentWindow.GetCopyBuffer() - if not self.Debug and element is not None and self.CanAddElement(element): + if not self.Debug: + element = self.ParentWindow.GetCopyBuffer() mouse_pos = self.ScreenToClient(wx.GetMousePosition()) - if wx.Rect(0, 0, *self.GetClientSize()).InsideXY(mouse_pos.x, mouse_pos.y): + middle = wx.Rect(0, 0, *self.GetClientSize()).InsideXY(mouse_pos.x, mouse_pos.y) + if middle: x, y = self.CalcUnscrolledPosition(mouse_pos.x, mouse_pos.y) - block_size = element.GetSize() - x = int(float(x) / self.ViewScale[0]) - block_size[0] / 2 - y = int(float(y) / self.ViewScale[1]) - block_size[1] / 2 else: x, y = self.CalcUnscrolledPosition(0, 0) - x = int(x / self.ViewScale[0]) + 30 - y = int(y / self.ViewScale[1]) + 30 - if self.Scaling is not None: - new_pos = wx.Point(max(round_scaling(30, self.Scaling[0], 1), - round_scaling(x, self.Scaling[0])), - max(round_scaling(30, self.Scaling[1], 1), - round_scaling(y, self.Scaling[1]))) + new_pos = [int(x / self.ViewScale[0]), int(y / self.ViewScale[1])] + result = self.Controler.PasteEditedElementInstances(self.TagName, element, new_pos, middle, self.Debug) + if not isinstance(result, (StringType, UnicodeType)): + self.RefreshBuffer() + self.RefreshView(result) + self.ParentWindow.RefreshVariablePanel(self.TagName) + self.ParentWindow.RefreshInstancesTree() else: - new_pos = wx.Point(max(30, x), max(30, y)) - block = self.CopyBlock(element, new_pos) - self.RefreshVisibleElements() - if self.SelectedElement is not None: - self.SelectedElement.SetSelected(False) - self.SelectedElement = block - self.SelectedElement.SetSelected(True) - self.RefreshBuffer() - self.RefreshScrollBars() - self.ParentWindow.RefreshVariablePanel(self.TagName) - self.ParentWindow.RefreshInstancesTree() - else: - message = wx.MessageDialog(self, "You can't paste the element in buffer here!", "Error", wx.OK|wx.ICON_ERROR) - message.ShowModal() - message.Destroy() + message = wx.MessageDialog(self, result, "Error", wx.OK|wx.ICON_ERROR) + message.ShowModal() + message.Destroy() def CanAddElement(self, block): if isinstance(block, Graphic_Group): @@ -2625,17 +2615,11 @@ return False def GenerateNewName(self, element, exclude={}): - names = exclude.copy() - if isinstance(element, FBD_Block): - names.update(dict([(varname.upper(), True) for varname in self.Controler.GetEditedElementVariables(self.TagName, self.Debug)])) - format = "Block%d" - elif isinstance(element, SFC_Step): - names.update(dict([(block.GetName().upper(), True) for block in self.Blocks if isinstance(block, SFC_Step)])) + if isinstance(element, SFC_Step): format = "Step%d" - i = 1 - while names.get((format%i).upper(), False): - i += 1 - return format%i + else: + format = "Block%d" + return self.Controler.GenerateNewName(self.TagName, element.GetName(), format, exclude, self.Debug) def IsNamedElement(self, element): return isinstance(element, FBD_Block) and element.GetName() != "" or isinstance(element, SFC_Step)