plugins/svgui/svgui.py
changeset 12 a1f9e514f708
parent 11 75ae893d5eed
child 13 f1f0edbeb313
--- a/plugins/svgui/svgui.py	Mon Aug 20 14:28:08 2007 +0200
+++ b/plugins/svgui/svgui.py	Tue Aug 21 17:21:26 2007 +0200
@@ -1,60 +1,97 @@
+import os
+from DEFControler import DEFControler
+from defeditor import EditorFrame
 
+class _EditorFramePlugg(EditorFrame):
+    def OnClose(self, event):
+        self.OnPluggClose()
+        event.Skip()
+
+class BusController(DEFControler):
+
+    ViewClass = _EditorFramePlugg
+    
+    def __init__(self, buspath):
+        filepath = os.path.join(buspath, "gui.def")
+        if os.path.isfile(filepath):
+            self.OpenXMLFile(filepath)
+        else
+            self.CreateRootElement()
+            self.SetFilePath(filepath)
+
+    def ReqSave(self):
+        self.SaveXMLFile()
+        return True
+
+    def Generate_C(self, dirpath, locations):
+        self.GenerateProgram(filepath)
+        return {"headers":["program.h"],"sources":["program.cpp"]}
+    
 TYPECONVERSION = {"BOOL" : "X", "SINT" : "B", "INT" : "W", "DINT" : "D", "LINT" : "L",
     "USINT" : "B", "UINT" : "W", "UDINT" : "D", "ULINT" : "L", "REAL" : "D", "LREAL" : "L",
     "STRING" : "B", "BYTE" : "B", "WORD" : "W", "DWORD" : "D", "LWORD" : "L", "WSTRING" : "W"}
 
-def GetBlockGenerationFunction(beremiz):
-    def generate_svgui_block(generator, block, body, link):
-        controller = generator.GetController()
-        name = block.getInstanceName()
-        type = block.getTypeName()
-        block_infos = GetBlockType(type)
-        bus_id, name = [word for word in name.split("_") if word != ""]
-        block_id = beremiz.GetSVGUIElementId(bus_id, name)
-        if block_id == None:
-            raise ValueError, "No corresponding block found"
-        if not generator.ComputedBlocks.get(name, False):
-            for num, variable in enumerate(block.inputVariables.getVariable()):
-                connections = variable.connectionPointIn.getConnections()
-                if connections and len(connections) == 1:
-                    parameter = "__I%s%d_%d_%d"%(TYPECONVERSION[block_infos["inputs"][num][1]], bus_id, block_id, num)
-                    value = generator.ComputeFBDExpression(body, connections[0])
-                    generator.Program += ("  %s := %s;\n"%(parameter, generator.ExtractModifier(variable, value)))
-            generator.ComputedBlocks[name] = True
-        if link:
-            connectionPoint = link.getPosition()[-1]
-            for num, variable in enumerate(block.outputVariables.getVariable()):
-                blockPointx, blockPointy = variable.connectionPointOut.getRelPosition()
-                if block.getX() + blockPointx == connectionPoint.getX() and block.getY() + blockPointy == connectionPoint.getY():
-                    return "__Q%s%d_%d_%d"%(TYPECONVERSION[block_infos["outputs"][num][1]], bus_id, block_id, num)
-            raise ValueError, "No output variable found"
-        else:
-            return None
-    return generate_svgui_block
+class PluginController:
+    def BlockTypesFactory(self):
+        def generate_svgui_block(generator, block, body, link):
+            controller = generator.GetController()
+            name = block.getInstanceName()
+            type = block.getTypeName()
+            block_infos = GetBlockType(type)
+            bus_id, name = [word for word in name.split("_") if word != ""]
+            block_id = self.PluginBuses[bus_id].GetElementIdFromName(name)
+            if block_id == None:
+                raise ValueError, "No corresponding block found"
+            if not generator.ComputedBlocks.get(name, False):
+                for num, variable in enumerate(block.inputVariables.getVariable()):
+                    connections = variable.connectionPointIn.getConnections()
+                    if connections and len(connections) == 1:
+                        parameter = "__I%s%d_%d_%d"%(TYPECONVERSION[block_infos["inputs"][num][1]], bus_id, block_id, num)
+                        value = generator.ComputeFBDExpression(body, connections[0])
+                        generator.Program += ("  %s := %s;\n"%(parameter, generator.ExtractModifier(variable, value)))
+                generator.ComputedBlocks[name] = True
+            if link:
+                connectionPoint = link.getPosition()[-1]
+                for num, variable in enumerate(block.outputVariables.getVariable()):
+                    blockPointx, blockPointy = variable.connectionPointOut.getRelPosition()
+                    if block.getX() + blockPointx == connectionPoint.getX() and block.getY() + blockPointy == connectionPoint.getY():
+                        return "__Q%s%d_%d_%d"%(TYPECONVERSION[block_infos["outputs"][num][1]], bus_id, block_id, num)
+                raise ValueError, "No output variable found"
+            else:
+                return None
 
