--- a/Viewer.py Fri Jan 04 17:47:58 2008 +0100
+++ b/Viewer.py Fri Jan 04 17:49:17 2008 +0100
@@ -104,7 +104,7 @@
self.ParentWindow.RefreshBlockModel(block)
self.ParentWindow.RefreshBuffer()
self.ParentWindow.RefreshScrollBars()
- self.ParentWindow.ParentWindow.RefreshEditor()
+ self.ParentWindow.ParentWindow.RefreshVariablePanel(self.TagName)
self.ParentWindow.Refresh()
elif values[1] != "location":
if values[3] == self.ParentWindow.GetTagName():
@@ -297,9 +297,12 @@
self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveViewer)
self.Bind(wx.EVT_MOTION, self.OnViewerMotion)
self.Bind(wx.EVT_CHAR, self.OnChar)
- if wx.VERSION < (2, 7, 0):
- self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow)
- self.Bind(wx.EVT_SIZE, self.OnMoveWindow)
+ self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow)
+ self.Bind(wx.EVT_SIZE, self.OnMoveWindow)
+
+ def GetScrolledRect(self, rect):
+ rect.x, rect.y = self.CalcScrolledPosition(rect.x, rect.y)
+ return rect
def SetTagName(self, tagname):
self.TagName = tagname
@@ -409,7 +412,6 @@
if self.Mode != MODE_SELECTION and self.SelectedElement:
self.SelectedElement.SetSelected(False)
self.SelectedElement = None
- self.Refresh(False)
# Return current drawing mode
def GetDrawingMode(self):
@@ -450,17 +452,16 @@
for wire in to_delete:
wire.Delete()
- self.Refresh(False)
+ self.Refresh()
def RefreshScrollBars(self):
xstart, ystart = self.GetViewStart()
window_size = self.GetClientSize()
maxx = maxy = 0
for element in self.GetElements():
- posx, posy = element.GetPosition()
- width, height = element.GetSize()
- maxx = max(maxx, posx + width)
- maxy = max(maxy, posy + height)
+ bbox = element.GetBoundingBox()
+ maxx = max(maxx, bbox.x + bbox.width)
+ maxy = max(maxy, bbox.y + bbox.height)
maxx = max(maxx + WINDOW_BORDER, xstart * SCROLLBAR_UNIT + window_size[0])
maxy = max(maxy + WINDOW_BORDER, ystart * SCROLLBAR_UNIT + window_size[1])
if self.rubberBand.IsShown():
@@ -1017,9 +1018,10 @@
element = self.SelectedElement
self.RefreshBuffer()
else:
+ rect = self.SelectedElement.GetRedrawRect()
self.SelectedElement.Delete()
element = None
- self.Refresh(False)
+ self.RefreshRect(self.GetScrolledRect(rect))
elif connector:
self.DrawingWire = True
pos = GetScaledEventPosition(event, self.GetLogicalDC(), self.Scaling)
@@ -1035,15 +1037,15 @@
if self.SelectedElement:
self.SelectedElement.SetSelected(False)
self.SelectedElement = wire
+ self.SelectedElement.Refresh()
else:
if self.SelectedElement and self.SelectedElement != element:
self.SelectedElement.SetSelected(False)
self.SelectedElement = None
- self.Refresh(False)
if element:
self.SelectedElement = element
self.SelectedElement.OnLeftDown(event, dc, self.Scaling)
- self.Refresh(False)
+ self.SelectedElement.Refresh()
else:
self.rubberBand.Reset()
self.rubberBand.OnLeftDown(event, dc, self.Scaling)
@@ -1062,12 +1064,10 @@
if len(elements) == 1:
self.SelectedElement = elements[0]
self.SelectedElement.SetSelected(True)
- self.Refresh(False)
elif len(elements) > 1:
self.SelectedElement = Graphic_Group(self)
self.SelectedElement.SetElements(elements)
self.SelectedElement.SetSelected(True)
- self.Refresh(False)
else:
bbox = self.rubberBand.GetCurrentExtent()
self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling)
@@ -1110,15 +1110,16 @@
self.SelectedElement.RefreshModel()
self.SelectedElement.SetSelected(True)
self.RefreshBuffer()
- elif connector is None:
+ elif connector is None or self.SelectedElement.GetDragging():
self.DrawingWire = False
+ rect = self.SelectedElement.GetRedrawRect()
self.SelectedElement.Delete()
self.SelectedElement = None
- self.Refresh(False)
+ self.RefreshRect(self.GetScrolledRect(rect))
else:
self.SelectedElement.OnLeftUp(event, dc, self.Scaling)
wx.CallAfter(self.SetCursor, wx.NullCursor)
- self.Refresh(False)
+ self.SelectedElement.Refresh()
if self.Mode != MODE_SELECTION and not self.SavedMode:
wx.CallAfter(self.ParentWindow.ResetCurrentMode)
event.Skip()
@@ -1134,7 +1135,6 @@
self.SelectedElement.SetSelected(True)
self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling)
wx.CallAfter(self.SetCursor, wx.NullCursor)
- self.Refresh(False)
else:
self.PopupDefaultMenu(False)
event.Skip()
@@ -1145,7 +1145,6 @@
self.ParentWindow.EditProjectElement(ITEM_POU, self.SelectedElement.GetType())
else:
self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling)
- self.Refresh(False)
event.Skip()
def OnViewerMotion(self, event):
@@ -1155,12 +1154,11 @@
if not event.Dragging():
highlighted = self.FindElement(pos)
if self.HighlightedElement is not None and self.HighlightedElement != highlighted:
+ rect = self.HighlightedElement.GetRedrawRect()
self.HighlightedElement.SetHighlighted(False)
self.HighlightedElement = None
- refresh = True
- if highlighted is not None:
+ if highlighted is not None and self.HighlightedElement != highlighted:
highlighted.SetHighlighted(True)
- refresh = True
self.HighlightedElement = highlighted
if self.rubberBand.IsShown():
self.rubberBand.OnMotion(event, dc, self.Scaling)
@@ -1169,21 +1167,23 @@
connector = self.FindBlockConnector(pos, False)
if not connector or self.SelectedElement.EndConnected == None:
self.SelectedElement.ResetPoints()
- self.SelectedElement.OnMotion(event, dc, self.Scaling)
+ movex, movey = self.SelectedElement.OnMotion(event, dc, self.Scaling)
self.SelectedElement.GeneratePoints()
- refresh = True
- elif self.SelectedElement.OnMotion(event, dc, self.Scaling):
- refresh = True
+ if movex != 0 or movey != 0:
+ self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)))
+ else:
+ movex, movey = self.SelectedElement.OnMotion(event, dc, self.Scaling)
+ if movex != 0 or movey != 0:
+ self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)))
self.UpdateScrollPos(event)
- if refresh:
- self.Refresh(False)
event.Skip()
def OnLeaveViewer(self, event):
- if self.HighlightedElement is not None:
+ if self.SelectedElement and self.SelectedElement.GetDragging():
+ event.Skip()
+ elif self.HighlightedElement is not None:
self.HighlightedElement.SetHighlighted(False)
self.HighlightedElement = None
- self.Refresh(False)
event.Skip()
def UpdateScrollPos(self, event):
@@ -1218,13 +1218,13 @@
else:
scaling = (8, 8)
if keycode == wx.WXK_DELETE and self.SelectedElement:
- self.SelectedElement.Clean()
+ rect = self.SelectedElement.GetRedrawRect(1, 1)
self.SelectedElement.Delete()
self.SelectedElement = None
self.RefreshBuffer()
self.RefreshScrollBars()
self.SetCursor(wx.NullCursor)
- self.Refresh(False)
+ self.RefreshRect(self.GetScrolledRect(rect))
elif keycode == wx.WXK_RETURN and self.SelectedElement:
self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling)
elif keycode == wx.WXK_LEFT:
@@ -1237,7 +1237,7 @@
self.SelectedElement.RefreshModel()
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(-scaling[0], 0)))
elif keycode == wx.WXK_RIGHT:
if event.ControlDown() and event.ShiftDown():
self.Scroll(xmax, ypos)
@@ -1248,7 +1248,7 @@
self.SelectedElement.RefreshModel()
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(scaling[0], 0)))
elif keycode == wx.WXK_UP:
if event.ControlDown() and event.ShiftDown():
self.Scroll(xpos, 0)
@@ -1259,7 +1259,7 @@
self.SelectedElement.RefreshModel()
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(0, -scaling[1])))
elif keycode == wx.WXK_DOWN:
if event.ControlDown() and event.ShiftDown():
self.Scroll(xpos, ymax)
@@ -1270,12 +1270,13 @@
self.SelectedElement.RefreshModel()
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(0, scaling[1])))
elif keycode == wx.WXK_SPACE and self.SelectedElement is not None and self.SelectedElement.Dragging:
- self.CopyBlock(self.SelectedElement, self.SelectedElement.Pos)
- self.RefreshBuffer()
- self.RefreshScrollBars()
- self.Refresh()
+ self.CopyBlock(self.SelectedElement, wx.Point(*self.SelectedElement.GetPosition()))
+ self.RefreshBuffer()
+ self.RefreshScrollBars()
+ self.ParentWindow.RefreshVariablePanel(self.TagName)
+ self.SelectedElement.Refresh()
else:
event.Skip()
@@ -1303,8 +1304,8 @@
self.RefreshBlockModel(block)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.ParentWindow.RefreshEditor()
- self.Refresh(False)
+ self.ParentWindow.RefreshVariablePanel(self.TagName)
+ block.Refresh()
dialog.Destroy()
def AddNewVariable(self, bbox):
@@ -1331,7 +1332,7 @@
self.RefreshVariableModel(variable)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ variable.Refresh()
dialog.Destroy()
def AddNewConnection(self, bbox):
@@ -1348,7 +1349,7 @@
self.RefreshConnectionModel(connection)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ connection.Refresh()
dialog.Destroy()
def AddNewComment(self, bbox):
@@ -1368,7 +1369,7 @@
self.RefreshCommentModel(comment)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ comment.Refresh()
dialog.Destroy()
def AddNewContact(self, bbox):
@@ -1393,7 +1394,7 @@
self.RefreshContactModel(contact)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ contact.Refresh()
dialog.Destroy()
def AddNewCoil(self, bbox):
@@ -1421,7 +1422,7 @@
self.RefreshCoilModel(coil)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ coil.Refresh()
dialog.Destroy()
def AddNewPowerRail(self, bbox):
@@ -1438,7 +1439,7 @@
self.RefreshPowerRailModel(powerrail)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ powerrail.Refresh()
dialog.Destroy()
def AddNewStep(self, bbox, initial = False):
@@ -1471,7 +1472,7 @@
self.RefreshStepModel(step)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ step.Refresh()
dialog.Destroy()
def AddNewTransition(self, bbox):
@@ -1489,7 +1490,7 @@
self.RefreshTransitionModel(transition)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ transition.Refresh()
dialog.Destroy()
def AddNewDivergence(self, bbox):
@@ -1507,7 +1508,7 @@
self.RefreshDivergenceModel(divergence)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ divergence.Refresh()
dialog.Destroy()
def AddNewJump(self, bbox):
@@ -1528,7 +1529,7 @@
self.RefreshJumpModel(jump)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh()
+ jump.Refresh()
dialog.Destroy()
def AddNewActionBlock(self, bbox):
@@ -1548,7 +1549,7 @@
self.RefreshActionBlockModel(actionblock)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh()
+ actionblock.Refresh()
dialog.Destroy()
#-------------------------------------------------------------------------------
@@ -1579,8 +1580,8 @@
self.RefreshView()
self.RefreshBuffer()
self.RefreshScrollBars()
- self.ParentWindow.RefreshEditor()
- self.Refresh(False)
+ self.ParentWindow.RefreshVariablePanel(self.TagName)
+ block.Refresh()
dialog.Destroy()
def EditVariableContent(self, variable):
@@ -1614,7 +1615,7 @@
self.RefreshView()
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ variable.Refresh()
dialog.Destroy()
def EditConnectionContent(self, connection):
@@ -1635,7 +1636,7 @@
self.RefreshConnectionModel(connection)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ connection.Refresh()
dialog.Destroy()
def EditContactContent(self, contact):
@@ -1658,7 +1659,7 @@
self.RefreshContactModel(contact)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ contact.Refresh()
dialog.Destroy()
def EditCoilContent(self, coil):
@@ -1684,7 +1685,7 @@
self.RefreshCoilModel(coil)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ coil.Refresh()
dialog.Destroy()
def EditPowerRailContent(self, powerrail):
@@ -1702,7 +1703,7 @@
self.RefreshPowerRailModel(powerrail)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ powerrail.Refresh()
dialog.Destroy()
def EditStepContent(self, step):
@@ -1736,7 +1737,7 @@
step.RefreshModel()
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ step.Refresh()
def EditTransitionContent(self, transition):
dialog = TransitionContentDialog(self.ParentWindow, self.GetDrawingMode() == FREEDRAWING_MODE)
@@ -1750,7 +1751,7 @@
transition.RefreshModel()
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ transition.Refresh()
dialog.Destroy()
def EditJumpContent(self, jump):
@@ -1766,7 +1767,7 @@
jump.RefreshModel()
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ jump.Refresh()
dialog.Destroy()
def EditActionBlockContent(self, actionblock):
@@ -1781,7 +1782,7 @@
actionblock.RefreshModel()
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ actionblock.Refresh()
dialog.Destroy()
def EditCommentContent(self, comment):
@@ -1795,7 +1796,7 @@
comment.RefreshModel()
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh(False)
+ comment.Refresh()
dialog.Destroy()
#-------------------------------------------------------------------------------
@@ -1933,7 +1934,7 @@
self.Controler.RemoveEditedElementInstance(self.TagName, block.GetId())
for element in elements:
element.RefreshModel()
- wx.CallAfter(self.ParentWindow.RefreshEditor)
+ wx.CallAfter(self.ParentWindow.RefreshVariablePanel, self.TagName)
def DeleteVariable(self, variable):
connectors = variable.GetConnectors()
@@ -2062,15 +2063,17 @@
def Cut(self):
if self.IsBlock(self.SelectedElement):
self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone())
+ rect = self.SelectedElement.GetRedrawRect(1, 1)
self.SelectedElement.Delete()
- self.RefreshBuffer()
- self.RefreshScrollBars()
- self.Refresh()
+ self.SelectedElement = None
+ self.RefreshBuffer()
+ self.RefreshScrollBars()
+ self.RefreshRect(self.GetScrolledRect(rect))
def Copy(self):
if self.IsBlock(self.SelectedElement):
self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone())
-
+
def Paste(self):
element = self.ParentWindow.GetCopyBuffer()
if element is not None and self.CanAddBlock(element):
@@ -2081,7 +2084,7 @@
self.SelectedElement.SetSelected(True)
self.RefreshBuffer()
self.RefreshScrollBars()
- self.Refresh()
+ self.ParentWindow.RefreshVariablePanel(self.TagName)
def CanAddBlock(self, block):
if self.CurrentLanguage == "SFC":
@@ -2094,13 +2097,27 @@
def CopyBlock(self, element, pos):
id = self.GetNewId()
- block = element.Clone(id, pos)
+ 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)]
+ 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(id, name, pos)
+ else:
+ name = None
+ block = element.Clone(id, pos=pos)
self.AddBlock(block)
if isinstance(block, Comment):
self.Controler.AddEditedElementComment(self.TagName, id)
- self.RefreshCommentModel(comment)
+ self.RefreshCommentModel(block)
elif isinstance(block, FBD_Block):
- self.Controler.AddEditedElementBlock(self.TagName, id, block.GetType(), None)
+ self.Controler.AddEditedElementBlock(self.TagName, id, block.GetType(), name)
self.RefreshBlockModel(block)
elif isinstance(block, FBD_Variable):
self.Controler.AddEditedElementVariable(self.TagName, id, block.GetType())
@@ -2156,14 +2173,6 @@
for i in xrange(1, height / self.Scaling[1] + 1):
dc.DrawLine(0, i * self.Scaling[1], width, i * self.Scaling[1])
- # Draw highlighted elements
- for comment in self.Comments:
- comment.DrawHighlightment(dc)
- for wire in self.Wires:
- wire.DrawHighlightment(dc)
- for block in self.Blocks:
- block.DrawHighlightment(dc)
-
# Draw all elements
for comment in self.Comments:
if comment != self.SelectedElement:
@@ -2174,6 +2183,7 @@
for block in self.Blocks:
if block != self.SelectedElement:
block.Draw(dc)
+
if self.SelectedElement:
self.SelectedElement.Draw(dc)