Beremiz.py
changeset 781 cdc6393705ce
parent 771 85d33a130a5c
child 782 6f0e10085df9
equal deleted inserted replaced
780:70632f4612a1 781:cdc6393705ce
    83     app = wx.PySimpleApp(redirect=BMZ_DBG)
    83     app = wx.PySimpleApp(redirect=BMZ_DBG)
    84     app.SetAppName('beremiz')
    84     app.SetAppName('beremiz')
    85     wx.InitAllImageHandlers()
    85     wx.InitAllImageHandlers()
    86     
    86     
    87     # popup splash
    87     # popup splash
    88     bmp = wx.Image(Bpath("images","splash.png")).ConvertToBitmap()
    88     bmp = wx.Image(Bpath("images", "splash.png")).ConvertToBitmap()
    89     #splash=AdvancedSplash(None, bitmap=bmp, style=wx.SPLASH_CENTRE_ON_SCREEN, timeout=4000)
    89     #splash=AdvancedSplash(None, bitmap=bmp, style=wx.SPLASH_CENTRE_ON_SCREEN, timeout=4000)
    90     splash=AdvancedSplash(None, bitmap=bmp)
    90     splash=AdvancedSplash(None, bitmap=bmp)
    91     wx.Yield()
    91     wx.Yield()
    92 
    92 
    93     if updateinfo_url is not None:
    93     if updateinfo_url is not None:
   143 
   143 
   144 base_folder = os.path.split(sys.path[0])[0]
   144 base_folder = os.path.split(sys.path[0])[0]
   145 sys.path.append(base_folder)
   145 sys.path.append(base_folder)
   146 sys.path.append(os.path.join(base_folder, "plcopeneditor"))
   146 sys.path.append(os.path.join(base_folder, "plcopeneditor"))
   147 
   147 
       
   148 from utils.BitmapLibrary import AddBitmapFolder, GetBitmap
       
   149 AddBitmapFolder(os.path.join(CWD, "images"))
       
   150 
   148 if __name__ == '__main__':
   151 if __name__ == '__main__':
   149     # Load extensions
   152     # Load extensions
   150     for extfilename in extensions:
   153     for extfilename in extensions:
   151         sys.path.append(os.path.split(os.path.realpath(extfilename))[0])
   154         extension_folder = os.path.split(os.path.realpath(extfilename))[0]
       
   155         sys.path.append(extension_folder)
       
   156         AddBitmapFolder(os.path.join(extension_folder, "images"))
   152         execfile(extfilename, locals())
   157         execfile(extfilename, locals())
   153 
   158 
   154 import wx.lib.buttons, wx.lib.statbmp
   159 import wx.lib.buttons, wx.lib.statbmp
   155 from util.TextCtrlAutoComplete import TextCtrlAutoComplete
   160 from util.TextCtrlAutoComplete import TextCtrlAutoComplete
   156 import cPickle
   161 import cPickle
   173     def __init__(self, parent, ID, bitmapname,
   178     def __init__(self, parent, ID, bitmapname,
   174                  pos = wx.DefaultPosition, size = wx.DefaultSize,
   179                  pos = wx.DefaultPosition, size = wx.DefaultSize,
   175                  style = 0,
   180                  style = 0,
   176                  name = "genstatbmp"):
   181                  name = "genstatbmp"):
   177         
   182         
   178         bitmappath = Bpath( "images", bitmapname)
   183         wx.lib.statbmp.GenStaticBitmap.__init__(self, parent, ID, 
   179         if os.path.isfile(bitmappath):
   184                  GetBitmap(bitmapname),
   180             bitmap = wx.Bitmap(bitmappath)
       
   181         else:
       
   182             bitmap = None
       
   183         wx.lib.statbmp.GenStaticBitmap.__init__(self, parent, ID, bitmap,
       
   184                  pos, size,
   185                  pos, size,
   185                  style,
   186                  style,
   186                  name)
   187                  name)
   187         
   188         
   188     def OnPaint(self, event):
   189     def OnPaint(self, event):
   333         self.Bind(wx.EVT_MENU, self.OnPageSetupMenu, id=wx.ID_PAGE_SETUP)
   334         self.Bind(wx.EVT_MENU, self.OnPageSetupMenu, id=wx.ID_PAGE_SETUP)
   334         self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW)
   335         self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW)
   335         self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT)
   336         self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT)
   336         self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT)
   337         self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT)
   337     
   338     
   338         self.AddToMenuToolBar([(wx.ID_NEW, "new.png", _(u'New'), None),
   339         self.AddToMenuToolBar([(wx.ID_NEW, "new", _(u'New'), None),
   339                                (wx.ID_OPEN, "open.png", _(u'Open'), None),
   340                                (wx.ID_OPEN, "open", _(u'Open'), None),
   340                                (wx.ID_SAVE, "save.png", _(u'Save'), None),
   341                                (wx.ID_SAVE, "save", _(u'Save'), None),
   341                                (wx.ID_SAVEAS, "saveas.png", _(u'Save As...'), None),
   342                                (wx.ID_SAVEAS, "saveas", _(u'Save As...'), None),
   342                                (wx.ID_PRINT, "print.png", _(u'Print'), None)])
   343                                (wx.ID_PRINT, "print", _(u'Print'), None)])
   343     
   344     
   344     def _init_coll_AddMenu_Items(self, parent):
   345     def _init_coll_AddMenu_Items(self, parent):
   345         IDEFrame._init_coll_AddMenu_Items(self, parent, False)
   346         IDEFrame._init_coll_AddMenu_Items(self, parent, False)
   346         new_id = wx.NewId()
   347         new_id = wx.NewId()
   347         AppendMenu(parent, help='', id=new_id,
   348         AppendMenu(parent, help='', id=new_id,
   422             ("RESOURCE",      LOCATION_MODULE),
   423             ("RESOURCE",      LOCATION_MODULE),
   423             ("PROGRAM",       LOCATION_GROUP),
   424             ("PROGRAM",       LOCATION_GROUP),
   424             ("VAR_INPUT",     LOCATION_VAR_INPUT),
   425             ("VAR_INPUT",     LOCATION_VAR_INPUT),
   425             ("VAR_OUTPUT",    LOCATION_VAR_OUTPUT),
   426             ("VAR_OUTPUT",    LOCATION_VAR_OUTPUT),
   426             ("VAR_LOCAL",     LOCATION_VAR_MEMORY)]:
   427             ("VAR_LOCAL",     LOCATION_VAR_MEMORY)]:
   427             self.LocationImageDict[itemtype]=self.LocationImageList.Add(wx.Bitmap(os.path.join(base_folder, "plcopeneditor", 'Images', '%s.png'%imgname)))
   428             self.LocationImageDict[itemtype] = self.LocationImageList.Add(GetBitmap(imgname))
   428         
   429         
   429         # Icons for other items
   430         # Icons for other items
   430         for imgname, itemtype in [
   431         for imgname, itemtype in [
   431             ("Extension", ITEM_CONFNODE)]:
   432             ("Extension", ITEM_CONFNODE)]:
   432             self.TreeImageDict[itemtype]=self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'images', '%s.png'%imgname)))
   433             self.TreeImageDict[itemtype] = self.TreeImageList.Add(GetBitmap(imgname))
   433         
   434         
   434         # Add beremiz's icon in top left corner of the frame
   435         # Add beremiz's icon in top left corner of the frame
   435         self.SetIcon(wx.Icon(Bpath( "images", "brz.ico"), wx.BITMAP_TYPE_ICO))
   436         self.SetIcon(wx.Icon(Bpath("images", "brz.ico"), wx.BITMAP_TYPE_ICO))
   436         
   437         
   437         if ctr is None and projectOpen is None and self.Config.HasEntry("currenteditedproject"):
   438         if ctr is None and projectOpen is None and self.Config.HasEntry("currenteditedproject"):
   438             projectOpen = str(self.Config.Read("currenteditedproject"))
   439             projectOpen = str(self.Config.Read("currenteditedproject"))
   439             if projectOpen == "":
   440             if projectOpen == "":
   440                 projectOpen = None
   441                 projectOpen = None
   442         if projectOpen is not None and os.path.isdir(projectOpen):
   443         if projectOpen is not None and os.path.isdir(projectOpen):
   443             self.CTR = ProjectController(self, self.Log)
   444             self.CTR = ProjectController(self, self.Log)
   444             self.Controler = self.CTR
   445             self.Controler = self.CTR
   445             result = self.CTR.LoadProject(projectOpen, buildpath)
   446             result = self.CTR.LoadProject(projectOpen, buildpath)
   446             if not result:
   447             if not result:
   447                 self.LibraryPanel.SetControler(self.Controler)
   448                 self.LibraryPanel.SetController(self.Controler)
   448                 self.ProjectTree.Enable(True)
   449                 self.ProjectTree.Enable(True)
   449                 self.PouInstanceVariablesPanel.SetController(self.Controler)
   450                 self.PouInstanceVariablesPanel.SetController(self.Controler)
   450                 self.RefreshConfigRecentProjects(os.path.abspath(projectOpen))
   451                 self.RefreshConfigRecentProjects(os.path.abspath(projectOpen))
   451                 self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)
   452                 self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)
   452             else:
   453             else:
   454                 self.ShowErrorMessage(result)
   455                 self.ShowErrorMessage(result)
   455         else:
   456         else:
   456             self.CTR = ctr
   457             self.CTR = ctr
   457             self.Controler = ctr
   458             self.Controler = ctr
   458             if ctr is not None:
   459             if ctr is not None:
   459                 self.LibraryPanel.SetControler(self.Controler)
   460                 self.LibraryPanel.SetController(self.Controler)
   460                 self.ProjectTree.Enable(True)
   461                 self.ProjectTree.Enable(True)
   461                 self.PouInstanceVariablesPanel.SetController(self.Controler)
   462                 self.PouInstanceVariablesPanel.SetController(self.Controler)
   462                 self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)
   463                 self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)
   463         if self.EnableDebug:
   464         if self.EnableDebug:
   464             self.DebugVariablePanel.SetDataProducer(self.CTR)
   465             self.DebugVariablePanel.SetDataProducer(self.CTR)
   695             
   696             
   696             for confnode_method in self.CTR.StatusMethods:
   697             for confnode_method in self.CTR.StatusMethods:
   697                 if "method" in confnode_method and confnode_method.get("shown",True):
   698                 if "method" in confnode_method and confnode_method.get("shown",True):
   698                     id = wx.NewId()
   699                     id = wx.NewId()
   699                     StatusToolBar.AddSimpleTool(id, 
   700                     StatusToolBar.AddSimpleTool(id, 
   700                         wx.Bitmap(Bpath("images", "%s.png"%confnode_method.get("bitmap", "Unknown"))), 
   701                         GetBitmap(confnode_method.get("bitmap", "Unknown")), 
   701                         confnode_method["tooltip"])
   702                         confnode_method["tooltip"])
   702                     self.Bind(wx.EVT_MENU, self.GetMenuCallBackFunction(confnode_method["method"]), id=id)
   703                     self.Bind(wx.EVT_MENU, self.GetMenuCallBackFunction(confnode_method["method"]), id=id)
   703             
   704             
   704             StatusToolBar.Realize()
   705             StatusToolBar.Realize()
   705             self.AUIManager.GetPane("StatusToolBar").BestSize(StatusToolBar.GetBestSize()).Show()
   706             self.AUIManager.GetPane("StatusToolBar").BestSize(StatusToolBar.GetBestSize()).Show()
   719             else:
   720             else:
   720                 panel = None
   721                 panel = None
   721             if panel != self.LastPanelSelected:
   722             if panel != self.LastPanelSelected:
   722                 for i in xrange(self.EditMenuSize, self.EditMenu.GetMenuItemCount()):
   723                 for i in xrange(self.EditMenuSize, self.EditMenu.GetMenuItemCount()):
   723                     item = self.EditMenu.FindItemByPosition(self.EditMenuSize)
   724                     item = self.EditMenu.FindItemByPosition(self.EditMenuSize)
   724                     if item.IsSeparator():
   725                     if item is not None:
   725                         self.EditMenu.RemoveItem(item)
   726                         if item.IsSeparator():
   726                     else:
   727                             self.EditMenu.RemoveItem(item)
   727                         self.EditMenu.Delete(item.GetId())
   728                         else:
       
   729                             self.EditMenu.Delete(item.GetId())
   728                 self.LastPanelSelected = panel
   730                 self.LastPanelSelected = panel
   729                 if panel is not None:
   731                 if panel is not None:
   730                     items = panel.GetConfNodeMenuItems()
   732                     items = panel.GetConfNodeMenuItems()
   731                 else:
   733                 else:
   732                     items = []
   734                     items = []
   736             if panel is not None:
   738             if panel is not None:
   737                 panel.RefreshConfNodeMenu(self.EditMenu)
   739                 panel.RefreshConfNodeMenu(self.EditMenu)
   738         else:
   740         else:
   739             for i in xrange(self.EditMenuSize, self.EditMenu.GetMenuItemCount()):
   741             for i in xrange(self.EditMenuSize, self.EditMenu.GetMenuItemCount()):
   740                 item = self.EditMenu.FindItemByPosition(i)
   742                 item = self.EditMenu.FindItemByPosition(i)
   741                 self.EditMenu.Delete(item.GetId())
   743                 if item is not None:
       
   744                     if item.IsSeparator():
       
   745                         self.EditMenu.RemoveItem(item)
       
   746                     else:
       
   747                         self.EditMenu.Delete(item.GetId())
   742             self.LastPanelSelected = None
   748             self.LastPanelSelected = None
   743         self.MenuBar.UpdateMenus()
   749         self.MenuBar.UpdateMenus()
   744     
   750     
   745     def RefreshAll(self):
   751     def RefreshAll(self):
   746         self.RefreshStatusToolBar()
   752         self.RefreshStatusToolBar()
   805             ctr = ProjectController(self, self.Log)
   811             ctr = ProjectController(self, self.Log)
   806             result = ctr.NewProject(projectpath)
   812             result = ctr.NewProject(projectpath)
   807             if not result:
   813             if not result:
   808                 self.CTR = ctr
   814                 self.CTR = ctr
   809                 self.Controler = self.CTR
   815                 self.Controler = self.CTR
   810                 self.LibraryPanel.SetControler(self.Controler)
   816                 self.LibraryPanel.SetController(self.Controler)
   811                 self.ProjectTree.Enable(True)
   817                 self.ProjectTree.Enable(True)
   812                 self.PouInstanceVariablesPanel.SetController(self.Controler)
   818                 self.PouInstanceVariablesPanel.SetController(self.Controler)
   813                 self.RefreshConfigRecentProjects(projectpath)
   819                 self.RefreshConfigRecentProjects(projectpath)
   814                 if self.EnableDebug:
   820                 if self.EnableDebug:
   815                     self.DebugVariablePanel.SetDataProducer(self.CTR)
   821                     self.DebugVariablePanel.SetDataProducer(self.CTR)
   842             self.ResetView()
   848             self.ResetView()
   843             self.CTR = ProjectController(self, self.Log)
   849             self.CTR = ProjectController(self, self.Log)
   844             self.Controler = self.CTR
   850             self.Controler = self.CTR
   845             result = self.CTR.LoadProject(projectpath)
   851             result = self.CTR.LoadProject(projectpath)
   846             if not result:
   852             if not result:
   847                 self.LibraryPanel.SetControler(self.Controler)
   853                 self.LibraryPanel.SetController(self.Controler)
   848                 self.ProjectTree.Enable(True)
   854                 self.ProjectTree.Enable(True)
   849                 self.PouInstanceVariablesPanel.SetController(self.Controler)
   855                 self.PouInstanceVariablesPanel.SetController(self.Controler)
   850                 self.RefreshConfigRecentProjects(projectpath)
   856                 self.RefreshConfigRecentProjects(projectpath)
   851                 if self.EnableDebug:
   857                 if self.EnableDebug:
   852                     self.DebugVariablePanel.SetDataProducer(self.CTR)
   858                     self.DebugVariablePanel.SetDataProducer(self.CTR)
   870         self.RefreshAll()
   876         self.RefreshAll()
   871     
   877     
   872     def OnSaveProjectMenu(self, event):
   878     def OnSaveProjectMenu(self, event):
   873         if self.CTR is not None:
   879         if self.CTR is not None:
   874             self.CTR.SaveProject()
   880             self.CTR.SaveProject()
       
   881             self.RefreshAll()
   875             self._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES)
   882             self._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES)
   876     
   883     
   877     def OnSaveProjectAsMenu(self, event):
   884     def OnSaveProjectAsMenu(self, event):
   878         if self.CTR is not None:
   885         if self.CTR is not None:
   879             self.CTR.SaveProjectAs()
   886             self.CTR.SaveProjectAs()
       
   887             self.RefreshAll()
   880             self._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES)
   888             self._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES)
   881         event.Skip()
   889         event.Skip()
   882     
   890     
   883     def OnQuitMenu(self, event):
   891     def OnQuitMenu(self, event):
   884         self.Close()
   892         self.Close()