diff -r 531e6a834d7e -r e55d6faee9d1 plugger.py --- a/plugger.py Wed Oct 24 17:40:12 2007 +0200 +++ b/plugger.py Thu Oct 25 16:46:56 2007 +0200 @@ -28,6 +28,33 @@ NameTypeSeparator = '@' +class MiniTextControler: + + def __init__(self, filepath): + self.FilePath = filepath + + def SetCurrentElementEditingText(self, text): + file = open(self.FilePath, "w") + file.write(text) + file.close() + + def GetCurrentElementEditingText(self): + if os.path.isfile(self.FilePath): + file = open(self.FilePath, "r") + text = file.read() + file.close() + return text + return "" + + def StartBuffering(self): + pass + + def EndBuffering(self): + pass + + def BufferProject(self): + pass + class PlugTemplate: """ This class is the one that define plugins. @@ -696,6 +723,14 @@ # define name for IEC code file return os.path.join(self._getBuildPath(), "plc.st") + def _getIECgeneratedcodepath(self): + # define name for IEC generated code file + return os.path.join(self._getBuildPath(), "generated_plc.st") + + def _getIECrawcodepath(self): + # define name for IEC raw code file + return os.path.join(self._getBuildPath(), "raw_plc.st") + def _Generate_SoftPLC(self, logger): """ Generate SoftPLC ST/IL/SFC code out of PLCOpenEditor controller, and compile it with IEC2C @@ -708,18 +743,22 @@ 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.GenerateProgram(plc_file) + result = self.GenerateProgram(self._getIECgeneratedcodepath()) if not result: # Failed ! logger.write_error("Error : ST/IL/SFC code generator returned %d\n"%result) return False + plc_file = open(self._getIECcodepath(), "w") + if os.path.isfile(self._getIECrawcodepath()): + plc_file.write(open(self._getIECrawcodepath(), "r").read()) + plc_file.write("\n") + plc_file.write(open(self._getIECgeneratedcodepath(), "r").read()) + plc_file.close() logger.write("Compiling IEC Program in to C code...\n") # Now compile IEC code into many C files # files are listed to stdout, and errors to stderr. - status, result, err_result = logger.LogCommand("%s %s -I %s %s"%(iec2c_path, plc_file, ieclib_path, buildpath), no_stdout=True) + status, result, err_result = logger.LogCommand("%s %s -I %s %s"%(iec2c_path, self._getIECcodepath(), ieclib_path, buildpath), no_stdout=True) if status: # Failed ! logger.write_error("Error : IEC to C compiler returned %d\n"%status) @@ -869,7 +908,17 @@ text = file(plc_file).read() except: text = '(* No IEC code have been generated at that time ! *)' - ST_viewer.SetText(text) + ST_viewer.SetText(text = text) + + new_dialog.Show() + + def _editIECrawcode(self, logger): + new_dialog = wx.Frame(None) + controler = MiniTextControler(self._getIECrawcodepath()) + ST_viewer = TextViewer(new_dialog, None, controler) + #ST_viewer.Enable(False) + ST_viewer.SetKeywords(IEC_KEYWORDS) + ST_viewer.RefreshView() new_dialog.Show() @@ -895,4 +944,29 @@ def _Run(self, logger): logger.write_error("Not impl\n") - PluginMethods = [("EditPLC",_EditPLC), ("Build",_build), ("Clean",_Clean), ("Run",_Run), ("Show IEC code",_showIECcode)] + PluginMethods = [ + {"bitmap" : os.path.join("images", "editPLC.png"), + "name" : "Edit PLC", + "tooltip" : "Edit PLC program with PLCOpenEditor", + "method" : _EditPLC}, + {"bitmap" : os.path.join("images", "Build.png"), + "name" : "Build", + "tooltip" : "Build project into build folder", + "method" : _build}, + {"bitmap" : os.path.join("images", "Clean.png"), + "name" : "Clean", + "tooltip" : "Clean project build folder", + "method" : _Clean}, + {"bitmap" : os.path.join("images", "Run.png"), + "name" : "Run", + "tooltip" : "Run PLC from build folder", + "method" : _Run}, + {"bitmap" : os.path.join("images", "ShowIECcode.png"), + "name" : "Show IEC code", + "tooltip" : "Show IEC code generated by PLCGenerator", + "method" : _showIECcode}, + {"name" : "Edit IEC raw code", + "tooltip" : "Show IEC code generated by PLCGenerator", + "method" : _editIECrawcode} + ] +