diff -r f7df265edd54 -r d8425712acef Viewer.py --- a/Viewer.py Fri Sep 05 18:12:23 2008 +0200 +++ b/Viewer.py Fri Sep 05 18:13:18 2008 +0200 @@ -96,15 +96,17 @@ message = "Invalid value \"%s\" for viewer block"%data values = None if values is not None: - if values[1] == "program": + if values[1] == "debug": + pass + elif values[1] == "program": message = "Programs can't be used by other POUs!" elif values[1] in ["function", "functionBlock", "program"]: - name, type = self.ParentWindow.Controler.GetEditedElementType(self.ParentWindow.GetTagName()) + name, type = self.ParentWindow.Controler.GetEditedElementType(self.ParentWindow.GetTagName(), self.ParentWindow.Debug) if name == values[0]: message = "\"%s\" can't use itself!"%name elif type == "function" and values[1] != "function": message = "Function Blocks can't be used by Functions!" - elif self.ParentWindow.Controler.PouIsUsedBy(name, values[0]): + elif self.ParentWindow.Controler.PouIsUsedBy(name, values[0], self.ParentWindow.Debug): message = "\"%s\" is already used by \"%s\"!"%(name, values[0]) else: blockname = values[2] @@ -119,9 +121,9 @@ else: return dialog.Destroy() - if blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames()]: + if blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]: message = "\"%s\" pou already exists!"%blockname - elif blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(self.ParentWindow.GetTagName())]: + elif blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(self.ParentWindow.GetTagName(), self.ParentWindow.Debug)]: message = "\"%s\" element for this pou already exists!"%blockname else: id = self.ParentWindow.GetNewId() @@ -139,6 +141,7 @@ self.ParentWindow.RefreshBlockModel(block) self.ParentWindow.RefreshBuffer() self.ParentWindow.RefreshScrollBars() + self.ParentWindow.RefreshVisibleElements() self.ParentWindow.ParentWindow.RefreshVariablePanel(self.ParentWindow.GetTagName()) self.ParentWindow.Refresh(False) elif values[1] != "location": @@ -164,16 +167,17 @@ self.ParentWindow.RefreshVariableModel(variable) self.ParentWindow.RefreshBuffer() self.ParentWindow.RefreshScrollBars() + self.ParentWindow.RefreshVisibleElements() self.ParentWindow.Refresh(False) else: message = "Variable don't belong to this POU!" - wx.CallAfter(self.ShowMessage, message) + if message is not None: + wx.CallAfter(self.ShowMessage, message) def ShowMessage(self, message): - if message is not None: - message = wx.MessageDialog(self.ParentWindow, message, "Error", wx.OK|wx.ICON_ERROR) - message.ShowModal() - message.Destroy() + message = wx.MessageDialog(self.ParentWindow, message, "Error", wx.OK|wx.ICON_ERROR) + message.ShowModal() + message.Destroy() """ @@ -288,7 +292,7 @@ self._init_coll_ContextualMenu_Items(self.ContextualMenu) # Create a new Viewer - def __init__(self, parent, tagname, window, controler): + def __init__(self, parent, tagname, window, controler, debug = False, instancepath = ""): wx.ScrolledWindow.__init__(self, parent, pos=wx.Point(0, 0), size=wx.Size(0, 0), style=wx.HSCROLL | wx.VSCROLL) self._init_menus() @@ -306,6 +310,8 @@ self.current_id = 0 self.TagName = tagname self.Errors = [] + self.Debug = debug + self.InstancePath = instancepath # Initialize Block, Wire and Comment numbers self.block_id = self.wire_id = self.comment_id = 0 @@ -318,7 +324,8 @@ self.ParentWindow = window self.Controler = controler - self.SetDropTarget(ViewerDropTarget(self)) + if not self.Debug: + self.SetDropTarget(ViewerDropTarget(self)) dc = wx.ClientDC(self) font = wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName = faces["mono"]) @@ -331,6 +338,8 @@ width, height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ") self.SetFont(font) + self.ResetView() + # Link Viewer event to corresponding methods self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_LEFT_DOWN, self.OnViewerLeftDown) @@ -341,7 +350,7 @@ self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveViewer) self.Bind(wx.EVT_MOTION, self.OnViewerMotion) self.Bind(wx.EVT_CHAR, self.OnChar) - #self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow) + self.Bind(wx.EVT_SCROLLWIN, self.OnScrollWindow) self.Bind(wx.EVT_SIZE, self.OnMoveWindow) def GetScrolledRect(self, rect): @@ -357,8 +366,14 @@ def GetTagName(self): return self.TagName + def GetInstancePath(self): + return self.InstancePath + def IsViewing(self, tagname): - return self.TagName == tagname + if self.Debug: + return self.InstancePath == tagname + else: + return self.TagName == tagname # Returns a new id def GetNewId(self): @@ -367,6 +382,7 @@ # Destructor def __del__(self): + self.Flush() self.ResetView() def GetLogicalDC(self, buffered=False): @@ -427,6 +443,21 @@ comments.sort(lambda x,y:self.Comments[x].__cmp__(self.Comments[y])) return blocks + wires + comments + def RefreshVisibleElements(self, xp = None, yp = None): + x, y = self.CalcUnscrolledPosition(0, 0) + if xp is not None: + x = xp * self.GetScrollPixelsPerUnit()[0] + if yp is not None: + y = yp * self.GetScrollPixelsPerUnit()[1] + width, height = self.GetClientSize() + screen = wx.Rect(x, y, width, height) + for comment in self.Comments: + comment.TestVisible(screen) + for wire in self.Wires: + wire.TestVisible(screen) + for block in self.Blocks: + block.TestVisible(screen) + #------------------------------------------------------------------------------- # Reset functions #------------------------------------------------------------------------------- @@ -436,9 +467,16 @@ self.Blocks = {} self.Wires = {} self.Comments = {} + self.Subscribed = {} self.SelectedElement = None self.HighlightedElement = None + def Flush(self): + for block in self.Blocks: + block.Flush() + for element, iec_path in self.Subscribed.iteritems(): + self.Controler.UnsubscribeDebugIECVariable(iec_path, element) + # Remove all elements def CleanView(self): for block in self.Blocks.keys(): @@ -469,7 +507,7 @@ # Refresh the current scaling def RefreshScaling(self, refresh=True): - properties = self.Controler.GetProjectProperties() + properties = self.Controler.GetProjectProperties(self.Debug) scaling = properties["scaling"][self.CurrentLanguage] if scaling != (0, 0): self.Scaling = scaling @@ -508,21 +546,48 @@ def RefreshView(self): self.current_id = 0 # Start by reseting Viewer + self.Flush() self.ResetView() - instance = True + instance = {} # List of ids of already loaded blocks ids = [] # Load Blocks until they are all loaded - while instance: - instance = self.Controler.GetEditedElementInstanceInfos(self.TagName, exclude=ids) - if instance: + while instance is not None: + instance = self.Controler.GetEditedElementInstanceInfos(self.TagName, exclude = ids, debug = self.Debug) + if instance is not None: self.loadInstance(instance, ids) self.RefreshScrollBars() for wire in self.Wires: if not wire.IsConnectedCompatible(): wire.MarkAsInvalid() - + if self.Debug: + block = wire.EndConnected.GetParentBlock() + if isinstance(block, LD_PowerRail): + wire.SetValue(True) + if isinstance(block, FBD_Block): + blockname = block.GetName() + connectorname = wire.EndConnected.GetName() + if blockname != "": + iec_path = "%s.%s.%s"%(self.InstancePath, block.GetName(), connectorname) + else: + if connectorname == "": + connectorname = "OUT" + iec_path = "%s.%s%d_%s"%(self.InstancePath, block.GetType(), block.GetId(), connectorname) + self.Subscribed[wire] = iec_path.upper() + self.Controler.SubscribeDebugIECVariable(iec_path.upper(), wire) + + if self.Debug: + for block in self.Blocks.keys(): + if isinstance(block, (LD_Contact, LD_Coil)): + block.SetValue(False) + block.SpreadCurrent() + if isinstance(block, LD_Contact): + iec_path = "%s.%s"%(self.InstancePath, block.GetName()) + self.Subscribed[block] = iec_path.upper() + self.Controler.SubscribeDebugIECVariable(iec_path.upper(), block) + + self.RefreshVisibleElements() self.ShowErrors() self.Refresh(False) @@ -796,16 +861,16 @@ def CreateWires(self, start_connector, links, ids): for link in links: refLocalId = link["refLocalId"] - if refLocalId != None: + if refLocalId is not None: if refLocalId not in ids: - new_instance = self.Controler.GetEditedElementInstanceInfos(self.TagName, refLocalId) - if new_instance: + new_instance = self.Controler.GetEditedElementInstanceInfos(self.TagName, refLocalId, debug = self.Debug) + if new_instance is not None: self.loadInstance(new_instance, ids) connected = self.FindElementById(refLocalId) - if connected: + if connected is not None: points = link["points"] end_connector = connected.GetConnector(wx.Point(points[-1][0], points[-1][1]), link["formalParameter"]) - if end_connector: + if end_connector is not None: wire = Wire(self) wire.SetPoints(points) start_connector.Connect((wire, 0), False) @@ -815,13 +880,13 @@ self.AddWire(wire) def IsOfType(self, type, reference): - return self.Controler.IsOfType(type, reference) + return self.Controler.IsOfType(type, reference, self.Debug) def IsEndType(self, type): return self.Controler.IsEndType(type) def GetBlockType(self, type, inputs = None): - return self.Controler.GetBlockType(type, inputs) + return self.Controler.GetBlockType(type, inputs, self.Debug) #------------------------------------------------------------------------------- # Search Element functions @@ -848,7 +913,7 @@ return element return None - def FindBlockConnector(self, pos, direction = None, exclude = True): + def FindBlockConnector(self, pos, direction = None, exclude = None): for block in self.Blocks: result = block.TestConnector(pos, direction, exclude) if result: @@ -877,7 +942,7 @@ def PopupBlockMenu(self, connector = None): if connector is not None and connector.IsCompatible("BOOL"): - type = self.Controler.GetEditedElementType(self.TagName) + type = self.Controler.GetEditedElementType(self.TagName, self.Debug) self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS0, True) self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS1, True) self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS2, type != "function") @@ -892,9 +957,9 @@ self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS8, False) self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS9, False) self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS14, False) - self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS16, self.SelectedElement.GetType() in self.Controler.GetProjectPouNames()) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS16, self.SelectedElement.GetType() in self.Controler.GetProjectPouNames(self.Debug)) self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS17, True) - if connector: + if connector is not None: if connector.IsNegated(): self.ContextualMenu.Check(ID_VIEWERCONTEXTUALMENUITEMS1, True) elif connector.GetEdge() == "rising": @@ -966,106 +1031,106 @@ #------------------------------------------------------------------------------- def OnAlignLeftMenu(self, event): - if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group): + if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group): self.SelectedElement.AlignElements(ALIGN_LEFT, None) self.RefreshBuffer() self.Refresh(False) event.Skip() def OnAlignCenterMenu(self, event): - if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group): + if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group): self.SelectedElement.AlignElements(ALIGN_CENTER, None) self.RefreshBuffer() self.Refresh(False) event.Skip() def OnAlignRightMenu(self, event): - if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group): + if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group): self.SelectedElement.AlignElements(ALIGN_RIGHT, None) self.RefreshBuffer() self.Refresh(False) event.Skip() def OnAlignTopMenu(self, event): - if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group): + if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group): self.SelectedElement.AlignElements(None, ALIGN_TOP) self.RefreshBuffer() self.Refresh(False) event.Skip() def OnAlignMiddleMenu(self, event): - if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group): + if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group): self.SelectedElement.AlignElements(None, ALIGN_MIDDLE) self.RefreshBuffer() self.Refresh(False) event.Skip() def OnAlignBottomMenu(self, event): - if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group): + if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group): self.SelectedElement.AlignElements(None, ALIGN_BOTTOM) self.RefreshBuffer() self.Refresh(False) event.Skip() def OnNoModifierMenu(self, event): - if self.SelectedElement and self.IsBlock(self.SelectedElement): + if self.SelectedElement is not None and self.IsBlock(self.SelectedElement): self.SelectedElement.SetConnectorNegated(False) self.SelectedElement.Refresh() self.RefreshBuffer() event.Skip() def OnNegatedMenu(self, event): - if self.SelectedElement and self.IsBlock(self.SelectedElement): + if self.SelectedElement is not None and self.IsBlock(self.SelectedElement): self.SelectedElement.SetConnectorNegated(True) self.SelectedElement.Refresh() self.RefreshBuffer() event.Skip() def OnRisingEdgeMenu(self, event): - if self.SelectedElement and self.IsBlock(self.SelectedElement): + if self.SelectedElement is not None and self.IsBlock(self.SelectedElement): self.SelectedElement.SetConnectorEdge("rising") self.SelectedElement.Refresh() self.RefreshBuffer() event.Skip() def OnFallingEdgeMenu(self, event): - if self.SelectedElement and self.IsBlock(self.SelectedElement): + if self.SelectedElement is not None and self.IsBlock(self.SelectedElement): self.SelectedElement.SetConnectorEdge("falling") self.SelectedElement.Refresh() self.RefreshBuffer() event.Skip() def OnAddSegmentMenu(self, event): - if self.SelectedElement and self.IsWire(self.SelectedElement): + if self.SelectedElement is not None and self.IsWire(self.SelectedElement): self.SelectedElement.AddSegment() self.SelectedElement.Refresh() event.Skip() def OnDeleteSegmentMenu(self, event): - if self.SelectedElement and self.IsWire(self.SelectedElement): + if self.SelectedElement is not None and self.IsWire(self.SelectedElement): self.SelectedElement.DeleteSegment() self.SelectedElement.Refresh() event.Skip() def OnAddBranchMenu(self, event): - if self.SelectedElement and self.IsBlock(self.SelectedElement): + if self.SelectedElement is not None and self.IsBlock(self.SelectedElement): self.AddDivergenceBranch(self.SelectedElement) self.RefreshBuffer() event.Skip() def OnDeleteBranchMenu(self, event): - if self.SelectedElement and self.IsBlock(self.SelectedElement): + if self.SelectedElement is not None and self.IsBlock(self.SelectedElement): self.RemoveDivergenceBranch(self.SelectedElement) self.RefreshBuffer() event.Skip() def OnEditBlockMenu(self, event): - if self.SelectedElement: + if self.SelectedElement is not None: self.ParentWindow.EditProjectElement(ITEM_POU, "P::%s"%self.SelectedElement.GetType()) event.Skip() def OnDeleteMenu(self, event): - if self.SelectedElement: + if self.SelectedElement is not None: self.SelectedElement.Delete() self.SelectedElement = None self.RefreshBuffer() @@ -1090,13 +1155,13 @@ if self.Mode == MODE_SELECTION: dc = self.GetLogicalDC() pos = event.GetLogicalPosition(dc) - if event.ControlDown() and self.SelectedElement: + if event.ControlDown() and self.SelectedElement is not None: element = self.FindElement(pos, True) - if element: + if element is not None: if isinstance(self.SelectedElement, Graphic_Group): self.SelectedElement.SetSelected(False) self.SelectedElement.SelectElement(element) - elif self.SelectedElement: + elif self.SelectedElement is not None: group = Graphic_Group(self) group.SelectElement(self.SelectedElement) group.SelectElement(element) @@ -1109,16 +1174,16 @@ self.SelectedElement.SetSelected(True) else: element = self.FindElement(pos) - if element is None or element.TestHandle(pos) == (0, 0): + if not self.Debug and (element is None or element.TestHandle(pos) == (0, 0)): connector = self.FindBlockConnector(pos) else: connector = None - if self.DrawingWire: + if not self.Debug and self.DrawingWire: self.DrawingWire = False if self.SelectedElement is not None: if element is None or element.TestHandle(pos) == (0, 0): connector = self.FindBlockConnector(pos, self.SelectedElement.GetConnectionDirection()) - if connector: + if connector is not None: event.Dragging = lambda : True self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling) if self.SelectedElement.EndConnected is not None: @@ -1134,7 +1199,7 @@ self.SelectedElement = None element = None self.RefreshRect(self.GetScrolledRect(rect), False) - elif connector: + elif not self.Debug and connector is not None: self.DrawingWire = True scaled_pos = GetScaledEventPosition(event, self.GetLogicalDC(), self.Scaling) if (connector.GetDirection() == EAST): @@ -1146,17 +1211,20 @@ wire.ProcessDragging(0, 0, False, None) wire.Handle = (HANDLE_POINT, 1) self.AddWire(wire) - if self.SelectedElement: + if self.SelectedElement is not None: self.SelectedElement.SetSelected(False) self.SelectedElement = wire self.SelectedElement.Refresh() else: - if self.SelectedElement and self.SelectedElement != element: + if self.SelectedElement is not None and self.SelectedElement != element: self.SelectedElement.SetSelected(False) self.SelectedElement = None - if element: + if element is not None: self.SelectedElement = element - self.SelectedElement.OnLeftDown(event, dc, self.Scaling) + if self.Debug: + Graphic_Element.OnLeftDown(self.SelectedElement, event, dc, self.Scaling) + else: + self.SelectedElement.OnLeftDown(event, dc, self.Scaling) self.SelectedElement.Refresh() else: self.rubberBand.Reset() @@ -1209,9 +1277,9 @@ wx.CallAfter(self.AddNewJump, bbox) elif self.Mode == MODE_ACTION: wx.CallAfter(self.AddNewActionBlock, bbox) - elif self.Mode == MODE_SELECTION and self.SelectedElement: + elif self.Mode == MODE_SELECTION and self.SelectedElement is not None: dc = self.GetLogicalDC() - if self.DrawingWire: + if not self.Debug and self.DrawingWire: pos = event.GetLogicalPosition(dc) connector = self.FindBlockConnector(pos, self.SelectedElement.GetConnectionDirection()) if self.SelectedElement.EndConnected is not None: @@ -1236,7 +1304,10 @@ self.SelectedElement = None self.RefreshRect(self.GetScrolledRect(rect), False) else: - self.SelectedElement.OnLeftUp(event, dc, self.Scaling) + if self.Debug: + Graphic_Element.OnLeftUp(self.SelectedElement, event, dc, self.Scaling) + else: + self.SelectedElement.OnLeftUp(event, dc, self.Scaling) wx.CallAfter(self.SetCursor, wx.NullCursor) if self.Mode != MODE_SELECTION and not self.SavedMode: wx.CallAfter(self.ParentWindow.ResetCurrentMode) @@ -1247,27 +1318,35 @@ dc = self.GetLogicalDC() pos = event.GetLogicalPosition(dc) element = self.FindElement(pos) - if self.SelectedElement and self.SelectedElement != element: + if self.SelectedElement is not None and self.SelectedElement != element: self.SelectedElement.SetSelected(False) self.SelectedElement = None if element: self.SelectedElement = element - self.SelectedElement.OnRightDown(event, dc, self.Scaling) + if self.Debug: + Graphic_Element.OnRightDown(self.SelectedElement, event, dc, self.Scaling) + else: + self.SelectedElement.OnRightDown(event, dc, self.Scaling) self.SelectedElement.Refresh() event.Skip() def OnViewerRightUp(self, event): dc = self.GetLogicalDC() - if self.SelectedElement: - self.SelectedElement.OnRightUp(event, dc, self.Scaling) + if self.SelectedElement is not None: + if self.Debug: + Graphic_Element.OnRightUp(self.SelectedElement, event, dc, self.Scaling) + else: + self.SelectedElement.OnRightUp(event, dc, self.Scaling) wx.CallAfter(self.SetCursor, wx.NullCursor) - else: + elif not self.Debug: self.PopupDefaultMenu(False) event.Skip() def OnViewerLeftDClick(self, event): - if self.Mode == MODE_SELECTION and self.SelectedElement: - if event.ControlDown() and self.IsBlock(self.SelectedElement) and self.SelectedElement.GetType() in self.Controler.GetProjectPouNames(): + if self.Mode == MODE_SELECTION and self.SelectedElement is not None: + if self.Debug: + Graphic_Element.OnLeftDClick(self.SelectedElement, event, self.GetLogicalDC(), self.Scaling) + elif event.ControlDown() and self.IsBlock(self.SelectedElement) and self.SelectedElement.GetType() in self.Controler.GetProjectPouNames(self.Debug): self.ParentWindow.EditProjectElement(ITEM_POU, self.SelectedElement.GetType()) else: self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling) @@ -1287,9 +1366,9 @@ self.HighlightedElement = highlighted if self.rubberBand.IsShown(): self.rubberBand.OnMotion(event, dc, self.Scaling) - elif self.Mode == MODE_SELECTION and self.SelectedElement: + elif not self.Debug and self.Mode == MODE_SELECTION and self.SelectedElement is not None: if self.DrawingWire: - connector = self.FindBlockConnector(pos, self.SelectedElement.GetConnectionDirection(), False) + connector = self.FindBlockConnector(pos, self.SelectedElement.GetConnectionDirection(), self.SelectedElement.EndConnected) if not connector or self.SelectedElement.EndConnected == None: self.SelectedElement.ResetPoints() movex, movey = self.SelectedElement.OnMotion(event, dc, self.Scaling) @@ -1304,7 +1383,7 @@ event.Skip() def OnLeaveViewer(self, event): - if self.SelectedElement and self.SelectedElement.GetDragging(): + if self.SelectedElement is not None and self.SelectedElement.GetDragging(): event.Skip() elif self.HighlightedElement is not None: self.HighlightedElement.SetHighlighted(False) @@ -1312,7 +1391,7 @@ event.Skip() def UpdateScrollPos(self, event): - if (event.Dragging() and self.SelectedElement) or self.rubberBand.IsShown(): + if (event.Dragging() and self.SelectedElement is not None) or self.rubberBand.IsShown(): position = event.GetPosition() move_window = wx.Point() window_size = self.GetClientSize() @@ -1338,11 +1417,11 @@ xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL) ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL) keycode = event.GetKeyCode() - if self.Scaling: + if self.Scaling is not None: scaling = self.Scaling else: scaling = (8, 8) - if keycode == wx.WXK_DELETE and self.SelectedElement: + if not self.Debug and keycode == wx.WXK_DELETE and self.SelectedElement is not None: rect = self.SelectedElement.GetRedrawRect(1, 1) self.SelectedElement.Delete() self.SelectedElement = None @@ -1350,14 +1429,14 @@ self.RefreshScrollBars() self.SetCursor(wx.NullCursor) self.RefreshRect(self.GetScrolledRect(rect), False) - elif keycode == wx.WXK_RETURN and self.SelectedElement: + elif not self.Debug and keycode == wx.WXK_RETURN and self.SelectedElement is not None: self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling) elif keycode == wx.WXK_LEFT: if event.ControlDown() and event.ShiftDown(): self.Scroll(0, ypos) elif event.ControlDown(): event.Skip() - elif self.SelectedElement: + elif not self.Debug and self.SelectedElement is not None: self.SelectedElement.Move(-scaling[0], 0) self.SelectedElement.RefreshModel() self.RefreshBuffer() @@ -1368,7 +1447,7 @@ self.Scroll(xmax, ypos) elif event.ControlDown(): event.Skip() - elif self.SelectedElement: + elif not self.Debug and self.SelectedElement is not None: self.SelectedElement.Move(scaling[0], 0) self.SelectedElement.RefreshModel() self.RefreshBuffer() @@ -1379,7 +1458,7 @@ self.Scroll(xpos, 0) elif event.ControlDown(): event.Skip() - elif self.SelectedElement: + elif not self.Debug and self.SelectedElement is not None: self.SelectedElement.Move(0, -scaling[1]) self.SelectedElement.RefreshModel() self.RefreshBuffer() @@ -1390,13 +1469,13 @@ self.Scroll(xpos, ymax) elif event.ControlDown(): event.Skip() - elif self.SelectedElement: + elif not self.Debug and self.SelectedElement is not None: self.SelectedElement.Move(0, scaling[1]) self.SelectedElement.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(0, scaling[1])), False) - elif keycode == wx.WXK_SPACE and self.SelectedElement is not None and self.SelectedElement.Dragging: + elif not self.Debug and keycode == wx.WXK_SPACE and self.SelectedElement is not None and self.SelectedElement.Dragging: if self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement): self.CopyBlock(self.SelectedElement, wx.Point(*self.SelectedElement.GetPosition())) self.RefreshBuffer() @@ -1421,9 +1500,9 @@ def AddNewBlock(self, bbox): dialog = BlockPropertiesDialog(self.ParentWindow, self.Controler) dialog.SetPreviewFont(self.GetFont()) - dialog.SetBlockList(self.Controler.GetBlockTypes(self.TagName)) - dialog.SetPouNames(self.Controler.GetProjectPouNames()) - dialog.SetPouElementNames(self.Controler.GetEditedElementVariables(self.TagName)) + dialog.SetBlockList(self.Controler.GetBlockTypes(self.TagName, self.Debug)) + dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) + dialog.SetPouElementNames(self.Controler.GetEditedElementVariables(self.TagName, self.Debug)) dialog.SetMinBlockSize((bbox.width, bbox.height)) if dialog.ShowModal() == wx.ID_OK: id = self.GetNewId() @@ -1439,6 +1518,7 @@ self.RefreshBlockModel(block) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() self.ParentWindow.RefreshVariablePanel(self.TagName) self.ParentWindow.RefreshInstancesTree() block.Refresh() @@ -1449,12 +1529,12 @@ dialog.SetPreviewFont(self.GetFont()) dialog.SetMinVariableSize((bbox.width, bbox.height)) varlist = [] - vars = self.Controler.GetEditedElementInterfaceVars(self.TagName) + vars = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug) if vars: for var in vars: if var["Edit"]: varlist.append((var["Name"], var["Class"], var["Type"])) - returntype = self.Controler.GetEditedElementInterfaceReturnType(self.TagName) + returntype = self.Controler.GetEditedElementInterfaceReturnType(self.TagName, self.Debug) if returntype: varlist.append((self.Controler.GetEditedElementName(self.TagName), "Output", returntype)) dialog.SetVariables(varlist) @@ -1469,6 +1549,7 @@ self.RefreshVariableModel(variable) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() variable.Refresh() dialog.Destroy() @@ -1487,6 +1568,7 @@ self.RefreshConnectionModel(connection) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() connection.Refresh() dialog.Destroy() @@ -1507,6 +1589,7 @@ self.RefreshCommentModel(comment) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() comment.Refresh() dialog.Destroy() @@ -1514,7 +1597,7 @@ dialog = LDElementDialog(self.ParentWindow, self.Controler, "contact") dialog.SetPreviewFont(self.GetFont()) varlist = [] - vars = self.Controler.GetEditedElementInterfaceVars(self.TagName) + vars = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug) if vars: for var in vars: if var["Class"] != "Output" and var["Type"] == "BOOL": @@ -1533,6 +1616,7 @@ self.RefreshContactModel(contact) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() contact.Refresh() dialog.Destroy() @@ -1540,12 +1624,12 @@ dialog = LDElementDialog(self.ParentWindow, self.Controler, "coil") dialog.SetPreviewFont(self.GetFont()) varlist = [] - vars = self.Controler.GetEditedElementInterfaceVars(self.TagName) + vars = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug) if vars: for var in vars: if var["Class"] != "Input" and var["Type"] == "BOOL": varlist.append(var["Name"]) - returntype = self.Controler.GetEditedElementInterfaceReturnType(self.TagName) + returntype = self.Controler.GetEditedElementInterfaceReturnType(self.TagName, self.Debug) if returntype == "BOOL": varlist.append(self.Controler.GetEditedElementName(self.TagName)) dialog.SetVariables(varlist) @@ -1562,6 +1646,7 @@ self.RefreshCoilModel(coil) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() coil.Refresh() dialog.Destroy() @@ -1580,14 +1665,15 @@ self.RefreshPowerRailModel(powerrail) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() powerrail.Refresh() dialog.Destroy() def AddNewStep(self, bbox, initial = False): dialog = StepContentDialog(self.ParentWindow, self.Controler, initial) dialog.SetPreviewFont(self.GetFont()) - dialog.SetPouNames(self.Controler.GetProjectPouNames()) - dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName)) + dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) + dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)) dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step)]) dialog.SetMinStepSize((bbox.width, bbox.height)) if dialog.ShowModal() == wx.ID_OK: @@ -1614,13 +1700,14 @@ self.RefreshStepModel(step) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() step.Refresh() dialog.Destroy() def AddNewTransition(self, bbox): dialog = TransitionContentDialog(self.ParentWindow, self.Controler, self.GetDrawingMode() == FREEDRAWING_MODE) dialog.SetPreviewFont(self.GetFont()) - dialog.SetTransitions(self.Controler.GetEditedElementTransitions(self.TagName)) + dialog.SetTransitions(self.Controler.GetEditedElementTransitions(self.TagName, self.Debug)) if dialog.ShowModal() == wx.ID_OK: id = self.GetNewId() values = dialog.GetValues() @@ -1633,6 +1720,7 @@ self.RefreshTransitionModel(transition) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() transition.Refresh() dialog.Destroy() @@ -1652,6 +1740,7 @@ self.RefreshDivergenceModel(divergence) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() divergence.Refresh() dialog.Destroy() @@ -1673,14 +1762,15 @@ self.RefreshJumpModel(jump) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() jump.Refresh() dialog.Destroy() def AddNewActionBlock(self, bbox): dialog = ActionBlockDialog(self.ParentWindow) dialog.SetQualifierList(self.Controler.GetQualifierTypes()) - dialog.SetActionList(self.Controler.GetEditedElementActions(self.TagName)) - dialog.SetVariableList(self.Controler.GetEditedElementInterfaceVars(self.TagName)) + dialog.SetActionList(self.Controler.GetEditedElementActions(self.TagName, self.Debug)) + dialog.SetVariableList(self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)) if dialog.ShowModal() == wx.ID_OK: actions = dialog.GetValues() id = self.GetNewId() @@ -1693,6 +1783,7 @@ self.RefreshActionBlockModel(actionblock) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() actionblock.Refresh() dialog.Destroy() @@ -1703,9 +1794,9 @@ def EditBlockContent(self, block): dialog = BlockPropertiesDialog(self.ParentWindow, self.Controler) dialog.SetPreviewFont(self.GetFont()) - dialog.SetBlockList(self.Controler.GetBlockTypes(self.TagName)) - dialog.SetPouNames(self.Controler.GetProjectPouNames()) - variable_names = self.Controler.GetEditedElementVariables(self.TagName) + dialog.SetBlockList(self.Controler.GetBlockTypes(self.TagName, self.Debug)) + dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) + variable_names = self.Controler.GetEditedElementVariables(self.TagName, self.Debug) if block.GetName() != "": variable_names.remove(block.GetName()) dialog.SetPouElementNames(variable_names) @@ -1729,6 +1820,7 @@ self.RefreshView() self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() self.ParentWindow.RefreshVariablePanel(self.TagName) self.ParentWindow.RefreshInstancesTree() block.Refresh(rect) @@ -1739,12 +1831,12 @@ dialog.SetPreviewFont(self.GetFont()) dialog.SetMinVariableSize(variable.GetSize()) varlist = [] - vars = self.Controler.GetEditedElementInterfaceVars(self.TagName) + vars = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug) if vars: for var in vars: if var["Edit"]: varlist.append((var["Name"], var["Class"], var["Type"])) - returntype = self.Controler.GetEditedElementInterfaceReturnType(self.TagName) + returntype = self.Controler.GetEditedElementInterfaceReturnType(self.TagName, self.Debug) if returntype: varlist.append((self.Controler.GetEditedElementName(self.TagName), "Output", returntype)) dialog.SetVariables(varlist) @@ -1767,6 +1859,7 @@ if old_values["executionOrder"] != new_values["executionOrder"]: self.RefreshView() self.RefreshBuffer() + self.RefreshVisibleElements() self.RefreshScrollBars() variable.Refresh(rect) dialog.Destroy() @@ -1792,6 +1885,7 @@ self.RefreshConnectionModel(connection) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() connection.Refresh(rect) dialog.Destroy() @@ -1799,7 +1893,7 @@ dialog = LDElementDialog(self.ParentWindow, self.Controler, "contact") dialog.SetPreviewFont(self.GetFont()) varlist = [] - vars = self.Controler.GetEditedElementInterfaceVars(self.TagName) + vars = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug) if vars: for var in vars: if var["Class"] != "Output" and var["Type"] == "BOOL": @@ -1818,6 +1912,7 @@ self.RefreshContactModel(contact) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() contact.Refresh(rect) dialog.Destroy() @@ -1825,12 +1920,12 @@ dialog = LDElementDialog(self.ParentWindow, self.Controler, "coil") dialog.SetPreviewFont(self.GetFont()) varlist = [] - vars = self.Controler.GetEditedElementInterfaceVars(self.TagName) + vars = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug) if vars: for var in vars: if var["Class"] != "Input" and var["Type"] == "BOOL": varlist.append(var["Name"]) - returntype = self.Controler.GetEditedElementInterfaceReturnType(self.TagName) + returntype = self.Controler.GetEditedElementInterfaceReturnType(self.TagName, self.Debug) if returntype == "BOOL": varlist.append(self.Controler.GetEditedElementName(self.TagName)) dialog.SetVariables(varlist) @@ -1847,6 +1942,7 @@ self.RefreshCoilModel(coil) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() coil.Refresh(rect) dialog.Destroy() @@ -1868,14 +1964,15 @@ self.RefreshPowerRailModel(powerrail) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() powerrail.Refresh(rect) dialog.Destroy() def EditStepContent(self, step): dialog = StepContentDialog(self.ParentWindow, self.Controler, step.GetInitial()) dialog.SetPreviewFont(self.GetFont()) - dialog.SetPouNames(self.Controler.GetProjectPouNames()) - dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName)) + dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) + dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)) dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step) and block.GetName() != step.GetName()]) dialog.SetMinStepSize(step.GetSize()) values = {"name" : step.GetName()} @@ -1905,12 +2002,13 @@ self.RefreshStepModel(step) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() step.Refresh(rect) def EditTransitionContent(self, transition): dialog = TransitionContentDialog(self.ParentWindow, self.Controler, self.GetDrawingMode() == FREEDRAWING_MODE) dialog.SetPreviewFont(self.GetFont()) - dialog.SetTransitions(self.Controler.GetEditedElementTransitions(self.TagName)) + dialog.SetTransitions(self.Controler.GetEditedElementTransitions(self.TagName, self.Debug)) dialog.SetValues({"type":transition.GetType(),"value":transition.GetCondition(), "priority":transition.GetPriority()}) dialog.SetElementSize(transition.GetSize()) if dialog.ShowModal() == wx.ID_OK: @@ -1922,6 +2020,7 @@ self.RefreshTransitionModel(transition) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() transition.Refresh(rect) dialog.Destroy() @@ -1940,14 +2039,15 @@ self.RefreshJumpModel(jump) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() jump.Refresh(rect) dialog.Destroy() def EditActionBlockContent(self, actionblock): dialog = ActionBlockDialog(self.ParentWindow) dialog.SetQualifierList(self.Controler.GetQualifierTypes()) - dialog.SetActionList(self.Controler.GetEditedElementActions(self.TagName)) - dialog.SetVariableList(self.Controler.GetEditedElementInterfaceVars(self.TagName)) + dialog.SetActionList(self.Controler.GetEditedElementActions(self.TagName, self.Debug)) + dialog.SetVariableList(self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)) dialog.SetValues(actionblock.GetActions()) if dialog.ShowModal() == wx.ID_OK: actions = dialog.GetValues() @@ -1958,6 +2058,7 @@ self.RefreshActionBlockModel(actionblock) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() actionblock.Refresh(rect) dialog.Destroy() @@ -1975,6 +2076,7 @@ self.RefreshCommentModel(comment) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() comment.Refresh(rect) dialog.Destroy() @@ -2242,7 +2344,7 @@ #------------------------------------------------------------------------------- def Cut(self): - if self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement): + if not self.Debug and (self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement)): self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone(self)) rect = self.SelectedElement.GetRedrawRect(1, 1) self.SelectedElement.Delete() @@ -2254,12 +2356,12 @@ self.RefreshRect(self.GetScrolledRect(rect), False) def Copy(self): - if self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement): + if not self.Debug and (self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement)): self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone(self)) def Paste(self): element = self.ParentWindow.GetCopyBuffer() - if element is not None and self.CanAddBlock(element): + if not self.Debug and element is not None and self.CanAddBlock(element): block = self.CopyBlock(element, wx.Point(*self.CalcUnscrolledPosition(30, 30))) if self.SelectedElement is not None: self.SelectedElement.SetSelected(False) @@ -2267,6 +2369,7 @@ self.SelectedElement.SetSelected(True) self.RefreshBuffer() self.RefreshScrollBars() + self.RefreshVisibleElements() self.ParentWindow.RefreshVariablePanel(self.TagName) self.ParentWindow.RefreshInstancesTree() @@ -2283,7 +2386,7 @@ 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)] + 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)] @@ -2360,9 +2463,17 @@ # Drawing functions #------------------------------------------------------------------------------- + def OnScrollWindow(self, event): + if event.GetOrientation() == wx.HORIZONTAL: + self.RefreshVisibleElements(xp = event.GetPosition()) + else: + self.RefreshVisibleElements(yp = event.GetPosition()) + event.Skip() + def OnMoveWindow(self, event): self.GetBestSize() self.RefreshScrollBars() + self.RefreshVisibleElements() event.Skip() def DoDrawing(self, dc, printing = False): @@ -2398,17 +2509,22 @@ # Draw all elements for comment in self.Comments: - if comment != self.SelectedElement: + if comment != self.SelectedElement and (comment.IsVisible() or printing): comment.Draw(dc) for wire in self.Wires: - if wire != self.SelectedElement: - wire.Draw(dc) + if wire != self.SelectedElement and (wire.IsVisible() or printing): + if not self.Debug or wire.GetValue() != True: + wire.Draw(dc) + if self.Debug: + for wire in self.Wires: + if wire != self.SelectedElement and (wire.IsVisible() or printing) and wire.GetValue() == True: + wire.Draw(dc) for block in self.Blocks: - if block != self.SelectedElement: + if block != self.SelectedElement and (block.IsVisible() or printing): block.Draw(dc) - if self.SelectedElement: - self.SelectedElement.Draw(dc) + if self.SelectedElement is not None and (self.SelectedElement.IsVisible() or printing): + self.SelectedElement.Draw(dc) if not printing: if self.rubberBand.IsShown():