FBDViewer.py
changeset 3 86ccc89d7b0b
parent 2 93bc4c2cf376
child 5 f8652b073e84
--- 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 = {}