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