diff -r 015a34da60eb -r b67a5de5a24a Viewer.py --- 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)