-BlockList = {"name" : "SVGUI function blocks", "list" :
-               [{"name" : "Container", "type" : "functionBlock", "extensible" : False, 
-                 "inputs" : [("X","FLOAT","none"),("SetX","BOOL","none"),("Y","FLOAT","none"),("SetY","BOOL","none"),("Angle","FLOAT","none"),("SetAngle","BOOL","none")], 
-                 "outputs" : [("X","FLOAT","none"),("X Changed","BOOL","none"),("Y","FLOAT","none"),("Y Changed","BOOL","none"),("Angle","FLOAT","none"),("Angle Changed","BOOL","none")],
-                 "comment" : "SVGUI Container"},
-                {"name" : "Button", "type" : "functionBlock", "extensible" : False, 
-                 "inputs" : [("Show","BOOL","none"),("Toggle","BOOL","none")], 
-                 "outputs" : [("Visible","BOOL","none"),("State","BOOL","none")],
-                 "comment" : "SVGUI Button"},
-                {"name" : "TextCtrl", "type" : "functionBlock", "extensible" : False, 
-                 "inputs" : [("Text","STRING","none"),("Set Text","BOOL","none")], 
-                 "outputs" : [("Text","STRING","none"),("Text Changed","BOOL","none")],
-                 "comment" : "SVGUI Text Control"},
-                {"name" : "ScrollBar", "type" : "functionBlock", "extensible" : False, 
-                 "inputs" : [("Position","UINT","none"),("Set Position","BOOL","none")], 
-                 "outputs" : [("Position","UINT","none"),("Position Changed","BOOL","none")],
-                 "comment" : "SVGUI ScrollBar"},
-                {"name" : "NoteBook", "type" : "functionBlock", "extensible" : False, 
-                 "inputs" : [("Selected","UINT","none"),("Set Selected","BOOL","none")], 
-                 "outputs" : [("Selected","UINT","none"),("Selected Changed","BOOL","none")],
-                 "comment" : "SVGUI Notebook"},
-                {"name" : "RotatingCtrl", "type" : "functionBlock", "extensible" : False, 
-                 "inputs" : [("Angle","FLOAT","none"),("Set Angle","BOOL","none")], 
-                 "outputs" : [("Angle","FLOAT","none"),("Angle changed","BOOL","none")],
-                 "comment" : "SVGUI Rotating Control"},
-               ]}
+        return [{"name" : "SVGUI function blocks", "list" :
+           [{"name" : "Container", "type" : "functionBlock", "extensible" : False, 
+             "inputs" : [("X","FLOAT","none"),("SetX","BOOL","none"),("Y","FLOAT","none"),("SetY","BOOL","none"),("Angle","FLOAT","none"),("SetAngle","BOOL","none")], 
+             "outputs" : [("X","FLOAT","none"),("X Changed","BOOL","none"),("Y","FLOAT","none"),("Y Changed","BOOL","none"),("Angle","FLOAT","none"),("Angle Changed","BOOL","none")],
+             "comment" : "SVGUI Container", "generate": generate_svgui_block},
+            {"name" : "Button", "type" : "functionBlock", "extensible" : False, 
+             "inputs" : [("Show","BOOL","none"),("Toggle","BOOL","none")], 
+             "outputs" : [("Visible","BOOL","none"),("State","BOOL","none")],
+             "comment" : "SVGUI Button", "generate": generate_svgui_block},
+            {"name" : "TextCtrl", "type" : "functionBlock", "extensible" : False, 
+             "inputs" : [("Text","STRING","none"),("Set Text","BOOL","none")], 
+             "outputs" : [("Text","STRING","none"),("Text Changed","BOOL","none")],
+             "comment" : "SVGUI Text Control", "generate": generate_svgui_block},
+            {"name" : "ScrollBar", "type" : "functionBlock", "extensible" : False, 
+             "inputs" : [("Position","UINT","none"),("Set Position","BOOL","none")], 
+             "outputs" : [("Position","UINT","none"),("Position Changed","BOOL","none")],
+             "comment" : "SVGUI ScrollBar", "generate": generate_svgui_block},
+            {"name" : "NoteBook", "type" : "functionBlock", "extensible" : False, 
+             "inputs" : [("Selected","UINT","none"),("Set Selected","BOOL","none")], 
+             "outputs" : [("Selected","UINT","none"),("Selected Changed","BOOL","none")],
+             "comment" : "SVGUI Notebook", "generate": generate_svgui_block},
+            {"name" : "RotatingCtrl", "type" : "functionBlock", "extensible" : False, 
+             "inputs" : [("Angle","FLOAT","none"),("Set Angle","BOOL","none")], 
+             "outputs" : [("Angle","FLOAT","none"),("Angle changed","BOOL","none")],
+             "comment" : "SVGUI Rotating Control", "generate": generate_svgui_block}
+           ]}]
+
+
+
+
+
+
+
+
+