PLCOpenEditor.py
changeset 64 dd6f693e46a1
parent 58 39cd981ff242
child 65 cb6bed0720f0
equal deleted inserted replaced
63:04a02b4b2a57 64:dd6f693e46a1
    20 #
    20 #
    21 #You should have received a copy of the GNU General Public
    21 #You should have received a copy of the GNU General Public
    22 #License along with this library; if not, write to the Free Software
    22 #License along with this library; if not, write to the Free Software
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    24 
    24 
    25 from wxPython.wx import *
       
    26 from wxPython.grid import *
       
    27 from time import localtime
    25 from time import localtime
    28 from datetime import datetime
    26 from datetime import datetime
    29 import wx
    27 import wx
       
    28 import wx.grid
    30 
    29 
    31 from SFCViewer import *
    30 from SFCViewer import *
    32 from LDViewer import *
    31 from LDViewer import *
    33 from Viewer import *
    32 from Viewer import *
    34 from TextViewer import *
    33 from TextViewer import *
    68 CWD = ""
    67 CWD = ""
    69 for path in sys.path:
    68 for path in sys.path:
    70     if os.path.isfile(os.path.join(path, "PLCOpenEditor.py")):
    69     if os.path.isfile(os.path.join(path, "PLCOpenEditor.py")):
    71         CWD = path
    70         CWD = path
    72 
    71 
    73 [wxID_PLCOPENEDITOR, wxID_PLCOPENEDITORPROJECTTREE, 
    72 [ID_PLCOPENEDITOR, ID_PLCOPENEDITORPROJECTTREE, 
    74  wxID_PLCOPENEDITORSPLITTERWINDOW1, wxID_PLCOPENEDITOREDITORPANEL,
    73  ID_PLCOPENEDITORSPLITTERWINDOW1, ID_PLCOPENEDITOREDITORPANEL,
    75  wxID_PLCOPENEDITORTABSOPENED, wxID_PLCOPENEDITORTOOLBAR,
    74  ID_PLCOPENEDITORTABSOPENED, ID_PLCOPENEDITORTOOLBAR,
    76  wxID_PLCOPENEDITORDEFAULTTOOLBAR, wxID_PLCOPENEDITORSFCTOOLBAR, 
    75  ID_PLCOPENEDITORDEFAULTTOOLBAR, ID_PLCOPENEDITORSFCTOOLBAR, 
    77  wxID_PLCOPENEDITORFBDTOOLBAR, wxID_PLCOPENEDITORLDTOOLBAR,
    76  ID_PLCOPENEDITORFBDTOOLBAR, ID_PLCOPENEDITORLDTOOLBAR,
    78 ] = [wx.NewId() for _init_ctrls in range(10)]
    77 ] = [wx.NewId() for _init_ctrls in range(10)]
    79 
    78 
    80 [wxID_PLCOPENEDITORFILEMENUITEMS0, wxID_PLCOPENEDITORFILEMENUITEMS1, 
    79 [ID_PLCOPENEDITORFILEMENUITEMS0, ID_PLCOPENEDITORFILEMENUITEMS1, 
    81  wxID_PLCOPENEDITORFILEMENUITEMS2, wxID_PLCOPENEDITORFILEMENUITEMS3, 
    80  ID_PLCOPENEDITORFILEMENUITEMS2, ID_PLCOPENEDITORFILEMENUITEMS3, 
    82  wxID_PLCOPENEDITORFILEMENUITEMS5, wxID_PLCOPENEDITORFILEMENUITEMS6, 
    81  ID_PLCOPENEDITORFILEMENUITEMS5, ID_PLCOPENEDITORFILEMENUITEMS6, 
    83  wxID_PLCOPENEDITORFILEMENUITEMS7, wxID_PLCOPENEDITORFILEMENUITEMS9, 
    82  ID_PLCOPENEDITORFILEMENUITEMS7, ID_PLCOPENEDITORFILEMENUITEMS9, 
    84  wxID_PLCOPENEDITORFILEMENUITEMS11,
    83  ID_PLCOPENEDITORFILEMENUITEMS11,
    85 ] = [wx.NewId() for _init_coll_FileMenu_Items in range(9)]
    84 ] = [wx.NewId() for _init_coll_FileMenu_Items in range(9)]
    86 
    85 
    87 [wxID_PLCOPENEDITORHELPMENUITEMS0, wxID_PLCOPENEDITORHELPMENUITEMS1, 
    86 [ID_PLCOPENEDITORHELPMENUITEMS0, ID_PLCOPENEDITORHELPMENUITEMS1, 
    88  wxID_PLCOPENEDITORHELPMENUITEMS2, wxID_PLCOPENEDITORHELPMENUITEMS3, 
    87  ID_PLCOPENEDITORHELPMENUITEMS2, ID_PLCOPENEDITORHELPMENUITEMS3, 
    89 ] = [wx.NewId() for _init_coll_HelpMenu_Items in range(4)]
    88 ] = [wx.NewId() for _init_coll_HelpMenu_Items in range(4)]
    90 
    89 
    91 [wxID_PLCOPENEDITORSFCMENUITEMS0, wxID_PLCOPENEDITORSFCMENUITEMS1, 
    90 [ID_PLCOPENEDITORSFCMENUITEMS0, ID_PLCOPENEDITORSFCMENUITEMS1, 
    92  wxID_PLCOPENEDITORSFCMENUITEMS2, wxID_PLCOPENEDITORSFCMENUITEMS3,
    91  ID_PLCOPENEDITORSFCMENUITEMS2, ID_PLCOPENEDITORSFCMENUITEMS3,
    93 ] = [wx.NewId() for _init_coll_HelpMenu_Items in range(4)]
    92 ] = [wx.NewId() for _init_coll_HelpMenu_Items in range(4)]
    94 
    93 
    95 [wxID_PLCOPENEDITORCONFIGMENUITEMS0, wxID_PLCOPENEDITORCONFIGMENUITEMS1, 
    94 [ID_PLCOPENEDITORCONFIGMENUITEMS0, ID_PLCOPENEDITORCONFIGMENUITEMS1, 
    96 ] = [wx.NewId() for _init_coll_HelpMenu_Items in range(2)]
    95 ] = [wx.NewId() for _init_coll_HelpMenu_Items in range(2)]
    97 
    96 
    98 [wxID_PLCOPENEDITOREDITMENUITEMS0, wxID_PLCOPENEDITOREDITMENUITEMS1, 
    97 [ID_PLCOPENEDITOREDITMENUITEMS0, ID_PLCOPENEDITOREDITMENUITEMS1, 
    99  wxID_PLCOPENEDITOREDITMENUITEMS11, wxID_PLCOPENEDITOREDITMENUITEMS12, 
    98  ID_PLCOPENEDITOREDITMENUITEMS11, ID_PLCOPENEDITOREDITMENUITEMS12, 
   100  wxID_PLCOPENEDITOREDITMENUITEMS2, wxID_PLCOPENEDITOREDITMENUITEMS4, 
    99  ID_PLCOPENEDITOREDITMENUITEMS2, ID_PLCOPENEDITOREDITMENUITEMS4, 
   101  wxID_PLCOPENEDITOREDITMENUITEMS5, wxID_PLCOPENEDITOREDITMENUITEMS6, 
   100  ID_PLCOPENEDITOREDITMENUITEMS5, ID_PLCOPENEDITOREDITMENUITEMS6, 
   102  wxID_PLCOPENEDITOREDITMENUITEMS8, wxID_PLCOPENEDITOREDITMENUITEMS9, 
   101  ID_PLCOPENEDITOREDITMENUITEMS8, ID_PLCOPENEDITOREDITMENUITEMS9, 
   103 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(10)]
   102 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(10)]
   104 
   103 
   105 [wxID_PLCOPENEDITORSFCMENUITEMS0, wxID_PLCOPENEDITORSFCMENUITEMS1, 
   104 [ID_PLCOPENEDITORSFCMENUITEMS0, ID_PLCOPENEDITORSFCMENUITEMS1, 
   106  wxID_PLCOPENEDITORSFCMENUITEMS2, wxID_PLCOPENEDITORSFCMENUITEMS3, 
   105  ID_PLCOPENEDITORSFCMENUITEMS2, ID_PLCOPENEDITORSFCMENUITEMS3, 
   107 ] = [wx.NewId() for _init_coll_SFCMenu_Items in range(4)]
   106 ] = [wx.NewId() for _init_coll_SFCMenu_Items in range(4)]
   108 
   107 
   109 [wxID_PLCOPENEDITORCONFIGMENUITEMS0, wxID_PLCOPENEDITORCONFIGMENUITEMS1, 
   108 [ID_PLCOPENEDITORCONFIGMENUITEMS0, ID_PLCOPENEDITORCONFIGMENUITEMS1, 
   110 ] = [wx.NewId() for _init_coll_ConfigMenu_Items in range(2)]
   109 ] = [wx.NewId() for _init_coll_ConfigMenu_Items in range(2)]
   111 
   110 
   112 
   111 
   113 #-------------------------------------------------------------------------------
   112 #-------------------------------------------------------------------------------
   114 #                            ToolBars definitions
   113 #                            ToolBars definitions
   115 #-------------------------------------------------------------------------------
   114 #-------------------------------------------------------------------------------
   116 
   115 
   117 
   116 
   118 [wxID_PLCOPENEDITORTOOLBARSELECTION, wxID_PLCOPENEDITORTOOLBARCOMMENT,
   117 [ID_PLCOPENEDITORTOOLBARSELECTION, ID_PLCOPENEDITORTOOLBARCOMMENT,
   119  wxID_PLCOPENEDITORTOOLBARVARIABLE, wxID_PLCOPENEDITORTOOLBARBLOCK,
   118  ID_PLCOPENEDITORTOOLBARVARIABLE, ID_PLCOPENEDITORTOOLBARBLOCK,
   120  wxID_PLCOPENEDITORTOOLBARCONNECTION, wxID_PLCOPENEDITORTOOLBARWIRE,
   119  ID_PLCOPENEDITORTOOLBARCONNECTION, ID_PLCOPENEDITORTOOLBARWIRE,
   121  wxID_PLCOPENEDITORTOOLBARPOWERRAIL, wxID_PLCOPENEDITORTOOLBARRUNG,
   120  ID_PLCOPENEDITORTOOLBARPOWERRAIL, ID_PLCOPENEDITORTOOLBARRUNG,
   122  wxID_PLCOPENEDITORTOOLBARCOIL, wxID_PLCOPENEDITORTOOLBARCONTACT,
   121  ID_PLCOPENEDITORTOOLBARCOIL, ID_PLCOPENEDITORTOOLBARCONTACT,
   123  wxID_PLCOPENEDITORTOOLBARBRANCH, wxID_PLCOPENEDITORTOOLBARINITIALSTEP,
   122  ID_PLCOPENEDITORTOOLBARBRANCH, ID_PLCOPENEDITORTOOLBARINITIALSTEP,
   124  wxID_PLCOPENEDITORTOOLBARSTEP, wxID_PLCOPENEDITORTOOLBARTRANSITION,
   123  ID_PLCOPENEDITORTOOLBARSTEP, ID_PLCOPENEDITORTOOLBARTRANSITION,
   125  wxID_PLCOPENEDITORTOOLBARACTIONBLOCK, wxID_PLCOPENEDITORTOOLBARDIVERGENCE,
   124  ID_PLCOPENEDITORTOOLBARACTIONBLOCK, ID_PLCOPENEDITORTOOLBARDIVERGENCE,
   126  wxID_PLCOPENEDITORTOOLBARJUMP,
   125  ID_PLCOPENEDITORTOOLBARJUMP,
   127 ] = [wx.NewId() for _init_coll_DefaultToolBar_Items in range(17)]
   126 ] = [wx.NewId() for _init_coll_DefaultToolBar_Items in range(17)]
   128 
   127 
   129 ToolBarItems = {
   128 ToolBarItems = {
   130     "FBD" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", "Images/comment.png", "Create a new comment"),
   129     "FBD" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", "Images/comment.png", "Create a new comment"),
   131              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", "Images/variable.png", "Create a new variable"),
   130              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", "Images/variable.png", "Create a new variable"),
   132              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", "Images/block.png", "Create a new block"),
   131              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", "Images/block.png", "Create a new block"),
   133              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", "Images/connection.png", "Create a new connection"),
   132              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", "Images/connection.png", "Create a new connection"),
   134              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARWIRE, "OnWireTool", "Images/wire.png", "Create a new wire")],
   133              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARWIRE, "OnWireTool", "Images/wire.png", "Create a new wire")],
   135     "LD" :  [(True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", "Images/comment.png", "Create a new comment"),
   134     "LD" :  [(True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", "Images/comment.png", "Create a new comment"),
   136              (True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARPOWERRAIL, "OnPowerRailTool", "Images/powerrail.png", "Create a new power rail"),
   135              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARPOWERRAIL, "OnPowerRailTool", "Images/powerrail.png", "Create a new power rail"),
   137              (False, DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARRUNG, "OnRungTool", "Images/rung.png", "Create a new rung"),
   136              (False, DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARRUNG, "OnRungTool", "Images/rung.png", "Create a new rung"),
   138              (True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARCOIL, "OnCoilTool", "Images/coil.png", "Create a new coil"),
   137              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCOIL, "OnCoilTool", "Images/coil.png", "Create a new coil"),
   139              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARCONTACT, "OnContactTool", "Images/contact.png", "Create a new contact"),
   138              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCONTACT, "OnContactTool", "Images/contact.png", "Create a new contact"),
   140              (False, DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARBRANCH, "OnBranchTool", "Images/branch.png", "Create a new branch"),
   139              (False, DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARBRANCH, "OnBranchTool", "Images/branch.png", "Create a new branch"),
   141              (True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", "Images/variable.png", "Create a new variable"),
   140              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", "Images/variable.png", "Create a new variable"),
   142              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", "Images/block.png", "Create a new block"),
   141              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", "Images/block.png", "Create a new block"),
   143              (True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", "Images/connection.png", "Create a new connection"),
   142              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", "Images/connection.png", "Create a new connection"),
   144              (True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARWIRE, "OnWireTool", "Images/wire.png", "Create a new wire")],
   143              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARWIRE, "OnWireTool", "Images/wire.png", "Create a new wire")],
   145     "SFC" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", "Images/comment.png", "Create a new comment"),
   144     "SFC" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", "Images/comment.png", "Create a new comment"),
   146              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARINITIALSTEP, "OnInitialStepTool", "Images/initial_step.png", "Create a new initial step"),
   145              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARINITIALSTEP, "OnInitialStepTool", "Images/initial_step.png", "Create a new initial step"),
   147              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARSTEP, "OnStepTool", "Images/step.png", "Create a new step"),
   146              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARSTEP, "OnStepTool", "Images/step.png", "Create a new step"),
   148              (True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARTRANSITION, "OnTransitionTool", "Images/transition.png", "Create a new transition"),
   147              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARTRANSITION, "OnTransitionTool", "Images/transition.png", "Create a new transition"),
   149              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARACTIONBLOCK, "OnActionBlockTool", "Images/action.png", "Create a new action block"),
   148              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARACTIONBLOCK, "OnActionBlockTool", "Images/action.png", "Create a new action block"),
   150              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARDIVERGENCE, "OnDivergenceTool", "Images/divergence.png", "Create a new divergence"),
   149              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARDIVERGENCE, "OnDivergenceTool", "Images/divergence.png", "Create a new divergence"),
   151              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARJUMP, "OnJumpTool", "Images/jump.png", "Create a new jump"),
   150              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARJUMP, "OnJumpTool", "Images/jump.png", "Create a new jump"),
   152              (True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", "Images/variable.png", "Create a new variable"),
   151              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", "Images/variable.png", "Create a new variable"),
   153              (True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", "Images/block.png", "Create a new block"),
   152              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", "Images/block.png", "Create a new block"),
   154              (True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", "Images/connection.png", "Create a new connection"),
   153              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", "Images/connection.png", "Create a new connection"),
   155              (True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARPOWERRAIL, "OnPowerRailTool", "Images/powerrail.png", "Create a new power rail"),
   154              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARPOWERRAIL, "OnPowerRailTool", "Images/powerrail.png", "Create a new power rail"),
   156              (True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARCONTACT, "OnContactTool", "Images/contact.png", "Create a new contact"),
   155              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCONTACT, "OnContactTool", "Images/contact.png", "Create a new contact"),
   157              (True, FREEDRAWING_MODE, wxID_PLCOPENEDITORTOOLBARWIRE, "OnWireTool", "Images/wire.png", "Create a new wire")],
   156              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARWIRE, "OnWireTool", "Images/wire.png", "Create a new wire")],
   158     "ST" : [],
   157     "ST" : [],
   159     "IL" : []
   158     "IL" : []
   160 }
   159 }
   161 
   160 
   162 class PLCOpenEditor(wx.Frame):
   161 class PLCOpenEditor(wx.Frame):
   163     _custom_classes = {'wx.SashWindow' : ['Viewer']}
   162     _custom_classes = {'wx.SashWindow' : ['Viewer']}
   164     
   163     
   165     def _init_coll_EditMenu_Items(self, parent):
   164     def _init_coll_EditMenu_Items(self, parent):
   166         # generated method, don't edit
   165         parent.Append(help='', id=ID_PLCOPENEDITOREDITMENUITEMS0,
   167 
       
   168         parent.Append(help='', id=wxID_PLCOPENEDITOREDITMENUITEMS0,
       
   169               kind=wx.ITEM_NORMAL, text=u'Refresh\tCTRL+R')
   166               kind=wx.ITEM_NORMAL, text=u'Refresh\tCTRL+R')
   170         parent.Append(help='', id=wxID_PLCOPENEDITOREDITMENUITEMS1,
   167         parent.Append(help='', id=ID_PLCOPENEDITOREDITMENUITEMS1,
   171               kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z')
   168               kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z')
   172         parent.Append(help='', id=wxID_PLCOPENEDITOREDITMENUITEMS2,
   169         parent.Append(help='', id=ID_PLCOPENEDITOREDITMENUITEMS2,
   173               kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y')
   170               kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y')
   174         parent.AppendSeparator()
   171         parent.AppendSeparator()
   175         parent.Append(help='', id=wxID_PLCOPENEDITOREDITMENUITEMS4,
   172         parent.Append(help='', id=ID_PLCOPENEDITOREDITMENUITEMS4,
   176               kind=wx.ITEM_NORMAL, text=u'Cut\tCTRL+X')
   173               kind=wx.ITEM_NORMAL, text=u'Cut\tCTRL+X')
   177         parent.Append(help='', id=wxID_PLCOPENEDITOREDITMENUITEMS5,
   174         parent.Append(help='', id=ID_PLCOPENEDITOREDITMENUITEMS5,
   178               kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C')
   175               kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C')
   179         parent.Append(help='', id=wxID_PLCOPENEDITOREDITMENUITEMS6,
   176         parent.Append(help='', id=ID_PLCOPENEDITOREDITMENUITEMS6,
   180               kind=wx.ITEM_NORMAL, text=u'Paste\tCTRL+V')
   177               kind=wx.ITEM_NORMAL, text=u'Paste\tCTRL+V')
   181         parent.AppendSeparator()
   178         parent.AppendSeparator()
   182         parent.Append(help='', id=wxID_PLCOPENEDITOREDITMENUITEMS8,
   179         parent.Append(help='', id=ID_PLCOPENEDITOREDITMENUITEMS8,
   183               kind=wx.ITEM_NORMAL, text=u'Add POU')
   180               kind=wx.ITEM_NORMAL, text=u'Add POU')
   184         parent.Append(help='', id=wxID_PLCOPENEDITOREDITMENUITEMS9,
   181         parent.Append(help='', id=ID_PLCOPENEDITOREDITMENUITEMS9,
   185               kind=wx.ITEM_NORMAL, text=u'Remove POU')
   182               kind=wx.ITEM_NORMAL, text=u'Remove POU')
   186         parent.AppendSeparator()
   183         parent.AppendSeparator()
   187         parent.Append(help='', id=wxID_PLCOPENEDITOREDITMENUITEMS11,
   184         parent.Append(help='', id=ID_PLCOPENEDITOREDITMENUITEMS11,
   188               kind=wx.ITEM_NORMAL, text=u'Add Configuration')
   185               kind=wx.ITEM_NORMAL, text=u'Add Configuration')
   189         parent.Append(help='', id=wxID_PLCOPENEDITOREDITMENUITEMS12,
   186         parent.Append(help='', id=ID_PLCOPENEDITOREDITMENUITEMS12,
   190               kind=wx.ITEM_NORMAL, text=u'Remove Configuration')
   187               kind=wx.ITEM_NORMAL, text=u'Remove Configuration')
   191         self.Bind(wx.EVT_MENU, self.OnRefreshMenu,
   188         self.Bind(wx.EVT_MENU, self.OnRefreshMenu,
   192               id=wxID_PLCOPENEDITOREDITMENUITEMS0)
   189               id=ID_PLCOPENEDITOREDITMENUITEMS0)
   193         self.Bind(wx.EVT_MENU, self.OnUndoMenu,
   190         self.Bind(wx.EVT_MENU, self.OnUndoMenu,
   194               id=wxID_PLCOPENEDITOREDITMENUITEMS1)
   191               id=ID_PLCOPENEDITOREDITMENUITEMS1)
   195         self.Bind(wx.EVT_MENU, self.OnRedoMenu,
   192         self.Bind(wx.EVT_MENU, self.OnRedoMenu,
   196               id=wxID_PLCOPENEDITOREDITMENUITEMS2)
   193               id=ID_PLCOPENEDITOREDITMENUITEMS2)
   197         self.Bind(wx.EVT_MENU, self.OnCutMenu,
   194         self.Bind(wx.EVT_MENU, self.OnCutMenu,
   198               id=wxID_PLCOPENEDITOREDITMENUITEMS4)
   195               id=ID_PLCOPENEDITOREDITMENUITEMS4)
   199         self.Bind(wx.EVT_MENU, self.OnCopyMenu,
   196         self.Bind(wx.EVT_MENU, self.OnCopyMenu,
   200               id=wxID_PLCOPENEDITOREDITMENUITEMS5)
   197               id=ID_PLCOPENEDITOREDITMENUITEMS5)
   201         self.Bind(wx.EVT_MENU, self.OnPasteMenu,
   198         self.Bind(wx.EVT_MENU, self.OnPasteMenu,
   202               id=wxID_PLCOPENEDITOREDITMENUITEMS6)
   199               id=ID_PLCOPENEDITOREDITMENUITEMS6)
   203         self.Bind(wx.EVT_MENU, self.OnAddPouMenu,
   200         self.Bind(wx.EVT_MENU, self.OnAddPouMenu,
   204               id=wxID_PLCOPENEDITOREDITMENUITEMS8)
   201               id=ID_PLCOPENEDITOREDITMENUITEMS8)
   205         self.Bind(wx.EVT_MENU, self.OnRemovePouMenu,
   202         self.Bind(wx.EVT_MENU, self.OnRemovePouMenu,
   206               id=wxID_PLCOPENEDITOREDITMENUITEMS9)
   203               id=ID_PLCOPENEDITOREDITMENUITEMS9)
   207         self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
   204         self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
   208               id=wxID_PLCOPENEDITOREDITMENUITEMS11)
   205               id=ID_PLCOPENEDITOREDITMENUITEMS11)
   209         self.Bind(wx.EVT_MENU, self.OnRemoveConfigurationMenu,
   206         self.Bind(wx.EVT_MENU, self.OnRemoveConfigurationMenu,
   210               id=wxID_PLCOPENEDITOREDITMENUITEMS12)
   207               id=ID_PLCOPENEDITOREDITMENUITEMS12)
   211 
   208 
   212     def _init_coll_menuBar1_Menus(self, parent):
   209     def _init_coll_menuBar1_Menus(self, parent):
   213         # generated method, don't edit
       
   214         
       
   215         if self.ModeSolo:
   210         if self.ModeSolo:
   216             parent.Append(menu=self.FileMenu, title=u'File')
   211             parent.Append(menu=self.FileMenu, title=u'File')
   217         parent.Append(menu=self.EditMenu, title=u'Edit')
   212         parent.Append(menu=self.EditMenu, title=u'Edit')
   218         parent.Append(menu=self.HelpMenu, title=u'Help')
   213         parent.Append(menu=self.HelpMenu, title=u'Help')
   219 
   214 
   220     def _init_coll_ConfigMenu_Items(self, parent):
   215     def _init_coll_ConfigMenu_Items(self, parent):
   221         # generated method, don't edit
   216         parent.Append(help='', id=ID_PLCOPENEDITORCONFIGMENUITEMS0,
   222 
       
   223         parent.Append(help='', id=wxID_PLCOPENEDITORCONFIGMENUITEMS0,
       
   224               kind=wx.ITEM_NORMAL, text=u'Add Resource')
   217               kind=wx.ITEM_NORMAL, text=u'Add Resource')
   225         parent.Append(help='', id=wxID_PLCOPENEDITORCONFIGMENUITEMS1,
   218         parent.Append(help='', id=ID_PLCOPENEDITORCONFIGMENUITEMS1,
   226               kind=wx.ITEM_NORMAL, text=u'Remove Resource')
   219               kind=wx.ITEM_NORMAL, text=u'Remove Resource')
   227         self.Bind(wx.EVT_MENU, self.OnAddResourceMenu,
   220         self.Bind(wx.EVT_MENU, self.OnAddResourceMenu,
   228               id=wxID_PLCOPENEDITORCONFIGMENUITEMS0)
   221               id=ID_PLCOPENEDITORCONFIGMENUITEMS0)
   229         self.Bind(wx.EVT_MENU, self.OnRemoveResourceMenu,
   222         self.Bind(wx.EVT_MENU, self.OnRemoveResourceMenu,
   230               id=wxID_PLCOPENEDITORCONFIGMENUITEMS1)
   223               id=ID_PLCOPENEDITORCONFIGMENUITEMS1)
   231 
   224 
   232     def _init_coll_HelpMenu_Items(self, parent):
   225     def _init_coll_HelpMenu_Items(self, parent):
   233         # generated method, don't edit
   226         parent.Append(help='', id=ID_PLCOPENEDITORHELPMENUITEMS0,
   234 
       
   235         parent.Append(help='', id=wxID_PLCOPENEDITORHELPMENUITEMS0,
       
   236               kind=wx.ITEM_NORMAL, text=u'PLCOpenEditor\tF1')
   227               kind=wx.ITEM_NORMAL, text=u'PLCOpenEditor\tF1')
   237         parent.Append(help='', id=wxID_PLCOPENEDITORHELPMENUITEMS1,
   228         parent.Append(help='', id=ID_PLCOPENEDITORHELPMENUITEMS1,
   238               kind=wx.ITEM_NORMAL, text=u'PLCOpen\tF2')
   229               kind=wx.ITEM_NORMAL, text=u'PLCOpen\tF2')
   239         parent.Append(help='', id=wxID_PLCOPENEDITORHELPMENUITEMS2,
   230         parent.Append(help='', id=ID_PLCOPENEDITORHELPMENUITEMS2,
   240               kind=wx.ITEM_NORMAL, text=u'IEC 61131-3\tF3')
   231               kind=wx.ITEM_NORMAL, text=u'IEC 61131-3\tF3')
   241         if self.ModeSolo:
   232         if self.ModeSolo:
   242             parent.Append(help='', id=wxID_PLCOPENEDITORHELPMENUITEMS3,
   233             parent.Append(help='', id=ID_PLCOPENEDITORHELPMENUITEMS3,
   243                   kind=wx.ITEM_NORMAL, text=u'About')
   234                   kind=wx.ITEM_NORMAL, text=u'About')
   244         self.Bind(wx.EVT_MENU, self.OnPLCOpenMenu,
   235         self.Bind(wx.EVT_MENU, self.OnPLCOpenMenu,
   245               id=wxID_PLCOPENEDITORHELPMENUITEMS1)
   236               id=ID_PLCOPENEDITORHELPMENUITEMS1)
   246 
   237 
   247     def _init_coll_FileMenu_Items(self, parent):
   238     def _init_coll_FileMenu_Items(self, parent):
   248         # generated method, don't edit
   239         parent.Append(help='', id=ID_PLCOPENEDITORFILEMENUITEMS0,
   249 
       
   250         parent.Append(help='', id=wxID_PLCOPENEDITORFILEMENUITEMS0,
       
   251               kind=wx.ITEM_NORMAL, text=u'New\tCTRL+N')
   240               kind=wx.ITEM_NORMAL, text=u'New\tCTRL+N')
   252         parent.Append(help='', id=wxID_PLCOPENEDITORFILEMENUITEMS1,
   241         parent.Append(help='', id=ID_PLCOPENEDITORFILEMENUITEMS1,
   253               kind=wx.ITEM_NORMAL, text=u'Open\tCTRL+O')
   242               kind=wx.ITEM_NORMAL, text=u'Open\tCTRL+O')
   254         parent.Append(help='', id=wxID_PLCOPENEDITORFILEMENUITEMS2,
   243         parent.Append(help='', id=ID_PLCOPENEDITORFILEMENUITEMS2,
   255               kind=wx.ITEM_NORMAL, text=u'Close Tab\tCTRL+W')
   244               kind=wx.ITEM_NORMAL, text=u'Close Tab\tCTRL+W')
   256         parent.Append(help='', id=wxID_PLCOPENEDITORFILEMENUITEMS3,
   245         parent.Append(help='', id=ID_PLCOPENEDITORFILEMENUITEMS3,
   257               kind=wx.ITEM_NORMAL, text=u'Close Project')
   246               kind=wx.ITEM_NORMAL, text=u'Close Project')
   258         parent.AppendSeparator()
   247         parent.AppendSeparator()
   259         parent.Append(help='', id=wxID_PLCOPENEDITORFILEMENUITEMS5,
   248         parent.Append(help='', id=ID_PLCOPENEDITORFILEMENUITEMS5,
   260               kind=wx.ITEM_NORMAL, text=u'Save\tCTRL+S')
   249               kind=wx.ITEM_NORMAL, text=u'Save\tCTRL+S')
   261         parent.Append(help='', id=wxID_PLCOPENEDITORFILEMENUITEMS6,
   250         parent.Append(help='', id=ID_PLCOPENEDITORFILEMENUITEMS6,
   262               kind=wx.ITEM_NORMAL, text=u'Save As...\tCTRL+SHIFT+S')
   251               kind=wx.ITEM_NORMAL, text=u'Save As...\tCTRL+SHIFT+S')
   263         parent.Append(help='', id=wxID_PLCOPENEDITORFILEMENUITEMS7,
   252         parent.Append(help='', id=ID_PLCOPENEDITORFILEMENUITEMS7,
   264               kind=wx.ITEM_NORMAL, text=u'Generate Program\tCTRL+G')
   253               kind=wx.ITEM_NORMAL, text=u'Generate Program\tCTRL+G')
   265         parent.AppendSeparator()
   254         parent.AppendSeparator()
   266         parent.Append(help='', id=wxID_PLCOPENEDITORFILEMENUITEMS9,
   255         parent.Append(help='', id=ID_PLCOPENEDITORFILEMENUITEMS9,
   267               kind=wx.ITEM_NORMAL, text=u'Properties')
   256               kind=wx.ITEM_NORMAL, text=u'Properties')
   268         parent.AppendSeparator()
   257         parent.AppendSeparator()
   269         parent.Append(help='', id=wxID_PLCOPENEDITORFILEMENUITEMS11,
   258         parent.Append(help='', id=ID_PLCOPENEDITORFILEMENUITEMS11,
   270               kind=wx.ITEM_NORMAL, text=u'Quit\tCTRL+Q')
   259               kind=wx.ITEM_NORMAL, text=u'Quit\tCTRL+Q')
   271         self.Bind(wx.EVT_MENU, self.OnNewProjectMenu,
   260         self.Bind(wx.EVT_MENU, self.OnNewProjectMenu,
   272               id=wxID_PLCOPENEDITORFILEMENUITEMS0)
   261               id=ID_PLCOPENEDITORFILEMENUITEMS0)
   273         self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu,
   262         self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu,
   274               id=wxID_PLCOPENEDITORFILEMENUITEMS1)
   263               id=ID_PLCOPENEDITORFILEMENUITEMS1)
   275         self.Bind(wx.EVT_MENU, self.OnCloseTabMenu,
   264         self.Bind(wx.EVT_MENU, self.OnCloseTabMenu,
   276               id=wxID_PLCOPENEDITORFILEMENUITEMS2)
   265               id=ID_PLCOPENEDITORFILEMENUITEMS2)
   277         self.Bind(wx.EVT_MENU, self.OnCloseProjectMenu,
   266         self.Bind(wx.EVT_MENU, self.OnCloseProjectMenu,
   278               id=wxID_PLCOPENEDITORFILEMENUITEMS3)
   267               id=ID_PLCOPENEDITORFILEMENUITEMS3)
   279         self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu,
   268         self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu,
   280               id=wxID_PLCOPENEDITORFILEMENUITEMS5)
   269               id=ID_PLCOPENEDITORFILEMENUITEMS5)
   281         self.Bind(wx.EVT_MENU, self.OnSaveProjectAsMenu,
   270         self.Bind(wx.EVT_MENU, self.OnSaveProjectAsMenu,
   282               id=wxID_PLCOPENEDITORFILEMENUITEMS6)
   271               id=ID_PLCOPENEDITORFILEMENUITEMS6)
   283         self.Bind(wx.EVT_MENU, self.OnGenerateProgramMenu,
   272         self.Bind(wx.EVT_MENU, self.OnGenerateProgramMenu,
   284               id=wxID_PLCOPENEDITORFILEMENUITEMS7)
   273               id=ID_PLCOPENEDITORFILEMENUITEMS7)
   285         self.Bind(wx.EVT_MENU, self.OnPropertiesMenu,
   274         self.Bind(wx.EVT_MENU, self.OnPropertiesMenu,
   286               id=wxID_PLCOPENEDITORFILEMENUITEMS9)
   275               id=ID_PLCOPENEDITORFILEMENUITEMS9)
   287         self.Bind(wx.EVT_MENU, self.OnQuitMenu,
   276         self.Bind(wx.EVT_MENU, self.OnQuitMenu,
   288               id=wxID_PLCOPENEDITORFILEMENUITEMS11)
   277               id=ID_PLCOPENEDITORFILEMENUITEMS11)
   289 
   278 
   290     def _init_coll_SFCMenu_Items(self, parent):
   279     def _init_coll_SFCMenu_Items(self, parent):
   291         # generated method, don't edit
   280         parent.Append(help='', id=ID_PLCOPENEDITORSFCMENUITEMS0,
   292 
       
   293         parent.Append(help='', id=wxID_PLCOPENEDITORSFCMENUITEMS0,
       
   294               kind=wx.ITEM_NORMAL, text=u'Add Transition')
   281               kind=wx.ITEM_NORMAL, text=u'Add Transition')
   295         parent.Append(help='', id=wxID_PLCOPENEDITORSFCMENUITEMS1,
   282         parent.Append(help='', id=ID_PLCOPENEDITORSFCMENUITEMS1,
   296               kind=wx.ITEM_NORMAL, text=u'Add Action')
   283               kind=wx.ITEM_NORMAL, text=u'Add Action')
   297         parent.Append(help='', id=wxID_PLCOPENEDITORSFCMENUITEMS2,
   284         parent.Append(help='', id=ID_PLCOPENEDITORSFCMENUITEMS2,
   298               kind=wx.ITEM_NORMAL, text=u'Remove Transition')
   285               kind=wx.ITEM_NORMAL, text=u'Remove Transition')
   299         parent.Append(help='', id=wxID_PLCOPENEDITORSFCMENUITEMS3,
   286         parent.Append(help='', id=ID_PLCOPENEDITORSFCMENUITEMS3,
   300               kind=wx.ITEM_NORMAL, text=u'Remove Action')
   287               kind=wx.ITEM_NORMAL, text=u'Remove Action')
   301         self.Bind(wx.EVT_MENU, self.OnAddPouTransitionMenu,
   288         self.Bind(wx.EVT_MENU, self.OnAddPouTransitionMenu,
   302               id=wxID_PLCOPENEDITORSFCMENUITEMS0)
   289               id=ID_PLCOPENEDITORSFCMENUITEMS0)
   303         self.Bind(wx.EVT_MENU, self.OnAddPouActionMenu,
   290         self.Bind(wx.EVT_MENU, self.OnAddPouActionMenu,
   304               id=wxID_PLCOPENEDITORSFCMENUITEMS1)
   291               id=ID_PLCOPENEDITORSFCMENUITEMS1)
   305         self.Bind(wx.EVT_MENU, self.OnRemovePouTransitionMenu,
   292         self.Bind(wx.EVT_MENU, self.OnRemovePouTransitionMenu,
   306               id=wxID_PLCOPENEDITORSFCMENUITEMS2)
   293               id=ID_PLCOPENEDITORSFCMENUITEMS2)
   307         self.Bind(wx.EVT_MENU, self.OnRemovePouActionMenu,
   294         self.Bind(wx.EVT_MENU, self.OnRemovePouActionMenu,
   308               id=wxID_PLCOPENEDITORSFCMENUITEMS3)
   295               id=ID_PLCOPENEDITORSFCMENUITEMS3)
   309 
   296 
   310     def _init_utils(self):
   297     def _init_utils(self):
   311         # generated method, don't edit
       
   312         self.menuBar1 = wx.MenuBar()
   298         self.menuBar1 = wx.MenuBar()
   313 
   299 
   314         if self.ModeSolo:
   300         if self.ModeSolo:
   315             self.FileMenu = wx.Menu(title=u'')
   301             self.FileMenu = wx.Menu(title=u'')
   316         else:
   302         else:
   331         self._init_coll_HelpMenu_Items(self.HelpMenu)
   317         self._init_coll_HelpMenu_Items(self.HelpMenu)
   332         self._init_coll_SFCMenu_Items(self.SFCMenu)
   318         self._init_coll_SFCMenu_Items(self.SFCMenu)
   333         self._init_coll_ConfigMenu_Items(self.ConfigMenu)
   319         self._init_coll_ConfigMenu_Items(self.ConfigMenu)
   334 
   320 
   335     def _init_coll_MainGridSizer_Items(self, parent):
   321     def _init_coll_MainGridSizer_Items(self, parent):
   336         # generated method, don't edit
   322         parent.AddWindow(self.splitterWindow1, 0, border=0, flag=wx.GROW)
   337 
       
   338         parent.AddWindow(self.splitterWindow1, 0, border=0, flag=wxGROW)
       
   339 
   323 
   340     def _init_coll_EditorGridSizer_Items(self, parent):
   324     def _init_coll_EditorGridSizer_Items(self, parent):
   341         # generated method, don't edit
   325         parent.AddWindow(self.ToolBar, 0, border=0, flag=wx.GROW)
   342 
   326         parent.AddWindow(self.TabsOpened, 0, border=0, flag=wx.GROW)
   343         parent.AddWindow(self.ToolBar, 0, border=0, flag=wxGROW)
       
   344         parent.AddWindow(self.TabsOpened, 0, border=0, flag=wxGROW)
       
   345 
   327 
   346     def _init_coll_MainGridSizer_Growables(self, parent):
   328     def _init_coll_MainGridSizer_Growables(self, parent):
   347         # generated method, don't edit
       
   348 
       
   349         parent.AddGrowableCol(0)
   329         parent.AddGrowableCol(0)
   350         parent.AddGrowableRow(0)
   330         parent.AddGrowableRow(0)
   351 
   331 
   352     def _init_coll_EditorGridSizer_Growables(self, parent):
   332     def _init_coll_EditorGridSizer_Growables(self, parent):
   353         # generated method, don't edit
       
   354 
       
   355         parent.AddGrowableCol(0)
   333         parent.AddGrowableCol(0)
   356         parent.AddGrowableRow(1)
   334         parent.AddGrowableRow(1)
   357 
   335 
   358     def _init_sizers(self):
   336     def _init_sizers(self):
   359         # generated method, don't edit
       
   360         self.MainGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=1, vgap=0)
   337         self.MainGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=1, vgap=0)
   361 
       
   362         self.EditorGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
   338         self.EditorGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
   363 
   339 
   364         self._init_coll_MainGridSizer_Growables(self.MainGridSizer)
   340         self._init_coll_MainGridSizer_Growables(self.MainGridSizer)
   365         self._init_coll_MainGridSizer_Items(self.MainGridSizer)
   341         self._init_coll_MainGridSizer_Items(self.MainGridSizer)
   366         self._init_coll_EditorGridSizer_Growables(self.EditorGridSizer)
   342         self._init_coll_EditorGridSizer_Growables(self.EditorGridSizer)
   368         
   344         
   369         self.SetSizer(self.MainGridSizer)
   345         self.SetSizer(self.MainGridSizer)
   370         self.EditorPanel.SetSizer(self.EditorGridSizer)
   346         self.EditorPanel.SetSizer(self.EditorGridSizer)
   371 
   347 
   372     def _init_ctrls(self, prnt):
   348     def _init_ctrls(self, prnt):
   373         # generated method, don't edit
   349         wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name=u'PLCOpenEditor',
   374         wx.Frame.__init__(self, id=wxID_PLCOPENEDITOR, name=u'PLCOpenEditor',
       
   375               parent=prnt, pos=wx.Point(235, 287), size=wx.Size(1000, 600),
   350               parent=prnt, pos=wx.Point(235, 287), size=wx.Size(1000, 600),
   376               style=wx.DEFAULT_FRAME_STYLE, title=u'PLCOpenEditor')
   351               style=wx.DEFAULT_FRAME_STYLE, title=u'PLCOpenEditor')
   377         self._init_utils()
   352         self._init_utils()
   378         self.SetClientSize(wx.Size(1000, 600))
   353         self.SetClientSize(wx.Size(1000, 600))
   379         self.SetMenuBar(self.menuBar1)
   354         self.SetMenuBar(self.menuBar1)
   380         self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=wxID_PLCOPENEDITOR)
   355         self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=ID_PLCOPENEDITOR)
   381         
   356         
   382         self.splitterWindow1 = wx.SplitterWindow(id=wxID_PLCOPENEDITORSPLITTERWINDOW1,
   357         self.splitterWindow1 = wx.SplitterWindow(id=ID_PLCOPENEDITORSPLITTERWINDOW1,
   383               name='splitterWindow1', parent=self, point=wx.Point(0, 0),
   358               name='splitterWindow1', parent=self, point=wx.Point(0, 0),
   384               size=wx.Size(-1, -1), style=wx.SP_3D)
   359               size=wx.Size(-1, -1), style=wx.SP_3D)
   385         self.splitterWindow1.SetNeedUpdating(True)
   360         self.splitterWindow1.SetNeedUpdating(True)
   386         self.splitterWindow1.SetMinimumPaneSize(1)
   361         self.splitterWindow1.SetMinimumPaneSize(1)
   387 
   362 
   388         self.EditorPanel = wx.Panel(id=wxID_PLCOPENEDITOREDITORPANEL, 
   363         self.EditorPanel = wx.Panel(id=ID_PLCOPENEDITOREDITORPANEL, 
   389               name='TabPanel', parent=self.splitterWindow1, pos=wx.Point(0, 0),
   364               name='TabPanel', parent=self.splitterWindow1, pos=wx.Point(0, 0),
   390               size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL)
   365               size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL)
   391         
   366         
   392         self.TabsOpened = wx.Notebook(id=wxID_PLCOPENEDITORTABSOPENED,
   367         self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
   393               name='TabsOpened', parent=self.EditorPanel, pos=wx.Point(0,
   368               name='TabsOpened', parent=self.EditorPanel, pos=wx.Point(0,
   394               0), size=wx.Size(-1, -1), style=0)
   369               0), size=wx.Size(-1, -1), style=0)
   395         self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
   370         self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
   396               self.OnPouSelectedChanged, id=wxID_PLCOPENEDITORTABSOPENED)
   371               self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED)
   397 
   372 
   398         self.ToolBar = wxToolBar(id=wxID_PLCOPENEDITORTOOLBAR, name='ToolBar',
   373         self.ToolBar = wx.ToolBar(id=ID_PLCOPENEDITORTOOLBAR, name='ToolBar',
   399               parent=self.EditorPanel, pos=wx.Point(0, 0), size=wx.Size(0, 40),
   374               parent=self.EditorPanel, pos=wx.Point(0, 0), size=wx.Size(0, 40),
   400               style=wxTB_HORIZONTAL | wxNO_BORDER)
   375               style=wx.TB_HORIZONTAL | wx.NO_BORDER)
   401         self.ToolBar.AddRadioTool(wxID_PLCOPENEDITORTOOLBARSELECTION, 
   376         self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, 
   402               wxBitmap(os.path.join(CWD, 'Images/select.png')), wxNullBitmap, "Select an object")
   377               wx.Bitmap(os.path.join(CWD, 'Images/select.png')), wx.NullBitmap, "Select an object")
   403         self.Bind(wx.EVT_TOOL, self.OnSelectionTool, 
   378         self.Bind(wx.EVT_TOOL, self.OnSelectionTool, 
   404               id=wxID_PLCOPENEDITORTOOLBARSELECTION)
   379               id=ID_PLCOPENEDITORTOOLBARSELECTION)
   405         
   380         
   406         self.ProjectTree = wx.TreeCtrl(id=wxID_PLCOPENEDITORPROJECTTREE,
   381         self.ProjectTree = wx.TreeCtrl(id=ID_PLCOPENEDITORPROJECTTREE,
   407               name='treeCtrl1', parent=self.splitterWindow1, pos=wx.Point(0, 0),
   382               name='treeCtrl1', parent=self.splitterWindow1, pos=wx.Point(0, 0),
   408               size=wx.Size(-1, -1),
   383               size=wx.Size(-1, -1),
   409               style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
   384               style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
   410         self.ProjectTree.Bind(wx.EVT_RIGHT_UP, self.OnProjectTreeRightUp)
   385         self.ProjectTree.Bind(wx.EVT_RIGHT_UP, self.OnProjectTreeRightUp)
   411         self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnProjectTreeBeginDrag,
   386         self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnProjectTreeBeginDrag,
   412               id=wxID_PLCOPENEDITORPROJECTTREE)
   387               id=ID_PLCOPENEDITORPROJECTTREE)
   413         self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnProjectTreeItemBeginEdit,
   388         self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnProjectTreeItemBeginEdit,
   414               id=wxID_PLCOPENEDITORPROJECTTREE)
   389               id=ID_PLCOPENEDITORPROJECTTREE)
   415         self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnProjectTreeItemEndEdit,
   390         self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnProjectTreeItemEndEdit,
   416               id=wxID_PLCOPENEDITORPROJECTTREE)
   391               id=ID_PLCOPENEDITORPROJECTTREE)
   417         self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated,
   392         self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated,
   418               id=wxID_PLCOPENEDITORPROJECTTREE)
   393               id=ID_PLCOPENEDITORPROJECTTREE)
   419         self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnProjectTreeItemSelected,
   394         self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnProjectTreeItemSelected,
   420               id=wxID_PLCOPENEDITORPROJECTTREE)
   395               id=ID_PLCOPENEDITORPROJECTTREE)
   421         self.splitterWindow1.SplitVertically(self.ProjectTree, self.EditorPanel,
   396         self.splitterWindow1.SplitVertically(self.ProjectTree, self.EditorPanel,
   422               200)
   397               200)
   423         
   398         
   424         self._init_sizers()
   399         self._init_sizers()
   425 
   400 
   426     def __init__(self, parent, controler = None):
   401     def __init__(self, parent, controler = None):
   427         self.ModeSolo = controler == None
   402         self.ModeSolo = controler == None
   428         self._init_ctrls(parent)
   403         self._init_ctrls(parent)
   429         
   404         
   430         self.TreeImageList = wxImageList(16, 16)
   405         self.TreeImageList = wx.ImageList(16, 16)
   431         for language in LANGUAGES:
   406         for language in LANGUAGES:
   432             self.TreeImageList.Add(wxBitmap(os.path.join(CWD, 'Images/%s.png'%language)))
   407             self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images/%s.png'%language)))
   433         self.ProjectTree.SetImageList(self.TreeImageList)
   408         self.ProjectTree.SetImageList(self.TreeImageList)
   434         
   409         
   435         if self.ModeSolo:
   410         if self.ModeSolo:
   436             self.Controler = PLCControler()
   411             self.Controler = PLCControler()
   437         else:
   412         else:
   441             self.Controler.OpenXMLFile(fileOpen)
   416             self.Controler.OpenXMLFile(fileOpen)
   442             self.RefreshProjectTree()
   417             self.RefreshProjectTree()
   443         
   418         
   444         self.CurrentToolBar = []
   419         self.CurrentToolBar = []
   445         self.CurrentLanguage = ""
   420         self.CurrentLanguage = ""
   446         #self.DrawingMode = FREEDRAWING_MODE
   421         self.DrawingMode = FREEDRAWING_MODE
   447         self.DrawingMode = DRIVENDRAWING_MODE
   422         #self.DrawingMode = DRIVENDRAWING_MODE
   448         
   423         
   449         self.RefreshFileMenu()
   424         self.RefreshFileMenu()
   450         self.RefreshEditMenu()
   425         self.RefreshEditMenu()
   451         self.RefreshTitle()
   426         self.RefreshTitle()
   452         self.RefreshToolBar()
   427         self.RefreshToolBar()
   482 
   457 
   483     def RefreshEditMenu(self):
   458     def RefreshEditMenu(self):
   484         if self.EditMenu:
   459         if self.EditMenu:
   485             if self.Controler.HasOpenedProject():
   460             if self.Controler.HasOpenedProject():
   486                 undo, redo = self.Controler.GetBufferState()
   461                 undo, redo = self.Controler.GetBufferState()
   487                 self.EditMenu.Enable(wxID_PLCOPENEDITOREDITMENUITEMS1, undo)
   462                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, undo)
   488                 self.EditMenu.Enable(wxID_PLCOPENEDITOREDITMENUITEMS2, redo)
   463                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, redo)
   489             else:
   464             else:
   490                 self.EditMenu.Enable(wxID_PLCOPENEDITOREDITMENUITEMS1, False)
   465                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, False)
   491                 self.EditMenu.Enable(wxID_PLCOPENEDITOREDITMENUITEMS2, False)
   466                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, False)
   492             if self.Controler.HasOpenedProject():
   467             if self.Controler.HasOpenedProject():
   493                 if self.TabsOpened.GetPageCount() > 0:
   468                 if self.TabsOpened.GetPageCount() > 0:
   494                     self.EditMenu.FindItemByPosition(0).Enable(True)
   469                     self.EditMenu.FindItemByPosition(0).Enable(True)
   495                 else:
   470                 else:
   496                     self.EditMenu.FindItemByPosition(0).Enable(False)
   471                     self.EditMenu.FindItemByPosition(0).Enable(False)
   512 
   487 
   513     def ShowProperties(self):
   488     def ShowProperties(self):
   514         old_values = self.Controler.GetProjectProperties()
   489         old_values = self.Controler.GetProjectProperties()
   515         dialog = ProjectDialog(self)
   490         dialog = ProjectDialog(self)
   516         dialog.SetValues(old_values)
   491         dialog.SetValues(old_values)
   517         if dialog.ShowModal() == wxID_OK:
   492         if dialog.ShowModal() == wx.ID_OK:
   518             new_values = dialog.GetValues()
   493             new_values = dialog.GetValues()
   519             projectname = new_values.pop("projectName")
   494             projectname = new_values.pop("projectName")
   520             new_values["creationDateTime"] = old_values["creationDateTime"]
   495             new_values["creationDateTime"] = old_values["creationDateTime"]
   521             self.Controler.SetProjectProperties(projectname, new_values)
   496             self.Controler.SetProjectProperties(projectname, new_values)
   522             self.RefreshProjectTree()
   497             self.RefreshProjectTree()
   523         dialog.Destroy()
   498         dialog.Destroy()
   524 
   499 
   525     def OnCloseFrame(self, event):
   500     def OnCloseFrame(self, event):
   526         if not self.Controler.ProjectIsSaved():
   501         if not self.Controler.ProjectIsSaved():
   527             dialog = wxMessageDialog(self, "There are changes, do you want to save?",  "Close Application", wxYES_NO|wxCANCEL|wxICON_QUESTION)
   502             dialog = wx.MessageDialog(self, "There are changes, do you want to save?",  "Close Application", wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION)
   528             answer = dialog.ShowModal()
   503             answer = dialog.ShowModal()
   529             dialog.Destroy()
   504             dialog.Destroy()
   530             if answer == wxID_YES:
   505             if answer == wx.ID_YES:
   531                 self.SaveProject()
   506                 self.SaveProject()
   532                 event.Skip()
   507                 event.Skip()
   533             elif answer == wxID_NO:
   508             elif answer == wx.ID_NO:
   534                 event.Skip()
   509                 event.Skip()
   535         else:
   510         else:
   536             event.Skip()
   511             event.Skip()
   537 
   512 
   538     def OnNewProjectMenu(self, event):
   513     def OnNewProjectMenu(self, event):
   539         dialog = ProjectDialog(self)
   514         dialog = ProjectDialog(self)
   540         if dialog.ShowModal() == wxID_OK:
   515         if dialog.ShowModal() == wx.ID_OK:
   541             values = dialog.GetValues()
   516             values = dialog.GetValues()
   542             projectname = values.pop("projectName")
   517             projectname = values.pop("projectName")
   543             values["creationDateTime"] = datetime(*localtime()[:6])
   518             values["creationDateTime"] = datetime(*localtime()[:6])
   544             self.Controler.CreateNewProject(projectname)
   519             self.Controler.CreateNewProject(projectname)
   545             self.Controler.SetProjectProperties(projectname, values)
   520             self.Controler.SetProjectProperties(projectname, values)
   553         filepath = self.Controler.GetFilePath()
   528         filepath = self.Controler.GetFilePath()
   554         if filepath != "":
   529         if filepath != "":
   555             directory = os.path.dirname(filepath)
   530             directory = os.path.dirname(filepath)
   556         else:
   531         else:
   557             directory = os.getcwd()
   532             directory = os.getcwd()
   558         dialog = wxFileDialog(self, "Choose a file", directory, "",  "PLCOpen files (*.xml)|*.xml|All files|*.*", wxOPEN)
   533         dialog = wx.FileDialog(self, "Choose a file", directory, "",  "PLCOpen files (*.xml)|*.xml|All files|*.*", wx.OPEN)
   559         if dialog.ShowModal() == wxID_OK:
   534         if dialog.ShowModal() == wx.ID_OK:
   560             filepath = dialog.GetPath()
   535             filepath = dialog.GetPath()
   561             if os.path.isfile(filepath):
   536             if os.path.isfile(filepath):
   562                 self.Controler.OpenXMLFile(filepath)
   537                 self.Controler.OpenXMLFile(filepath)
   563                 self.TabsOpened.DeleteAllPages()
   538                 self.TabsOpened.DeleteAllPages()
   564                 self.RefreshProjectTree()
   539                 self.RefreshProjectTree()
   599     def OnSaveProjectAsMenu(self, event):
   574     def OnSaveProjectAsMenu(self, event):
   600         self.SaveProjectAs()
   575         self.SaveProjectAs()
   601         event.Skip()
   576         event.Skip()
   602 
   577 
   603     def OnGenerateProgramMenu(self, event):
   578     def OnGenerateProgramMenu(self, event):
   604         dialog = wxFileDialog(self, "Choose a file", os.getcwd(), self.Controler.GetProgramFilePath(),  "ST files (*.st)|*.st|All files|*.*", wxSAVE|wxCHANGE_DIR)
   579         dialog = wx.FileDialog(self, "Choose a file", os.getcwd(), self.Controler.GetProgramFilePath(),  "ST files (*.st)|*.st|All files|*.*", wx.SAVE|wx.CHANGE_DIR)
   605         if dialog.ShowModal() == wxID_OK:
   580         if dialog.ShowModal() == wx.ID_OK:
   606             filepath = dialog.GetPath()
   581             filepath = dialog.GetPath()
   607             if os.path.isdir(os.path.dirname(filepath)):
   582             if os.path.isdir(os.path.dirname(filepath)):
   608                 result = self.Controler.GenerateProgram(filepath)
   583                 result = self.Controler.GenerateProgram(filepath)
   609                 if not result:
   584                 if not result:
   610                     message = wxMessageDialog(self, "Can't generate program to file %s!"%filepath, "Error", wxOK|wxICON_ERROR)
   585                     message = wx.MessageDialog(self, "Can't generate program to file %s!"%filepath, "Error", wx.OK|wx.ICON_ERROR)
   611                     message.ShowModal()
   586                     message.ShowModal()
   612                     message.Destroy()
   587                     message.Destroy()
   613             else:
   588             else:
   614                 message = wxMessageDialog(self, "%s is not a valid folder!"%os.path.dirname(filepath), "Error", wxOK|wxICON_ERROR)
   589                 message = wx.MessageDialog(self, "%s is not a valid folder!"%os.path.dirname(filepath), "Error", wx.OK|wx.ICON_ERROR)
   615                 message.ShowModal()
   590                 message.ShowModal()
   616                 message.Destroy()
   591                 message.Destroy()
   617         dialog.Destroy()
   592         dialog.Destroy()
   618         event.Skip()
   593         event.Skip()
   619 
   594 
   628         filepath = self.Controler.GetFilePath()
   603         filepath = self.Controler.GetFilePath()
   629         if filepath != "":
   604         if filepath != "":
   630             directory, filename = os.path.split(filepath)
   605             directory, filename = os.path.split(filepath)
   631         else:
   606         else:
   632             directory, filename = os.getcwd(), "%(projectName)s.xml"%self.Controler.GetProjectProperties()
   607             directory, filename = os.getcwd(), "%(projectName)s.xml"%self.Controler.GetProjectProperties()
   633         dialog = wxFileDialog(self, "Choose a file", directory, filename,  "PLCOpen files (*.xml)|*.xml|All files|*.*", wxSAVE|wxOVERWRITE_PROMPT)
   608         dialog = wx.FileDialog(self, "Choose a file", directory, filename,  "PLCOpen files (*.xml)|*.xml|All files|*.*", wx.SAVE|wx.OVERWRITE_PROMPT)
   634         if dialog.ShowModal() == wxID_OK:
   609         if dialog.ShowModal() == wx.ID_OK:
   635             filepath = dialog.GetPath()
   610             filepath = dialog.GetPath()
   636             if os.path.isdir(os.path.dirname(filepath)):
   611             if os.path.isdir(os.path.dirname(filepath)):
   637                 result = self.Controler.SaveXMLFile(filepath)
   612                 result = self.Controler.SaveXMLFile(filepath)
   638                 if not result:
   613                 if not result:
   639                     message = wxMessageDialog(self, "Can't save project to file %s!"%filepath, "Error", wxOK|wxICON_ERROR)
   614                     message = wx.MessageDialog(self, "Can't save project to file %s!"%filepath, "Error", wx.OK|wx.ICON_ERROR)
   640                     message.ShowModal()
   615                     message.ShowModal()
   641                     message.Destroy()
   616                     message.Destroy()
   642             else:
   617             else:
   643                 message = wxMessageDialog(self, "%s is not a valid folder!"%os.path.dirname(filepath), "Error", wxOK|wxICON_ERROR)
   618                 message = wx.MessageDialog(self, "%s is not a valid folder!"%os.path.dirname(filepath), "Error", wx.OK|wx.ICON_ERROR)
   644                 message.ShowModal()
   619                 message.ShowModal()
   645                 message.Destroy()
   620                 message.Destroy()
   646             self.RefreshTitle()
   621             self.RefreshTitle()
   647         dialog.Destroy()
   622         dialog.Destroy()
   648 
   623 
   659     def ResetCurrentMode(self):
   634     def ResetCurrentMode(self):
   660         selected = self.TabsOpened.GetSelection()
   635         selected = self.TabsOpened.GetSelection()
   661         if selected != -1:
   636         if selected != -1:
   662             window = self.TabsOpened.GetPage(selected)
   637             window = self.TabsOpened.GetPage(selected)
   663             window.SetMode(MODE_SELECTION)
   638             window.SetMode(MODE_SELECTION)
   664         self.ToolBar.ToggleTool(wxID_PLCOPENEDITORTOOLBARSELECTION, True)
   639         self.ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True)
   665 
   640 
   666     def ResetToolToggle(self, id):
   641     def ResetToolToggle(self, id):
   667         tool = self.ToolBar.FindById(id)
   642         tool = self.ToolBar.FindById(id)
   668         tool.SetToggle(False)
   643         tool.SetToggle(False)
   669 
   644 
   672         if selected != -1:
   647         if selected != -1:
   673             self.TabsOpened.GetPage(selected).SetMode(MODE_SELECTION)
   648             self.TabsOpened.GetPage(selected).SetMode(MODE_SELECTION)
   674         event.Skip()
   649         event.Skip()
   675     
   650     
   676     def OnCommentTool(self, event):
   651     def OnCommentTool(self, event):
   677         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARCOMMENT)
   652         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOMMENT)
   678         selected = self.TabsOpened.GetSelection()
   653         selected = self.TabsOpened.GetSelection()
   679         if selected != -1:
   654         if selected != -1:
   680             self.TabsOpened.GetPage(selected).SetMode(MODE_COMMENT)
   655             self.TabsOpened.GetPage(selected).SetMode(MODE_COMMENT)
   681         event.Skip()
   656         event.Skip()
   682     
   657     
   683     def OnVariableTool(self, event):
   658     def OnVariableTool(self, event):
   684         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARVARIABLE)
   659         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARVARIABLE)
   685         selected = self.TabsOpened.GetSelection()
   660         selected = self.TabsOpened.GetSelection()
   686         if selected != -1:
   661         if selected != -1:
   687             self.TabsOpened.GetPage(selected).SetMode(MODE_VARIABLE)
   662             self.TabsOpened.GetPage(selected).SetMode(MODE_VARIABLE)
   688         event.Skip()
   663         event.Skip()
   689     
   664     
   692         if selected != -1:
   667         if selected != -1:
   693             self.TabsOpened.GetPage(selected).SetMode(MODE_BLOCK)
   668             self.TabsOpened.GetPage(selected).SetMode(MODE_BLOCK)
   694         event.Skip()
   669         event.Skip()
   695         
   670         
   696     def OnConnectionTool(self, event):
   671     def OnConnectionTool(self, event):
   697         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARCONNECTION)
   672         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONNECTION)
   698         selected = self.TabsOpened.GetSelection()
   673         selected = self.TabsOpened.GetSelection()
   699         if selected != -1:
   674         if selected != -1:
   700             self.TabsOpened.GetPage(selected).SetMode(MODE_CONNECTION)
   675             self.TabsOpened.GetPage(selected).SetMode(MODE_CONNECTION)
   701         event.Skip()
   676         event.Skip()
   702 
   677 
   703     def OnWireTool(self, event):
   678     def OnWireTool(self, event):
   704         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARWIRE)
   679         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARWIRE)
   705         selected = self.TabsOpened.GetSelection()
   680         selected = self.TabsOpened.GetSelection()
   706         if selected != -1:
   681         if selected != -1:
   707             self.TabsOpened.GetPage(selected).SetMode(MODE_WIRE)
   682             self.TabsOpened.GetPage(selected).SetMode(MODE_WIRE)
   708         event.Skip()
   683         event.Skip()
   709 
   684 
   710     def OnPowerRailTool(self, event):
   685     def OnPowerRailTool(self, event):
   711         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARPOWERRAIL)
   686         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARPOWERRAIL)
   712         selected = self.TabsOpened.GetSelection()
   687         selected = self.TabsOpened.GetSelection()
   713         if selected != -1:
   688         if selected != -1:
   714             self.TabsOpened.GetPage(selected).SetMode(MODE_POWERRAIL)
   689             self.TabsOpened.GetPage(selected).SetMode(MODE_POWERRAIL)
   715         event.Skip()
   690         event.Skip()
   716 
   691 
   719         if selected != -1:
   694         if selected != -1:
   720             self.TabsOpened.GetPage(selected).Viewer.AddLadderRung()
   695             self.TabsOpened.GetPage(selected).Viewer.AddLadderRung()
   721         event.Skip()
   696         event.Skip()
   722     
   697     
   723     def OnCoilTool(self, event):
   698     def OnCoilTool(self, event):
   724         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARCOIL)
   699         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOIL)
   725         selected = self.TabsOpened.GetSelection()
   700         selected = self.TabsOpened.GetSelection()
   726         if selected != -1:
   701         if selected != -1:
   727             self.TabsOpened.GetPage(selected).SetMode(MODE_COIL)
   702             self.TabsOpened.GetPage(selected).SetMode(MODE_COIL)
   728         event.Skip()
   703         event.Skip()
   729     
   704     
   730     def OnContactTool(self, event):
   705     def OnContactTool(self, event):
   731         if self.DrawingMode == FREEDRAWING_MODE:
   706         if self.DrawingMode == FREEDRAWING_MODE:
   732             self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARCONTACT)
   707             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONTACT)
   733         selected = self.TabsOpened.GetSelection()
   708         selected = self.TabsOpened.GetSelection()
   734         if selected != -1:
   709         if selected != -1:
   735             if self.DrawingMode == FREEDRAWING_MODE:
   710             if self.DrawingMode == FREEDRAWING_MODE:
   736                 self.TabsOpened.GetPage(selected).SetMode(MODE_CONTACT)
   711                 self.TabsOpened.GetPage(selected).SetMode(MODE_CONTACT)
   737             else:
   712             else:
   743         if selected != -1:
   718         if selected != -1:
   744             self.TabsOpened.GetPage(selected).Viewer.AddLadderBranch()
   719             self.TabsOpened.GetPage(selected).Viewer.AddLadderBranch()
   745         event.Skip()    
   720         event.Skip()    
   746     
   721     
   747     def OnInitialStepTool(self, event):
   722     def OnInitialStepTool(self, event):
   748         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARINITIALSTEP)
   723         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARINITIALSTEP)
   749         selected = self.TabsOpened.GetSelection()
   724         selected = self.TabsOpened.GetSelection()
   750         if selected != -1:
   725         if selected != -1:
   751             self.TabsOpened.GetPage(selected).SetMode(MODE_INITIALSTEP)
   726             self.TabsOpened.GetPage(selected).SetMode(MODE_INITIALSTEP)
   752         event.Skip()
   727         event.Skip()
   753     
   728     
   754     def OnStepTool(self, event):
   729     def OnStepTool(self, event):
   755         if self.GetDrawingMode() == FREEDRAWING_MODE:
   730         if self.GetDrawingMode() == FREEDRAWING_MODE:
   756             self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARSTEP)
   731             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARSTEP)
   757         selected = self.TabsOpened.GetSelection()
   732         selected = self.TabsOpened.GetSelection()
   758         if selected != -1:
   733         if selected != -1:
   759             if self.GetDrawingMode() == FREEDRAWING_MODE:
   734             if self.GetDrawingMode() == FREEDRAWING_MODE:
   760                 self.TabsOpened.GetPage(selected).SetMode(MODE_STEP)
   735                 self.TabsOpened.GetPage(selected).SetMode(MODE_STEP)
   761             else:
   736             else:
   762                 self.TabsOpened.GetPage(selected).Viewer.AddStep()
   737                 self.TabsOpened.GetPage(selected).Viewer.AddStep()
   763         event.Skip()
   738         event.Skip()
   764 
   739 
   765     def OnActionBlockTool(self, event):
   740     def OnActionBlockTool(self, event):
   766         if self.GetDrawingMode() == FREEDRAWING_MODE:
   741         if self.GetDrawingMode() == FREEDRAWING_MODE:
   767             self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARACTIONBLOCK)
   742             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARACTIONBLOCK)
   768         selected = self.TabsOpened.GetSelection()
   743         selected = self.TabsOpened.GetSelection()
   769         if selected != -1:
   744         if selected != -1:
   770             if self.GetDrawingMode() == FREEDRAWING_MODE:
   745             if self.GetDrawingMode() == FREEDRAWING_MODE:
   771                 self.TabsOpened.GetPage(selected).SetMode(MODE_ACTION)
   746                 self.TabsOpened.GetPage(selected).SetMode(MODE_ACTION)
   772             else:
   747             else:
   773                 self.TabsOpened.GetPage(selected).Viewer.AddStepAction()
   748                 self.TabsOpened.GetPage(selected).Viewer.AddStepAction()
   774         event.Skip()
   749         event.Skip()
   775 
   750 
   776     def OnTransitionTool(self, event):
   751     def OnTransitionTool(self, event):
   777         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARTRANSITION)
   752         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARTRANSITION)
   778         selected = self.TabsOpened.GetSelection()
   753         selected = self.TabsOpened.GetSelection()
   779         if selected != -1:
   754         if selected != -1:
   780             self.TabsOpened.GetPage(selected).SetMode(MODE_TRANSITION)
   755             self.TabsOpened.GetPage(selected).SetMode(MODE_TRANSITION)
   781         event.Skip()
   756         event.Skip()
   782 
   757 
   783     def OnDivergenceTool(self, event):
   758     def OnDivergenceTool(self, event):
   784         if self.GetDrawingMode() == FREEDRAWING_MODE:
   759         if self.GetDrawingMode() == FREEDRAWING_MODE:
   785             self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARDIVERGENCE)
   760             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARDIVERGENCE)
   786         selected = self.TabsOpened.GetSelection()
   761         selected = self.TabsOpened.GetSelection()
   787         if selected != -1:
   762         if selected != -1:
   788             if self.GetDrawingMode() == FREEDRAWING_MODE:
   763             if self.GetDrawingMode() == FREEDRAWING_MODE:
   789                 self.TabsOpened.GetPage(selected).SetMode(MODE_DIVERGENCE)
   764                 self.TabsOpened.GetPage(selected).SetMode(MODE_DIVERGENCE)
   790             else:
   765             else:
   791                 self.TabsOpened.GetPage(selected).Viewer.AddDivergence()
   766                 self.TabsOpened.GetPage(selected).Viewer.AddDivergence()
   792         event.Skip()
   767         event.Skip()
   793     
   768     
   794     def OnJumpTool(self, event):
   769     def OnJumpTool(self, event):
   795         if self.GetDrawingMode() == FREEDRAWING_MODE:
   770         if self.GetDrawingMode() == FREEDRAWING_MODE:
   796             self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARJUMP)
   771             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARJUMP)
   797         selected = self.TabsOpened.GetSelection()
   772         selected = self.TabsOpened.GetSelection()
   798         if selected != -1:
   773         if selected != -1:
   799             if self.GetDrawingMode() == FREEDRAWING_MODE:
   774             if self.GetDrawingMode() == FREEDRAWING_MODE:
   800                 self.TabsOpened.GetPage(selected).SetMode(MODE_JUMP)
   775                 self.TabsOpened.GetPage(selected).SetMode(MODE_JUMP)
   801             else:
   776             else:
   827         item = event.GetItem()
   802         item = event.GetItem()
   828         if self.ProjectTree.GetPyData(item) == ITEM_POU:
   803         if self.ProjectTree.GetPyData(item) == ITEM_POU:
   829             block_name = self.ProjectTree.GetItemText(item)
   804             block_name = self.ProjectTree.GetItemText(item)
   830             block_type = self.Controler.GetPouType(block_name)
   805             block_type = self.Controler.GetPouType(block_name)
   831             if block_type != "program":
   806             if block_type != "program":
   832                 data = wxTextDataObject(str((block_name, block_type, "")))
   807                 data = wx.TextDataObject(str((block_name, block_type, "")))
   833                 dragSource = wxDropSource(self.ProjectTree)
   808                 dragSource = wx.DropSource(self.ProjectTree)
   834                 dragSource.SetData(data)
   809                 dragSource.SetData(data)
   835                 dragSource.DoDragDrop()
   810                 dragSource.DoDragDrop()
   836 
   811 
   837     def OnProjectTreeItemEndEdit(self, event):
   812     def OnProjectTreeItemEndEdit(self, event):
   838         message = None
   813         message = None
   851                 elif itemtype == ITEM_POU:
   826                 elif itemtype == ITEM_POU:
   852                     if new_name.upper() in self.Controler.GetProjectPouNames():
   827                     if new_name.upper() in self.Controler.GetProjectPouNames():
   853                         message = "\"%s\" pou already exists!"%new_name
   828                         message = "\"%s\" pou already exists!"%new_name
   854                         abort = True
   829                         abort = True
   855                     elif new_name.upper() in self.Controler.GetProjectPouVariables():
   830                     elif new_name.upper() in self.Controler.GetProjectPouVariables():
   856                         messageDialog = wxMessageDialog(self, "A variable is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"%new_name, "Error", wxYES_NO|wxICON_QUESTION)
   831                         messageDialog = wx.MessageDialog(self, "A variable is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"%new_name, "Error", wx.YES_NO|wx.ICON_QUESTION)
   857                         if messageDialog.ShowModal() == wxID_NO:
   832                         if messageDialog.ShowModal() == wx.ID_NO:
   858                             abort = True
   833                             abort = True
   859                         messageDialog.Destroy()
   834                         messageDialog.Destroy()
   860                     if not abort:
   835                     if not abort:
   861                         old_name = self.ProjectTree.GetItemText(item)
   836                         old_name = self.ProjectTree.GetItemText(item)
   862                         self.Controler.ChangePouName(old_name, new_name)
   837                         self.Controler.ChangePouName(old_name, new_name)
   899                         old_name = self.ProjectTree.GetItemText(item)
   874                         old_name = self.ProjectTree.GetItemText(item)
   900                         self.Controler.ChangePouVariableName(pou_name, old_name, new_name)
   875                         self.Controler.ChangePouVariableName(pou_name, old_name, new_name)
   901                         self.RefreshTabsOpenedTitles()
   876                         self.RefreshTabsOpenedTitles()
   902             if message or abort:
   877             if message or abort:
   903                 if message:
   878                 if message:
   904                     messageDialog = wxMessageDialog(self, message, "Error", wxOK|wxICON_ERROR)
   879                     messageDialog = wx.MessageDialog(self, message, "Error", wx.OK|wx.ICON_ERROR)
   905                     messageDialog.ShowModal()
   880                     messageDialog.ShowModal()
   906                     messageDialog.Destroy()
   881                     messageDialog.Destroy()
   907                 item = event.GetItem()
   882                 item = event.GetItem()
   908                 wxCallAfter(self.ProjectTree.EditLabel, item)
   883                 wx.CallAfter(self.ProjectTree.EditLabel, item)
   909                 event.Veto()
   884                 event.Veto()
   910             else:
   885             else:
   911                 wxCallAfter(self.RefreshProjectTree)
   886                 wx.CallAfter(self.RefreshProjectTree)
   912                 event.Skip()
   887                 event.Skip()
   913 
   888 
   914     def OnProjectTreeItemBeginEdit(self, event):
   889     def OnProjectTreeItemBeginEdit(self, event):
   915         selected = event.GetItem()
   890         selected = event.GetItem()
   916         if self.ProjectTree.GetPyData(selected) == ITEM_UNEDITABLE:
   891         if self.ProjectTree.GetPyData(selected) == ITEM_UNEDITABLE:
   940 ##                dialog.SetPouNames(self.Controler.GetProjectPouNames())
   915 ##                dialog.SetPouNames(self.Controler.GetProjectPouNames())
   941 ##                values = {}
   916 ##                values = {}
   942 ##                values["returnType"] = self.Controler.GetPouInterfaceReturnTypeByName(item_name)
   917 ##                values["returnType"] = self.Controler.GetPouInterfaceReturnTypeByName(item_name)
   943 ##                values["data"] = self.Controler.GetPouInterfaceVarsByName(item_name)
   918 ##                values["data"] = self.Controler.GetPouInterfaceVarsByName(item_name)
   944 ##                dialog.SetValues(values)
   919 ##                dialog.SetValues(values)
   945 ##                if dialog.ShowModal() == wxID_OK:
   920 ##                if dialog.ShowModal() == wx.ID_OK:
   946 ##                    new_values = dialog.GetValues()
   921 ##                    new_values = dialog.GetValues()
   947 ##                    if "returnType" in new_values:
   922 ##                    if "returnType" in new_values:
   948 ##                        self.Controler.SetPouInterfaceReturnType(item_name, new_values["returnType"])
   923 ##                        self.Controler.SetPouInterfaceReturnType(item_name, new_values["returnType"])
   949 ##                    self.Controler.SetPouInterfaceVars(item_name, new_values["data"])
   924 ##                    self.Controler.SetPouInterfaceVars(item_name, new_values["data"])
   950 ##                    pou_names = self.Controler.GetElementsOpenedNames()
   925 ##                    pou_names = self.Controler.GetElementsOpenedNames()
   962 ##            elif item_type == ITEM_CONFIGURATION:
   937 ##            elif item_type == ITEM_CONFIGURATION:
   963 ##                dialog = EditVariableDialog(self, item_name, None, False, name)
   938 ##                dialog = EditVariableDialog(self, item_name, None, False, name)
   964 ##                dialog.SetPouNames(self.Controler.GetProjectPouNames())
   939 ##                dialog.SetPouNames(self.Controler.GetProjectPouNames())
   965 ##                values = {"data" : self.Controler.GetConfigurationGlobalVars(item_name)}
   940 ##                values = {"data" : self.Controler.GetConfigurationGlobalVars(item_name)}
   966 ##                dialog.SetValues(values)
   941 ##                dialog.SetValues(values)
   967 ##                if dialog.ShowModal() == wxID_OK:
   942 ##                if dialog.ShowModal() == wx.ID_OK:
   968 ##                    new_values = dialog.GetValues()
   943 ##                    new_values = dialog.GetValues()
   969 ##                    self.Controler.SetConfigurationGlobalVars(item_name, new_values["data"])
   944 ##                    self.Controler.SetConfigurationGlobalVars(item_name, new_values["data"])
   970 ##                dialog.Destroy()
   945 ##                dialog.Destroy()
   971 ##                self.RefreshProjectTree()
   946 ##                self.RefreshProjectTree()
   972 ##            elif item_type == ITEM_RESOURCE:
   947 ##            elif item_type == ITEM_RESOURCE:
   978 ##                if config.IsOk():
   953 ##                if config.IsOk():
   979 ##                    config_name = self.ProjectTree.GetItemText(config)
   954 ##                    config_name = self.ProjectTree.GetItemText(config)
   980 ##                    dialog = EditVariableDialog(self, item_name, None, False, name)
   955 ##                    dialog = EditVariableDialog(self, item_name, None, False, name)
   981 ##                    values = {"data" : self.Controler.GetConfigurationResourceGlobalVars(config_name, item_name)}
   956 ##                    values = {"data" : self.Controler.GetConfigurationResourceGlobalVars(config_name, item_name)}
   982 ##                    dialog.SetValues(values)
   957 ##                    dialog.SetValues(values)
   983 ##                    if dialog.ShowModal() == wxID_OK:
   958 ##                    if dialog.ShowModal() == wx.ID_OK:
   984 ##                        new_values = dialog.GetValues()
   959 ##                        new_values = dialog.GetValues()
   985 ##                        self.Controler.SetConfigurationResourceGlobalVars(config_name, item_name, new_values["data"])
   960 ##                        self.Controler.SetConfigurationResourceGlobalVars(config_name, item_name, new_values["data"])
   986 ##                    dialog.Destroy()
   961 ##                    dialog.Destroy()
   987 ##                    self.RefreshProjectTree()
   962 ##                    self.RefreshProjectTree()
   988 ##        elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]:
   963 ##        elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]:
  1221             self.CurrentLanguage = language
  1196             self.CurrentLanguage = language
  1222             self.CurrentToolBar = []
  1197             self.CurrentToolBar = []
  1223             for radio, modes, id, method, picture, help in ToolBarItems[language]:
  1198             for radio, modes, id, method, picture, help in ToolBarItems[language]:
  1224                 if modes & self.DrawingMode:
  1199                 if modes & self.DrawingMode:
  1225                     if radio or self.DrawingMode == FREEDRAWING_MODE:
  1200                     if radio or self.DrawingMode == FREEDRAWING_MODE:
  1226                         self.ToolBar.AddRadioTool(id, wxBitmap(os.path.join(CWD, picture)), wxNullBitmap, help)
  1201                         self.ToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, picture)), wx.NullBitmap, help)
  1227                     else:
  1202                     else:
  1228                         self.ToolBar.AddSimpleTool(id, wxBitmap(os.path.join(CWD, picture)), help)
  1203                         self.ToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, picture)), help)
  1229                     self.Bind(wx.EVT_TOOL, getattr(self, method), id=id)
  1204                     self.Bind(wx.EVT_TOOL, getattr(self, method), id=id)
  1230                     self.CurrentToolBar.append(id)
  1205                     self.CurrentToolBar.append(id)
  1231         self.ResetCurrentMode()
  1206         self.ResetCurrentMode()
  1232 
  1207 
  1233     def RefreshTabsOpenedTitles(self):
  1208     def RefreshTabsOpenedTitles(self):
  1290         event.Skip()
  1265         event.Skip()
  1291     
  1266     
  1292     def OnAddPouMenu(self, event):
  1267     def OnAddPouMenu(self, event):
  1293         dialog = PouDialog(self)
  1268         dialog = PouDialog(self)
  1294         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1269         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1295         if dialog.ShowModal() == wxID_OK:
  1270         if dialog.ShowModal() == wx.ID_OK:
  1296             values = dialog.GetValues()
  1271             values = dialog.GetValues()
  1297             self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"])
  1272             self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"])
  1298             self.RefreshProjectTree()
  1273             self.RefreshProjectTree()
  1299         dialog.Destroy()
  1274         dialog.Destroy()
  1300         event.Skip()
  1275         event.Skip()
  1301 
  1276 
  1302     def OnRemovePouMenu(self, event):
  1277     def OnRemovePouMenu(self, event):
  1303         pous = self.Controler.GetProjectPouNames()
  1278         pous = self.Controler.GetProjectPouNames()
  1304         dialog = wxSingleChoiceDialog(self, "Select POU to remove:", "POU Remove", pous, wxOK|wxCANCEL)
  1279         dialog = wx.SingleChoiceDialog(self, "Select POU to remove:", "POU Remove", pous, wx.OK|wx.CANCEL)
  1305         if dialog.ShowModal() == wxID_OK:
  1280         if dialog.ShowModal() == wx.ID_OK:
  1306             selected = dialog.GetStringSelection()
  1281             selected = dialog.GetStringSelection()
  1307             if not self.Controler.PouIsUsed(selected):
  1282             if not self.Controler.PouIsUsed(selected):
  1308                 self.Controler.ProjectRemovePou(selected)
  1283                 self.Controler.ProjectRemovePou(selected)
  1309                 deleted = None
  1284                 deleted = None
  1310                 for i in xrange(self.TabsOpened.GetPageCount()):
  1285                 for i in xrange(self.TabsOpened.GetPageCount()):
  1313                 if deleted != None:
  1288                 if deleted != None:
  1314                     self.TabsOpened.DeletePage(i)
  1289                     self.TabsOpened.DeletePage(i)
  1315                 self.RefreshProjectTree()
  1290                 self.RefreshProjectTree()
  1316                 self.RefreshToolBar()
  1291                 self.RefreshToolBar()
  1317             else:
  1292             else:
  1318                 message = wxMessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wxOK|wxICON_ERROR)
  1293                 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR)
  1319                 message.ShowModal()
  1294                 message.ShowModal()
  1320                 message.Destroy()
  1295                 message.Destroy()
  1321         event.Skip()
  1296         event.Skip()
  1322 
  1297 
  1323     def OnAddConfigurationMenu(self, event):
  1298     def OnAddConfigurationMenu(self, event):
  1324         dialog = wxTextEntryDialog(self, "Enter configuration name:", "Create new configuration", "", wxOK|wxCANCEL)
  1299         dialog = wx.TextEntryDialog(self, "Enter configuration name:", "Create new configuration", "", wx.OK|wx.CANCEL)
  1325         if dialog.ShowModal() == wxID_OK:
  1300         if dialog.ShowModal() == wx.ID_OK:
  1326             value = dialog.GetValue()
  1301             value = dialog.GetValue()
  1327             self.Controler.ProjectAddConfiguration(value)
  1302             self.Controler.ProjectAddConfiguration(value)
  1328             self.RefreshProjectTree()
  1303             self.RefreshProjectTree()
  1329         dialog.Destroy()
  1304         dialog.Destroy()
  1330         event.Skip()
  1305         event.Skip()
  1331 
  1306 
  1332     def OnRemoveConfigurationMenu(self, event):
  1307     def OnRemoveConfigurationMenu(self, event):
  1333         configs = self.Controler.GetProjectConfigNames()
  1308         configs = self.Controler.GetProjectConfigNames()
  1334         dialog = wxSingleChoiceDialog(self, "Select Configuration to remove:", "Remove configuration", configs, wxOK|wxCANCEL)
  1309         dialog = wx.SingleChoiceDialog(self, "Select Configuration to remove:", "Remove configuration", configs, wx.OK|wx.CANCEL)
  1335         if dialog.ShowModal() == wxID_OK:
  1310         if dialog.ShowModal() == wx.ID_OK:
  1336             selected = dialog.GetStringSelection()
  1311             selected = dialog.GetStringSelection()
  1337             self.Controler.ProjectRemoveConfiguration(selected)
  1312             self.Controler.ProjectRemoveConfiguration(selected)
  1338             self.RefreshProjectTree()
  1313             self.RefreshProjectTree()
  1339         event.Skip()
  1314         event.Skip()
  1340 
  1315 
  1342         selected = self.ProjectTree.GetSelection()
  1317         selected = self.ProjectTree.GetSelection()
  1343         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
  1318         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
  1344             pouname = self.ProjectTree.GetItemText(selected)
  1319             pouname = self.ProjectTree.GetItemText(selected)
  1345             if self.Controler.GetPouBodyType(pouname) == "SFC":
  1320             if self.Controler.GetPouBodyType(pouname) == "SFC":
  1346                 dialog = PouTransitionDialog(self)
  1321                 dialog = PouTransitionDialog(self)
  1347                 if dialog.ShowModal() == wxID_OK: 
  1322                 if dialog.ShowModal() == wx.ID_OK: 
  1348                     values = dialog.GetValues()
  1323                     values = dialog.GetValues()
  1349                     self.Controler.ProjectAddPouTransition(pouname, values["transitionName"], values["language"])
  1324                     self.Controler.ProjectAddPouTransition(pouname, values["transitionName"], values["language"])
  1350                     self.RefreshProjectTree()
  1325                     self.RefreshProjectTree()
  1351                 dialog.Destroy()
  1326                 dialog.Destroy()
  1352         event.Skip()
  1327         event.Skip()
  1355         selected = self.ProjectTree.GetSelection()
  1330         selected = self.ProjectTree.GetSelection()
  1356         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
  1331         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
  1357             pouname = self.ProjectTree.GetItemText(selected)
  1332             pouname = self.ProjectTree.GetItemText(selected)
  1358             if self.Controler.GetPouBodyType(pouname) == "SFC":
  1333             if self.Controler.GetPouBodyType(pouname) == "SFC":
  1359                 transitions = self.Controler.GetPouTransitions(pouname)
  1334                 transitions = self.Controler.GetPouTransitions(pouname)
  1360                 dialog = wxSingleChoiceDialog(self, "Select Transition to remove:", "Remove transition", transitions, wxOK|wxCANCEL)
  1335                 dialog = wx.SingleChoiceDialog(self, "Select Transition to remove:", "Remove transition", transitions, wx.OK|wx.CANCEL)
  1361                 if dialog.ShowModal() == wxID_OK: 
  1336                 if dialog.ShowModal() == wx.ID_OK: 
  1362                     selected = dialog.GetStringSelection()
  1337                     selected = dialog.GetStringSelection()
  1363                     self.Controler.ProjectRemovePouTransition(pouname, selected)
  1338                     self.Controler.ProjectRemovePouTransition(pouname, selected)
  1364                     self.RefreshProjectTree()
  1339                     self.RefreshProjectTree()
  1365                 dialog.Destroy()
  1340                 dialog.Destroy()
  1366         event.Skip()
  1341         event.Skip()
  1369         selected = self.ProjectTree.GetSelection()
  1344         selected = self.ProjectTree.GetSelection()
  1370         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
  1345         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
  1371             pouname = self.ProjectTree.GetItemText(selected)
  1346             pouname = self.ProjectTree.GetItemText(selected)
  1372             if self.Controler.GetPouBodyType(pouname) == "SFC":
  1347             if self.Controler.GetPouBodyType(pouname) == "SFC":
  1373                 dialog = PouActionDialog(self)
  1348                 dialog = PouActionDialog(self)
  1374                 if dialog.ShowModal() == wxID_OK:
  1349                 if dialog.ShowModal() == wx.ID_OK:
  1375                     values = dialog.GetValues()
  1350                     values = dialog.GetValues()
  1376                     self.Controler.ProjectAddPouAction(pouname, values["actionName"], values["language"])
  1351                     self.Controler.ProjectAddPouAction(pouname, values["actionName"], values["language"])
  1377                     self.RefreshProjectTree()
  1352                     self.RefreshProjectTree()
  1378                 dialog.Destroy()
  1353                 dialog.Destroy()
  1379         event.Skip()
  1354         event.Skip()
  1382         selected = self.ProjectTree.GetSelection()
  1357         selected = self.ProjectTree.GetSelection()
  1383         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
  1358         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
  1384             pouname = self.ProjectTree.GetItemText(selected)
  1359             pouname = self.ProjectTree.GetItemText(selected)
  1385             if self.Controler.GetPouBodyType(pouname) == "SFC":
  1360             if self.Controler.GetPouBodyType(pouname) == "SFC":
  1386                 actions = self.Controler.GetPouActions(pouname)
  1361                 actions = self.Controler.GetPouActions(pouname)
  1387                 dialog = wxSingleChoiceDialog(self, "Select Action to remove:", "Remove action", actions, wxOK|wxCANCEL)
  1362                 dialog = wx.SingleChoiceDialog(self, "Select Action to remove:", "Remove action", actions, wx.OK|wx.CANCEL)
  1388                 if dialog.ShowModal() == wxID_OK: 
  1363                 if dialog.ShowModal() == wx.ID_OK: 
  1389                     selected = dialog.GetStringSelection()
  1364                     selected = dialog.GetStringSelection()
  1390                     self.Controler.ProjectRemovePouAction(pouname, selected)
  1365                     self.Controler.ProjectRemovePouAction(pouname, selected)
  1391                     self.RefreshProjectTree()
  1366                     self.RefreshProjectTree()
  1392                 dialog.Destroy()
  1367                 dialog.Destroy()
  1393         event.Skip()
  1368         event.Skip()
  1394 
  1369 
  1395     def OnAddResourceMenu(self, event):
  1370     def OnAddResourceMenu(self, event):
  1396         selected = self.ProjectTree.GetSelection()
  1371         selected = self.ProjectTree.GetSelection()
  1397         if self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION:
  1372         if self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION:
  1398             config_name = self.ProjectTree.GetItemText(selected)
  1373             config_name = self.ProjectTree.GetItemText(selected)
  1399             dialog = wxTextEntryDialog(self, "Enter Resource name:", "Create new Resource", "", wxOK|wxCANCEL)
  1374             dialog = wx.TextEntryDialog(self, "Enter Resource name:", "Create new Resource", "", wx.OK|wx.CANCEL)
  1400             if dialog.ShowModal() == wxID_OK:
  1375             if dialog.ShowModal() == wx.ID_OK:
  1401                 value = dialog.GetValue()
  1376                 value = dialog.GetValue()
  1402                 self.Controler.ProjectAddConfigurationResource(config_name, value)
  1377                 self.Controler.ProjectAddConfigurationResource(config_name, value)
  1403                 self.RefreshProjectTree()
  1378                 self.RefreshProjectTree()
  1404             dialog.Destroy()
  1379             dialog.Destroy()
  1405         event.Skip()
  1380         event.Skip()
  1411             infos = self.Controler.GetProjectInfos()
  1386             infos = self.Controler.GetProjectInfos()
  1412             resources = []
  1387             resources = []
  1413             for config in infos["configs"]:
  1388             for config in infos["configs"]:
  1414                 if config["name"] == config_name:
  1389                 if config["name"] == config_name:
  1415                     resources = config["resources"]
  1390                     resources = config["resources"]
  1416             dialog = wxSingleChoiceDialog(self, "Select Resource to remove:", "Remove resource", resources, wxOK|wxCANCEL)
  1391             dialog = wx.SingleChoiceDialog(self, "Select Resource to remove:", "Remove resource", resources, wx.OK|wx.CANCEL)
  1417             if dialog.ShowModal() == wxID_OK:
  1392             if dialog.ShowModal() == wx.ID_OK:
  1418                 resource = dialog.GetStringSelection()
  1393                 resource = dialog.GetStringSelection()
  1419                 self.Controler.ProjectRemoveConfigurationResource(config_name, resource)
  1394                 self.Controler.ProjectRemoveConfigurationResource(config_name, resource)
  1420                 self.RefreshProjectTree()
  1395                 self.RefreshProjectTree()
  1421             dialog.Destroy()
  1396             dialog.Destroy()
  1422         event.Skip()
  1397         event.Skip()
  1423 
  1398 
  1424     def OnPLCOpenMenu(self, event):
  1399     def OnPLCOpenMenu(self, event):
  1425         result = OpenPDFDoc()
  1400         result = OpenPDFDoc()
  1426         if type(result) == StringType:
  1401         if type(result) == StringType:
  1427             message = wxMessageDialog(self, result, "ERROR", wxOK|wxICON_ERROR)
  1402             message = wx.MessageDialog(self, result, "ERROR", wx.OK|wx.ICON_ERROR)
  1428             message.ShowModal()
  1403             message.ShowModal()
  1429             message.Destroy()
  1404             message.Destroy()
  1430         event.Skip()
  1405         event.Skip()
  1431 
  1406 
  1432 current_num = 0
  1407 current_num = 0
  1437 
  1412 
  1438 #-------------------------------------------------------------------------------
  1413 #-------------------------------------------------------------------------------
  1439 #                            Create Project Dialog
  1414 #                            Create Project Dialog
  1440 #-------------------------------------------------------------------------------
  1415 #-------------------------------------------------------------------------------
  1441 
  1416 
  1442 [wxID_PROJECTDIALOG, wxID_PROJECTDIALOGMAINPANEL, 
  1417 [ID_PROJECTDIALOG, ID_PROJECTDIALOGPROJECTNAME, 
  1443  wxID_PROJECTDIALOGPROJECTNAME, wxID_PROJECTDIALOGCOMPANYNAME, 
  1418  ID_PROJECTDIALOGCOMPANYNAME, ID_PROJECTDIALOGCOMPANYURL, 
  1444  wxID_PROJECTDIALOGCOMPANYURL, wxID_PROJECTDIALOGPRODUCTNAME, 
  1419  ID_PROJECTDIALOGPRODUCTNAME, ID_PROJECTDIALOGPRODUCTVERSION, 
  1445  wxID_PROJECTDIALOGPRODUCTVERSION, wxID_PROJECTDIALOGPRODUCTRELEASE, 
  1420  ID_PROJECTDIALOGPRODUCTRELEASE, ID_PROJECTDIALOGCONTENTDESCRIPTION, 
  1446  wxID_PROJECTDIALOGCONTENTDESCRIPTION, wxID_PROJECTDIALOGSTATICTEXT1,
  1421  ID_PROJECTDIALOGSTATICTEXT1, ID_PROJECTDIALOGSTATICTEXT2, 
  1447  wxID_PROJECTDIALOGSTATICTEXT2, wxID_PROJECTDIALOGSTATICTEXT3, 
  1422  ID_PROJECTDIALOGSTATICTEXT3, ID_PROJECTDIALOGSTATICTEXT4, 
  1448  wxID_PROJECTDIALOGSTATICTEXT4, wxID_PROJECTDIALOGSTATICTEXT5, 
  1423  ID_PROJECTDIALOGSTATICTEXT5, ID_PROJECTDIALOGSTATICTEXT6, 
  1449  wxID_PROJECTDIALOGSTATICTEXT6, wxID_PROJECTDIALOGSTATICTEXT7, 
  1424  ID_PROJECTDIALOGSTATICTEXT7, 
  1450 ] = [wx.NewId() for _init_ctrls in range(16)]
  1425 ] = [wx.NewId() for _init_ctrls in range(15)]
  1451         
  1426         
  1452 class ProjectDialog(wx.Dialog):
  1427 class ProjectDialog(wx.Dialog):
  1453     def _init_coll_flexGridSizer1_Items(self, parent):
  1428     def _init_coll_flexGridSizer1_Items(self, parent):
  1454         # generated method, don't edit
  1429         parent.AddSizer(self.MainSizer, 0, border=20, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
  1455 
  1430         parent.AddSizer(self.ButtonSizer, 0, border=20, flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
  1456         parent.AddWindow(self.MainPanel, 0, border=0, flag=0)
  1431         
  1457 
  1432     def _init_coll_flexGridSizer1_Growables(self, parent):
       
  1433         parent.AddGrowableCol(0)
       
  1434         parent.AddGrowableRow(0)
       
  1435     
       
  1436     def _init_coll_MainSizer_Items(self, parent):
       
  1437         parent.AddWindow(self.staticText1, 0, border=0, flag=wx.GROW)
       
  1438         parent.AddWindow(self.ProjectName, 0, border=0, flag=wx.GROW)
       
  1439         parent.AddWindow(self.staticText2, 0, border=0, flag=wx.GROW)
       
  1440         parent.AddWindow(self.CompanyName, 0, border=0, flag=wx.GROW)
       
  1441         parent.AddWindow(self.staticText3, 0, border=0, flag=wx.GROW)
       
  1442         parent.AddWindow(self.CompanyURL, 0, border=0, flag=wx.GROW)
       
  1443         parent.AddWindow(self.staticText4, 0, border=0, flag=wx.GROW)
       
  1444         parent.AddWindow(self.ProductName, 0, border=0, flag=wx.GROW)
       
  1445         parent.AddWindow(self.staticText5, 0, border=0, flag=wx.GROW)
       
  1446         parent.AddWindow(self.ProductVersion, 0, border=0, flag=wx.GROW)
       
  1447         parent.AddWindow(self.staticText6, 0, border=0, flag=wx.GROW)
       
  1448         parent.AddWindow(self.ProductRelease, 0, border=0, flag=wx.GROW)
       
  1449         parent.AddWindow(self.staticText7, 0, border=0, flag=wx.GROW)
       
  1450         parent.AddWindow(self.ContentDescription, 0, border=0, flag=wx.GROW)
       
  1451         
       
  1452     def _init_coll_MainSizer_Growables(self, parent):
       
  1453         parent.AddGrowableCol(1)
       
  1454         parent.AddGrowableRow(6)
       
  1455         
  1458     def _init_sizers(self):
  1456     def _init_sizers(self):
  1459         # generated method, don't edit
  1457         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
  1460         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
  1458         self.MainSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=7, vgap=15)
  1461 
  1459 
  1462         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
  1460         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
       
  1461         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
       
  1462         self._init_coll_MainSizer_Items(self.MainSizer)
       
  1463         self._init_coll_MainSizer_Growables(self.MainSizer)
  1463 
  1464 
  1464         self.SetSizer(self.flexGridSizer1)
  1465         self.SetSizer(self.flexGridSizer1)
  1465 
  1466 
  1466     def _init_ctrls(self, prnt):
  1467     def _init_ctrls(self, prnt):
  1467         # generated method, don't edit
  1468         wx.Dialog.__init__(self, id=ID_PROJECTDIALOG,
  1468         wx.Dialog.__init__(self, id=wxID_PROJECTDIALOG,
       
  1469               name='ProjectDialog', parent=prnt, pos=wx.Point(376, 223),
  1469               name='ProjectDialog', parent=prnt, pos=wx.Point(376, 223),
  1470               size=wx.Size(550, 450), style=wx.DEFAULT_DIALOG_STYLE,
  1470               size=wx.Size(550, 450), style=wx.DEFAULT_DIALOG_STYLE,
  1471               title='Create a new project')
  1471               title='Create a new project')
  1472         self.SetClientSize(wx.Size(550, 450))
  1472         self.SetClientSize(wx.Size(550, 450))
  1473 
  1473 
  1474         self.MainPanel = wx.Panel(id=wxID_PROJECTDIALOGMAINPANEL,
  1474         self.staticText1 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT1,
  1475               name='MainPanel', parent=self, pos=wx.Point(0, 0),
  1475               label='Project Name (required):', name='staticText1', parent=self,
  1476               size=wx.Size(450, 400), style=wx.TAB_TRAVERSAL)
  1476               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1477         self.MainPanel.SetAutoLayout(True)
  1477 
  1478 
  1478         self.ProjectName = wx.TextCtrl(id=ID_PROJECTDIALOGPROJECTNAME,
  1479         self.staticText1 = wx.StaticText(id=wxID_PROJECTDIALOGSTATICTEXT1,
  1479               name='ProjectName', parent=self, pos=wx.Point(0, 0), 
  1480               label='Project Name (required):', name='staticText1', parent=self.MainPanel,
  1480               size=wx.Size(0, 24), style=0)
  1481               pos=wx.Point(24, 24), size=wx.Size(215, 17), style=0)
  1481 
  1482 
  1482         self.staticText2 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT2,
  1483         self.ProjectName = wx.TextCtrl(id=wxID_PROJECTDIALOGPROJECTNAME,
  1483               label='Company Name (required):', name='staticText2', parent=self,
  1484               name='ProjectName', parent=self.MainPanel, pos=wx.Point(224, 24), 
  1484               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1485               size=wx.Size(295, 24), style=0)
  1485 
  1486 
  1486         self.CompanyName = wx.TextCtrl(id=ID_PROJECTDIALOGCOMPANYNAME,
  1487         self.staticText2 = wx.StaticText(id=wxID_PROJECTDIALOGSTATICTEXT2,
  1487               name='CompanyName', parent=self, pos=wx.Point(0, 0),
  1488               label='Company Name (required):', name='staticText2', parent=self.MainPanel,
  1488               size=wx.Size(0, 24), style=0)
  1489               pos=wx.Point(24, 64), size=wx.Size(215, 17), style=0)
  1489 
  1490 
  1490         self.staticText3 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT3,
  1491         self.CompanyName = wx.TextCtrl(id=wxID_PROJECTDIALOGCOMPANYNAME,
  1491               label='Company URL (optional):', name='staticText3', parent=self,
  1492               name='CompanyName', parent=self.MainPanel, pos=wx.Point(224, 64),
  1492               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1493               size=wx.Size(295, 24), style=0)
  1493 
  1494 
  1494         self.CompanyURL = wx.TextCtrl(id=ID_PROJECTDIALOGCOMPANYURL,
  1495         self.staticText3 = wx.StaticText(id=wxID_PROJECTDIALOGSTATICTEXT3,
  1495               name='CompanyURL', parent=self, pos=wx.Point(0, 0),
  1496               label='Company URL (optional):', name='staticText3', parent=self.MainPanel,
  1496               size=wx.Size(0, 24), style=0)
  1497               pos=wx.Point(24, 104), size=wx.Size(215, 17), style=0)
  1497 
  1498 
  1498         self.staticText4 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT4,
  1499         self.CompanyURL = wx.TextCtrl(id=wxID_PROJECTDIALOGCOMPANYURL,
  1499               label='Product Name (required):', name='staticText4', parent=self,
  1500               name='CompanyURL', parent=self.MainPanel, pos=wx.Point(224, 104),
  1500               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1501               size=wx.Size(295, 24), style=0)
  1501 
  1502 
  1502         self.ProductName = wx.TextCtrl(id=ID_PROJECTDIALOGPRODUCTNAME,
  1503         self.staticText4 = wx.StaticText(id=wxID_PROJECTDIALOGSTATICTEXT4,
  1503               name='ProductName', parent=self, pos=wx.Point(0, 0),
  1504               label='Product Name (required):', name='staticText4', parent=self.MainPanel,
  1504               size=wx.Size(0, 24), style=0)
  1505               pos=wx.Point(24, 144), size=wx.Size(215, 17), style=0)
  1505 
  1506 
  1506         self.staticText5 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT5,
  1507         self.ProductName = wx.TextCtrl(id=wxID_PROJECTDIALOGPRODUCTNAME,
  1507               label='Product Version (required):', name='staticText5', parent=self,
  1508               name='ProductName', parent=self.MainPanel, pos=wx.Point(224, 144),
  1508               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1509               size=wx.Size(295, 24), style=0)
  1509 
  1510 
  1510         self.ProductVersion = wx.TextCtrl(id=ID_PROJECTDIALOGPRODUCTVERSION,
  1511         self.staticText5 = wx.StaticText(id=wxID_PROJECTDIALOGSTATICTEXT5,
  1511               name='ProductVersion', parent=self, pos=wx.Point(0, 0),
  1512               label='Product Version (required):', name='staticText5', parent=self.MainPanel,
  1512               size=wx.Size(0, 24), style=0)
  1513               pos=wx.Point(24, 184), size=wx.Size(215, 17), style=0)
  1513 
  1514 
  1514         self.staticText6 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT6,
  1515         self.ProductVersion = wx.TextCtrl(id=wxID_PROJECTDIALOGPRODUCTVERSION,
  1515               label='Product Release (optional):', name='staticText6', parent=self,
  1516               name='ProductVersion', parent=self.MainPanel, pos=wx.Point(224, 184),
  1516               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1517               size=wx.Size(295, 24), style=0)
  1517 
  1518 
  1518         self.ProductRelease = wx.TextCtrl(id=ID_PROJECTDIALOGPRODUCTRELEASE,
  1519         self.staticText6 = wx.StaticText(id=wxID_PROJECTDIALOGSTATICTEXT6,
  1519               name='ProductRelease', parent=self, pos=wx.Point(0, 0),
  1520               label='Product Release (optional):', name='staticText6', parent=self.MainPanel,
  1520               size=wx.Size(0, 24), style=0)
  1521               pos=wx.Point(24, 224), size=wx.Size(215, 17), style=0)
  1521 
  1522 
  1522         self.staticText7 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT7,
  1523         self.ProductRelease = wx.TextCtrl(id=wxID_PROJECTDIALOGPRODUCTRELEASE,
  1523               label='Content Description (optional):', name='staticText7', parent=self,
  1524               name='ProductRelease', parent=self.MainPanel, pos=wx.Point(224, 224),
  1524               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1525               size=wx.Size(295, 24), style=0)
  1525 
  1526 
  1526         self.ContentDescription = wx.TextCtrl(id=ID_PROJECTDIALOGCONTENTDESCRIPTION,
  1527         self.staticText7 = wx.StaticText(id=wxID_PROJECTDIALOGSTATICTEXT7,
  1527               name='ProductRelease', parent=self, pos=wx.Point(0, 0),
  1528               label='Content Description (optional):', name='staticText7', parent=self.MainPanel,
  1528               size=wx.Size(0, 120), style=wx.TE_MULTILINE)
  1529               pos=wx.Point(24, 264), size=wx.Size(215, 17), style=0)
  1529 
  1530 
  1530         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
  1531         self.ContentDescription = wx.TextCtrl(id=wxID_PROJECTDIALOGCONTENTDESCRIPTION,
  1531         self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())
  1532               name='ProductRelease', parent=self.MainPanel, pos=wx.Point(224, 264),
  1532         
  1533               size=wx.Size(295, 120), style=wxTE_MULTILINE)
       
  1534 
       
  1535         self._init_sizers()
  1533         self._init_sizers()
  1536 
  1534 
  1537     def __init__(self, parent):
  1535     def __init__(self, parent):
  1538         self._init_ctrls(parent)
  1536         self._init_ctrls(parent)
  1539         self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE)
  1537         
  1540         self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT)
       
  1541         
       
  1542         EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
       
  1543     
       
  1544     def OnOK(self, event):
  1538     def OnOK(self, event):
  1545         error = []
  1539         error = []
  1546         if self.ProjectName.GetValue() == "":
  1540         if self.ProjectName.GetValue() == "":
  1547             error.append("Project Name")
  1541             error.append("Project Name")
  1548         if self.CompanyName.GetValue() == "":
  1542         if self.CompanyName.GetValue() == "":
  1558                     text += item
  1552                     text += item
  1559                 elif i == len(error) - 1:
  1553                 elif i == len(error) - 1:
  1560                     text += " and %s"%item
  1554                     text += " and %s"%item
  1561                 else:
  1555                 else:
  1562                     text += ", %s"%item 
  1556                     text += ", %s"%item 
  1563             message = wxMessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wxOK|wxICON_ERROR)
  1557             message = wx.MessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wx.OK|wx.ICON_ERROR)
  1564             message.ShowModal()
  1558             message.ShowModal()
  1565             message.Destroy()
  1559             message.Destroy()
  1566         else:
  1560         else:
  1567             self.EndModal(wxID_OK)
  1561             self.EndModal(wx.ID_OK)
  1568 
  1562 
  1569     def SetValues(self, values):
  1563     def SetValues(self, values):
  1570         for item, value in values.items():
  1564         for item, value in values.items():
  1571             if item == "projectName":
  1565             if item == "projectName":
  1572                 self.ProjectName.SetValue(value)
  1566                 self.ProjectName.SetValue(value)
  1599 
  1593 
  1600 #-------------------------------------------------------------------------------
  1594 #-------------------------------------------------------------------------------
  1601 #                            Create Pou Dialog
  1595 #                            Create Pou Dialog
  1602 #-------------------------------------------------------------------------------
  1596 #-------------------------------------------------------------------------------
  1603 
  1597 
  1604 [wxID_POUDIALOG, wxID_POUDIALOGMAINPANEL, wxID_POUDIALOGPOUNAME, 
  1598 [ID_POUDIALOG, ID_POUDIALOGPOUNAME, 
  1605  wxID_POUDIALOGPOUTYPE, wxID_POUDIALOGLANGUAGE, wxID_POUDIALOGSTATICTEXT1,
  1599  ID_POUDIALOGPOUTYPE, ID_POUDIALOGLANGUAGE, ID_POUDIALOGSTATICTEXT1,
  1606  wxID_POUDIALOGSTATICTEXT2, wxID_POUDIALOGSTATICTEXT3, 
  1600  ID_POUDIALOGSTATICTEXT2, ID_POUDIALOGSTATICTEXT3, 
  1607 ] = [wx.NewId() for _init_ctrls in range(8)]
  1601 ] = [wx.NewId() for _init_ctrls in range(7)]
  1608 
  1602 
  1609 class PouDialog(wx.Dialog):
  1603 class PouDialog(wx.Dialog):
  1610     def _init_coll_flexGridSizer1_Items(self, parent):
  1604     def _init_coll_flexGridSizer1_Items(self, parent):
  1611         # generated method, don't edit
  1605         parent.AddSizer(self.MainSizer, 0, border=20, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
  1612 
  1606         parent.AddSizer(self.ButtonSizer, 0, border=20, flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
  1613         parent.AddWindow(self.MainPanel, 0, border=0, flag=0)
  1607         
  1614 
  1608     def _init_coll_flexGridSizer1_Growables(self, parent):
       
  1609         parent.AddGrowableCol(0)
       
  1610         parent.AddGrowableRow(0)
       
  1611     
       
  1612     def _init_coll_MainSizer_Items(self, parent):
       
  1613         parent.AddWindow(self.staticText1, 0, border=0, flag=wx.GROW)
       
  1614         parent.AddWindow(self.PouName, 0, border=0, flag=wx.GROW)
       
  1615         parent.AddWindow(self.staticText2, 0, border=0, flag=wx.GROW)
       
  1616         parent.AddWindow(self.PouType, 0, border=0, flag=wx.GROW)
       
  1617         parent.AddWindow(self.staticText3, 0, border=0, flag=wx.GROW)
       
  1618         parent.AddWindow(self.Language, 0, border=0, flag=wx.GROW)
       
  1619         
       
  1620     def _init_coll_MainSizer_Growables(self, parent):
       
  1621         parent.AddGrowableCol(1)
       
  1622         
  1615     def _init_sizers(self):
  1623     def _init_sizers(self):
  1616         # generated method, don't edit
  1624         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
  1617         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
  1625         self.MainSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=3, vgap=15)
  1618 
  1626 
  1619         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
  1627         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
       
  1628         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
       
  1629         self._init_coll_MainSizer_Items(self.MainSizer)
       
  1630         self._init_coll_MainSizer_Growables(self.MainSizer)
  1620 
  1631 
  1621         self.SetSizer(self.flexGridSizer1)
  1632         self.SetSizer(self.flexGridSizer1)
  1622 
  1633         
  1623     def _init_ctrls(self, prnt):
  1634     def _init_ctrls(self, prnt):
  1624         # generated method, don't edit
  1635         wx.Dialog.__init__(self, id=ID_POUDIALOG,
  1625         wx.Dialog.__init__(self, id=wxID_POUDIALOG,
       
  1626               name='PouDialog', parent=prnt, pos=wx.Point(376, 223),
  1636               name='PouDialog', parent=prnt, pos=wx.Point(376, 223),
  1627               size=wx.Size(300, 200), style=wx.DEFAULT_DIALOG_STYLE,
  1637               size=wx.Size(300, 200), style=wx.DEFAULT_DIALOG_STYLE,
  1628               title='Create a new POU')
  1638               title='Create a new POU')
  1629         self.SetClientSize(wx.Size(300, 200))
  1639         self.SetClientSize(wx.Size(300, 200))
  1630 
  1640 
  1631         self.MainPanel = wx.Panel(id=wxID_POUDIALOGMAINPANEL,
  1641         self.staticText1 = wx.StaticText(id=ID_POUDIALOGSTATICTEXT1,
  1632               name='MainPanel', parent=self, pos=wx.Point(0, 0),
  1642               label='POU Name:', name='staticText1', parent=self,
  1633               size=wx.Size(300, 200), style=wx.TAB_TRAVERSAL)
  1643               pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0)
  1634         self.MainPanel.SetAutoLayout(True)
  1644 
  1635 
  1645         self.PouName = wx.TextCtrl(id=ID_POUDIALOGPOUNAME,
  1636         self.staticText1 = wx.StaticText(id=wxID_POUDIALOGSTATICTEXT1,
  1646               name='POUName', parent=self, pos=wx.Point(0, 0), 
  1637               label='POU Name:', name='staticText1', parent=self.MainPanel,
  1647               size=wx.Size(0, 24), style=0)
  1638               pos=wx.Point(24, 24), size=wx.Size(95, 17), style=0)
  1648 
  1639 
  1649         self.staticText2 = wx.StaticText(id=ID_POUDIALOGSTATICTEXT2,
  1640         self.PouName = wx.TextCtrl(id=wxID_POUDIALOGPOUNAME,
  1650               label='POU Type:', name='staticText2', parent=self,
  1641               name='POUName', parent=self.MainPanel, pos=wx.Point(104, 24), 
  1651               pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0)
  1642               size=wx.Size(150, 24), style=0)
  1652 
  1643 
  1653         self.PouType = wx.Choice(id=ID_POUDIALOGPOUTYPE,
  1644         self.staticText2 = wx.StaticText(id=wxID_POUDIALOGSTATICTEXT2,
  1654               name='POUType', parent=self, pos=wx.Point(0, 0),
  1645               label='POU Type:', name='staticText2', parent=self.MainPanel,
  1655               size=wx.Size(0, 24), style=0)
  1646               pos=wx.Point(24, 64), size=wx.Size(95, 17), style=0)
  1656         self.Bind(wx.EVT_CHOICE, self.OnTypeChanged, id=ID_POUDIALOGPOUTYPE)
  1647 
  1657 
  1648         self.PouType = wx.Choice(id=wxID_POUDIALOGPOUTYPE,
  1658         self.staticText3 = wx.StaticText(id=ID_POUDIALOGSTATICTEXT3,
  1649               name='POUType', parent=self.MainPanel, pos=wx.Point(104, 64),
  1659               label='Language:', name='staticText3', parent=self,
  1650               size=wx.Size(150, 24), style=0)
  1660               pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0)
  1651         EVT_CHOICE(self, wxID_POUDIALOGPOUTYPE, self.OnTypeChanged)
  1661 
  1652 
  1662         self.Language = wx.Choice(id=ID_POUDIALOGLANGUAGE,
  1653         self.staticText3 = wx.StaticText(id=wxID_POUDIALOGSTATICTEXT3,
  1663               name='Language', parent=self, pos=wx.Point(0, 0),
  1654               label='Language:', name='staticText3', parent=self.MainPanel,
  1664               size=wx.Size(0, 24), style=0)
  1655               pos=wx.Point(24, 104), size=wx.Size(95, 17), style=0)
  1665         
  1656 
  1666         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
  1657         self.Language = wx.Choice(id=wxID_POUDIALOGLANGUAGE,
  1667         self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())
  1658               name='Language', parent=self.MainPanel, pos=wx.Point(104, 104),
  1668             
  1659               size=wx.Size(150, 24), style=0)
       
  1660 
       
  1661         self._init_sizers()
  1669         self._init_sizers()
  1662 
  1670 
  1663     def __init__(self, parent):
  1671     def __init__(self, parent):
  1664         self._init_ctrls(parent)
  1672         self._init_ctrls(parent)
  1665         self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE)
       
  1666         self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT)
       
  1667         
  1673         
  1668         for option in ["function","functionBlock","program"]:
  1674         for option in ["function","functionBlock","program"]:
  1669             self.PouType.Append(option)
  1675             self.PouType.Append(option)
  1670         self.RefreshLanguage()
  1676         self.RefreshLanguage()
  1671 
  1677 
  1672         self.PouNames = []
  1678         self.PouNames = []
  1673 
  1679 
  1674         EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
       
  1675     
       
  1676     def OnOK(self, event):
  1680     def OnOK(self, event):
  1677         error = []
  1681         error = []
  1678         pou_name = self.PouName.GetValue()
  1682         pou_name = self.PouName.GetValue()
  1679         if pou_name == "":
  1683         if pou_name == "":
  1680             error.append("POU Name")
  1684             error.append("POU Name")
  1689                     text += item
  1693                     text += item
  1690                 elif i == len(error) - 1:
  1694                 elif i == len(error) - 1:
  1691                     text += " and %s"%item
  1695                     text += " and %s"%item
  1692                 else:
  1696                 else:
  1693                     text += ", %s"%item 
  1697                     text += ", %s"%item 
  1694             message = wxMessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wxOK|wxICON_ERROR)
  1698             message = wx.MessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wx.OK|wx.ICON_ERROR)
  1695             message.ShowModal()
  1699             message.ShowModal()
  1696             message.Destroy()
  1700             message.Destroy()
  1697         elif not TestIdentifier(pou_name):
  1701         elif not TestIdentifier(pou_name):
  1698             message = wxMessageDialog(self, "\"%s\" is not a valid identifier!"%pou_name, "Error", wxOK|wxICON_ERROR)
  1702             message = wx.MessageDialog(self, "\"%s\" is not a valid identifier!"%pou_name, "Error", wx.OK|wx.ICON_ERROR)
  1699             message.ShowModal()
  1703             message.ShowModal()
  1700             message.Destroy()
  1704             message.Destroy()
  1701         elif pou_name.upper() in IEC_KEYWORDS:
  1705         elif pou_name.upper() in IEC_KEYWORDS:
  1702             message = wxMessageDialog(self, "\"%s\" is a keyword. It can't be used!"%pou_name, "Error", wxOK|wxICON_ERROR)
  1706             message = wx.MessageDialog(self, "\"%s\" is a keyword. It can't be used!"%pou_name, "Error", wx.OK|wx.ICON_ERROR)
  1703             message.ShowModal()
  1707             message.ShowModal()
  1704             message.Destroy()
  1708             message.Destroy()
  1705         elif pou_name.upper() in self.PouNames:
  1709         elif pou_name.upper() in self.PouNames:
  1706             message = wxMessageDialog(self, "\"%s\" pou already exists!"%pou_name, "Error", wxOK|wxICON_ERROR)
  1710             message = wx.MessageDialog(self, "\"%s\" pou already exists!"%pou_name, "Error", wx.OK|wx.ICON_ERROR)
  1707             message.ShowModal()
  1711             message.ShowModal()
  1708             message.Destroy()
  1712             message.Destroy()
  1709         else:
  1713         else:
  1710             self.EndModal(wxID_OK)
  1714             self.EndModal(wx.ID_OK)
  1711 
  1715 
  1712     def RefreshLanguage(self):
  1716     def RefreshLanguage(self):
  1713         selection = self.Language.GetStringSelection()
  1717         selection = self.Language.GetStringSelection()
  1714         self.Language.Clear()
  1718         self.Language.Clear()
  1715         for option in ["IL","ST","LD","FBD","SFC"]:
  1719         for option in ["IL","ST","LD","FBD","SFC"]:
  1716             if option != "SFC" or self.PouType.GetStringSelection() == "program":
  1720             if option != "SFC" or self.PouType.GetStringSelection() != "function":
  1717                 self.Language.Append(option)
  1721                 self.Language.Append(option)
  1718         if self.Language.FindString(selection) != wxNOT_FOUND:
  1722         if self.Language.FindString(selection) != wx.NOT_FOUND:
  1719             self.Language.SetStringSelection(selection)
  1723             self.Language.SetStringSelection(selection)
  1720 
  1724 
  1721     def OnTypeChanged(self, event):
  1725     def OnTypeChanged(self, event):
  1722         self.RefreshLanguage()
  1726         self.RefreshLanguage()
  1723         event.Skip()
  1727         event.Skip()
  1744 
  1748 
  1745 #-------------------------------------------------------------------------------
  1749 #-------------------------------------------------------------------------------
  1746 #                          Create Pou Transition Dialog
  1750 #                          Create Pou Transition Dialog
  1747 #-------------------------------------------------------------------------------
  1751 #-------------------------------------------------------------------------------
  1748 
  1752 
  1749 [wxID_POUTRANSITIONDIALOG, wxID_POUTRANSITIONDIALOGMAINPANEL, 
  1753 [ID_POUTRANSITIONDIALOG, ID_POUTRANSITIONDIALOGTRANSITIONNAME, 
  1750  wxID_POUTRANSITIONDIALOGTRANSITIONNAME, wxID_POUTRANSITIONDIALOGLANGUAGE, 
  1754  ID_POUTRANSITIONDIALOGLANGUAGE, ID_POUTRANSITIONDIALOGSTATICTEXT1, 
  1751  wxID_POUTRANSITIONDIALOGSTATICTEXT1, wxID_POUTRANSITIONDIALOGSTATICTEXT2,
  1755  ID_POUTRANSITIONDIALOGSTATICTEXT2,
  1752 ] = [wx.NewId() for _init_ctrls in range(6)]
  1756 ] = [wx.NewId() for _init_ctrls in range(5)]
  1753 
  1757 
  1754 class PouTransitionDialog(wx.Dialog):
  1758 class PouTransitionDialog(wx.Dialog):
  1755     def _init_coll_flexGridSizer1_Items(self, parent):
  1759     def _init_coll_flexGridSizer1_Items(self, parent):
  1756         # generated method, don't edit
  1760         parent.AddSizer(self.MainSizer, 0, border=20, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
  1757 
  1761         parent.AddSizer(self.ButtonSizer, 0, border=20, flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
  1758         parent.AddWindow(self.MainPanel, 0, border=0, flag=0)
  1762         
  1759 
  1763     def _init_coll_flexGridSizer1_Growables(self, parent):
       
  1764         parent.AddGrowableCol(0)
       
  1765         parent.AddGrowableRow(0)
       
  1766     
       
  1767     def _init_coll_MainSizer_Items(self, parent):
       
  1768         parent.AddWindow(self.staticText1, 0, border=0, flag=wx.GROW)
       
  1769         parent.AddWindow(self.TransitionName, 0, border=0, flag=wx.GROW)
       
  1770         parent.AddWindow(self.staticText2, 0, border=0, flag=wx.GROW)
       
  1771         parent.AddWindow(self.Language, 0, border=0, flag=wx.GROW)
       
  1772         
       
  1773     def _init_coll_MainSizer_Growables(self, parent):
       
  1774         parent.AddGrowableCol(1)
       
  1775         
  1760     def _init_sizers(self):
  1776     def _init_sizers(self):
  1761         # generated method, don't edit
  1777         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
  1762         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
  1778         self.MainSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=2, vgap=15)
  1763 
  1779 
  1764         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
  1780         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
       
  1781         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
       
  1782         self._init_coll_MainSizer_Items(self.MainSizer)
       
  1783         self._init_coll_MainSizer_Growables(self.MainSizer)
  1765 
  1784 
  1766         self.SetSizer(self.flexGridSizer1)
  1785         self.SetSizer(self.flexGridSizer1)
  1767 
  1786 
  1768     def _init_ctrls(self, prnt):
  1787     def _init_ctrls(self, prnt):
  1769         # generated method, don't edit
  1788         wx.Dialog.__init__(self, id=ID_POUTRANSITIONDIALOG,
  1770         wx.Dialog.__init__(self, id=wxID_POUTRANSITIONDIALOG,
       
  1771               name='PouTransitionDialog', parent=prnt, pos=wx.Point(376, 223),
  1789               name='PouTransitionDialog', parent=prnt, pos=wx.Point(376, 223),
  1772               size=wx.Size(350, 200), style=wx.DEFAULT_DIALOG_STYLE,
  1790               size=wx.Size(350, 200), style=wx.DEFAULT_DIALOG_STYLE,
  1773               title='Create a new transition')
  1791               title='Create a new transition')
  1774         self.SetClientSize(wx.Size(350, 160))
  1792         self.SetClientSize(wx.Size(350, 160))
  1775 
  1793 
  1776         self.MainPanel = wx.Panel(id=wxID_POUTRANSITIONDIALOGMAINPANEL,
  1794         self.staticText1 = wx.StaticText(id=ID_POUTRANSITIONDIALOGSTATICTEXT1,
  1777               name='MainPanel', parent=self, pos=wx.Point(0, 0),
  1795               label='Transition Name:', name='staticText1', parent=self,
  1778               size=wx.Size(350, 200), style=wx.TAB_TRAVERSAL)
  1796               pos=wx.Point(0, 0), size=wx.Size(120, 17), style=0)
  1779         self.MainPanel.SetAutoLayout(True)
  1797 
  1780 
  1798         self.TransitionName = wx.TextCtrl(id=ID_POUTRANSITIONDIALOGTRANSITIONNAME,
  1781         self.staticText1 = wx.StaticText(id=wxID_POUTRANSITIONDIALOGSTATICTEXT1,
  1799               name='TransitionName', parent=self, pos=wx.Point(0, 0),
  1782               label='Transition Name:', name='staticText1', parent=self.MainPanel,
  1800               size=wx.Size(0, 24), style=0)
  1783               pos=wx.Point(24, 24), size=wx.Size(145, 17), style=0)
  1801 
  1784 
  1802         self.staticText2 = wx.StaticText(id=ID_POUTRANSITIONDIALOGSTATICTEXT2,
  1785         self.TransitionName = wx.TextCtrl(id=wxID_POUTRANSITIONDIALOGTRANSITIONNAME,
  1803               label='Language:', name='staticText2', parent=self,
  1786               name='TransitionName', parent=self.MainPanel, pos=wx.Point(154, 24),
  1804               pos=wx.Point(0, 0), size=wx.Size(120, 17), style=0)
  1787               size=wx.Size(150, 24), style=0)
  1805 
  1788 
  1806         self.Language = wx.Choice(id=ID_POUTRANSITIONDIALOGLANGUAGE,
  1789         self.staticText2 = wx.StaticText(id=wxID_POUTRANSITIONDIALOGSTATICTEXT2,
  1807               name='Language', parent=self, pos=wx.Point(0, 0),
  1790               label='Language:', name='staticText2', parent=self.MainPanel,
  1808               size=wx.Size(0, 24), style=0)
  1791               pos=wx.Point(24, 64), size=wx.Size(145, 17), style=0)
  1809         
  1792 
  1810         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
  1793         self.Language = wx.Choice(id=wxID_POUTRANSITIONDIALOGLANGUAGE,
  1811         self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())
  1794               name='Language', parent=self.MainPanel, pos=wx.Point(154, 64),
  1812         
  1795               size=wx.Size(150, 24), style=0)
       
  1796 
       
  1797         self._init_sizers()
  1813         self._init_sizers()
  1798 
  1814 
  1799     def __init__(self, parent):
  1815     def __init__(self, parent):
  1800         self._init_ctrls(parent)
  1816         self._init_ctrls(parent)
  1801         self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE)
       
  1802         self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT)
       
  1803         
  1817         
  1804         for option in ["IL","ST","LD","FBD"]:
  1818         for option in ["IL","ST","LD","FBD"]:
  1805             self.Language.Append(option)
  1819             self.Language.Append(option)
  1806         
  1820         
  1807         EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
       
  1808     
       
  1809     def OnOK(self, event):
  1821     def OnOK(self, event):
  1810         error = []
  1822         error = []
  1811         if self.TransitionName.GetValue() == "":
  1823         if self.TransitionName.GetValue() == "":
  1812             error.append("Transition Name")
  1824             error.append("Transition Name")
  1813         if self.Language.GetStringSelection() == "":
  1825         if self.Language.GetStringSelection() == "":
  1819                     text += item
  1831                     text += item
  1820                 elif i == len(error) - 1:
  1832                 elif i == len(error) - 1:
  1821                     text += " and %s"%item
  1833                     text += " and %s"%item
  1822                 else:
  1834                 else:
  1823                     text += ", %s"%item 
  1835                     text += ", %s"%item 
  1824             message = wxMessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wxOK|wxICON_ERROR)
  1836             message = wx.MessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wx.OK|wx.ICON_ERROR)
  1825             message.ShowModal()
  1837             message.ShowModal()
  1826             message.Destroy()
  1838             message.Destroy()
  1827         else:
  1839         else:
  1828             self.EndModal(wxID_OK)
  1840             self.EndModal(wx.ID_OK)
  1829 
  1841 
  1830     def SetValues(self, values):
  1842     def SetValues(self, values):
  1831         for item, value in values.items():
  1843         for item, value in values.items():
  1832             if item == "transitionName":
  1844             if item == "transitionName":
  1833                 self.TransitionName.SetValue(value)
  1845                 self.TransitionName.SetValue(value)
  1842 
  1854 
  1843 #-------------------------------------------------------------------------------
  1855 #-------------------------------------------------------------------------------
  1844 #                          Create Pou Action Dialog
  1856 #                          Create Pou Action Dialog
  1845 #-------------------------------------------------------------------------------
  1857 #-------------------------------------------------------------------------------
  1846 
  1858 
  1847 [wxID_POUACTIONDIALOG, wxID_POUACTIONDIALOGMAINPANEL, 
  1859 [ID_POUACTIONDIALOG, ID_POUACTIONDIALOGACTIONNAME, 
  1848  wxID_POUACTIONDIALOGACTIONNAME, wxID_POUACTIONDIALOGLANGUAGE, 
  1860  ID_POUACTIONDIALOGLANGUAGE, ID_POUACTIONDIALOGSTATICTEXT1, 
  1849  wxID_POUACTIONDIALOGSTATICTEXT1, wxID_POUACTIONDIALOGSTATICTEXT2, 
  1861  ID_POUACTIONDIALOGSTATICTEXT2, 
  1850 ] = [wx.NewId() for _init_ctrls in range(6)]
  1862 ] = [wx.NewId() for _init_ctrls in range(5)]
  1851 
  1863 
  1852 class PouActionDialog(wx.Dialog):
  1864 class PouActionDialog(wx.Dialog):
  1853     def _init_coll_flexGridSizer1_Items(self, parent):
  1865     def _init_coll_flexGridSizer1_Items(self, parent):
  1854         # generated method, don't edit
  1866         parent.AddSizer(self.MainSizer, 0, border=20, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
  1855 
  1867         parent.AddSizer(self.ButtonSizer, 0, border=20, flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
  1856         parent.AddWindow(self.MainPanel, 0, border=0, flag=0)
  1868         
  1857 
  1869     def _init_coll_flexGridSizer1_Growables(self, parent):
       
  1870         parent.AddGrowableCol(0)
       
  1871         parent.AddGrowableRow(0)
       
  1872     
       
  1873     def _init_coll_MainSizer_Items(self, parent):
       
  1874         parent.AddWindow(self.staticText1, 0, border=0, flag=wx.GROW)
       
  1875         parent.AddWindow(self.ActionName, 0, border=0, flag=wx.GROW)
       
  1876         parent.AddWindow(self.staticText2, 0, border=0, flag=wx.GROW)
       
  1877         parent.AddWindow(self.Language, 0, border=0, flag=wx.GROW)
       
  1878         
       
  1879     def _init_coll_MainSizer_Growables(self, parent):
       
  1880         parent.AddGrowableCol(1)
       
  1881         
  1858     def _init_sizers(self):
  1882     def _init_sizers(self):
  1859         # generated method, don't edit
  1883         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
  1860         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
  1884         self.MainSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=2, vgap=15)
  1861 
  1885 
  1862         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
  1886         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
       
  1887         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
       
  1888         self._init_coll_MainSizer_Items(self.MainSizer)
       
  1889         self._init_coll_MainSizer_Growables(self.MainSizer)
  1863 
  1890 
  1864         self.SetSizer(self.flexGridSizer1)
  1891         self.SetSizer(self.flexGridSizer1)
  1865 
  1892 
  1866     def _init_ctrls(self, prnt):
  1893     def _init_ctrls(self, prnt):
  1867         # generated method, don't edit
  1894         wx.Dialog.__init__(self, id=ID_POUACTIONDIALOG,
  1868         wx.Dialog.__init__(self, id=wxID_POUACTIONDIALOG,
       
  1869               name='PouActionDialog', parent=prnt, pos=wx.Point(376, 223),
  1895               name='PouActionDialog', parent=prnt, pos=wx.Point(376, 223),
  1870               size=wx.Size(320, 200), style=wx.DEFAULT_DIALOG_STYLE,
  1896               size=wx.Size(320, 200), style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
  1871               title='Create a new action')
  1897               title='Create a new action')
  1872         self.SetClientSize(wx.Size(320, 160))
  1898         self.SetClientSize(wx.Size(320, 160))
  1873 
  1899 
  1874         self.MainPanel = wx.Panel(id=wxID_POUACTIONDIALOGMAINPANEL,
  1900         self.staticText1 = wx.StaticText(id=ID_POUACTIONDIALOGSTATICTEXT1,
  1875               name='MainPanel', parent=self, pos=wx.Point(0, 0),
  1901               label='Action Name:', name='staticText1', parent=self,
  1876               size=wx.Size(350, 200), style=wx.TAB_TRAVERSAL)
  1902               pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0)
  1877         self.MainPanel.SetAutoLayout(True)
  1903 
  1878 
  1904         self.ActionName = wx.TextCtrl(id=ID_POUACTIONDIALOGACTIONNAME,
  1879         self.staticText1 = wx.StaticText(id=wxID_POUACTIONDIALOGSTATICTEXT1,
  1905               name='ActionName', parent=self, pos=wx.Point(0, 0),
  1880               label='Action Name:', name='staticText1', parent=self.MainPanel,
  1906               size=wx.Size(0, 24), style=0)
  1881               pos=wx.Point(24, 24), size=wx.Size(145, 17), style=0)
  1907 
  1882 
  1908         self.staticText2 = wx.StaticText(id=ID_POUACTIONDIALOGSTATICTEXT2,
  1883         self.ActionName = wx.TextCtrl(id=wxID_POUACTIONDIALOGACTIONNAME,
  1909               label='Language:', name='staticText2', parent=self,
  1884               name='ActionName', parent=self.MainPanel, pos=wx.Point(124, 24),
  1910               pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0)
  1885               size=wx.Size(150, 24), style=0)
  1911 
  1886 
  1912         self.Language = wx.Choice(id=ID_POUACTIONDIALOGLANGUAGE,
  1887         self.staticText3 = wx.StaticText(id=wxID_POUACTIONDIALOGSTATICTEXT2,
  1913               name='Language', parent=self, pos=wx.Point(0, 0),
  1888               label='Language:', name='staticText2', parent=self.MainPanel,
  1914               size=wx.Size(0, 24), style=0)
  1889               pos=wx.Point(24, 64), size=wx.Size(145, 17), style=0)
  1915         
  1890 
  1916         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
  1891         self.Language = wx.Choice(id=wxID_POUACTIONDIALOGLANGUAGE,
  1917         self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())
  1892               name='Language', parent=self.MainPanel, pos=wx.Point(124, 64),
  1918         
  1893               size=wx.Size(150, 24), style=0)
       
  1894 
       
  1895         self._init_sizers()
  1919         self._init_sizers()
  1896 
  1920 
  1897     def __init__(self, parent):
  1921     def __init__(self, parent):
  1898         self._init_ctrls(parent)
  1922         self._init_ctrls(parent)
  1899         self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE)
       
  1900         self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT)
       
  1901         
  1923         
  1902         for option in ["IL","ST","LD","FBD"]:
  1924         for option in ["IL","ST","LD","FBD"]:
  1903             self.Language.Append(option)
  1925             self.Language.Append(option)
  1904         
  1926         
  1905         EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
       
  1906     
       
  1907     def OnOK(self, event):
  1927     def OnOK(self, event):
  1908         error = []
  1928         error = []
  1909         if self.ActionName.GetValue() == "":
  1929         if self.ActionName.GetValue() == "":
  1910             error.append("Action Name")
  1930             error.append("Action Name")
  1911         if self.Language.GetStringSelection() == "":
  1931         if self.Language.GetStringSelection() == "":
  1917                     text += item
  1937                     text += item
  1918                 elif i == len(error) - 1:
  1938                 elif i == len(error) - 1:
  1919                     text += " and %s"%item
  1939                     text += " and %s"%item
  1920                 else:
  1940                 else:
  1921                     text += ", %s"%item 
  1941                     text += ", %s"%item 
  1922             message = wxMessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wxOK|wxICON_ERROR)
  1942             message = wx.MessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wx.OK|wx.ICON_ERROR)
  1923             message.ShowModal()
  1943             message.ShowModal()
  1924             message.Destroy()
  1944             message.Destroy()
  1925         else:
  1945         else:
  1926             self.EndModal(wxID_OK)
  1946             self.EndModal(wx.ID_OK)
  1927 
  1947 
  1928     def SetValues(self, values):
  1948     def SetValues(self, values):
  1929         for item, value in values.items():
  1949         for item, value in values.items():
  1930             if item == "actionName":
  1950             if item == "actionName":
  1931                 self.ActionName.SetValue(value)
  1951                 self.ActionName.SetValue(value)
  1940 
  1960 
  1941 #-------------------------------------------------------------------------------
  1961 #-------------------------------------------------------------------------------
  1942 #                            Pou Interface Dialog
  1962 #                            Pou Interface Dialog
  1943 #-------------------------------------------------------------------------------
  1963 #-------------------------------------------------------------------------------
  1944 
  1964 
  1945 class VariableTable(wxPyGridTableBase):
  1965 class VariableTable(wx.grid.PyGridTableBase):
  1946     
  1966     
  1947     """
  1967     """
  1948     A custom wxGrid Table using user supplied data
  1968     A custom wx.grid.Grid Table using user supplied data
  1949     """
  1969     """
  1950     def __init__(self, parent, data, colnames):
  1970     def __init__(self, parent, data, colnames):
  1951         # The base class must be initialized *first*
  1971         # The base class must be initialized *first*
  1952         wxPyGridTableBase.__init__(self)
  1972         wx.grid.PyGridTableBase.__init__(self)
  1953         self.data = data
  1973         self.data = data
  1954         self.old_value = None
  1974         self.old_value = None
  1955         self.colnames = colnames
  1975         self.colnames = colnames
  1956         self.Parent = parent
  1976         self.Parent = parent
  1957         # XXX
  1977         # XXX
  1993     def GetOldValue(self):
  2013     def GetOldValue(self):
  1994         return self.old_value
  2014         return self.old_value
  1995     
  2015     
  1996     def ResetView(self, grid):
  2016     def ResetView(self, grid):
  1997         """
  2017         """
  1998         (wxGrid) -> Reset the grid view.   Call this to
  2018         (wx.grid.Grid) -> Reset the grid view.   Call this to
  1999         update the grid if rows and columns have been added or deleted
  2019         update the grid if rows and columns have been added or deleted
  2000         """
  2020         """
  2001         grid.BeginBatch()
  2021         grid.BeginBatch()
  2002         for current, new, delmsg, addmsg in [
  2022         for current, new, delmsg, addmsg in [
  2003             (self._rows, self.GetNumberRows(), wxGRIDTABLE_NOTIFY_ROWS_DELETED, wxGRIDTABLE_NOTIFY_ROWS_APPENDED),
  2023             (self._rows, self.GetNumberRows(), wx.grid.GRIDTABLE_NOTIFY_ROWS_DELETED, wx.grid.GRIDTABLE_NOTIFY_ROWS_APPENDED),
  2004             (self._cols, self.GetNumberCols(), wxGRIDTABLE_NOTIFY_COLS_DELETED, wxGRIDTABLE_NOTIFY_COLS_APPENDED),
  2024             (self._cols, self.GetNumberCols(), wx.grid.GRIDTABLE_NOTIFY_COLS_DELETED, wx.grid.GRIDTABLE_NOTIFY_COLS_APPENDED),
  2005         ]:
  2025         ]:
  2006             if new < current:
  2026             if new < current:
  2007                 msg = wxGridTableMessage(self,delmsg,new,current-new)
  2027                 msg = wx.grid.GridTableMessage(self,delmsg,new,current-new)
  2008                 grid.ProcessTableMessage(msg)
  2028                 grid.ProcessTableMessage(msg)
  2009             elif new > current:
  2029             elif new > current:
  2010                 msg = wxGridTableMessage(self,addmsg,new-current)
  2030                 msg = wx.grid.GridTableMessage(self,addmsg,new-current)
  2011                 grid.ProcessTableMessage(msg)
  2031                 grid.ProcessTableMessage(msg)
  2012                 self.UpdateValues(grid)
  2032                 self.UpdateValues(grid)
  2013         grid.EndBatch()
  2033         grid.EndBatch()
  2014 
  2034 
  2015         self._rows = self.GetNumberRows()
  2035         self._rows = self.GetNumberRows()
  2022         grid.ForceRefresh()
  2042         grid.ForceRefresh()
  2023 
  2043 
  2024     def UpdateValues(self, grid):
  2044     def UpdateValues(self, grid):
  2025         """Update all displayed values"""
  2045         """Update all displayed values"""
  2026         # This sends an event to the grid table to update all of the values
  2046         # This sends an event to the grid table to update all of the values
  2027         msg = wxGridTableMessage(self, wxGRIDTABLE_REQUEST_VIEW_GET_VALUES)
  2047         msg = wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_REQUEST_VIEW_GET_VALUES)
  2028         grid.ProcessTableMessage(msg)
  2048         grid.ProcessTableMessage(msg)
  2029 
  2049 
  2030     def _updateColAttrs(self, grid):
  2050     def _updateColAttrs(self, grid):
  2031         """
  2051         """
  2032         wxGrid -> update the column attributes to add the
  2052         wx.grid.Grid -> update the column attributes to add the
  2033         appropriate renderer given the column name.
  2053         appropriate renderer given the column name.
  2034 
  2054 
  2035         Otherwise default to the default renderer.
  2055         Otherwise default to the default renderer.
  2036         """
  2056         """
  2037         
  2057         
  2038         for col in range(self.GetNumberCols()):
  2058         for col in range(self.GetNumberCols()):
  2039             attr = wxGridCellAttr()
  2059             attr = wx.grid.GridCellAttr()
  2040             attr.SetAlignment(self.Parent.ColAlignements[col], wxALIGN_CENTRE)
  2060             attr.SetAlignment(self.Parent.ColAlignements[col], wx.ALIGN_CENTRE)
  2041             grid.SetColAttr(col, attr)
  2061             grid.SetColAttr(col, attr)
  2042             grid.SetColSize(col, self.Parent.ColSizes[col])
  2062             grid.SetColSize(col, self.Parent.ColSizes[col])
  2043         
  2063         
  2044         typelist = None
  2064         typelist = None
  2045         accesslist = None
  2065         accesslist = None
  2053                     grid.SetReadOnly(row, col, True)
  2073                     grid.SetReadOnly(row, col, True)
  2054                 elif colname == "Name":
  2074                 elif colname == "Name":
  2055                     if self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]:
  2075                     if self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]:
  2056                         grid.SetReadOnly(row, col, True)
  2076                         grid.SetReadOnly(row, col, True)
  2057                     else:
  2077                     else:
  2058                         editor = wxGridCellTextEditor()
  2078                         editor = wx.grid.GridCellTextEditor()
  2059                         renderer = wxGridCellStringRenderer()
  2079                         renderer = wx.grid.GridCellStringRenderer()
  2060                 elif colname in ["Initial Value","Location"]:
  2080                 elif colname in ["Initial Value","Location"]:
  2061                     editor = wxGridCellTextEditor()
  2081                     editor = wx.grid.GridCellTextEditor()
  2062                     renderer = wxGridCellStringRenderer()
  2082                     renderer = wx.grid.GridCellStringRenderer()
  2063                 elif colname == "Class":
  2083                 elif colname == "Class":
  2064                     if len(self.Parent.ClassList) == 1 or self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]:
  2084                     if len(self.Parent.ClassList) == 1 or self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]:
  2065                         grid.SetReadOnly(row, col, True)
  2085                         grid.SetReadOnly(row, col, True)
  2066                     else:
  2086                     else:
  2067                         editor = wxGridCellChoiceEditor()
  2087                         editor = wx.grid.GridCellChoiceEditor()
  2068                         excluded = []
  2088                         excluded = []
  2069                         if self.Parent.PouIsUsed:
  2089                         if self.Parent.PouIsUsed:
  2070                             excluded.extend(["Input","Output","InOut"])    
  2090                             excluded.extend(["Input","Output","InOut"])    
  2071                         editor.SetParameters(",".join([choice for choice in self.Parent.ClassList if choice not in excluded]))
  2091                         editor.SetParameters(",".join([choice for choice in self.Parent.ClassList if choice not in excluded]))
  2072                 elif colname == "Type":
  2092                 elif colname == "Type":
  2073                     if self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]:
  2093                     if self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]:
  2074                         grid.SetReadOnly(row, col, True)
  2094                         grid.SetReadOnly(row, col, True)
  2075                     else:
  2095                     else:
  2076                         editor = wxGridCellChoiceEditor()
  2096                         editor = wx.grid.GridCellChoiceEditor()
  2077                         editor.SetParameters(self.Parent.TypeList)
  2097                         editor.SetParameters(self.Parent.TypeList)
  2078                 elif colname in ["Retain", "Constant"]:
  2098                 elif colname in ["Retain", "Constant"]:
  2079                     editor = wxGridCellChoiceEditor()
  2099                     editor = wx.grid.GridCellChoiceEditor()
  2080                     editor.SetParameters(self.Parent.OptionList)
  2100                     editor.SetParameters(self.Parent.OptionList)
  2081                     
  2101                     
  2082                 grid.SetCellEditor(row, col, editor)
  2102                 grid.SetCellEditor(row, col, editor)
  2083                 grid.SetCellRenderer(row, col, renderer)
  2103                 grid.SetCellRenderer(row, col, renderer)
  2084                 
  2104                 
  2085                 grid.SetCellBackgroundColour(row, col, wxWHITE)
  2105                 grid.SetCellBackgroundColour(row, col, wx.WHITE)
  2086     
  2106     
  2087     def SetData(self, data):
  2107     def SetData(self, data):
  2088         self.data = data
  2108         self.data = data
  2089     
  2109     
  2090     def GetData(self):
  2110     def GetData(self):
  2116         self.Parent = parent
  2136         self.Parent = parent
  2117     
  2137     
  2118     def OnDropText(self, x, y, data):
  2138     def OnDropText(self, x, y, data):
  2119         col = self.Parent.VariablesGrid.XToCol(x)
  2139         col = self.Parent.VariablesGrid.XToCol(x)
  2120         row = self.Parent.VariablesGrid.YToRow(y)
  2140         row = self.Parent.VariablesGrid.YToRow(y)
  2121         if col != wxNOT_FOUND and row != wxNOT_FOUND:
  2141         if col != wx.NOT_FOUND and row != wx.NOT_FOUND:
  2122             if self.Parent.Table.GetColLabelValue(col) != "Location":
  2142             if self.Parent.Table.GetColLabelValue(col) != "Location":
  2123                 return
  2143                 return
  2124             try:
  2144             try:
  2125                 values = eval(data)    
  2145                 values = eval(data)    
  2126             except:
  2146             except:
  2127                 values = None
  2147                 values = None
  2128             if values and values[1] == "location":
  2148             if values and values[1] == "location":
  2129                 dialog = wxSingleChoiceDialog(self.Parent, "Select a variable class:", "Variable class", ["Input", "Output", "Memory"], wxOK|wxCANCEL)
  2149                 dialog = wx.SingleChoiceDialog(self.Parent, "Select a variable class:", "Variable class", ["Input", "Output", "Memory"], wx.OK|wx.CANCEL)
  2130                 if dialog.ShowModal() == wxID_OK:
  2150                 if dialog.ShowModal() == wx.ID_OK:
  2131                     selected = dialog.GetSelection()
  2151                     selected = dialog.GetSelection()
  2132                     if selected == 0:
  2152                     if selected == 0:
  2133                         location = "%I" + values[0]
  2153                         location = "%I" + values[0]
  2134                     elif selected == 1:
  2154                     elif selected == 1:
  2135                         location = "%Q" + values[0]
  2155                         location = "%Q" + values[0]
  2138                     self.Parent.Table.SetValue(row - 1, col, location)
  2158                     self.Parent.Table.SetValue(row - 1, col, location)
  2139                     self.Parent.Table.ResetView(self.Parent.VariablesGrid)
  2159                     self.Parent.Table.ResetView(self.Parent.VariablesGrid)
  2140                     self.Parent.SaveValues()
  2160                     self.Parent.SaveValues()
  2141                 dialog.Destroy()    
  2161                 dialog.Destroy()    
  2142 
  2162 
  2143 [wxID_POUEDITORPANEL, wxID_POUEDITORPANELVIEWER, 
  2163 [ID_POUEDITORPANEL, ID_POUEDITORPANELVIEWER, 
  2144  wxID_POUEDITORPANELVARIABLESGRID, wxID_POUEDITORPANELRETURNTYPE, 
  2164  ID_POUEDITORPANELVARIABLESGRID, ID_POUEDITORPANELRETURNTYPE, 
  2145  wxID_POUEDITORPANELCLASSFILTER, wxID_POUEDITORPANELADDBUTTON,
  2165  ID_POUEDITORPANELCLASSFILTER, ID_POUEDITORPANELADDBUTTON,
  2146  wxID_POUEDITORPANELDELETEBUTTON, wxID_POUEDITORPANELUPBUTTON, 
  2166  ID_POUEDITORPANELDELETEBUTTON, ID_POUEDITORPANELUPBUTTON, 
  2147  wxID_POUEDITORPANELDOWNBUTTON, wxID_POUEDITORPANELSTATICTEXT1, 
  2167  ID_POUEDITORPANELDOWNBUTTON, ID_POUEDITORPANELSTATICTEXT1, 
  2148  wxID_POUEDITORPANELSTATICTEXT2, wxID_POUEDITORPANELSTATICTEXT3,
  2168  ID_POUEDITORPANELSTATICTEXT2, ID_POUEDITORPANELSTATICTEXT3,
  2149 ] = [wx.NewId() for _init_ctrls in range(12)]
  2169 ] = [wx.NewId() for _init_ctrls in range(12)]
  2150 
  2170 
  2151 class PouEditorPanel(wx.Panel):
  2171 class PouEditorPanel(wx.Panel):
  2152     def _init_coll_MainPanelSizer_Items(self, parent):
  2172     def _init_coll_MainPanelSizer_Items(self, parent):
  2153         # generated method, don't edit
  2173         parent.AddWindow(self.Viewer, 0, border=0, flag=wx.GROW)
  2154 
  2174         parent.AddSizer(self.VariablePanelSizer, 0, border=0, flag=wx.GROW)
  2155         parent.AddWindow(self.Viewer, 0, border=0, flag=wxGROW)
       
  2156         parent.AddSizer(self.VariablePanelSizer, 0, border=0, flag=wxGROW)
       
  2157 
  2175 
  2158     def _init_coll_MainPanelSizer_Growables(self, parent):
  2176     def _init_coll_MainPanelSizer_Growables(self, parent):
  2159         # generated method, don't edit
       
  2160 
       
  2161         parent.AddGrowableCol(0)
  2177         parent.AddGrowableCol(0)
  2162         parent.AddGrowableRow(0)
  2178         parent.AddGrowableRow(0)
  2163     
  2179     
  2164     def _init_coll_VariablePanelSizer_Items(self, parent):
  2180     def _init_coll_VariablePanelSizer_Items(self, parent):
  2165         # generated method, don't edit
  2181         parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wx.GROW)
  2166 
  2182         parent.AddSizer(self.ControlPanelSizer, 0, border=0, flag=wx.GROW)
  2167         parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wxGROW)
       
  2168         parent.AddSizer(self.ControlPanelSizer, 0, border=0, flag=wxGROW)
       
  2169     
  2183     
  2170     def _init_coll_VariablePanelSizer_Growables(self, parent):
  2184     def _init_coll_VariablePanelSizer_Growables(self, parent):
  2171         # generated method, don't edit
       
  2172 
       
  2173         parent.AddGrowableCol(0)
  2185         parent.AddGrowableCol(0)
  2174         parent.AddGrowableRow(0)
  2186         parent.AddGrowableRow(0)
  2175     
  2187     
  2176     def _init_coll_ControlPanelSizer_Items(self, parent):
  2188     def _init_coll_ControlPanelSizer_Items(self, parent):
  2177         # generated method, don't edit
  2189         parent.AddSizer(self.ChoicePanelSizer, 0, border=0, flag=wx.GROW)
  2178 
  2190         parent.AddSizer(self.ButtonPanelSizer, 0, border=0, flag=wx.ALIGN_CENTER)
  2179         parent.AddSizer(self.ChoicePanelSizer, 0, border=0, flag=wxGROW)
       
  2180         parent.AddSizer(self.ButtonPanelSizer, 0, border=0, flag=wxALIGN_CENTER)
       
  2181 
  2191 
  2182     def _init_coll_ControlPanelSizer_Growables(self, parent):
  2192     def _init_coll_ControlPanelSizer_Growables(self, parent):
  2183         # generated method, don't edit
       
  2184 
       
  2185         parent.AddGrowableCol(0)
  2193         parent.AddGrowableCol(0)
  2186         parent.AddGrowableRow(0)
  2194         parent.AddGrowableRow(0)
  2187         parent.AddGrowableRow(1)
  2195         parent.AddGrowableRow(1)
  2188 
  2196 
  2189     def _init_coll_ChoicePanelSizer_Items(self, parent):
  2197     def _init_coll_ChoicePanelSizer_Items(self, parent):
  2190         # generated method, don't edit
  2198         parent.AddWindow(self.staticText1, 0, border=0, flag=wx.ALIGN_BOTTOM)
  2191 
       
  2192         parent.AddWindow(self.staticText1, 0, border=0, flag=wxALIGN_BOTTOM)
       
  2193         parent.AddWindow(self.ReturnType, 0, border=0, flag=0)
  2199         parent.AddWindow(self.ReturnType, 0, border=0, flag=0)
  2194         parent.AddWindow(self.staticText2, 0, border=0, flag=wxALIGN_BOTTOM)
  2200         parent.AddWindow(self.staticText2, 0, border=0, flag=wx.ALIGN_BOTTOM)
  2195         parent.AddWindow(self.ClassFilter, 0, border=0, flag=0)
  2201         parent.AddWindow(self.ClassFilter, 0, border=0, flag=0)
  2196 
  2202 
  2197     def _init_coll_ButtonPanelSizer_Items(self, parent):
  2203     def _init_coll_ButtonPanelSizer_Items(self, parent):
  2198         # generated method, don't edit
       
  2199 
       
  2200         parent.AddWindow(self.UpButton, 0, border=0, flag=0)
  2204         parent.AddWindow(self.UpButton, 0, border=0, flag=0)
  2201         parent.AddWindow(self.AddButton, 0, border=0, flag=0)
  2205         parent.AddWindow(self.AddButton, 0, border=0, flag=0)
  2202         parent.AddWindow(self.DownButton, 0, border=0, flag=0)
  2206         parent.AddWindow(self.DownButton, 0, border=0, flag=0)
  2203         parent.AddWindow(self.DeleteButton, 0, border=0, flag=0)
  2207         parent.AddWindow(self.DeleteButton, 0, border=0, flag=0)
  2204         
  2208         
  2205     def _init_coll_ButtonPanelSizer_Growables(self, parent):
  2209     def _init_coll_ButtonPanelSizer_Growables(self, parent):
  2206         # generated method, don't edit
       
  2207 
       
  2208         parent.AddGrowableCol(0)
  2210         parent.AddGrowableCol(0)
  2209         parent.AddGrowableCol(1)
  2211         parent.AddGrowableCol(1)
  2210         parent.AddGrowableCol(2)
  2212         parent.AddGrowableCol(2)
  2211         parent.AddGrowableCol(3)
  2213         parent.AddGrowableCol(3)
  2212         parent.AddGrowableRow(0)
  2214         parent.AddGrowableRow(0)
  2213 
  2215 
  2214     def _init_sizers(self):
  2216     def _init_sizers(self):
  2215         # generated method, don't edit
       
  2216         self.MainPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
  2217         self.MainPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
  2217         
       
  2218         self.VariablePanelSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=0)
  2218         self.VariablePanelSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=0)
  2219         
       
  2220         self.ControlPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
  2219         self.ControlPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
  2221         
       
  2222         self.ChoicePanelSizer = wx.GridSizer(cols=1, hgap=5, rows=4, vgap=5)
  2220         self.ChoicePanelSizer = wx.GridSizer(cols=1, hgap=5, rows=4, vgap=5)
  2223         
       
  2224         self.ButtonPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0)
  2221         self.ButtonPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0)
  2225         
  2222         
  2226         self._init_coll_MainPanelSizer_Items(self.MainPanelSizer)
  2223         self._init_coll_MainPanelSizer_Items(self.MainPanelSizer)
  2227         self._init_coll_MainPanelSizer_Growables(self.MainPanelSizer)
  2224         self._init_coll_MainPanelSizer_Growables(self.MainPanelSizer)
  2228         self._init_coll_VariablePanelSizer_Items(self.VariablePanelSizer)
  2225         self._init_coll_VariablePanelSizer_Items(self.VariablePanelSizer)
  2234         self._init_coll_ButtonPanelSizer_Growables(self.ButtonPanelSizer)
  2231         self._init_coll_ButtonPanelSizer_Growables(self.ButtonPanelSizer)
  2235         
  2232         
  2236         self.SetSizer(self.MainPanelSizer)
  2233         self.SetSizer(self.MainPanelSizer)
  2237 
  2234 
  2238     def _init_ctrls(self, prnt, element_type):
  2235     def _init_ctrls(self, prnt, element_type):
  2239         # generated method, don't edit
  2236         wx.Panel.__init__(self, id=ID_POUEDITORPANEL,
  2240         wx.Panel.__init__(self, id=wxID_POUEDITORPANEL,
       
  2241               name='EditVariablePanel', parent=prnt, pos=wx.Point(0, 0),
  2237               name='EditVariablePanel', parent=prnt, pos=wx.Point(0, 0),
  2242               size=wx.Size(-1, -1), style=0)
  2238               size=wx.Size(-1, -1), style=0)
  2243         
  2239         
  2244         if element_type == "config":
  2240         if element_type == "config":
  2245             self.Viewer = wx.Panel(id=wxID_POUEDITORPANELVIEWER,
  2241             self.Viewer = wx.Panel(id=ID_POUEDITORPANELVIEWER,
  2246               name='ConfigPanel', parent=self, pos=wx.Point(0, 0),
  2242               name='ConfigPanel', parent=self, pos=wx.Point(0, 0),
  2247               size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL)
  2243               size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL)
  2248             self.Viewer.ResetBuffer = lambda: None
  2244             self.Viewer.ResetBuffer = lambda: None
  2249             self.Viewer.RefreshView = lambda: None
  2245             self.Viewer.RefreshView = lambda: None
  2250         elif element_type == "resource":
  2246         elif element_type == "resource":
  2261             if element_type == "IL":
  2257             if element_type == "IL":
  2262                 self.Viewer.SetKeywords(IL_KEYWORDS)
  2258                 self.Viewer.SetKeywords(IL_KEYWORDS)
  2263             else:
  2259             else:
  2264                 self.Viewer.SetKeywords(ST_KEYWORDS)
  2260                 self.Viewer.SetKeywords(ST_KEYWORDS)
  2265         
  2261         
  2266         self.staticText1 = wx.StaticText(id=wxID_POUEDITORPANELSTATICTEXT1,
  2262         self.staticText1 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT1,
  2267               label='Return Type:', name='staticText1', parent=self,
  2263               label='Return Type:', name='staticText1', parent=self,
  2268               pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0)
  2264               pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0)
  2269 
  2265 
  2270         self.ReturnType = wx.Choice(id=wxID_POUEDITORPANELRETURNTYPE,
  2266         self.ReturnType = wx.Choice(id=ID_POUEDITORPANELRETURNTYPE,
  2271               name='ReturnType', parent=self, pos=wx.Point(0, 0),
  2267               name='ReturnType', parent=self, pos=wx.Point(0, 0),
  2272               size=wx.Size(145, 24), style=0)
  2268               size=wx.Size(145, 24), style=0)
  2273 
  2269 
  2274         self.staticText2 = wx.StaticText(id=wxID_POUEDITORPANELSTATICTEXT2,
  2270         self.staticText2 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT2,
  2275               label='Class Filter:', name='staticText2', parent=self,
  2271               label='Class Filter:', name='staticText2', parent=self,
  2276               pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0)
  2272               pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0)
  2277 
  2273 
  2278         self.ClassFilter = wx.Choice(id=wxID_POUEDITORPANELCLASSFILTER,
  2274         self.ClassFilter = wx.Choice(id=ID_POUEDITORPANELCLASSFILTER,
  2279               name='ClassFilter', parent=self, pos=wx.Point(0, 0),
  2275               name='ClassFilter', parent=self, pos=wx.Point(0, 0),
  2280               size=wx.Size(145, 24), style=0)
  2276               size=wx.Size(145, 24), style=0)
  2281         EVT_CHOICE(self, wxID_POUEDITORPANELCLASSFILTER, self.OnClassFilter)
  2277         self.Bind(wx.EVT_CHOICE, self.OnClassFilter, id=ID_POUEDITORPANELCLASSFILTER)
  2282 
  2278 
  2283         self.VariablesGrid = wx.grid.Grid(id=wxID_POUEDITORPANELVARIABLESGRID,
  2279         self.VariablesGrid = wx.grid.Grid(id=ID_POUEDITORPANELVARIABLESGRID,
  2284               name='VariablesGrid', parent=self, pos=wx.Point(0, 0), 
  2280               name='VariablesGrid', parent=self, pos=wx.Point(0, 0), 
  2285               size=wx.Size(0, 150), style=wxVSCROLL)
  2281               size=wx.Size(0, 150), style=wx.VSCROLL)
  2286         self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
  2282         self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
  2287               'Sans'))
  2283               'Sans'))
  2288         self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL,
  2284         self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL,
  2289               False, 'Sans'))
  2285               False, 'Sans'))
  2290         self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange)
  2286         self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange)
  2291         self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell)
  2287         self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell)
  2292         self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnVariablesGridCellLeftClick)
  2288         self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnVariablesGridCellLeftClick)
  2293         
  2289         
  2294         self.VariablesGrid.SetDropTarget(VariableDropTarget(self))
  2290         self.VariablesGrid.SetDropTarget(VariableDropTarget(self))
  2295         
  2291         
  2296         self.AddButton = wx.Button(id=wxID_POUEDITORPANELADDBUTTON, label='Add',
  2292         self.AddButton = wx.Button(id=ID_POUEDITORPANELADDBUTTON, label='Add',
  2297               name='AddButton', parent=self, pos=wx.Point(345, 340),
  2293               name='AddButton', parent=self, pos=wx.Point(345, 340),
  2298               size=wx.Size(72, 32), style=0)
  2294               size=wx.Size(72, 32), style=0)
  2299         EVT_BUTTON(self, wxID_POUEDITORPANELADDBUTTON, self.OnAddButton)
  2295         self.Bind(wx.EVT_BUTTON, self.OnAddButton, id=ID_POUEDITORPANELADDBUTTON)
  2300 
  2296 
  2301         self.DeleteButton = wx.Button(id=wxID_POUEDITORPANELDELETEBUTTON, label='Delete',
  2297         self.DeleteButton = wx.Button(id=ID_POUEDITORPANELDELETEBUTTON, label='Delete',
  2302               name='DeleteButton', parent=self, pos=wx.Point(425, 340),
  2298               name='DeleteButton', parent=self, pos=wx.Point(425, 340),
  2303               size=wx.Size(72, 32), style=0)
  2299               size=wx.Size(72, 32), style=0)
  2304         EVT_BUTTON(self, wxID_POUEDITORPANELDELETEBUTTON, self.OnDeleteButton)
  2300         self.Bind(wx.EVT_BUTTON, self.OnDeleteButton, id=ID_POUEDITORPANELDELETEBUTTON)
  2305 
  2301 
  2306         self.UpButton = wx.Button(id=wxID_POUEDITORPANELUPBUTTON, label='^',
  2302         self.UpButton = wx.Button(id=ID_POUEDITORPANELUPBUTTON, label='^',
  2307               name='UpButton', parent=self, pos=wx.Point(505, 340),
  2303               name='UpButton', parent=self, pos=wx.Point(505, 340),
  2308               size=wx.Size(32, 32), style=0)
  2304               size=wx.Size(32, 32), style=0)
  2309         EVT_BUTTON(self, wxID_POUEDITORPANELUPBUTTON, self.OnUpButton)
  2305         self.Bind(wx.EVT_BUTTON, self.OnUpButton, id=ID_POUEDITORPANELUPBUTTON)
  2310 
  2306 
  2311         self.DownButton = wx.Button(id=wxID_POUEDITORPANELDOWNBUTTON, label='v',
  2307         self.DownButton = wx.Button(id=ID_POUEDITORPANELDOWNBUTTON, label='v',
  2312               name='DownButton', parent=self, pos=wx.Point(545, 340),
  2308               name='DownButton', parent=self, pos=wx.Point(545, 340),
  2313               size=wx.Size(32, 32), style=0)
  2309               size=wx.Size(32, 32), style=0)
  2314         EVT_BUTTON(self, wxID_POUEDITORPANELDOWNBUTTON, self.OnDownButton)
  2310         self.Bind(wx.EVT_BUTTON, self.OnDownButton, id=ID_POUEDITORPANELDOWNBUTTON)
  2315 
  2311 
  2316         self._init_sizers()
  2312         self._init_sizers()
  2317 
  2313 
  2318     def __init__(self, parent, window, controler, element_type, pou_name = None, transition_name = None, action_name = None, config_name = None, resource_name = None):
  2314     def __init__(self, parent, window, controler, element_type, pou_name = None, transition_name = None, action_name = None, config_name = None, resource_name = None):
  2319         self.Parent = window
  2315         self.Parent = window
  2358             if pou_type not in ["config", "resource"]:
  2354             if pou_type not in ["config", "resource"]:
  2359                 self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp","Global","Access"]
  2355                 self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp","Global","Access"]
  2360             else:
  2356             else:
  2361                 self.FilterChoices = ["All","Global","Access"]
  2357                 self.FilterChoices = ["All","Global","Access"]
  2362             self.ColSizes = [40, 80, 70, 80, 80, 80, 60, 70]
  2358             self.ColSizes = [40, 80, 70, 80, 80, 80, 60, 70]
  2363             self.ColAlignements = [wxALIGN_CENTER, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER]
  2359             self.ColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_CENTER, wx.ALIGN_CENTER]
  2364         else:
  2360         else:
  2365             self.Table = VariableTable(self, [], ["#", "Name", "Class", "Type", "Initial Value", "Retain", "Constant"])
  2361             self.Table = VariableTable(self, [], ["#", "Name", "Class", "Type", "Initial Value", "Retain", "Constant"])
  2366             self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp"]
  2362             self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp"]
  2367             self.ColSizes = [40, 120, 70, 80, 120, 60, 70]
  2363             self.ColSizes = [40, 120, 70, 80, 120, 60, 70]
  2368             self.ColAlignements = [wxALIGN_CENTER, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER]
  2364             self.ColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_CENTER, wx.ALIGN_CENTER]
  2369         for choice in self.FilterChoices:
  2365         for choice in self.FilterChoices:
  2370             self.ClassFilter.Append(choice)
  2366             self.ClassFilter.Append(choice)
  2371         reverse_transfer = {}
  2367         reverse_transfer = {}
  2372         for filter, choice in self.FilterChoiceTransfer.items():
  2368         for filter, choice in self.FilterChoiceTransfer.items():
  2373             reverse_transfer[choice] = filter
  2369             reverse_transfer[choice] = filter
  2500         row, col = event.GetRow(), event.GetCol()
  2496         row, col = event.GetRow(), event.GetCol()
  2501         colname = self.Table.GetColLabelValue(col)
  2497         colname = self.Table.GetColLabelValue(col)
  2502         value = self.Table.GetValue(row, col)
  2498         value = self.Table.GetValue(row, col)
  2503         if colname == "Name":
  2499         if colname == "Name":
  2504             if not TestIdentifier(value):
  2500             if not TestIdentifier(value):
  2505                 message = wxMessageDialog(self, "\"%s\" is not a valid identifier!"%value, "Error", wxOK|wxICON_ERROR)
  2501                 message = wx.MessageDialog(self, "\"%s\" is not a valid identifier!"%value, "Error", wx.OK|wx.ICON_ERROR)
  2506                 message.ShowModal()
  2502                 message.ShowModal()
  2507                 message.Destroy()
  2503                 message.Destroy()
  2508                 event.Veto()
  2504                 event.Veto()
  2509             elif value.upper() in IEC_KEYWORDS:
  2505             elif value.upper() in IEC_KEYWORDS:
  2510                 message = wxMessageDialog(self, "\"%s\" is a keyword. It can't be used!"%value, "Error", wxOK|wxICON_ERROR)
  2506                 message = wx.MessageDialog(self, "\"%s\" is a keyword. It can't be used!"%value, "Error", wx.OK|wx.ICON_ERROR)
  2511                 message.ShowModal()
  2507                 message.ShowModal()
  2512                 message.Destroy()
  2508                 message.Destroy()
  2513                 event.Veto()
  2509                 event.Veto()
  2514             elif value.upper() in self.PouNames:
  2510             elif value.upper() in self.PouNames:
  2515                 message = wxMessageDialog(self, "A pou with \"%s\" as name exists!"%value, "Error", wxOK|wxICON_ERROR)
  2511                 message = wx.MessageDialog(self, "A pou with \"%s\" as name exists!"%value, "Error", wx.OK|wx.ICON_ERROR)
  2516                 message.ShowModal()
  2512                 message.ShowModal()
  2517                 message.Destroy()
  2513                 message.Destroy()
  2518                 event.Veto()
  2514                 event.Veto()
  2519             elif value.upper() in [var["Name"].upper() for var in self.Values if var != self.Table.data[row]]:
  2515             elif value.upper() in [var["Name"].upper() for var in self.Values if var != self.Table.data[row]]:
  2520                 message = wxMessageDialog(self, "A variable with \"%s\" as name exists in this pou!"%value, "Error", wxOK|wxICON_ERROR)
  2516                 message = wx.MessageDialog(self, "A variable with \"%s\" as name exists in this pou!"%value, "Error", wx.OK|wx.ICON_ERROR)
  2521                 message.ShowModal()
  2517                 message.ShowModal()
  2522                 message.Destroy()
  2518                 message.Destroy()
  2523                 event.Veto()
  2519                 event.Veto()
  2524             else:
  2520             else:
  2525                 self.SaveValues(False)
  2521                 self.SaveValues(False)
  2539         if event.GetCol() == 0:
  2535         if event.GetCol() == 0:
  2540             row = event.GetRow()
  2536             row = event.GetRow()
  2541             var_name = self.Table.GetValueByName(row, "Name")
  2537             var_name = self.Table.GetValueByName(row, "Name")
  2542             var_class = self.Table.GetValueByName(row, "Class")
  2538             var_class = self.Table.GetValueByName(row, "Class")
  2543             var_type = self.Table.GetValueByName(row, "Type")
  2539             var_type = self.Table.GetValueByName(row, "Type")
  2544             data = wxTextDataObject(str((var_name, var_class, var_type)))
  2540             data = wx.TextDataObject(str((var_name, var_class, var_type)))
  2545             dragSource = wxDropSource(self.VariablesGrid)
  2541             dragSource = wx.DropSource(self.VariablesGrid)
  2546             dragSource.SetData(data)
  2542             dragSource.SetData(data)
  2547             dragSource.DoDragDrop()
  2543             dragSource.DoDragDrop()
  2548         event.Skip()
  2544         event.Skip()
  2549     
  2545     
  2550     def OnVariablesGridSelectCell(self, event):
  2546     def OnVariablesGridSelectCell(self, event):
  2551         wxCallAfter(self.RefreshButtons)
  2547         wx.CallAfter(self.RefreshButtons)
  2552         event.Skip()
  2548         event.Skip()
  2553 
  2549 
  2554     def MoveValue(self, value_index, move):
  2550     def MoveValue(self, value_index, move):
  2555         new_index = max(0, min(value_index + move, len(self.Values) - 1))
  2551         new_index = max(0, min(value_index + move, len(self.Values) - 1))
  2556         if new_index != value_index:
  2552         if new_index != value_index:
  2583         if buffer:
  2579         if buffer:
  2584             self.Controler.BufferProject()
  2580             self.Controler.BufferProject()
  2585             self.Parent.RefreshTitle()
  2581             self.Parent.RefreshTitle()
  2586             self.Parent.RefreshEditMenu()
  2582             self.Parent.RefreshEditMenu()
  2587 
  2583 
  2588 ##[wxID_EDITVARIABLEDIALOG, wxID_EDITVARIABLEDIALOGMAINPANEL, 
  2584 ##[ID_EDITVARIABLEDIALOG, ID_EDITVARIABLEDIALOGMAINPANEL, 
  2589 ## wxID_EDITVARIABLEDIALOGVARIABLESGRID, wxID_EDITVARIABLEDIALOGRETURNTYPE, 
  2585 ## ID_EDITVARIABLEDIALOGVARIABLESGRID, ID_EDITVARIABLEDIALOGRETURNTYPE, 
  2590 ## wxID_EDITVARIABLEDIALOGCLASSFILTER, wxID_EDITVARIABLEDIALOGADDBUTTON,
  2586 ## ID_EDITVARIABLEDIALOGCLASSFILTER, ID_EDITVARIABLEDIALOGADDBUTTON,
  2591 ## wxID_EDITVARIABLEDIALOGDELETEBUTTON, wxID_EDITVARIABLEDIALOGUPBUTTON, 
  2587 ## ID_EDITVARIABLEDIALOGDELETEBUTTON, ID_EDITVARIABLEDIALOGUPBUTTON, 
  2592 ## wxID_EDITVARIABLEDIALOGDOWNBUTTON, wxID_EDITVARIABLEDIALOGSTATICTEXT1, 
  2588 ## ID_EDITVARIABLEDIALOGDOWNBUTTON, ID_EDITVARIABLEDIALOGSTATICTEXT1, 
  2593 ## wxID_EDITVARIABLEDIALOGSTATICTEXT2, wxID_EDITVARIABLEDIALOGSTATICTEXT3,
  2589 ## ID_EDITVARIABLEDIALOGSTATICTEXT2, ID_EDITVARIABLEDIALOGSTATICTEXT3,
  2594 ##] = [wx.NewId() for _init_ctrls in range(12)]
  2590 ##] = [wx.NewId() for _init_ctrls in range(12)]
  2595 ##
  2591 ##
  2596 ##class EditVariableDialog(wx.Dialog):
  2592 ##class EditVariableDialog(wx.Dialog):
  2597 ##    def _init_coll_flexGridSizer1_Items(self, parent):
  2593 ##    def _init_coll_flexGridSizer1_Items(self, parent):
  2598 ##        # generated method, don't edit
       
  2599 ##
       
  2600 ##        parent.AddWindow(self.MainPanel, 0, border=0, flag=0)
  2594 ##        parent.AddWindow(self.MainPanel, 0, border=0, flag=0)
       
  2595 ##        parent.AddWindow(self.ButtonSizer, 0, border=0, flag=wx.ALIGN_RIGHT)
  2601 ##
  2596 ##
  2602 ##    def _init_sizers(self):
  2597 ##    def _init_sizers(self):
  2603 ##        # generated method, don't edit
       
  2604 ##        self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
  2598 ##        self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
  2605 ##
  2599 ##
  2606 ##        self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
  2600 ##        self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
  2607 ##
  2601 ##
  2608 ##        self.SetSizer(self.flexGridSizer1)
  2602 ##        self.SetSizer(self.flexGridSizer1)
  2609 ##
  2603 ##
  2610 ##    def _init_ctrls(self, prnt, name):
  2604 ##    def _init_ctrls(self, prnt, name):
  2611 ##        # generated method, don't edit
  2605 ##        wx.Dialog.__init__(self, id=ID_EDITVARIABLEDIALOG,
  2612 ##        wx.Dialog.__init__(self, id=wxID_EDITVARIABLEDIALOG,
       
  2613 ##              name='EditVariableDialog', parent=prnt, pos=wx.Point(376, 223),
  2606 ##              name='EditVariableDialog', parent=prnt, pos=wx.Point(376, 223),
  2614 ##              size=wx.Size(600, 440), style=wx.DEFAULT_DIALOG_STYLE,
  2607 ##              size=wx.Size(600, 440), style=wx.DEFAULT_DIALOG_STYLE,
  2615 ##              title='Edit variables of %s'%name)
  2608 ##              title='Edit variables of %s'%name)
  2616 ##        self.SetClientSize(wx.Size(600, 440))
  2609 ##        self.SetClientSize(wx.Size(600, 440))
  2617 ##
  2610 ##
  2618 ##        self.MainPanel = wx.Panel(id=wxID_EDITVARIABLEDIALOGMAINPANEL,
  2611 ##        self.MainPanel = wx.Panel(id=ID_EDITVARIABLEDIALOGMAINPANEL,
  2619 ##              name='MainPanel', parent=self, pos=wx.Point(0, 0),
  2612 ##              name='MainPanel', parent=self, pos=wx.Point(0, 0),
  2620 ##              size=wx.Size(600, 440), style=wx.TAB_TRAVERSAL)
  2613 ##              size=wx.Size(600, 440), style=wx.TAB_TRAVERSAL)
  2621 ##        self.MainPanel.SetAutoLayout(True)
  2614 ##        self.MainPanel.SetAutoLayout(True)
  2622 ##
  2615 ##
  2623 ##        self.staticText1 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT1,
  2616 ##        self.staticText1 = wx.StaticText(id=ID_EDITVARIABLEDIALOGSTATICTEXT1,
  2624 ##              label='Return Type:', name='staticText1', parent=self.MainPanel,
  2617 ##              label='Return Type:', name='staticText1', parent=self.MainPanel,
  2625 ##              pos=wx.Point(24, 29), size=wx.Size(95, 17), style=0)
  2618 ##              pos=wx.Point(24, 29), size=wx.Size(95, 17), style=0)
  2626 ##
  2619 ##
  2627 ##        self.ReturnType = wx.Choice(id=wxID_EDITVARIABLEDIALOGRETURNTYPE,
  2620 ##        self.ReturnType = wx.Choice(id=ID_EDITVARIABLEDIALOGRETURNTYPE,
  2628 ##              name='ReturnType', parent=self.MainPanel, pos=wx.Point(124, 24),
  2621 ##              name='ReturnType', parent=self.MainPanel, pos=wx.Point(124, 24),
  2629 ##              size=wx.Size(145, 24), style=0)
  2622 ##              size=wx.Size(145, 24), style=0)
  2630 ##
  2623 ##
  2631 ##        self.staticText2 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT2,
  2624 ##        self.staticText2 = wx.StaticText(id=ID_EDITVARIABLEDIALOGSTATICTEXT2,
  2632 ##              label='Class Filter:', name='staticText2', parent=self.MainPanel,
  2625 ##              label='Class Filter:', name='staticText2', parent=self.MainPanel,
  2633 ##              pos=wx.Point(324, 29), size=wx.Size(95, 17), style=0)
  2626 ##              pos=wx.Point(324, 29), size=wx.Size(95, 17), style=0)
  2634 ##
  2627 ##
  2635 ##        self.ClassFilter = wx.Choice(id=wxID_EDITVARIABLEDIALOGCLASSFILTER,
  2628 ##        self.ClassFilter = wx.Choice(id=ID_EDITVARIABLEDIALOGCLASSFILTER,
  2636 ##              name='ClassFilter', parent=self.MainPanel, pos=wx.Point(424, 24),
  2629 ##              name='ClassFilter', parent=self.MainPanel, pos=wx.Point(424, 24),
  2637 ##              size=wx.Size(145, 24), style=0)
  2630 ##              size=wx.Size(145, 24), style=0)
  2638 ##        EVT_CHOICE(self, wxID_EDITVARIABLEDIALOGCLASSFILTER, self.OnClassFilter)
  2631 ##        self.Bind(wx.EVT_CHOICE, self.OnClassFilter, id=ID_EDITVARIABLEDIALOGCLASSFILTER)
  2639 ##
  2632 ##
  2640 ##        self.staticText3 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT3,
  2633 ##        self.staticText3 = wx.StaticText(id=ID_EDITVARIABLEDIALOGSTATICTEXT3,
  2641 ##              label='Variables:', name='staticText3', parent=self.MainPanel,
  2634 ##              label='Variables:', name='staticText3', parent=self.MainPanel,
  2642 ##              pos=wx.Point(24, 60), size=wx.Size(95, 17), style=0)
  2635 ##              pos=wx.Point(24, 60), size=wx.Size(95, 17), style=0)
  2643 ##
  2636 ##
  2644 ##        self.VariablesGrid = wx.grid.Grid(id=wxID_EDITVARIABLEDIALOGVARIABLESGRID,
  2637 ##        self.VariablesGrid = wx.grid.Grid(id=ID_EDITVARIABLEDIALOGVARIABLESGRID,
  2645 ##              name='VariablesGrid', parent=self.MainPanel, pos=wx.Point(24, 80), 
  2638 ##              name='VariablesGrid', parent=self.MainPanel, pos=wx.Point(24, 80), 
  2646 ##              size=wx.Size(550, 250), style=wxVSCROLL)
  2639 ##              size=wx.Size(550, 250), style=wx.VSCROLL)
  2647 ##        self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
  2640 ##        self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
  2648 ##              'Sans'))
  2641 ##              'Sans'))
  2649 ##        self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL,
  2642 ##        self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL,
  2650 ##              False, 'Sans'))
  2643 ##              False, 'Sans'))
  2651 ##        self.VariablesGrid.DisableDragGridSize()
  2644 ##        self.VariablesGrid.DisableDragGridSize()
  2652 ##        self.VariablesGrid.EnableScrolling(False, True)
  2645 ##        self.VariablesGrid.EnableScrolling(False, True)
  2653 ##        self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange)
  2646 ##        self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange)
  2654 ##        self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell)
  2647 ##        self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell)
  2655 ##
  2648 ##
  2656 ##        self.AddButton = wx.Button(id=wxID_EDITVARIABLEDIALOGADDBUTTON, label='Add',
  2649 ##        self.AddButton = wx.Button(id=ID_EDITVARIABLEDIALOGADDBUTTON, label='Add',
  2657 ##              name='AddButton', parent=self.MainPanel, pos=wx.Point(345, 340),
  2650 ##              name='AddButton', parent=self.MainPanel, pos=wx.Point(345, 340),
  2658 ##              size=wx.Size(72, 32), style=0)
  2651 ##              size=wx.Size(72, 32), style=0)
  2659 ##        EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGADDBUTTON, self.OnAddButton)
  2652 ##        self.Bind(wx.EVT_BUTTON, self.OnAddButton, id=ID_EDITVARIABLEDIALOGADDBUTTON)
  2660 ##
  2653 ##
  2661 ##        self.DeleteButton = wx.Button(id=wxID_EDITVARIABLEDIALOGDELETEBUTTON, label='Delete',
  2654 ##        self.DeleteButton = wx.Button(id=ID_EDITVARIABLEDIALOGDELETEBUTTON, label='Delete',
  2662 ##              name='DeleteButton', parent=self.MainPanel, pos=wx.Point(425, 340),
  2655 ##              name='DeleteButton', parent=self.MainPanel, pos=wx.Point(425, 340),
  2663 ##              size=wx.Size(72, 32), style=0)
  2656 ##              size=wx.Size(72, 32), style=0)
  2664 ##        EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGDELETEBUTTON, self.OnDeleteButton)
  2657 ##        self.Bind(wx.EVT_BUTTON, self.OnDeleteButton, id=ID_EDITVARIABLEDIALOGDELETEBUTTON)
  2665 ##
  2658 ##
  2666 ##        self.UpButton = wx.Button(id=wxID_EDITVARIABLEDIALOGUPBUTTON, label='^',
  2659 ##        self.UpButton = wx.Button(id=ID_EDITVARIABLEDIALOGUPBUTTON, label='^',
  2667 ##              name='UpButton', parent=self.MainPanel, pos=wx.Point(505, 340),
  2660 ##              name='UpButton', parent=self.MainPanel, pos=wx.Point(505, 340),
  2668 ##              size=wx.Size(32, 32), style=0)
  2661 ##              size=wx.Size(32, 32), style=0)
  2669 ##        EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGUPBUTTON, self.OnUpButton)
  2662 ##        self.Bind(wx.EVT_BUTTON, self.OnUpButton, id=ID_EDITVARIABLEDIALOGUPBUTTON)
  2670 ##
  2663 ##
  2671 ##        self.DownButton = wx.Button(id=wxID_EDITVARIABLEDIALOGDOWNBUTTON, label='v',
  2664 ##        self.DownButton = wx.Button(id=ID_EDITVARIABLEDIALOGDOWNBUTTON, label='v',
  2672 ##              name='DownButton', parent=self.MainPanel, pos=wx.Point(545, 340),
  2665 ##              name='DownButton', parent=self.MainPanel, pos=wx.Point(545, 340),
  2673 ##              size=wx.Size(32, 32), style=0)
  2666 ##              size=wx.Size(32, 32), style=0)
  2674 ##        EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGDOWNBUTTON, self.OnDownButton)
  2667 ##        self.Bind(wx.EVT_BUTTON, self.OnDownButton, id=ID_EDITVARIABLEDIALOGDOWNBUTTON)
       
  2668 ##
       
  2669 ##        self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
       
  2670 ##        self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())       
  2675 ##
  2671 ##
  2676 ##        self._init_sizers()
  2672 ##        self._init_sizers()
  2677 ##
  2673 ##
  2678 ##    def __init__(self, parent, name, pou_type, pou_is_used, filter = "All"):
  2674 ##    def __init__(self, parent, name, pou_type, pou_is_used, filter = "All"):
  2679 ##        self._init_ctrls(parent, name)
  2675 ##        self._init_ctrls(parent, name)
  2680 ##        self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE)
  2676 ##
  2681 ##        self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT)
       
  2682 ##        self.Filter = filter
  2677 ##        self.Filter = filter
  2683 ##        self.PouIsUsed = pou_is_used
  2678 ##        self.PouIsUsed = pou_is_used
  2684 ##        self.FilterChoices = []
  2679 ##        self.FilterChoices = []
  2685 ##        self.FilterChoiceTransfer = {"All" : "All", "Interface" : "Interface", 
  2680 ##        self.FilterChoiceTransfer = {"All" : "All", "Interface" : "Interface", 
  2686 ##            "   Input" : "Input", "   Output" : "Output", "   InOut" : "InOut", 
  2681 ##            "   Input" : "Input", "   Output" : "Output", "   InOut" : "InOut", 
  2698 ##            if pou_type:
  2693 ##            if pou_type:
  2699 ##                self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp","Global","Access"]
  2694 ##                self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp","Global","Access"]
  2700 ##            else:
  2695 ##            else:
  2701 ##                self.FilterChoices = ["All","Global","Access"]
  2696 ##                self.FilterChoices = ["All","Global","Access"]
  2702 ##            self.ColSizes = [80, 70, 80, 80, 80, 60, 70]
  2697 ##            self.ColSizes = [80, 70, 80, 80, 80, 60, 70]
  2703 ##            self.ColAlignements = [wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER]
  2698 ##            self.ColAlignements = [wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_CENTER, wx.ALIGN_CENTER]
  2704 ##        else:
  2699 ##        else:
  2705 ##            self.Table = VariableTable(self, [], ["Name", "Class", "Type", "Initial Value", "Retain", "Constant"])
  2700 ##            self.Table = VariableTable(self, [], ["Name", "Class", "Type", "Initial Value", "Retain", "Constant"])
  2706 ##            self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp"]
  2701 ##            self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp"]
  2707 ##            self.ColSizes = [120, 70, 80, 120, 60, 70]
  2702 ##            self.ColSizes = [120, 70, 80, 120, 60, 70]
  2708 ##            self.ColAlignements = [wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER]
  2703 ##            self.ColAlignements = [wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_CENTER, wx.ALIGN_CENTER]
  2709 ##        for choice in self.FilterChoices:
  2704 ##        for choice in self.FilterChoices:
  2710 ##            self.ClassFilter.Append(choice)
  2705 ##            self.ClassFilter.Append(choice)
  2711 ##        reverse_transfer = {}
  2706 ##        reverse_transfer = {}
  2712 ##        for filter, choice in self.FilterChoiceTransfer.items():
  2707 ##        for filter, choice in self.FilterChoiceTransfer.items():
  2713 ##            reverse_transfer[choice] = filter
  2708 ##            reverse_transfer[choice] = filter
  2734 ##        self.Table.ResetView(self.VariablesGrid)
  2729 ##        self.Table.ResetView(self.VariablesGrid)
  2735 ##
  2730 ##
  2736 ##        self.PouNames = []
  2731 ##        self.PouNames = []
  2737 ##
  2732 ##
  2738 ##        if self.PouIsUsed:
  2733 ##        if self.PouIsUsed:
  2739 ##            wxCallAfter(self.WarningMessage, name)
  2734 ##            wx.CallAfter(self.WarningMessage, name)
  2740 ##
       
  2741 ##        EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
       
  2742 ##    
  2735 ##    
  2743 ##    def WarningMessage(self, name):
  2736 ##    def WarningMessage(self, name):
  2744 ##        message = wxMessageDialog(self, "\"%s\" is used by one or more POUs. Its interface can't be changed!"%name, "WARNING", wxOK|wxICON_EXCLAMATION)
  2737 ##        message = wx.MessageDialog(self, "\"%s\" is used by one or more POUs. Its interface can't be changed!"%name, "WARNING", wx.OK|wx.ICON_EXCLAMATION)
  2745 ##        message.ShowModal()
  2738 ##        message.ShowModal()
  2746 ##        message.Destroy()
  2739 ##        message.Destroy()
  2747 ##    
  2740 ##    
  2748 ##    def OnOK(self, event):
  2741 ##    def OnOK(self, event):
  2749 ##        self.VariablesGrid.SetGridCursor(0, 0)
  2742 ##        self.VariablesGrid.SetGridCursor(0, 0)
  2757 ##                    text += item
  2750 ##                    text += item
  2758 ##                elif i == len(error) - 1:
  2751 ##                elif i == len(error) - 1:
  2759 ##                    text += " and %s"%item
  2752 ##                    text += " and %s"%item
  2760 ##                else:
  2753 ##                else:
  2761 ##                    text += ", %s"%item 
  2754 ##                    text += ", %s"%item 
  2762 ##            message = wxMessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wxOK|wxICON_ERROR)
  2755 ##            message = wx.MessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wx.OK|wx.ICON_ERROR)
  2763 ##            message.ShowModal()
  2756 ##            message.ShowModal()
  2764 ##            message.Destroy()
  2757 ##            message.Destroy()
  2765 ##        else:
  2758 ##        else:
  2766 ##            self.EndModal(wxID_OK)
  2759 ##            self.EndModal(wx.ID_OK)
  2767 ##
  2760 ##
  2768 ##    def OnClassFilter(self, event):
  2761 ##    def OnClassFilter(self, event):
  2769 ##        self.Filter = self.FilterChoiceTransfer[self.ClassFilter.GetStringSelection()]
  2762 ##        self.Filter = self.FilterChoiceTransfer[self.ClassFilter.GetStringSelection()]
  2770 ##        self.RefreshTypeList()
  2763 ##        self.RefreshTypeList()
  2771 ##        self.RefreshValues()
  2764 ##        self.RefreshValues()
  2825 ##        row, col = event.GetRow(), event.GetCol()
  2818 ##        row, col = event.GetRow(), event.GetCol()
  2826 ##        colname = self.Table.GetColLabelValue(col)
  2819 ##        colname = self.Table.GetColLabelValue(col)
  2827 ##        value = self.Table.GetValue(row, col)
  2820 ##        value = self.Table.GetValue(row, col)
  2828 ##        if colname == "Name":
  2821 ##        if colname == "Name":
  2829 ##            if not TestIdentifier(value):
  2822 ##            if not TestIdentifier(value):
  2830 ##                message = wxMessageDialog(self, "\"%s\" is not a valid identifier!"%value, "Error", wxOK|wxICON_ERROR)
  2823 ##                message = wx.MessageDialog(self, "\"%s\" is not a valid identifier!"%value, "Error", wx.OK|wx.ICON_ERROR)
  2831 ##                message.ShowModal()
  2824 ##                message.ShowModal()
  2832 ##                message.Destroy()
  2825 ##                message.Destroy()
  2833 ##                event.Veto()
  2826 ##                event.Veto()
  2834 ##            elif value.upper() in IEC_KEYWORDS:
  2827 ##            elif value.upper() in IEC_KEYWORDS:
  2835 ##                message = wxMessageDialog(self, "\"%s\" is a keyword. It can't be used!"%value, "Error", wxOK|wxICON_ERROR)
  2828 ##                message = wx.MessageDialog(self, "\"%s\" is a keyword. It can't be used!"%value, "Error", wx.OK|wx.ICON_ERROR)
  2836 ##                message.ShowModal()
  2829 ##                message.ShowModal()
  2837 ##                message.Destroy()
  2830 ##                message.Destroy()
  2838 ##                event.Veto()
  2831 ##                event.Veto()
  2839 ##            elif value.upper() in self.PouNames:
  2832 ##            elif value.upper() in self.PouNames:
  2840 ##                message = wxMessageDialog(self, "A pou with \"%s\" as name exists!"%value, "Error", wxOK|wxICON_ERROR)
  2833 ##                message = wx.MessageDialog(self, "A pou with \"%s\" as name exists!"%value, "Error", wx.OK|wx.ICON_ERROR)
  2841 ##                message.ShowModal()
  2834 ##                message.ShowModal()
  2842 ##                message.Destroy()
  2835 ##                message.Destroy()
  2843 ##                event.Veto()
  2836 ##                event.Veto()
  2844 ##            elif value.upper() in [var["Name"].upper() for var in self.Values if var != self.Table.data[row]]:
  2837 ##            elif value.upper() in [var["Name"].upper() for var in self.Values if var != self.Table.data[row]]:
  2845 ##                message = wxMessageDialog(self, "A variable with \"%s\" as name exists in this pou!"%value, "Error", wxOK|wxICON_ERROR)
  2838 ##                message = wx.MessageDialog(self, "A variable with \"%s\" as name exists in this pou!"%value, "Error", wx.OK|wx.ICON_ERROR)
  2846 ##                message.ShowModal()
  2839 ##                message.ShowModal()
  2847 ##                message.Destroy()
  2840 ##                message.Destroy()
  2848 ##                event.Veto()
  2841 ##                event.Veto()
  2849 ##            else:
  2842 ##            else:
  2850 ##                event.Skip()
  2843 ##                event.Skip()
  2851 ##        else:
  2844 ##        else:
  2852 ##            event.Skip()
  2845 ##            event.Skip()
  2853 ##
  2846 ##
  2854 ##    def OnVariablesGridSelectCell(self, event):
  2847 ##    def OnVariablesGridSelectCell(self, event):
  2855 ##        wxCallAfter(self.RefreshButtons)
  2848 ##        wx.CallAfter(self.RefreshButtons)
  2856 ##        event.Skip()
  2849 ##        event.Skip()
  2857 ##
  2850 ##
  2858 ##    def SetPouNames(self, pou_names):
  2851 ##    def SetPouNames(self, pou_names):
  2859 ##        self.PouNames = [pou_name.upper() for pou_name in pou_names]
  2852 ##        self.PouNames = [pou_name.upper() for pou_name in pou_names]
  2860 ##
  2853 ##
  2936         dlg.Destroy()
  2929         dlg.Destroy()
  2937 
  2930 
  2938     return res
  2931     return res
  2939 
  2932 
  2940 def Display_Error_Dialog(e_value):
  2933 def Display_Error_Dialog(e_value):
  2941     message = wxMessageDialog(None, str(e_value), "Error", wxOK|wxICON_ERROR)
  2934     message = wx.MessageDialog(None, str(e_value), "Error", wx.OK|wx.ICON_ERROR)
  2942     message.ShowModal()
  2935     message.ShowModal()
  2943     message.Destroy()
  2936     message.Destroy()
  2944 
  2937 
  2945 def get_last_traceback(tb):
  2938 def get_last_traceback(tb):
  2946     while tb.tb_next:
  2939     while tb.tb_next:
  2994 
  2987 
  2995     #sys.excepthook = lambda *args: wx.CallAfter(handle_exception, *args)
  2988     #sys.excepthook = lambda *args: wx.CallAfter(handle_exception, *args)
  2996     sys.excepthook = handle_exception
  2989     sys.excepthook = handle_exception
  2997 
  2990 
  2998 if __name__ == '__main__':
  2991 if __name__ == '__main__':
  2999     app = wxPySimpleApp()
  2992     app = wx.PySimpleApp()
  3000     wxInitAllImageHandlers()
  2993     wx.InitAllImageHandlers()
  3001     
  2994     
  3002     # Install a exception handle for bug reports
  2995     # Install a exception handle for bug reports
  3003     wxAddExceptHook(os.getcwd(),__version__)
  2996     wxAddExceptHook(os.getcwd(),__version__)
  3004     
  2997     
  3005     frame = PLCOpenEditor(None)
  2998     frame = PLCOpenEditor(None)