diff -r 93bc4c2cf376 -r 86ccc89d7b0b FBDViewer.py --- 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 = {}