--- a/plugger.py Mon Sep 17 07:33:40 2007 +0200
+++ b/plugger.py Mon Sep 17 10:12:35 2007 +0200
@@ -444,10 +444,10 @@
from PLCControler import PLCControler
from PLCOpenEditor import PLCOpenEditor, ProjectDialog
from TextViewer import TextViewer
-from plcopen.structures import IEC_KEYWORDS
+from plcopen.structures import IEC_KEYWORDS, AddPluginBlockList, ClearPluginTypes, PluginTypes
import re
-class PluginsRoot(PlugTemplate):
+class PluginsRoot(PlugTemplate, PLCControler):
"""
This class define Root object of the plugin tree.
It is responsible of :
@@ -517,7 +517,8 @@
"""
def __init__(self, frame):
-
+ PLCControler.__init__(self)
+
self.MandatoryParams = None
self.AppFrame = frame
@@ -534,7 +535,6 @@
# After __init__ root plugin is not valid
self.ProjectPath = None
- self.PLCManager = None
self.PLCEditor = None
def HasProjectOpened(self):
@@ -577,15 +577,15 @@
dialog.Destroy()
return "Project not created"
- # Create Controler for PLCOpen program
- self.PLCManager = PLCControler()
- self.PLCManager.CreateNewProject(values.pop("projectName"))
- self.PLCManager.SetProjectProperties(properties = values)
+ # Create PLCOpen program
+ self.CreateNewProject(values.pop("projectName"))
+ self.SetProjectProperties(properties = values)
# Change XSD into class members
self._AddParamsMembers()
self.PluggedChilds = {}
# Keep track of the root plugin (i.e. project path)
self.ProjectPath = ProjectPath
+ self.RefreshPluginsBlockLists()
return None
def LoadProject(self, ProjectPath, logger):
@@ -597,10 +597,8 @@
plc_file = os.path.join(ProjectPath, "plc.xml")
if not os.path.isfile(plc_file):
return "Folder choosen doesn't contain a program. It's not a valid project!"
- # Create Controler for PLCOpen program
- self.PLCManager = PLCControler()
# Load PLCOpen file
- result = self.PLCManager.OpenXMLFile(plc_file)
+ result = self.OpenXMLFile(plc_file)
if result:
return result
# Change XSD into class members
@@ -616,15 +614,23 @@
return result
#Load and init all the childs
self.LoadChilds(logger)
+ self.RefreshPluginsBlockLists()
return None
def SaveProject(self):
- if not self.PLCManager.SaveXMLFile():
- self.PLCManager.SaveXMLFile(os.path.join(self.ProjectPath, 'plc.xml'))
+ if not self.SaveXMLFile():
+ self.SaveXMLFile(os.path.join(self.ProjectPath, 'plc.xml'))
if self.PLCEditor:
self.PLCEditor.RefreshTitle()
self.PlugRequestSave()
+ # Update PLCOpenEditor Plugin Block types from loaded plugins
+ def RefreshPluginsBlockLists(self):
+ ClearPluginTypes()
+ AddPluginBlockList(self.BlockTypesFactory())
+ for child in self.IterChilds():
+ AddPluginBlockList(child.BlockTypesFactory())
+
def PlugPath(self, PlugName=None):
return self.ProjectPath
@@ -655,12 +661,15 @@
@param logger: the log pseudo file
"""
+ # Update PLCOpenEditor Plugin Block types before generate ST code
+ self.RefreshPluginsBlockLists()
+
logger.write("Generating SoftPLC IEC-61131 ST/IL/SFC code...\n")
buildpath = self._getBuildPath()
# define name for IEC code file
plc_file = self._getIECcodepath()
# ask PLCOpenEditor controller to write ST/IL/SFC code file
- result = self.PLCManager.GenerateProgram(plc_file)
+ result = self.GenerateProgram(plc_file)
if not result:
# Failed !
logger.write_error("Error : ST/IL/SFC code generator returned %d\n"%result)
@@ -763,11 +772,12 @@
def _EditPLC(self, logger):
if not self.PLCEditor:
+ self.RefreshPluginsBlockLists()
def _onclose():
self.PLCEditor = None
def _onsave():
self.SaveProject()
- self.PLCEditor = PLCOpenEditor(self.AppFrame, self.PLCManager)
+ self.PLCEditor = PLCOpenEditor(self.AppFrame, self)
self.PLCEditor.RefreshProjectTree()
self.PLCEditor.RefreshFileMenu()
self.PLCEditor.RefreshEditMenu()