--- 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)