Adding File Dialog for choosing path to generated program
authorlbessard
Wed, 21 Mar 2007 16:12:08 +0100
changeset 4 2de7fd952fdd
parent 3 86ccc89d7b0b
child 5 f8652b073e84
Adding File Dialog for choosing path to generated program
GenerateProgram.py
PLCControler.py
PLCGenerator.py
PLCOpenEditor.py
--- a/GenerateProgram.py	Thu Feb 08 17:41:41 2007 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-#This file is part of PLCOpenEditor, a library implementing an IEC 61131-3 editor
-#based on the plcopen standard. 
-#
-#Copyright (C): Edouard TISSERANT and Laurent BESSARD
-#
-#See COPYING file for copyrights details.
-#
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License as published by the Free Software Foundation; either
-#version 2.1 of the License, or (at your option) any later version.
-#
-#This library is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#Lesser General Public License for more details.
-#
-#You should have received a copy of the GNU Lesser General Public
-#License along with this library; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-"""
-Class implementing a generator for PLC program code
-"""
-
-class PLCGenerator:
-    
-    # Create a rubberband by indicated on which window it must be drawn
-    def __init__(self, controler):
-        self.drawingSurface = drawingSurface
-        self.Reset()
--- a/PLCControler.py	Thu Feb 08 17:41:41 2007 +0100
+++ b/PLCControler.py	Wed Mar 21 16:12:08 2007 +0100
@@ -350,12 +350,17 @@
                 return used
         return False
 
-    def GenerateProgram(self):
+    def GenerateProgram(self, filepath):
         if self.Project:
-            program = GenerateCurrentProgram(self.Project)
-            programfile = open("test.st", "w")
-            programfile.write(program)
-            programfile.close()
+            try:
+                program = GenerateCurrentProgram(self.Project)
+                programfile = open(filepath, "w")
+                programfile.write(program)
+                programfile.close()
+                return True
+            except:
+                pass
+        return False
 
 #-------------------------------------------------------------------------------
 #                        Project Pous management functions
--- a/PLCGenerator.py	Thu Feb 08 17:41:41 2007 +0100
+++ b/PLCGenerator.py	Wed Mar 21 16:12:08 2007 +0100
@@ -445,7 +445,7 @@
             program += "\n"
             for var_type, var_name in variables:
                 program += "    %s : %s;\n"%(var_name, var_type)
-            program += "  END_%s\n"%list_type
+            program += "  END_VAR\n"
         program += "\n"
         program += self.Program
         program += "END_%s\n\n"%self.Type
--- a/PLCOpenEditor.py	Thu Feb 08 17:41:41 2007 +0100
+++ b/PLCOpenEditor.py	Wed Mar 21 16:12:08 2007 +0100
@@ -582,7 +582,20 @@
         event.Skip()
 
     def OnGenerateProgramMenu(self, event):
-        self.Controler.GenerateProgram()
+        dialog = wxFileDialog(self, "Choose a file", os.getcwd(), "",  "ST files (*.st)|*.st|All files|*.*", wxSAVE|wxCHANGE_DIR)
+        if dialog.ShowModal() == wxID_OK:
+            filepath = dialog.GetPath()
+            if os.path.isdir(os.path.dirname(filepath)):
+                result = self.Controler.GenerateProgram(filepath)
+                if not result:
+                    message = wxMessageDialog(self, "Can't generate program to file %s!"%filepath, "Error", wxOK|wxICON_ERROR)
+                    message.ShowModal()
+                    message.Destroy()
+            else:
+                message = wxMessageDialog(self, "%s is not a valid folder!"%os.path.dirname(filepath), "Error", wxOK|wxICON_ERROR)
+                message.ShowModal()
+                message.Destroy()
+        dialog.Destroy()
         event.Skip()
 
     def SaveProject(self):