PLCOpenEditor.py
changeset 660 30c0371ac086
parent 656 ff38b7250b64
child 666 d4bb66691248
equal deleted inserted replaced
659:46c3d5410888 660:30c0371ac086
   122  ID_PLCOPENEDITORTYPESTREE, ID_PLCOPENEDITORINSTANCESTREE, 
   122  ID_PLCOPENEDITORTYPESTREE, ID_PLCOPENEDITORINSTANCESTREE, 
   123  ID_PLCOPENEDITORMAINSPLITTER, ID_PLCOPENEDITORSECONDSPLITTER, 
   123  ID_PLCOPENEDITORMAINSPLITTER, ID_PLCOPENEDITORSECONDSPLITTER, 
   124  ID_PLCOPENEDITORTHIRDSPLITTER, ID_PLCOPENEDITORLIBRARYPANEL, 
   124  ID_PLCOPENEDITORTHIRDSPLITTER, ID_PLCOPENEDITORLIBRARYPANEL, 
   125  ID_PLCOPENEDITORLIBRARYTREE, ID_PLCOPENEDITORLIBRARYCOMMENT, 
   125  ID_PLCOPENEDITORLIBRARYTREE, ID_PLCOPENEDITORLIBRARYCOMMENT, 
   126  ID_PLCOPENEDITORTABSOPENED, ID_PLCOPENEDITORTABSOPENED,
   126  ID_PLCOPENEDITORTABSOPENED, ID_PLCOPENEDITORTABSOPENED,
   127  ID_PLCOPENEDITORTOOLBAR, ID_PLCOPENEDITORDEFAULTTOOLBAR, 
   127  ID_PLCOPENEDITOREDITORMENUTOOLBAR, ID_PLCOPENEDITOREDITORTOOLBAR, 
   128  ID_PLCOPENEDITORSFCTOOLBAR, ID_PLCOPENEDITORFBDTOOLBAR, 
   128 ] = [wx.NewId() for _init_ctrls in range(16)]
   129  ID_PLCOPENEDITORLDTOOLBAR,
       
   130 ] = [wx.NewId() for _init_ctrls in range(19)]
       
   131 
   129 
   132 # Define PLCOpenEditor FileMenu extra items id
   130 # Define PLCOpenEditor FileMenu extra items id
   133 [ID_PLCOPENEDITORFILEMENUGENERATE, 
   131 [ID_PLCOPENEDITORFILEMENUGENERATE, 
   134 ] = [wx.NewId() for _init_coll_FileMenu_Items in range(1)]
   132 ] = [wx.NewId() for _init_coll_FileMenu_Items in range(1)]
   135 
   133 
   140  ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, 
   138  ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, 
   141 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(7)]
   139 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(7)]
   142 
   140 
   143 
   141 
   144 #-------------------------------------------------------------------------------
   142 #-------------------------------------------------------------------------------
   145 #                            ToolBars definitions
   143 #                            EditorToolBar definitions
   146 #-------------------------------------------------------------------------------
   144 #-------------------------------------------------------------------------------
   147 
   145 
   148 # Define PLCOpenEditor Toolbar items id
   146 # Define PLCOpenEditor Toolbar items id
   149 [ID_PLCOPENEDITORTOOLBARSELECTION, ID_PLCOPENEDITORTOOLBARCOMMENT,
   147 [ID_PLCOPENEDITOREDITORTOOLBARSELECTION, ID_PLCOPENEDITOREDITORTOOLBARCOMMENT,
   150  ID_PLCOPENEDITORTOOLBARVARIABLE, ID_PLCOPENEDITORTOOLBARBLOCK,
   148  ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, ID_PLCOPENEDITOREDITORTOOLBARBLOCK,
   151  ID_PLCOPENEDITORTOOLBARCONNECTION, ID_PLCOPENEDITORTOOLBARWIRE,
   149  ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, ID_PLCOPENEDITOREDITORTOOLBARWIRE,
   152  ID_PLCOPENEDITORTOOLBARPOWERRAIL, ID_PLCOPENEDITORTOOLBARRUNG,
   150  ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, ID_PLCOPENEDITOREDITORTOOLBARRUNG,
   153  ID_PLCOPENEDITORTOOLBARCOIL, ID_PLCOPENEDITORTOOLBARCONTACT,
   151  ID_PLCOPENEDITOREDITORTOOLBARCOIL, ID_PLCOPENEDITOREDITORTOOLBARCONTACT,
   154  ID_PLCOPENEDITORTOOLBARBRANCH, ID_PLCOPENEDITORTOOLBARINITIALSTEP,
   152  ID_PLCOPENEDITOREDITORTOOLBARBRANCH, ID_PLCOPENEDITOREDITORTOOLBARINITIALSTEP,
   155  ID_PLCOPENEDITORTOOLBARSTEP, ID_PLCOPENEDITORTOOLBARTRANSITION,
   153  ID_PLCOPENEDITOREDITORTOOLBARSTEP, ID_PLCOPENEDITOREDITORTOOLBARTRANSITION,
   156  ID_PLCOPENEDITORTOOLBARACTIONBLOCK, ID_PLCOPENEDITORTOOLBARDIVERGENCE,
   154  ID_PLCOPENEDITOREDITORTOOLBARACTIONBLOCK, ID_PLCOPENEDITOREDITORTOOLBARDIVERGENCE,
   157  ID_PLCOPENEDITORTOOLBARJUMP, ID_PLCOPENEDITORTOOLBARMOTION, 
   155  ID_PLCOPENEDITOREDITORTOOLBARJUMP, ID_PLCOPENEDITOREDITORTOOLBARMOTION, 
   158 ] = [wx.NewId() for _init_coll_DefaultToolBar_Items in range(18)]
   156 ] = [wx.NewId() for _init_coll_DefaultEditorToolBar_Items in range(18)]
   159 
   157 
   160 # Define behaviour of each Toolbar item according to current POU body type 
   158 # Define behaviour of each Toolbar item according to current POU body type 
   161 # Informations meaning are in this order:
   159 # Informations meaning are in this order:
   162 #  - Item is toggled
   160 #  - Item is toggled
   163 #  - PLCOpenEditor mode where item is displayed (could be more then one)
   161 #  - PLCOpenEditor mode where item is displayed (could be more then one)
   164 #  - Item id
   162 #  - Item id
   165 #  - Item callback function name
   163 #  - Item callback function name
   166 #  - Item icon filename
   164 #  - Item icon filename
   167 #  - Item tooltip text
   165 #  - Item tooltip text
   168 ToolBarItems = {
   166 EditorToolBarItems = {
   169     "FBD" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   167     "FBD" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   170               ID_PLCOPENEDITORTOOLBARMOTION, "OnMotionTool",
   168               ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
   171               "move.png", _("Move the view")),
   169               "move.png", _("Move the view")),
   172              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   170              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   173               ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool",
   171               ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool",
   174               "add_comment.png", _("Create a new comment")),
   172               "add_comment.png", _("Create a new comment")),
   175              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   173              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   176               ID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool",
   174               ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool",
   177               "add_variable.png", _("Create a new variable")),
   175               "add_variable.png", _("Create a new variable")),
   178              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   176              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   179               ID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool",
   177               ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool",
   180               "add_block.png", _("Create a new block")),
   178               "add_block.png", _("Create a new block")),
   181              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   179              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   182               ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", 
   180               ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool", 
   183               "add_connection.png", _("Create a new connection"))],
   181               "add_connection.png", _("Create a new connection"))],
   184     "LD"  : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   182     "LD"  : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   185               ID_PLCOPENEDITORTOOLBARMOTION, "OnMotionTool",
   183               ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
   186               "move.png", _("Move the view")),
   184               "move.png", _("Move the view")),
   187              (True, FREEDRAWING_MODE, 
   185              (True, FREEDRAWING_MODE, 
   188               ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", 
   186               ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool", 
   189               "add_comment.png", _("Create a new comment")),
   187               "add_comment.png", _("Create a new comment")),
   190              (True, FREEDRAWING_MODE, 
   188              (True, FREEDRAWING_MODE, 
   191               ID_PLCOPENEDITORTOOLBARPOWERRAIL, "OnPowerRailTool", 
   189               ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, "OnPowerRailTool", 
   192               "add_powerrail.png", _("Create a new power rail")),
   190               "add_powerrail.png", _("Create a new power rail")),
   193              (False, DRIVENDRAWING_MODE, 
   191              (False, DRIVENDRAWING_MODE, 
   194               ID_PLCOPENEDITORTOOLBARRUNG, "OnRungTool", 
   192               ID_PLCOPENEDITOREDITORTOOLBARRUNG, "OnRungTool", 
   195               "add_rung.png", _("Create a new rung")),
   193               "add_rung.png", _("Create a new rung")),
   196              (True, FREEDRAWING_MODE, 
   194              (True, FREEDRAWING_MODE, 
   197               ID_PLCOPENEDITORTOOLBARCOIL, "OnCoilTool", 
   195               ID_PLCOPENEDITOREDITORTOOLBARCOIL, "OnCoilTool", 
   198               "add_coil.png", _("Create a new coil")),
   196               "add_coil.png", _("Create a new coil")),
   199              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   197              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   200               ID_PLCOPENEDITORTOOLBARCONTACT, "OnContactTool", 
   198               ID_PLCOPENEDITOREDITORTOOLBARCONTACT, "OnContactTool", 
   201               "add_contact.png", _("Create a new contact")),
   199               "add_contact.png", _("Create a new contact")),
   202              (False, DRIVENDRAWING_MODE, 
   200              (False, DRIVENDRAWING_MODE, 
   203               ID_PLCOPENEDITORTOOLBARBRANCH, "OnBranchTool", 
   201               ID_PLCOPENEDITOREDITORTOOLBARBRANCH, "OnBranchTool", 
   204               "add_branch.png", _("Create a new branch")),
   202               "add_branch.png", _("Create a new branch")),
   205              (True, FREEDRAWING_MODE, 
   203              (True, FREEDRAWING_MODE, 
   206               ID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", 
   204               ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool", 
   207               "add_variable.png", _("Create a new variable")),
   205               "add_variable.png", _("Create a new variable")),
   208              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   206              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   209               ID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", 
   207               ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool", 
   210               "add_block.png", _("Create a new block")),
   208               "add_block.png", _("Create a new block")),
   211              (True, FREEDRAWING_MODE, 
   209              (True, FREEDRAWING_MODE, 
   212               ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", 
   210               ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool", 
   213               "add_connection.png", _("Create a new connection"))],
   211               "add_connection.png", _("Create a new connection"))],
   214     "SFC" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   212     "SFC" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   215               ID_PLCOPENEDITORTOOLBARMOTION, "OnMotionTool",
   213               ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
   216               "move.png", _("Move the view")),
   214               "move.png", _("Move the view")),
   217              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   215              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   218               ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", 
   216               ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool", 
   219               "add_comment.png", _("Create a new comment")),
   217               "add_comment.png", _("Create a new comment")),
   220              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   218              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   221               ID_PLCOPENEDITORTOOLBARINITIALSTEP, "OnInitialStepTool", 
   219               ID_PLCOPENEDITOREDITORTOOLBARINITIALSTEP, "OnInitialStepTool", 
   222               "add_initial_step.png", _("Create a new initial step")),
   220               "add_initial_step.png", _("Create a new initial step")),
   223              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   221              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   224               ID_PLCOPENEDITORTOOLBARSTEP, "OnStepTool", 
   222               ID_PLCOPENEDITOREDITORTOOLBARSTEP, "OnStepTool", 
   225               "add_step.png", _("Create a new step")),
   223               "add_step.png", _("Create a new step")),
   226              (True, FREEDRAWING_MODE, 
   224              (True, FREEDRAWING_MODE, 
   227               ID_PLCOPENEDITORTOOLBARTRANSITION, "OnTransitionTool", 
   225               ID_PLCOPENEDITOREDITORTOOLBARTRANSITION, "OnTransitionTool", 
   228               "add_transition.png", _("Create a new transition")),
   226               "add_transition.png", _("Create a new transition")),
   229              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   227              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   230               ID_PLCOPENEDITORTOOLBARACTIONBLOCK, "OnActionBlockTool", 
   228               ID_PLCOPENEDITOREDITORTOOLBARACTIONBLOCK, "OnActionBlockTool", 
   231               "add_action.png", _("Create a new action block")),
   229               "add_action.png", _("Create a new action block")),
   232              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   230              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   233               ID_PLCOPENEDITORTOOLBARDIVERGENCE, "OnDivergenceTool", 
   231               ID_PLCOPENEDITOREDITORTOOLBARDIVERGENCE, "OnDivergenceTool", 
   234               "add_divergence.png", _("Create a new divergence")),
   232               "add_divergence.png", _("Create a new divergence")),
   235              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   233              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   236               ID_PLCOPENEDITORTOOLBARJUMP, "OnJumpTool", 
   234               ID_PLCOPENEDITOREDITORTOOLBARJUMP, "OnJumpTool", 
   237               "add_jump.png", _("Create a new jump")),
   235               "add_jump.png", _("Create a new jump")),
   238              (True, FREEDRAWING_MODE, 
   236              (True, FREEDRAWING_MODE, 
   239               ID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", 
   237               ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool", 
   240               "add_variable.png", _("Create a new variable")),
   238               "add_variable.png", _("Create a new variable")),
   241              (True, FREEDRAWING_MODE, 
   239              (True, FREEDRAWING_MODE, 
   242               ID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", 
   240               ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool", 
   243               "add_block.png", _("Create a new block")),
   241               "add_block.png", _("Create a new block")),
   244              (True, FREEDRAWING_MODE, 
   242              (True, FREEDRAWING_MODE, 
   245               ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", 
   243               ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool", 
   246               "add_connection.png", _("Create a new connection")),
   244               "add_connection.png", _("Create a new connection")),
   247              (True, FREEDRAWING_MODE, 
   245              (True, FREEDRAWING_MODE, 
   248               ID_PLCOPENEDITORTOOLBARPOWERRAIL, "OnPowerRailTool", 
   246               ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, "OnPowerRailTool", 
   249               "add_powerrail.png", _("Create a new power rail")),
   247               "add_powerrail.png", _("Create a new power rail")),
   250              (True, FREEDRAWING_MODE, 
   248              (True, FREEDRAWING_MODE, 
   251               ID_PLCOPENEDITORTOOLBARCONTACT, "OnContactTool", 
   249               ID_PLCOPENEDITOREDITORTOOLBARCONTACT, "OnContactTool", 
   252               "add_contact.png", _("Create a new contact"))],
   250               "add_contact.png", _("Create a new contact"))],
   253     "ST"  : [],
   251     "ST"  : [],
   254     "IL"  : []
   252     "IL"  : [],
       
   253     "debug": [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
       
   254               ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
       
   255               "move.png", _("Move the view"))],
   255 }
   256 }
   256 
   257 
   257 #-------------------------------------------------------------------------------
   258 #-------------------------------------------------------------------------------
   258 #                               Helper Functions
   259 #                               Helper Functions
   259 #-------------------------------------------------------------------------------
   260 #-------------------------------------------------------------------------------
   263     if wx.VERSION >= (2, 6, 0):
   264     if wx.VERSION >= (2, 6, 0):
   264         parent.Append(help=help, id=id, kind=kind, text=text)
   265         parent.Append(help=help, id=id, kind=kind, text=text)
   265     else:
   266     else:
   266         parent.Append(helpString=help, id=id, kind=kind, item=text)
   267         parent.Append(helpString=help, id=id, kind=kind, item=text)
   267 
   268 
   268 [TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, TYPESTREE, 
   269 [TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, TYPESTREE, 
   269  INSTANCESTREE, LIBRARYTREE, SCALING, PAGETITLES
   270  INSTANCESTREE, LIBRARYTREE, SCALING, PAGETITLES
   270 ] = range(10)
   271 ] = range(10)
   271 
   272 
   272 def GetShortcutKeyCallbackFunction(viewer_function):
   273 def GetShortcutKeyCallbackFunction(viewer_function):
   273     def ShortcutKeyFunction(self, event):
   274     def ShortcutKeyFunction(self, event):
   380               id=ID_PLCOPENEDITOREDITMENUADDPROGRAM)
   381               id=ID_PLCOPENEDITOREDITMENUADDPROGRAM)
   381         self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
   382         self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
   382               id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION)
   383               id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION)
   383         self.Bind(wx.EVT_MENU, self.OnSelectAllMenu, id=wx.ID_SELECTALL)
   384         self.Bind(wx.EVT_MENU, self.OnSelectAllMenu, id=wx.ID_SELECTALL)
   384         self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE)
   385         self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE)
       
   386         
       
   387         self.AddToMenuToolBar([(wx.ID_UNDO, wx.ART_UNDO, _(u'Undo'), None),
       
   388                                (wx.ID_REDO, wx.ART_REDO, _(u'Redo'), None),
       
   389                                None,
       
   390                                (wx.ID_CUT, wx.ART_CUT, _(u'Cut'), None),
       
   391                                (wx.ID_COPY, wx.ART_COPY, _(u'Copy'), None),
       
   392                                (wx.ID_PASTE, wx.ART_PASTE, _(u'Paste'), None)])
   385 
   393 
   386     def _init_coll_DisplayMenu_Items(self, parent):
   394     def _init_coll_DisplayMenu_Items(self, parent):
   387         AppendMenu(parent, help='', id=wx.ID_REFRESH,
   395         AppendMenu(parent, help='', id=wx.ID_REFRESH,
   388               kind=wx.ITEM_NORMAL, text=_(u'Refresh\tCTRL+R'))
   396               kind=wx.ITEM_NORMAL, text=_(u'Refresh\tCTRL+R'))
   389         if self.EnableDebug:
   397         if self.EnableDebug:
   436         
   444         
   437     def _init_ctrls(self, prnt):
   445     def _init_ctrls(self, prnt):
   438         wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name='IDEFrame',
   446         wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name='IDEFrame',
   439               parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600),
   447               parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600),
   440               style=wx.DEFAULT_FRAME_STYLE)
   448               style=wx.DEFAULT_FRAME_STYLE)
   441         self._init_utils()
       
   442         self.SetClientSize(wx.Size(1000, 600))
   449         self.SetClientSize(wx.Size(1000, 600))
   443         self.SetMenuBar(self.MenuBar)
       
   444         
   450         
   445         self.TabsImageList = wx.ImageList(31, 16)
   451         self.TabsImageList = wx.ImageList(31, 16)
   446         self.TabsImageListIndexes = {}
   452         self.TabsImageListIndexes = {}
   447         
   453         
   448         #-----------------------------------------------------------------------
   454         #-----------------------------------------------------------------------
   597         #-----------------------------------------------------------------------
   603         #-----------------------------------------------------------------------
   598         #                            Creating Tool Bar
   604         #                            Creating Tool Bar
   599         #-----------------------------------------------------------------------
   605         #-----------------------------------------------------------------------
   600 
   606 
   601         if USE_AUI:
   607         if USE_AUI:
   602             ToolBar = wx.ToolBar(self, ID_PLCOPENEDITORTOOLBAR, wx.DefaultPosition, wx.DefaultSize,
   608             EditorToolBar = wx.ToolBar(self, ID_PLCOPENEDITOREDITORTOOLBAR, wx.DefaultPosition, wx.DefaultSize,
   603                     wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
   609                     wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
   604             ToolBar.SetToolBitmapSize(wx.Size(25, 25))
   610             EditorToolBar.SetToolBitmapSize(wx.Size(25, 25))
   605             ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, 
   611             EditorToolBar.AddRadioTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION, 
   606                   wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, _("Select an object"))
   612                   wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, _("Select an object"))
   607             ToolBar.Realize()
   613             EditorToolBar.Realize()
   608             self.Panes["ToolBar"] = ToolBar
   614             self.Panes["EditorToolBar"] = EditorToolBar
   609             self.AUIManager.AddPane(ToolBar, wx.aui.AuiPaneInfo().
   615             self.AUIManager.AddPane(EditorToolBar, wx.aui.AuiPaneInfo().
   610                       Name("ToolBar").Caption(_("Toolbar")).
   616                       Name("EditorToolBar").Caption(_("Editor ToolBar")).
   611                       ToolbarPane().Top().
   617                       ToolbarPane().Top().
   612                       LeftDockable(False).RightDockable(False))
   618                       LeftDockable(False).RightDockable(False))
   613         else:
   619         
   614             self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, 
   620             MenuToolBar = wx.ToolBar(self, ID_PLCOPENEDITOREDITORMENUTOOLBAR, wx.DefaultPosition, wx.DefaultSize,
   615                   ID_PLCOPENEDITORTOOLBAR, 'ToolBar')
   621                     wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
   616             self.ToolBar.SetToolBitmapSize(wx.Size(25, 25))
   622             MenuToolBar.SetToolBitmapSize(wx.Size(25, 25))
   617             self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, 
   623             MenuToolBar.Realize()
       
   624             self.Panes["MenuToolBar"] = MenuToolBar
       
   625             self.AUIManager.AddPane(MenuToolBar, wx.aui.AuiPaneInfo().
       
   626                       Name("MenuToolBar").Caption(_("Menu ToolBar")).
       
   627                       ToolbarPane().Top().
       
   628                       LeftDockable(False).RightDockable(False))
       
   629             
       
   630         else:
       
   631             self.EditorToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, 
       
   632                   ID_PLCOPENEDITOREDITORTOOLBAR, 'EditorToolBar')
       
   633             self.EditorToolBar.SetToolBitmapSize(wx.Size(25, 25))
       
   634             self.EditorToolBar.AddRadioTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION, 
   618                   wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, _("Select an object"))
   635                   wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, _("Select an object"))
   619             self.ToolBar.Realize()
   636             self.EditorToolBar.Realize()
   620             
   637             
   621         self.Bind(wx.EVT_TOOL, self.OnSelectionTool, 
   638         self.Bind(wx.EVT_MENU, self.OnSelectionTool, 
   622               id=ID_PLCOPENEDITORTOOLBARSELECTION)
   639               id=ID_PLCOPENEDITOREDITORTOOLBARSELECTION)
   623         
   640         
   624         self.SearchResultPanel = SearchResultPanel(self.BottomNoteBook, self)
   641         self.SearchResultPanel = SearchResultPanel(self.BottomNoteBook, self)
   625         self.BottomNoteBook.AddPage(self.SearchResultPanel, _("Search"))
   642         self.BottomNoteBook.AddPage(self.SearchResultPanel, _("Search"))
   626 
   643 
   627         self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL,
   644         self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL,
   640         
   657         
   641         self.LibraryComment = wx.TextCtrl(id=ID_PLCOPENEDITORLIBRARYCOMMENT,
   658         self.LibraryComment = wx.TextCtrl(id=ID_PLCOPENEDITORLIBRARYCOMMENT,
   642               name='LibraryComment', parent=self.LibraryPanel, 
   659               name='LibraryComment', parent=self.LibraryPanel, 
   643               pos=wx.Point(0, 0), size=wx.Size(0, 160), 
   660               pos=wx.Point(0, 0), size=wx.Size(0, 160), 
   644               style=wx.TE_READONLY|wx.TE_MULTILINE)
   661               style=wx.TE_READONLY|wx.TE_MULTILINE)
       
   662         
       
   663         self._init_utils()
       
   664         self.SetMenuBar(self.MenuBar)
   645         
   665         
   646         self._init_sizers()
   666         self._init_sizers()
   647         
   667         
   648         if self.EnableDebug:
   668         if self.EnableDebug:
   649             self.DebugVariablePanel = DebugVariablePanel(self.RightNoteBook, self.Controler)
   669             self.DebugVariablePanel = DebugVariablePanel(self.RightNoteBook, self.Controler)
   704         
   724         
   705         # Assign icon list to TreeCtrls
   725         # Assign icon list to TreeCtrls
   706         self.TypesTree.SetImageList(self.TreeImageList)
   726         self.TypesTree.SetImageList(self.TreeImageList)
   707         self.InstancesTree.SetImageList(self.TreeImageList)
   727         self.InstancesTree.SetImageList(self.TreeImageList)
   708         
   728         
   709         self.CurrentToolBar = []
   729         self.CurrentEditorToolBar = []
   710         self.CurrentLanguage = ""
   730         self.CurrentMenu = None
   711         self.SelectedItem = None
   731         self.SelectedItem = None
   712         self.Highlights = {}
   732         self.Highlights = {}
   713         self.DrawingMode = FREEDRAWING_MODE
   733         self.DrawingMode = FREEDRAWING_MODE
   714         #self.DrawingMode = DRIVENDRAWING_MODE
   734         #self.DrawingMode = DRIVENDRAWING_MODE
   715         if USE_AUI:
   735         if USE_AUI:
   751 #-------------------------------------------------------------------------------
   771 #-------------------------------------------------------------------------------
   752 
   772 
   753     def SetRefreshFunctions(self):
   773     def SetRefreshFunctions(self):
   754         self.RefreshFunctions = {
   774         self.RefreshFunctions = {
   755             TITLE : self.RefreshTitle,
   775             TITLE : self.RefreshTitle,
   756             TOOLBAR : self.RefreshToolBar,
   776             EDITORTOOLBAR : self.RefreshEditorToolBar,
   757             FILEMENU : self.RefreshFileMenu,
   777             FILEMENU : self.RefreshFileMenu,
   758             EDITMENU : self.RefreshEditMenu,
   778             EDITMENU : self.RefreshEditMenu,
   759             DISPLAYMENU : self.RefreshDisplayMenu,
   779             DISPLAYMENU : self.RefreshDisplayMenu,
   760             TYPESTREE : self.RefreshTypesTree,
   780             TYPESTREE : self.RefreshTypesTree,
   761             INSTANCESTREE : self.RefreshInstancesTree, 
   781             INSTANCESTREE : self.RefreshInstancesTree, 
   771 
   791 
   772     ## Callback function when AUINotebook Page closed with CloseButton
   792     ## Callback function when AUINotebook Page closed with CloseButton
   773     #  @param event AUINotebook Event.
   793     #  @param event AUINotebook Event.
   774     def OnPageClose(self, event):
   794     def OnPageClose(self, event):
   775         # Refresh all window elements that have changed
   795         # Refresh all window elements that have changed
   776         wx.CallAfter(self._Refresh, TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU)
   796         wx.CallAfter(self._Refresh, TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU)
   777         wx.CallAfter(self.RefreshTabCtrlEvent)
   797         wx.CallAfter(self.RefreshTabCtrlEvent)
   778         event.Skip()
   798         event.Skip()
   779 
   799 
   780     def GetCopyBuffer(self):
   800     def GetCopyBuffer(self):
   781         data = None
   801         data = None
   812         if dialog.ShowModal() == wx.ID_OK:
   832         if dialog.ShowModal() == wx.ID_OK:
   813             new_values = dialog.GetValues()
   833             new_values = dialog.GetValues()
   814             new_values["creationDateTime"] = old_values["creationDateTime"]
   834             new_values["creationDateTime"] = old_values["creationDateTime"]
   815             if new_values != old_values:
   835             if new_values != old_values:
   816                 self.Controler.SetProjectProperties(None, new_values)
   836                 self.Controler.SetProjectProperties(None, new_values)
   817                 self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, 
   837                 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, 
   818                               TYPESTREE, INSTANCESTREE, SCALING)
   838                               TYPESTREE, INSTANCESTREE, SCALING)
   819         dialog.Destroy()
   839         dialog.Destroy()
   820 
   840 
   821 #-------------------------------------------------------------------------------
   841 #-------------------------------------------------------------------------------
   822 #                            Notebook Unified Functions
   842 #                            Notebook Unified Functions
   948             self.TabsOpened.DeletePage(selected)
   968             self.TabsOpened.DeletePage(selected)
   949             if self.TabsOpened.GetPageCount() > 0:
   969             if self.TabsOpened.GetPageCount() > 0:
   950                 new_index = min(selected, self.TabsOpened.GetPageCount() - 1)
   970                 new_index = min(selected, self.TabsOpened.GetPageCount() - 1)
   951                 self.TabsOpened.SetSelection(new_index)
   971                 self.TabsOpened.SetSelection(new_index)
   952         # Refresh all window elements that have changed
   972         # Refresh all window elements that have changed
   953         self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU)
   973         self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU)
   954         self.RefreshTabCtrlEvent()
   974         self.RefreshTabCtrlEvent()
   955 
   975 
   956     def OnPageSetupMenu(self, event):
   976     def OnPageSetupMenu(self, event):
   957         dialog = wx.PageSetupDialog(self, self.PageSetupData)
   977         dialog = wx.PageSetupDialog(self, self.PageSetupData)
   958         if dialog.ShowModal() == wx.ID_OK:
   978         if dialog.ShowModal() == wx.ID_OK:
  1008 #-------------------------------------------------------------------------------
  1028 #-------------------------------------------------------------------------------
  1009 #                            Edit Menu Functions
  1029 #                            Edit Menu Functions
  1010 #-------------------------------------------------------------------------------
  1030 #-------------------------------------------------------------------------------
  1011 
  1031 
  1012     def RefreshEditMenu(self):
  1032     def RefreshEditMenu(self):
       
  1033         MenuToolBar = self.Panes["MenuToolBar"]
  1013         if self.Controler is not None:
  1034         if self.Controler is not None:
  1014             selected = self.TabsOpened.GetSelection()
  1035             selected = self.TabsOpened.GetSelection()
  1015             if selected > -1:
  1036             if selected > -1:
  1016                 window = self.TabsOpened.GetPage(selected)
  1037                 window = self.TabsOpened.GetPage(selected)
  1017                 undo, redo = window.GetBufferState()
  1038                 undo, redo = window.GetBufferState()
  1018             else:
  1039             else:
  1019                 undo, redo = self.Controler.GetBufferState()
  1040                 undo, redo = self.Controler.GetBufferState()
  1020             self.EditMenu.Enable(wx.ID_UNDO, undo)
  1041             self.EditMenu.Enable(wx.ID_UNDO, undo)
       
  1042             MenuToolBar.EnableTool(wx.ID_UNDO, undo)
  1021             self.EditMenu.Enable(wx.ID_REDO, redo)
  1043             self.EditMenu.Enable(wx.ID_REDO, redo)
       
  1044             MenuToolBar.EnableTool(wx.ID_REDO, redo)
  1022             #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True)
  1045             #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True)
  1023             #self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, 
  1046             #self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, 
  1024             #                self.Controler.IsProjectBufferEnabled())
  1047             #                self.Controler.IsProjectBufferEnabled())
  1025             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True)
  1048             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True)
  1026             self.EditMenu.Enable(wx.ID_ADD, True)
  1049             self.EditMenu.Enable(wx.ID_ADD, True)
  1027             self.EditMenu.Enable(wx.ID_DELETE, True)
  1050             self.EditMenu.Enable(wx.ID_DELETE, True)
  1028             if self.TabsOpened.GetPageCount() > 0:
  1051             if self.TabsOpened.GetPageCount() > 0:
  1029                 self.EditMenu.Enable(wx.ID_CUT, True)
  1052                 self.EditMenu.Enable(wx.ID_CUT, True)
       
  1053                 MenuToolBar.EnableTool(wx.ID_CUT, True)
  1030                 self.EditMenu.Enable(wx.ID_COPY, True)
  1054                 self.EditMenu.Enable(wx.ID_COPY, True)
       
  1055                 MenuToolBar.EnableTool(wx.ID_COPY, True)
  1031                 if self.GetCopyBuffer() is not None:
  1056                 if self.GetCopyBuffer() is not None:
  1032                     self.EditMenu.Enable(wx.ID_PASTE, True)
  1057                     self.EditMenu.Enable(wx.ID_PASTE, True)
       
  1058                     MenuToolBar.EnableTool(wx.ID_PASTE, True)
  1033                 else:
  1059                 else:
  1034                     self.EditMenu.Enable(wx.ID_PASTE, False)
  1060                     self.EditMenu.Enable(wx.ID_PASTE, False)
       
  1061                     MenuToolBar.EnableTool(wx.ID_PASTE, False)
  1035                 self.EditMenu.Enable(wx.ID_SELECTALL, True)
  1062                 self.EditMenu.Enable(wx.ID_SELECTALL, True)
  1036             else:
  1063             else:
  1037                 self.EditMenu.Enable(wx.ID_CUT, False)
  1064                 self.EditMenu.Enable(wx.ID_CUT, False)
       
  1065                 MenuToolBar.EnableTool(wx.ID_CUT, False)
  1038                 self.EditMenu.Enable(wx.ID_COPY, False)
  1066                 self.EditMenu.Enable(wx.ID_COPY, False)
       
  1067                 MenuToolBar.EnableTool(wx.ID_COPY, False)
  1039                 self.EditMenu.Enable(wx.ID_PASTE, False)
  1068                 self.EditMenu.Enable(wx.ID_PASTE, False)
       
  1069                 MenuToolBar.EnableTool(wx.ID_PASTE, False)
  1040                 self.EditMenu.Enable(wx.ID_SELECTALL, False)
  1070                 self.EditMenu.Enable(wx.ID_SELECTALL, False)
  1041         else:
  1071         else:
  1042             self.EditMenu.Enable(wx.ID_UNDO, False)
  1072             self.EditMenu.Enable(wx.ID_UNDO, False)
       
  1073             MenuToolBar.EnableTool(wx.ID_UNDO, False)
  1043             self.EditMenu.Enable(wx.ID_REDO, False)
  1074             self.EditMenu.Enable(wx.ID_REDO, False)
       
  1075             MenuToolBar.EnableTool(wx.ID_REDO, False)
  1044             #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, False)
  1076             #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, False)
  1045             self.EditMenu.Enable(wx.ID_CUT, False)
  1077             self.EditMenu.Enable(wx.ID_CUT, False)
       
  1078             MenuToolBar.EnableTool(wx.ID_CUT, False)
  1046             self.EditMenu.Enable(wx.ID_COPY, False)
  1079             self.EditMenu.Enable(wx.ID_COPY, False)
       
  1080             MenuToolBar.EnableTool(wx.ID_COPY, False)
  1047             self.EditMenu.Enable(wx.ID_PASTE, False)
  1081             self.EditMenu.Enable(wx.ID_PASTE, False)
       
  1082             MenuToolBar.EnableTool(wx.ID_PASTE, False)
  1048             self.EditMenu.Enable(wx.ID_SELECTALL, False)
  1083             self.EditMenu.Enable(wx.ID_SELECTALL, False)
  1049             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, False)
  1084             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, False)
  1050             self.EditMenu.Enable(wx.ID_ADD, False)
  1085             self.EditMenu.Enable(wx.ID_ADD, False)
  1051             self.EditMenu.Enable(wx.ID_DELETE, False)
  1086             self.EditMenu.Enable(wx.ID_DELETE, False)
  1052     
  1087     
  1116                 type = self.TypesTree.GetPyData(selected)
  1151                 type = self.TypesTree.GetPyData(selected)
  1117                 function = self.DeleteFunctions.get(type, None)
  1152                 function = self.DeleteFunctions.get(type, None)
  1118                 if function is not None:
  1153                 if function is not None:
  1119                     function(self, selected)
  1154                     function(self, selected)
  1120                     self.CloseTabsWithoutModel()
  1155                     self.CloseTabsWithoutModel()
  1121                     self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, TYPESTREE, 
  1156                     self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, TYPESTREE, 
  1122                                   INSTANCESTREE, LIBRARYTREE)
  1157                                   INSTANCESTREE, LIBRARYTREE)
  1123         elif isinstance(window, (Viewer, TextViewer)):
  1158         elif isinstance(window, (Viewer, TextViewer)):
  1124             event = wx.KeyEvent(wx.EVT_CHAR._getEvtType())
  1159             event = wx.KeyEvent(wx.EVT_CHAR._getEvtType())
  1125             event.m_keyCode = wx.WXK_DELETE
  1160             event.m_keyCode = wx.WXK_DELETE
  1126             window.ProcessEvent(event)
  1161             window.ProcessEvent(event)
  1224             if not window.IsDebugging():
  1259             if not window.IsDebugging():
  1225                 wx.CallAfter(self.SelectTypesTreeItem, window.GetTagName())
  1260                 wx.CallAfter(self.SelectTypesTreeItem, window.GetTagName())
  1226                 window.RefreshView()
  1261                 window.RefreshView()
  1227             else:
  1262             else:
  1228                 wx.CallAfter(self.SelectInstancesTreeItem, window.GetInstancePath())
  1263                 wx.CallAfter(self.SelectInstancesTreeItem, window.GetInstancePath())
  1229         wx.CallAfter(self._Refresh, FILEMENU, EDITMENU, DISPLAYMENU, TOOLBAR)
  1264         wx.CallAfter(self._Refresh, FILEMENU, EDITMENU, DISPLAYMENU, EDITORTOOLBAR)
  1230         event.Skip()
  1265         event.Skip()
  1231 
  1266 
  1232     def RefreshEditor(self):
  1267     def RefreshEditor(self):
  1233         selected = self.TabsOpened.GetSelection()
  1268         selected = self.TabsOpened.GetSelection()
  1234         if USE_AUI:
  1269         if USE_AUI:
  1561             old_selected = self.TabsOpened.GetSelection()
  1596             old_selected = self.TabsOpened.GetSelection()
  1562             if old_selected != openedidx:
  1597             if old_selected != openedidx:
  1563                 if old_selected >= 0:
  1598                 if old_selected >= 0:
  1564                     self.TabsOpened.GetPage(old_selected).ResetBuffer()
  1599                     self.TabsOpened.GetPage(old_selected).ResetBuffer()
  1565                 self.TabsOpened.SetSelection(openedidx)
  1600                 self.TabsOpened.SetSelection(openedidx)
  1566             self._Refresh(FILEMENU, EDITMENU, TOOLBAR, PAGETITLES)
  1601             self._Refresh(FILEMENU, EDITMENU, EDITORTOOLBAR, PAGETITLES)
  1567         elif not onlyopened:
  1602         elif not onlyopened:
  1568             new_window = None
  1603             new_window = None
  1569             if element == ITEM_CONFIGURATION:
  1604             if element == ITEM_CONFIGURATION:
  1570                 new_window = ConfigurationEditor(self.TabsOpened, tagname, self, self.Controler)
  1605                 new_window = ConfigurationEditor(self.TabsOpened, tagname, self, self.Controler)
  1571                 new_window.SetIcon(self.GenerateBitmap("CONFIGURATION"))
  1606                 new_window.SetIcon(self.GenerateBitmap("CONFIGURATION"))
  1954                     if root is not None:
  1989                     if root is not None:
  1955                         item = self.GetInstancesTreeItem(root, editor.GetInstancePath())
  1990                         item = self.GetInstancesTreeItem(root, editor.GetInstancePath())
  1956                     if item is None:
  1991                     if item is None:
  1957                         self.TabsOpened.DeletePage(idx)
  1992                         self.TabsOpened.DeletePage(idx)
  1958                     elif isinstance(editor, GraphicViewer):
  1993                     elif isinstance(editor, GraphicViewer):
  1959                         editor.ResetView()
  1994                         editor.ResetView(True)
  1960                     else:
  1995                     else:
  1961                         editor.RefreshView()
  1996                         editor.RefreshView()
  1962             self.DebugVariablePanel.UnregisterObsoleteData()
  1997             self.DebugVariablePanel.UnregisterObsoleteData()
  1963     
  1998     
  1964     def AddDebugVariable(self, iec_path):
  1999     def AddDebugVariable(self, iec_path):
  2045             dragSource = wx.DropSource(self.LibraryTree)
  2080             dragSource = wx.DropSource(self.LibraryTree)
  2046             dragSource.SetData(data)
  2081             dragSource.SetData(data)
  2047             dragSource.DoDragDrop()
  2082             dragSource.DoDragDrop()
  2048 
  2083 
  2049 #-------------------------------------------------------------------------------
  2084 #-------------------------------------------------------------------------------
  2050 #                          ToolBar Management Functions
  2085 #                          ToolBars Management Functions
  2051 #-------------------------------------------------------------------------------
  2086 #-------------------------------------------------------------------------------
  2052 
  2087 
  2053     def ResetToolBar(self):
  2088     def AddToMenuToolBar(self, items):
       
  2089         MenuToolBar = self.Panes["MenuToolBar"]
       
  2090         if MenuToolBar.GetToolsCount() > 0:
       
  2091             MenuToolBar.AddSeparator()
       
  2092         for toolbar_item in items:
       
  2093             if toolbar_item is None:
       
  2094                 MenuToolBar.AddSeparator()
       
  2095             else:
       
  2096                 id, bitmap, help, callback = toolbar_item
       
  2097                 if not isinstance(bitmap, wx.Bitmap):
       
  2098                     bitmap = wx.ArtProvider.GetBitmap(bitmap, wx.ART_TOOLBAR, (24, 24))
       
  2099                 MenuToolBar.AddSimpleTool(id=id, shortHelpString=help, bitmap=bitmap)
       
  2100                 if callback is not None:
       
  2101                     self.Bind(wx.EVT_TOOL, callback, id=id)
       
  2102         MenuToolBar.Realize()
  2054         if USE_AUI:
  2103         if USE_AUI:
  2055             ToolBar = self.Panes["ToolBar"]
  2104             self.AUIManager.GetPane("MenuToolBar").BestSize(MenuToolBar.GetBestSize())
  2056         else:
  2105 
  2057             ToolBar = self.ToolBar
  2106     def ResetEditorToolBar(self):
  2058         
  2107         if USE_AUI:
  2059         for item in self.CurrentToolBar:
  2108             EditorToolBar = self.Panes["EditorToolBar"]
       
  2109         else:
       
  2110             EditorToolBar = self.EditorToolBar
       
  2111         
       
  2112         for item in self.CurrentEditorToolBar:
  2060             if wx.VERSION >= (2, 6, 0):
  2113             if wx.VERSION >= (2, 6, 0):
  2061                 self.Unbind(wx.EVT_MENU, id=item)
  2114                 self.Unbind(wx.EVT_MENU, id=item)
  2062             else:
  2115             else:
  2063                 self.Disconnect(id=item, eventType=wx.wxEVT_COMMAND_MENU_SELECTED) 
  2116                 self.Disconnect(id=item, eventType=wx.wxEVT_COMMAND_MENU_SELECTED) 
  2064         
  2117         
  2065             if ToolBar:
  2118             if EditorToolBar:
  2066                 ToolBar.DeleteTool(item)
  2119                 EditorToolBar.DeleteTool(item)
  2067         
  2120         
  2068         if ToolBar:
  2121         if EditorToolBar:
  2069             ToolBar.Realize()
  2122             EditorToolBar.Realize()
  2070             if USE_AUI:
  2123             if USE_AUI:
  2071                 self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize())
  2124                 self.AUIManager.GetPane("EditorToolBar").BestSize(EditorToolBar.GetBestSize())
  2072                 self.AUIManager.Update()
  2125                 self.AUIManager.Update()
  2073 
  2126 
  2074     def RefreshToolBar(self):
  2127     def RefreshEditorToolBar(self):
  2075         selected = self.TabsOpened.GetSelection()
  2128         selected = self.TabsOpened.GetSelection()
  2076         language = None
  2129         menu = None
  2077         if selected != -1:
  2130         if selected != -1:
  2078             window = self.TabsOpened.GetPage(selected)
  2131             window = self.TabsOpened.GetPage(selected)
  2079             if not window.IsDebugging():
  2132             if not window.IsDebugging():
  2080                 language = self.Controler.GetEditedElementBodyType(window.GetTagName())
  2133                 menu = self.Controler.GetEditedElementBodyType(window.GetTagName())
  2081         if language is not None and language != self.CurrentLanguage:
  2134             else:
  2082             self.ResetToolBar()
  2135                 menu = "debug"
  2083             self.CurrentLanguage = language
  2136         if menu is not None and menu != self.CurrentMenu:
  2084             self.CurrentToolBar = []
  2137             self.ResetEditorToolBar()
       
  2138             self.CurrentMenu = menu
       
  2139             self.CurrentEditorToolBar = []
  2085             if USE_AUI:
  2140             if USE_AUI:
  2086                 ToolBar = self.Panes["ToolBar"]
  2141                 EditorToolBar = self.Panes["EditorToolBar"]
  2087             else:
  2142             else:
  2088                 ToolBar = self.ToolBar
  2143                 EditorToolBar = self.EditorToolBar
  2089             if ToolBar:
  2144             if EditorToolBar:
  2090                 for radio, modes, id, method, picture, help in ToolBarItems[language]:
  2145                 for radio, modes, id, method, picture, help in EditorToolBarItems[menu]:
  2091                     if modes & self.DrawingMode:
  2146                     if modes & self.DrawingMode:
  2092                         if radio or self.DrawingMode == FREEDRAWING_MODE:
  2147                         if radio or self.DrawingMode == FREEDRAWING_MODE:
  2093                             ToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help)
  2148                             EditorToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help)
  2094                         else:
  2149                         else:
  2095                             ToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help)
  2150                             EditorToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help)
  2096                         self.Bind(wx.EVT_TOOL, getattr(self, method), id=id)
  2151                         self.Bind(wx.EVT_MENU, getattr(self, method), id=id)
  2097                         self.CurrentToolBar.append(id)
  2152                         self.CurrentEditorToolBar.append(id)
  2098                 ToolBar.Realize()
  2153                 EditorToolBar.Realize()
  2099                 if USE_AUI:
  2154                 if USE_AUI:
  2100                     self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize())
  2155                     self.AUIManager.GetPane("EditorToolBar").BestSize(EditorToolBar.GetBestSize())
  2101                     self.AUIManager.Update()
  2156                     self.AUIManager.Update()
  2102         elif not language:
  2157         elif not menu:
  2103             self.ResetToolBar()
  2158             self.ResetEditorToolBar()
  2104             self.CurrentLanguage = language
  2159             self.CurrentMenu = menu
  2105         self.ResetCurrentMode()
  2160         self.ResetCurrentMode()
  2106 
  2161 
  2107 
  2162 
  2108 #-------------------------------------------------------------------------------
  2163 #-------------------------------------------------------------------------------
  2109 #                           ToolBar Items Functions
  2164 #                           EditorToolBar Items Functions
  2110 #-------------------------------------------------------------------------------
  2165 #-------------------------------------------------------------------------------
  2111 
  2166 
  2112     def ResetCurrentMode(self):
  2167     def ResetCurrentMode(self):
  2113         selected = self.TabsOpened.GetSelection()
  2168         selected = self.TabsOpened.GetSelection()
  2114         if selected != -1:
  2169         if selected != -1:
  2115             window = self.TabsOpened.GetPage(selected)
  2170             window = self.TabsOpened.GetPage(selected)
  2116             window.SetMode(MODE_SELECTION)
  2171             window.SetMode(MODE_SELECTION)
  2117         if USE_AUI:
  2172         if USE_AUI:
  2118             ToolBar = self.Panes["ToolBar"]
  2173             EditorToolBar = self.Panes["EditorToolBar"]
  2119         else:
  2174         else:
  2120             ToolBar = self.ToolBar
  2175             EditorToolBar = self.EditorToolBar
  2121         if ToolBar:
  2176         if EditorToolBar:
  2122             ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, False)
  2177             EditorToolBar.ToggleTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION, False)
  2123             ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True)
  2178             EditorToolBar.ToggleTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION, True)
  2124         
  2179         
  2125     def ResetToolToggle(self, id):
  2180     def ResetToolToggle(self, id):
  2126         if USE_AUI:
  2181         if USE_AUI:
  2127             tool = self.Panes["ToolBar"].FindById(id)
  2182             tool = self.Panes["EditorToolBar"].FindById(id)
  2128         else:
  2183         else:
  2129             tool = self.ToolBar.FindById(id)
  2184             tool = self.EditorToolBar.FindById(id)
  2130         tool.SetToggle(False)
  2185         tool.SetToggle(False)
  2131 
  2186 
  2132     def OnSelectionTool(self, event):
  2187     def OnSelectionTool(self, event):
  2133         selected = self.TabsOpened.GetSelection()
  2188         selected = self.TabsOpened.GetSelection()
  2134         if selected != -1:
  2189         if selected != -1:
  2138         selected = self.TabsOpened.GetSelection()
  2193         selected = self.TabsOpened.GetSelection()
  2139         if selected != -1:
  2194         if selected != -1:
  2140             self.TabsOpened.GetPage(selected).SetMode(MODE_MOTION)
  2195             self.TabsOpened.GetPage(selected).SetMode(MODE_MOTION)
  2141     
  2196     
  2142     def OnCommentTool(self, event):
  2197     def OnCommentTool(self, event):
  2143         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOMMENT)
  2198         self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARCOMMENT)
  2144         selected = self.TabsOpened.GetSelection()
  2199         selected = self.TabsOpened.GetSelection()
  2145         if selected != -1:
  2200         if selected != -1:
  2146             self.TabsOpened.GetPage(selected).SetMode(MODE_COMMENT)
  2201             self.TabsOpened.GetPage(selected).SetMode(MODE_COMMENT)
  2147     
  2202     
  2148     def OnVariableTool(self, event):
  2203     def OnVariableTool(self, event):
  2149         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARVARIABLE)
  2204         self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARVARIABLE)
  2150         selected = self.TabsOpened.GetSelection()
  2205         selected = self.TabsOpened.GetSelection()
  2151         if selected != -1:
  2206         if selected != -1:
  2152             self.TabsOpened.GetPage(selected).SetMode(MODE_VARIABLE)
  2207             self.TabsOpened.GetPage(selected).SetMode(MODE_VARIABLE)
  2153     
  2208     
  2154     def OnBlockTool(self, event):
  2209     def OnBlockTool(self, event):
  2155         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARBLOCK)
  2210         self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARBLOCK)
  2156         selected = self.TabsOpened.GetSelection()
  2211         selected = self.TabsOpened.GetSelection()
  2157         if selected != -1:
  2212         if selected != -1:
  2158             self.TabsOpened.GetPage(selected).SetMode(MODE_BLOCK)
  2213             self.TabsOpened.GetPage(selected).SetMode(MODE_BLOCK)
  2159         
  2214         
  2160     def OnConnectionTool(self, event):
  2215     def OnConnectionTool(self, event):
  2161         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONNECTION)
  2216         self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARCONNECTION)
  2162         selected = self.TabsOpened.GetSelection()
  2217         selected = self.TabsOpened.GetSelection()
  2163         if selected != -1:
  2218         if selected != -1:
  2164             self.TabsOpened.GetPage(selected).SetMode(MODE_CONNECTION)
  2219             self.TabsOpened.GetPage(selected).SetMode(MODE_CONNECTION)
  2165     
  2220     
  2166     def OnPowerRailTool(self, event):
  2221     def OnPowerRailTool(self, event):
  2167         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARPOWERRAIL)
  2222         self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL)
  2168         selected = self.TabsOpened.GetSelection()
  2223         selected = self.TabsOpened.GetSelection()
  2169         if selected != -1:
  2224         if selected != -1:
  2170             self.TabsOpened.GetPage(selected).SetMode(MODE_POWERRAIL)
  2225             self.TabsOpened.GetPage(selected).SetMode(MODE_POWERRAIL)
  2171     
  2226     
  2172     def OnRungTool(self, event):
  2227     def OnRungTool(self, event):
  2174         if selected != -1:
  2229         if selected != -1:
  2175             self.TabsOpened.GetPage(selected).AddLadderRung()
  2230             self.TabsOpened.GetPage(selected).AddLadderRung()
  2176         event.Skip()
  2231         event.Skip()
  2177     
  2232     
  2178     def OnCoilTool(self, event):
  2233     def OnCoilTool(self, event):
  2179         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOIL)
  2234         self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARCOIL)
  2180         selected = self.TabsOpened.GetSelection()
  2235         selected = self.TabsOpened.GetSelection()
  2181         if selected != -1:
  2236         if selected != -1:
  2182             self.TabsOpened.GetPage(selected).SetMode(MODE_COIL)
  2237             self.TabsOpened.GetPage(selected).SetMode(MODE_COIL)
  2183         event.Skip()
  2238         event.Skip()
  2184     
  2239     
  2185     def OnContactTool(self, event):
  2240     def OnContactTool(self, event):
  2186         if self.DrawingMode == FREEDRAWING_MODE:
  2241         if self.DrawingMode == FREEDRAWING_MODE:
  2187             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONTACT)
  2242             self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARCONTACT)
  2188         selected = self.TabsOpened.GetSelection()
  2243         selected = self.TabsOpened.GetSelection()
  2189         if selected != -1:
  2244         if selected != -1:
  2190             if self.DrawingMode == FREEDRAWING_MODE:
  2245             if self.DrawingMode == FREEDRAWING_MODE:
  2191                 self.TabsOpened.GetPage(selected).SetMode(MODE_CONTACT)
  2246                 self.TabsOpened.GetPage(selected).SetMode(MODE_CONTACT)
  2192             else:
  2247             else:
  2196         selected = self.TabsOpened.GetSelection()
  2251         selected = self.TabsOpened.GetSelection()
  2197         if selected != -1:
  2252         if selected != -1:
  2198             self.TabsOpened.GetPage(selected).AddLadderBranch()
  2253             self.TabsOpened.GetPage(selected).AddLadderBranch()
  2199     
  2254     
  2200     def OnInitialStepTool(self, event):
  2255     def OnInitialStepTool(self, event):
  2201         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARINITIALSTEP)
  2256         self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARINITIALSTEP)
  2202         selected = self.TabsOpened.GetSelection()
  2257         selected = self.TabsOpened.GetSelection()
  2203         if selected != -1:
  2258         if selected != -1:
  2204             self.TabsOpened.GetPage(selected).SetMode(MODE_INITIALSTEP)
  2259             self.TabsOpened.GetPage(selected).SetMode(MODE_INITIALSTEP)
  2205     
  2260     
  2206     def OnStepTool(self, event):
  2261     def OnStepTool(self, event):
  2207         if self.GetDrawingMode() == FREEDRAWING_MODE:
  2262         if self.GetDrawingMode() == FREEDRAWING_MODE:
  2208             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARSTEP)
  2263             self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARSTEP)
  2209         selected = self.TabsOpened.GetSelection()
  2264         selected = self.TabsOpened.GetSelection()
  2210         if selected != -1:
  2265         if selected != -1:
  2211             if self.GetDrawingMode() == FREEDRAWING_MODE:
  2266             if self.GetDrawingMode() == FREEDRAWING_MODE:
  2212                 self.TabsOpened.GetPage(selected).SetMode(MODE_STEP)
  2267                 self.TabsOpened.GetPage(selected).SetMode(MODE_STEP)
  2213             else:
  2268             else:
  2214                 self.TabsOpened.GetPage(selected).AddStep()
  2269                 self.TabsOpened.GetPage(selected).AddStep()
  2215     
  2270     
  2216     def OnActionBlockTool(self, event):
  2271     def OnActionBlockTool(self, event):
  2217         if self.GetDrawingMode() == FREEDRAWING_MODE:
  2272         if self.GetDrawingMode() == FREEDRAWING_MODE:
  2218             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARACTIONBLOCK)
  2273             self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARACTIONBLOCK)
  2219         selected = self.TabsOpened.GetSelection()
  2274         selected = self.TabsOpened.GetSelection()
  2220         if selected != -1:
  2275         if selected != -1:
  2221             if self.GetDrawingMode() == FREEDRAWING_MODE:
  2276             if self.GetDrawingMode() == FREEDRAWING_MODE:
  2222                 self.TabsOpened.GetPage(selected).SetMode(MODE_ACTION)
  2277                 self.TabsOpened.GetPage(selected).SetMode(MODE_ACTION)
  2223             else:
  2278             else:
  2224                 self.TabsOpened.GetPage(selected).AddStepAction()
  2279                 self.TabsOpened.GetPage(selected).AddStepAction()
  2225     
  2280     
  2226     def OnTransitionTool(self, event):
  2281     def OnTransitionTool(self, event):
  2227         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARTRANSITION)
  2282         self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARTRANSITION)
  2228         selected = self.TabsOpened.GetSelection()
  2283         selected = self.TabsOpened.GetSelection()
  2229         if selected != -1:
  2284         if selected != -1:
  2230             self.TabsOpened.GetPage(selected).SetMode(MODE_TRANSITION)
  2285             self.TabsOpened.GetPage(selected).SetMode(MODE_TRANSITION)
  2231     
  2286     
  2232     def OnDivergenceTool(self, event):
  2287     def OnDivergenceTool(self, event):
  2233         if self.GetDrawingMode() == FREEDRAWING_MODE:
  2288         if self.GetDrawingMode() == FREEDRAWING_MODE:
  2234             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARDIVERGENCE)
  2289             self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARDIVERGENCE)
  2235         selected = self.TabsOpened.GetSelection()
  2290         selected = self.TabsOpened.GetSelection()
  2236         if selected != -1:
  2291         if selected != -1:
  2237             if self.GetDrawingMode() == FREEDRAWING_MODE:
  2292             if self.GetDrawingMode() == FREEDRAWING_MODE:
  2238                 self.TabsOpened.GetPage(selected).SetMode(MODE_DIVERGENCE)
  2293                 self.TabsOpened.GetPage(selected).SetMode(MODE_DIVERGENCE)
  2239             else:
  2294             else:
  2240                 self.TabsOpened.GetPage(selected).AddDivergence()
  2295                 self.TabsOpened.GetPage(selected).AddDivergence()
  2241     
  2296     
  2242     def OnJumpTool(self, event):
  2297     def OnJumpTool(self, event):
  2243         if self.GetDrawingMode() == FREEDRAWING_MODE:
  2298         if self.GetDrawingMode() == FREEDRAWING_MODE:
  2244             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARJUMP)
  2299             self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARJUMP)
  2245         selected = self.TabsOpened.GetSelection()
  2300         selected = self.TabsOpened.GetSelection()
  2246         if selected != -1:
  2301         if selected != -1:
  2247             if self.GetDrawingMode() == FREEDRAWING_MODE:
  2302             if self.GetDrawingMode() == FREEDRAWING_MODE:
  2248                 self.TabsOpened.GetPage(selected).SetMode(MODE_JUMP)
  2303                 self.TabsOpened.GetPage(selected).SetMode(MODE_JUMP)
  2249             else:
  2304             else:
  2335     def GenerateChangePouTypeFunction(self, name, new_type):
  2390     def GenerateChangePouTypeFunction(self, name, new_type):
  2336         def OnChangePouTypeMenu(event):
  2391         def OnChangePouTypeMenu(event):
  2337             selected = self.TypesTree.GetSelection()
  2392             selected = self.TypesTree.GetSelection()
  2338             if self.TypesTree.GetPyData(selected) == ITEM_POU: 
  2393             if self.TypesTree.GetPyData(selected) == ITEM_POU: 
  2339                 self.Controler.ProjectChangePouType(name, new_type)
  2394                 self.Controler.ProjectChangePouType(name, new_type)
  2340                 self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, TYPESTREE, LIBRARYTREE)
  2395                 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, TYPESTREE, LIBRARYTREE)
  2341         return OnChangePouTypeMenu
  2396         return OnChangePouTypeMenu
  2342 
  2397 
  2343     def OnCopyPou(self, event):
  2398     def OnCopyPou(self, event):
  2344         selected = self.TypesTree.GetSelection()
  2399         selected = self.TypesTree.GetSelection()
  2345         pou_name = self.TypesTree.GetItemText(selected)
  2400         pou_name = self.TypesTree.GetItemText(selected)
  2363         if result is not None:
  2418         if result is not None:
  2364             message = wx.MessageDialog(self, result, _("Error"), wx.OK|wx.ICON_ERROR)
  2419             message = wx.MessageDialog(self, result, _("Error"), wx.OK|wx.ICON_ERROR)
  2365             message.ShowModal()
  2420             message.ShowModal()
  2366             message.Destroy()
  2421             message.Destroy()
  2367         else:
  2422         else:
  2368             self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, TYPESTREE, LIBRARYTREE)
  2423             self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, TYPESTREE, LIBRARYTREE)
  2369 
  2424 
  2370 #-------------------------------------------------------------------------------
  2425 #-------------------------------------------------------------------------------
  2371 #                        Remove Project Elements Functions
  2426 #                        Remove Project Elements Functions
  2372 #-------------------------------------------------------------------------------
  2427 #-------------------------------------------------------------------------------
  2373 
  2428 
  2379                 self.Controler.ProjectRemoveDataType(name)
  2434                 self.Controler.ProjectRemoveDataType(name)
  2380                 tagname = self.Controler.ComputeDataTypeName(name)
  2435                 tagname = self.Controler.ComputeDataTypeName(name)
  2381                 idx = self.IsOpened(tagname)
  2436                 idx = self.IsOpened(tagname)
  2382                 if idx is not None:
  2437                 if idx is not None:
  2383                     self.TabsOpened.DeletePage(idx)
  2438                     self.TabsOpened.DeletePage(idx)
  2384                 self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, TYPESTREE)
  2439                 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, TYPESTREE)
  2385             else:
  2440             else:
  2386                 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!"))
  2441                 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!"))
  2387 
  2442 
  2388     def OnRenamePouMenu(self, event):
  2443     def OnRenamePouMenu(self, event):
  2389         selected = self.TypesTree.GetSelection()
  2444         selected = self.TypesTree.GetSelection()
  2398                 self.Controler.ProjectRemovePou(name)
  2453                 self.Controler.ProjectRemovePou(name)
  2399                 tagname = self.Controler.ComputePouName(name)
  2454                 tagname = self.Controler.ComputePouName(name)
  2400                 idx = self.IsOpened(tagname)
  2455                 idx = self.IsOpened(tagname)
  2401                 if idx is not None:
  2456                 if idx is not None:
  2402                     self.TabsOpened.DeletePage(idx)
  2457                     self.TabsOpened.DeletePage(idx)
  2403                 self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, TYPESTREE, INSTANCESTREE, LIBRARYTREE)
  2458                 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, TYPESTREE, INSTANCESTREE, LIBRARYTREE)
  2404             else:
  2459             else:
  2405                 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!"))
  2460                 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!"))
  2406 
  2461 
  2407     def OnRemoveTransitionMenu(self, event):
  2462     def OnRemoveTransitionMenu(self, event):
  2408         selected = self.TypesTree.GetSelection()
  2463         selected = self.TypesTree.GetSelection()
  2570         self.Bind(wx.EVT_MENU, self.OnPageSetupMenu, id=wx.ID_PAGE_SETUP)
  2625         self.Bind(wx.EVT_MENU, self.OnPageSetupMenu, id=wx.ID_PAGE_SETUP)
  2571         self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW)
  2626         self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW)
  2572         self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT)
  2627         self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT)
  2573         self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, id=wx.ID_PROPERTIES)
  2628         self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, id=wx.ID_PROPERTIES)
  2574         self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT)
  2629         self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT)
  2575 
  2630         
       
  2631         self.AddToMenuToolBar([(wx.ID_NEW, wx.ART_NEW, _(u'New'), None),
       
  2632                                (wx.ID_OPEN, wx.ART_FILE_OPEN, _(u'Open'), None),
       
  2633                                (wx.ID_SAVE, wx.ART_FILE_SAVE, _(u'Save'), None),
       
  2634                                (wx.ID_SAVEAS, wx.ART_FILE_SAVE_AS, _(u'Save As...'), None),
       
  2635                                (wx.ID_PRINT, wx.ART_PRINT, _(u'Print'), None)])
       
  2636             
  2576     def _init_coll_HelpMenu_Items(self, parent):
  2637     def _init_coll_HelpMenu_Items(self, parent):
  2577         AppendMenu(parent, help='', id=wx.ID_HELP, 
  2638         AppendMenu(parent, help='', id=wx.ID_HELP, 
  2578             kind=wx.ITEM_NORMAL, text=_(u'PLCOpenEditor\tF1'))
  2639             kind=wx.ITEM_NORMAL, text=_(u'PLCOpenEditor\tF1'))
  2579         #AppendMenu(parent, help='', id=wx.ID_HELP_CONTENTS,
  2640         #AppendMenu(parent, help='', id=wx.ID_HELP_CONTENTS,
  2580         #      kind=wx.ITEM_NORMAL, text=u'PLCOpen\tF2')
  2641         #      kind=wx.ITEM_NORMAL, text=u'PLCOpen\tF2')
  2607         # Define PLCOpenEditor icon
  2668         # Define PLCOpenEditor icon
  2608         self.SetIcon(wx.Icon(os.path.join(CWD,"Images", "poe.ico"),wx.BITMAP_TYPE_ICO))
  2669         self.SetIcon(wx.Icon(os.path.join(CWD,"Images", "poe.ico"),wx.BITMAP_TYPE_ICO))
  2609 
  2670 
  2610         self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
  2671         self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
  2611         
  2672         
  2612         self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU)
  2673         self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU)
  2613         
  2674         
  2614         if result is not None:
  2675         if result is not None:
  2615             self.ShowErrorMessage(result)
  2676             self.ShowErrorMessage(result)
  2616 
  2677 
  2617     def OnCloseFrame(self, event):
  2678     def OnCloseFrame(self, event):
  2635 #-------------------------------------------------------------------------------
  2696 #-------------------------------------------------------------------------------
  2636 #                            File Menu Functions
  2697 #                            File Menu Functions
  2637 #-------------------------------------------------------------------------------
  2698 #-------------------------------------------------------------------------------
  2638 
  2699 
  2639     def RefreshFileMenu(self):
  2700     def RefreshFileMenu(self):
       
  2701         MenuToolBar = self.Panes["MenuToolBar"]
  2640         if self.Controler is not None:
  2702         if self.Controler is not None:
  2641             selected = self.TabsOpened.GetSelection()
  2703             selected = self.TabsOpened.GetSelection()
  2642             if selected >= 0:
  2704             if selected >= 0:
  2643                 graphic_viewer = isinstance(self.TabsOpened.GetPage(selected), Viewer)
  2705                 graphic_viewer = isinstance(self.TabsOpened.GetPage(selected), Viewer)
  2644             else:
  2706             else:
  2646             if self.TabsOpened.GetPageCount() > 0:
  2708             if self.TabsOpened.GetPageCount() > 0:
  2647                 self.FileMenu.Enable(wx.ID_CLOSE, True)
  2709                 self.FileMenu.Enable(wx.ID_CLOSE, True)
  2648                 if graphic_viewer:
  2710                 if graphic_viewer:
  2649                     self.FileMenu.Enable(wx.ID_PREVIEW, True)
  2711                     self.FileMenu.Enable(wx.ID_PREVIEW, True)
  2650                     self.FileMenu.Enable(wx.ID_PRINT, True)
  2712                     self.FileMenu.Enable(wx.ID_PRINT, True)
       
  2713                     MenuToolBar.EnableTool(wx.ID_PRINT, True)
  2651                 else:
  2714                 else:
  2652                     self.FileMenu.Enable(wx.ID_PREVIEW, False)
  2715                     self.FileMenu.Enable(wx.ID_PREVIEW, False)
  2653                     self.FileMenu.Enable(wx.ID_PRINT, False)
  2716                     self.FileMenu.Enable(wx.ID_PRINT, False)
       
  2717                     MenuToolBar.EnableTool(wx.ID_PRINT, False)
  2654             else:
  2718             else:
  2655                 self.FileMenu.Enable(wx.ID_CLOSE, False)
  2719                 self.FileMenu.Enable(wx.ID_CLOSE, False)
  2656                 self.FileMenu.Enable(wx.ID_PREVIEW, False)
  2720                 self.FileMenu.Enable(wx.ID_PREVIEW, False)
  2657                 self.FileMenu.Enable(wx.ID_PRINT, False)
  2721                 self.FileMenu.Enable(wx.ID_PRINT, False)
       
  2722                 MenuToolBar.EnableTool(wx.ID_PRINT, False)
  2658             self.FileMenu.Enable(wx.ID_PAGE_SETUP, True)
  2723             self.FileMenu.Enable(wx.ID_PAGE_SETUP, True)
  2659             self.FileMenu.Enable(wx.ID_SAVE, True)
  2724             project_modified = not self.Controler.ProjectIsSaved()
       
  2725             self.FileMenu.Enable(wx.ID_SAVE, project_modified)
       
  2726             MenuToolBar.EnableTool(wx.ID_SAVE, project_modified)
  2660             self.FileMenu.Enable(wx.ID_PROPERTIES, True)
  2727             self.FileMenu.Enable(wx.ID_PROPERTIES, True)
  2661             self.FileMenu.Enable(wx.ID_CLOSE_ALL, True)
  2728             self.FileMenu.Enable(wx.ID_CLOSE_ALL, True)
  2662             self.FileMenu.Enable(wx.ID_SAVEAS, True)
  2729             self.FileMenu.Enable(wx.ID_SAVEAS, True)
       
  2730             MenuToolBar.EnableTool(wx.ID_SAVEAS, True)
  2663             self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUGENERATE, True)
  2731             self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUGENERATE, True)
  2664         else:
  2732         else:
  2665             self.FileMenu.Enable(wx.ID_CLOSE, False)
  2733             self.FileMenu.Enable(wx.ID_CLOSE, False)
  2666             self.FileMenu.Enable(wx.ID_PAGE_SETUP, False)
  2734             self.FileMenu.Enable(wx.ID_PAGE_SETUP, False)
  2667             self.FileMenu.Enable(wx.ID_PREVIEW, False)
  2735             self.FileMenu.Enable(wx.ID_PREVIEW, False)
  2668             self.FileMenu.Enable(wx.ID_PRINT, False)
  2736             self.FileMenu.Enable(wx.ID_PRINT, False)
       
  2737             MenuToolBar.EnableTool(wx.ID_PRINT, False)
  2669             self.FileMenu.Enable(wx.ID_SAVE, False)
  2738             self.FileMenu.Enable(wx.ID_SAVE, False)
       
  2739             MenuToolBar.EnableTool(wx.ID_SAVE, False)
  2670             self.FileMenu.Enable(wx.ID_PROPERTIES, False)
  2740             self.FileMenu.Enable(wx.ID_PROPERTIES, False)
  2671             self.FileMenu.Enable(wx.ID_CLOSE_ALL, False)
  2741             self.FileMenu.Enable(wx.ID_CLOSE_ALL, False)
  2672             self.FileMenu.Enable(wx.ID_SAVEAS, False)
  2742             self.FileMenu.Enable(wx.ID_SAVEAS, False)
       
  2743             MenuToolBar.EnableTool(wx.ID_SAVEAS, False)
  2673             self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUGENERATE, False)
  2744             self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUGENERATE, False)
  2674 
  2745 
  2675     def OnNewProjectMenu(self, event):
  2746     def OnNewProjectMenu(self, event):
  2676         if self.Controler is not None and not self.CheckSaveBeforeClosing():
  2747         if self.Controler is not None and not self.CheckSaveBeforeClosing():
  2677             return
  2748             return
  2704                 self.ResetView()
  2775                 self.ResetView()
  2705                 self.Controler = PLCControler()
  2776                 self.Controler = PLCControler()
  2706                 result = self.Controler.OpenXMLFile(filepath)
  2777                 result = self.Controler.OpenXMLFile(filepath)
  2707                 if result is None:
  2778                 if result is None:
  2708                     self._Refresh(TYPESTREE, INSTANCESTREE, LIBRARYTREE)
  2779                     self._Refresh(TYPESTREE, INSTANCESTREE, LIBRARYTREE)
  2709             self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU)
  2780             self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU)
  2710         dialog.Destroy()
  2781         dialog.Destroy()
  2711         
  2782         
  2712         if result is not None:
  2783         if result is not None:
  2713             self.ShowErrorMessage(result)
  2784             self.ShowErrorMessage(result)
  2714     
  2785     
  2715     def OnCloseProjectMenu(self, event):
  2786     def OnCloseProjectMenu(self, event):
  2716         if not self.CheckSaveBeforeClosing():
  2787         if not self.CheckSaveBeforeClosing():
  2717             return
  2788             return
  2718         self.ResetView()
  2789         self.ResetView()
  2719         self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU)
  2790         self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU)
  2720 
  2791 
  2721     def OnSaveProjectMenu(self, event):
  2792     def OnSaveProjectMenu(self, event):
  2722         self.SaveProject()
  2793         self.SaveProject()
  2723 
  2794 
  2724     def OnSaveProjectAsMenu(self, event):
  2795     def OnSaveProjectAsMenu(self, event):