diff -r ea685658b388 -r 33b38700d0db plugins/c_ext/c_ext.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/c_ext/c_ext.py Tue Sep 11 16:11:15 2007 +0200 @@ -0,0 +1,94 @@ +import wx +import wx.stc as stc +import os, sys, shutil +from CppSTC import CppSTC +from plugger import PlugTemplate + +class _Cfile: + XSD = """ + + + + + + + + """ + def __init__(self): + if not os.path.isfile(self.CFileName()): + f = open(self.CFileName(), 'w') + f.write("/*Empty*/") + + def CFileName(self): + return os.path.join(self.PlugPath(),self.C_File.getFileName()) + + def SetParamsAttribute(self, path, value, logger): + oldname = self.CFileName() + res = PlugTemplate.SetParamsAttribute(self, path, value, logger) + if path == "C_File.FileName": + shutil.move(oldname, self.CFileName()) + logger.write("\"%s\" renamed \"%s\"\n"%(oldname, self.CFileName())) + return value, False + return res + + _View = None + def _OpenView(self, logger): + if not self._View: + def _onclose(evt): + self.OnPlugSave() + self._View = None + evt.Skip() + self._View = wx.Frame(self.GetPlugRoot().AppFrame,-1) + self._View.Bind(wx.EVT_CLOSE, _onclose) + ed = CppSTC(self._View, wx.NewId()) + ed.SetText(open(self.CFileName()).read()) + ed.EmptyUndoBuffer() + ed.Colourise(0, -1) + ed.SetMarginType(1, stc.STC_MARGIN_NUMBER) + ed.SetMarginWidth(1, 25) + self._View.ed = ed + + self._View.Show() + + PluginMethods = [("Edit C File",_OpenView)] + + def OnPlugSave(self): + if self._View: + f = open(self.CFileName(),'w') + f.write(self._View.ed.GetText()) + return True + + def PlugGenerate_C(self, buildpath, locations, logger): + """ + Generate C code + @param current_location: Tupple containing plugin IEC location : %I0.0.4.5 => (0,0,4,5) + @param locations: List of complete variables locations \ + [{"IEC_TYPE" : the IEC type (i.e. "INT", "STRING", ...) + "NAME" : name of the variable (generally "__IW0_1_2" style) + "DIR" : direction "Q","I" or "M" + "SIZE" : size "X", "B", "W", "D", "L" + "LOC" : tuple of interger for IEC location (0,1,2,...) + }, ...] + @return: [(C_file_name, CFLAGS),...] , LDFLAGS_TO_APPEND + """ + current_location = self.GetCurrentLocation() + # define a unique name for the generated C file + prefix = "_".join(map(lambda x:str(x), current_location)) + Gen_Cfile_path = os.path.join(buildpath, prefix + "_CFile.c" ) + f = open(Gen_Cfile_path,'w') + f.write("/* Header generated by Beremiz c_ext plugin */\n") + f.write("#include \"iec_std_lib.h\"\n") + for loc in locations: + f.write(loc["IEC_TYPE"]+" "+loc["NAME"]+";\n") + f.write("/* End of header generated by Beremiz c_ext plugin */\n") + + return [(Gen_Cfile_path,"")],"" + +class RootClass: + + PlugChildsTypes = [("C_File",_Cfile)] + + def PlugGenerate_C(self, buildpath, locations, logger): + return [],"" + +