--- a/graphics/FBD_Objects.py Fri Oct 26 17:04:18 2007 +0200
+++ b/graphics/FBD_Objects.py Tue Oct 30 16:53:08 2007 +0100
@@ -39,15 +39,15 @@
class FBD_Block(Graphic_Element):
# Create a new block
- def __init__(self, parent, type, name, id = None, extension = 0, inputs = None, connectors = {}):
+ def __init__(self, parent, type, name, id = None, extension = 0, inputs = None, connectors = {}, executionOrder = 0):
Graphic_Element.__init__(self, parent)
self.Type = None
self.Extension = None
- self.Name = name
self.Id = id
+ self.SetName(name)
+ self.SetExecutionOrder(executionOrder)
self.Inputs = []
self.Outputs = []
- self.RefreshNameSize()
self.Colour = wx.BLACK
self.Pen = wx.BLACK_PEN
self.SetType(type, extension, inputs, connectors)
@@ -83,6 +83,11 @@
dc = wx.ClientDC(self.Parent)
self.NameSize = dc.GetTextExtent(self.Name)
+ # Refresh the size of text for execution order
+ def RefreshExecutionOrderSize(self):
+ dc = wx.ClientDC(self.Parent)
+ self.ExecutionOrderSize = dc.GetTextExtent(str(self.ExecutionOrder))
+
# Refresh the block bounding box
def RefreshBoundingBox(self):
# Calculate the size of the name outside the block
@@ -96,6 +101,10 @@
else:
bbx_y = self.Pos.y
bbx_height = self.Size[1]
+ if self.ExecutionOrder != 0:
+ bbx_x = min(bbx_x, self.Pos.x + self.Size[0] - self.ExecutionOrderSize[0])
+ bbx_width = max(bbx_width, bbx_width + self.Pos.x + self.ExecutionOrderSize[0] - bbx_x - self.Size[0])
+ bbx_height = bbx_height + (self.ExecutionOrderSize[1] + 2)
self.BoundingBox = wx.Rect(bbx_x, bbx_y, bbx_width + 1, bbx_height + 1)
# Refresh the positions of the block connectors
@@ -260,6 +269,15 @@
def GetExtension(self):
return self.Extension
+ # Changes the execution order
+ def SetExecutionOrder(self, executionOrder):
+ self.ExecutionOrder = executionOrder
+ self.RefreshExecutionOrderSize()
+
+ # Returs the execution order
+ def GetExecutionOrder(self):
+ return self.ExecutionOrder
+
# Refresh the block minimum size
def RefreshMinSize(self):
# Calculate the inputs maximum width
@@ -335,6 +353,10 @@
input.Draw(dc)
for output in self.Outputs:
output.Draw(dc)
+ if self.ExecutionOrder != 0:
+ # Draw block execution order
+ dc.DrawText(str(self.ExecutionOrder), self.Pos.x + self.Size[0] - self.ExecutionOrderSize[0],
+ self.Pos.y + self.Size[1] + 2)
Graphic_Element.Draw(self, dc)
dc.SetTextForeground(wx.BLACK)
@@ -350,15 +372,15 @@
class FBD_Variable(Graphic_Element):
# Create a new variable
- def __init__(self, parent, type, name, value_type, id = None):
+ def __init__(self, parent, type, name, value_type, id = None, executionOrder = 0):
Graphic_Element.__init__(self, parent)
self.Type = None
self.ValueType = None
- self.Name = name
self.Id = id
+ self.SetName(name)
+ self.SetExecutionOrder(executionOrder)
self.Input = None
self.Output = None
- self.RefreshNameSize()
self.SetType(type, value_type)
# Make a clone of this FBD_Variable
@@ -392,6 +414,11 @@
dc = wx.ClientDC(self.Parent)
self.NameSize = dc.GetTextExtent(self.Name)
+ # Refresh the size of text for execution order
+ def RefreshExecutionOrderSize(self):
+ dc = wx.ClientDC(self.Parent)
+ self.ExecutionOrderSize = dc.GetTextExtent(str(self.ExecutionOrder))
+
# Refresh the variable bounding box
def RefreshBoundingBox(self):
if self.Type in (OUTPUT, INOUT):
@@ -402,7 +429,12 @@
bbx_width = self.Size[0] + 2 * CONNECTOR_SIZE
else:
bbx_width = self.Size[0] + CONNECTOR_SIZE
- self.BoundingBox = wx.Rect(bbx_x, self.Pos.y, bbx_width + 1, self.Size[1] + 1)
+ bbx_height = self.Size[1]
+ if self.ExecutionOrder != 0:
+ bbx_x = min(bbx_x, self.Pos.x + self.Size[0] - self.ExecutionOrderSize[0])
+ bbx_width = max(bbx_width, bbx_width + self.Pos.x + self.ExecutionOrderSize[0] - bbx_x - self.Size[0])
+ bbx_height = bbx_height + (self.ExecutionOrderSize[1] + 2)
+ self.BoundingBox = wx.Rect(bbx_x, self.Pos.y, bbx_width + 1, bbx_height + 1)
# Refresh the position of the variable connector
def RefreshConnectors(self):
@@ -492,6 +524,15 @@
def GetName(self):
return self.Name
+ # Changes the execution order
+ def SetExecutionOrder(self, executionOrder):
+ self.ExecutionOrder = executionOrder
+ self.RefreshExecutionOrderSize()
+
+ # Returs the execution order
+ def GetExecutionOrder(self):
+ return self.ExecutionOrder
+
# Returns the variable minimum size
def GetMinSize(self):
return self.NameSize[0] + 10, self.NameSize[1] + 10
@@ -528,6 +569,10 @@
self.Input.Draw(dc)
if self.Output:
self.Output.Draw(dc)
+ if self.ExecutionOrder != 0:
+ # Draw variable execution order
+ dc.DrawText(str(self.ExecutionOrder), self.Pos.x + self.Size[0] - self.ExecutionOrderSize[0],
+ self.Pos.y + self.Size[1] + 2)
Graphic_Element.Draw(self, dc)
@@ -545,8 +590,8 @@
def __init__(self, parent, type, name, id = None):
Graphic_Element.__init__(self, parent)
self.Type = type
- self.Name = name
self.Id = id
+ self.SetName(name)
self.Pos = wx.Point(0, 0)
self.Size = wx.Size(0, 0)
# Create an input or output connector according to connection type
@@ -682,7 +727,7 @@
self.Pos.x + self.Size[0], self.Pos.y + self.Size[1] / 2)
dc.DrawLine(self.Pos.x + self.Size[0], self.Pos.y + self.Size[1] / 2,
self.Pos.x + self.Size[0] - arrowsize, self.Pos.y + self.Size[1])
- # Draw variable name
+ # Draw connection name
dc.DrawText(self.Name, self.Pos.x + (self.Size[0] - self.NameSize[0]) / 2,
self.Pos.y + (self.Size[1] - self.NameSize[1]) / 2)
# Draw connector