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() |