--- a/FBDViewer.py Wed Feb 07 18:43:32 2007 +0100
+++ b/FBDViewer.py Thu Feb 08 17:41:41 2007 +0100
@@ -77,16 +77,24 @@
self.rubberBand.OnLeftDown(event, self.Scaling)
elif self.Mode == MODE_WIRE:
pos = GetScaledEventPosition(event, self.Scaling)
- wire = Wire(self, [wxPoint(pos.x, pos.y), EAST], [wxPoint(pos.x, pos.y), WEST])
- wire.oldPos = pos
- wire.Handle = (HANDLE_POINT, 0)
- wire.ProcessDragging(0, 0)
- wire.Handle = (HANDLE_POINT, 1)
- self.Wires.append(wire)
- self.Elements.append(wire)
- if self.SelectedElement:
+ connector = self.FindBlockConnector(pos)
+ if connector:
+ if (connector.GetDirection() == EAST):
+ wire = Wire(self, [wxPoint(pos.x, pos.y), EAST], [wxPoint(pos.x, pos.y), WEST])
+ else:
+ wire = Wire(self, [wxPoint(pos.x, pos.y), WEST], [wxPoint(pos.x, pos.y), EAST])
+ wire.oldPos = pos
+ wire.Handle = (HANDLE_POINT, 0)
+ wire.ProcessDragging(0, 0)
+ wire.Handle = (HANDLE_POINT, 1)
+ self.Wires.append(wire)
+ self.Elements.append(wire)
+ if self.SelectedElement:
+ self.SelectedElement.SetSelected(False)
+ self.SelectedElement = wire
+ elif self.SelectedElement:
self.SelectedElement.SetSelected(False)
- self.SelectedElement = wire
+ self.SelectedElement = None
self.Refresh()
event.Skip()
@@ -122,12 +130,20 @@
self.ReleaseMouse()
self.Refresh()
elif self.Mode == MODE_WIRE and self.SelectedElement:
- self.SelectedElement.ResetPoints()
- self.SelectedElement.OnMotion(event, self.Scaling)
- self.SelectedElement.GeneratePoints()
- self.SelectedElement.RefreshModel()
- self.SelectedElement.SetSelected(True)
- self.Refresh()
+ pos = GetScaledEventPosition(event, self.Scaling)
+ connector = self.FindBlockConnector(pos, False)
+ if connector and connector != self.SelectedElement.StartConnected:
+ self.SelectedElement.ResetPoints()
+ self.SelectedElement.OnMotion(event, self.Scaling)
+ self.SelectedElement.GeneratePoints()
+ self.SelectedElement.RefreshModel()
+ self.SelectedElement.SetSelected(True)
+ else:
+ self.SelectedElement.Delete()
+ self.SelectedElement = None
+ self.Refresh()
+ if not self.SavedMode:
+ wxCallAfter(self.Parent.ResetCurrentMode)
event.Skip()
def OnViewerRightUp(self, event):
@@ -157,10 +173,13 @@
self.SelectedElement.OnMotion(event, self.Scaling)
self.Refresh()
elif self.Mode == MODE_WIRE and self.SelectedElement:
- self.SelectedElement.ResetPoints()
- self.SelectedElement.OnMotion(event, self.Scaling)
- self.SelectedElement.GeneratePoints()
- self.Refresh()
+ pos = GetScaledEventPosition(event, self.Scaling)
+ connector = self.FindBlockConnector(pos, False)
+ if not connector or self.SelectedElement.EndConnected == None:
+ self.SelectedElement.ResetPoints()
+ self.SelectedElement.OnMotion(event, self.Scaling)
+ self.SelectedElement.GeneratePoints()
+ self.Refresh()
event.Skip()
#-------------------------------------------------------------------------------
@@ -209,7 +228,6 @@
self.Elements.append(block)
self.Controler.AddCurrentElementEditingBlock(id)
self.RefreshBlockModel(block)
- self.Parent.RefreshProjectTree()
self.Refresh()
dialog.Destroy()
@@ -235,7 +253,6 @@
self.Elements.append(variable)
self.Controler.AddCurrentElementEditingVariable(id, values["type"])
self.RefreshVariableModel(variable)
- self.Parent.RefreshProjectTree()
self.Refresh()
dialog.Destroy()
@@ -252,7 +269,6 @@
self.Elements.append(connection)
self.Controler.AddCurrentElementEditingConnection(id, values["type"])
self.RefreshConnectionModel(connection)
- self.Parent.RefreshProjectTree()
self.Refresh()
dialog.Destroy()
@@ -285,11 +301,10 @@
self.Controler.RemoveCurrentElementEditingInstance(block.GetId())
for wire in wires:
wire.RefreshModel()
- self.Parent.RefreshProjectTree()
def DeleteVariable(self, variable):
wires = []
- if self.SelectedElement.GetType() == INPUT:
+ if variable.GetType() == INPUT:
connector = variable.GetConnector()
wires.extend([wire[0] for wire in connector.GetWires()])
variable.Clean()
@@ -298,11 +313,10 @@
self.Controler.RemoveCurrentElementEditingInstance(variable.GetId())
for wire in wires:
wire.RefreshModel()
- self.Parent.RefreshProjectTree()
def DeleteConnection(self, connection):
wires = []
- if self.SelectedElement.GetType() == CONTINUATION:
+ if connection.GetType() == CONTINUATION:
connector = connection.GetConnector()
wires.extend([wire[0] for wire in connector.GetWires()])
connection.Clean()
@@ -311,7 +325,6 @@
self.Controler.RemoveCurrentElementEditingInstance(connection.GetId())
for wire in wires:
wire.RefreshModel()
- self.Parent.RefreshProjectTree()
def DeleteComment(self, comment):
self.Elements.remove(comment)
@@ -319,7 +332,7 @@
def DeleteWire(self, wire):
connected = wire.GetConnected()
- self.SelectedElement.Clean()
+ wire.Clean()
self.Wires.remove(wire)
self.Elements.remove(wire)
for connector in connected:
@@ -343,6 +356,35 @@
block.SetExtension(values["extension"])
block.SetSize(values["width"], values["height"])
block.SetType(values["type"])
+ self.RefreshBlockModel(block)
+ self.Refresh()
+ dialog.Destroy()
+
+ def EditVariableContent(self, variable):
+ dialog = VariablePropertiesDialog(self.Parent)
+ dialog.SetMinVariableSize(variable.GetSize())
+ varlist = []
+ vars = self.Controler.GetCurrentElementEditingInterfaceVars()
+ if vars:
+ for var in vars:
+ varlist.append((var["Name"], var["Class"], var["Type"]))
+ returntype = self.Controler.GetCurrentElementEditingInterfaceReturnType()
+ if returntype:
+ varlist.append((self.Controler.GetCurrentElementEditingName(), "Output", returntype))
+ dialog.SetVariables(varlist)
+ values = {"name" : variable.GetName(), "type" : variable.GetType()}
+ dialog.SetValues(values)
+ if dialog.ShowModal() == wxID_OK:
+ old_type = variable.GetType()
+ values = dialog.GetValues()
+ variable.SetName(values["name"])
+ variable.SetType(values["type"], values["value_type"])
+ variable.SetSize(values["width"], values["height"])
+ if old_type != values["type"]:
+ id = variable.GetId()
+ self.Controler.RemoveCurrentElementEditingInstance(id)
+ self.Controler.AddCurrentElementEditingVariable(id, values["type"])
+ self.RefreshVariableModel(variable)
self.Refresh()
dialog.Destroy()
@@ -659,6 +701,19 @@
def SetVariables(self, vars):
self.VarList = vars
self.RefreshNameList()
+
+ def SetValues(self, values):
+ for name, value in values.items():
+ if name == "type":
+ if value == INPUT:
+ self.Class.SetStringSelection("Input")
+ if value == OUTPUT:
+ self.Class.SetStringSelection("Output")
+ if value == INOUT:
+ self.Class.SetStringSelection("InOut")
+ elif name == "name":
+ self.Name.SetStringSelection(value)
+ self.RefreshPreview()
def GetValues(self):
values = {}