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