diff -r 7499535588e6 -r f49875b9e946 Beremiz.py --- a/Beremiz.py Tue Jun 19 21:59:34 2012 +0200 +++ b/Beremiz.py Fri Jul 06 21:00:43 2012 +0200 @@ -85,7 +85,7 @@ wx.InitAllImageHandlers() # popup splash - bmp = wx.Image(Bpath("images","splash.png")).ConvertToBitmap() + bmp = wx.Image(Bpath("images", "splash.png")).ConvertToBitmap() #splash=AdvancedSplash(None, bitmap=bmp, style=wx.SPLASH_CENTRE_ON_SCREEN, timeout=4000) splash=AdvancedSplash(None, bitmap=bmp) wx.Yield() @@ -145,10 +145,15 @@ sys.path.append(base_folder) sys.path.append(os.path.join(base_folder, "plcopeneditor")) +from utils.BitmapLibrary import AddBitmapFolder, GetBitmap +AddBitmapFolder(os.path.join(CWD, "images")) + if __name__ == '__main__': # Load extensions for extfilename in extensions: - sys.path.append(os.path.split(os.path.realpath(extfilename))[0]) + extension_folder = os.path.split(os.path.realpath(extfilename))[0] + sys.path.append(extension_folder) + AddBitmapFolder(os.path.join(extension_folder, "images")) execfile(extfilename, locals()) import wx.lib.buttons, wx.lib.statbmp @@ -175,12 +180,8 @@ style = 0, name = "genstatbmp"): - bitmappath = Bpath( "images", bitmapname) - if os.path.isfile(bitmappath): - bitmap = wx.Bitmap(bitmappath) - else: - bitmap = None - wx.lib.statbmp.GenStaticBitmap.__init__(self, parent, ID, bitmap, + wx.lib.statbmp.GenStaticBitmap.__init__(self, parent, ID, + GetBitmap(bitmapname), pos, size, style, name) @@ -335,11 +336,11 @@ self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT) self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT) - self.AddToMenuToolBar([(wx.ID_NEW, "new.png", _(u'New'), None), - (wx.ID_OPEN, "open.png", _(u'Open'), None), - (wx.ID_SAVE, "save.png", _(u'Save'), None), - (wx.ID_SAVEAS, "saveas.png", _(u'Save As...'), None), - (wx.ID_PRINT, "print.png", _(u'Print'), None)]) + self.AddToMenuToolBar([(wx.ID_NEW, "new", _(u'New'), None), + (wx.ID_OPEN, "open", _(u'Open'), None), + (wx.ID_SAVE, "save", _(u'Save'), None), + (wx.ID_SAVEAS, "saveas", _(u'Save As...'), None), + (wx.ID_PRINT, "print", _(u'Print'), None)]) def _init_coll_AddMenu_Items(self, parent): IDEFrame._init_coll_AddMenu_Items(self, parent, False) @@ -424,15 +425,15 @@ ("VAR_INPUT", LOCATION_VAR_INPUT), ("VAR_OUTPUT", LOCATION_VAR_OUTPUT), ("VAR_LOCAL", LOCATION_VAR_MEMORY)]: - self.LocationImageDict[itemtype]=self.LocationImageList.Add(wx.Bitmap(os.path.join(base_folder, "plcopeneditor", 'Images', '%s.png'%imgname))) + self.LocationImageDict[itemtype] = self.LocationImageList.Add(GetBitmap(imgname)) # Icons for other items for imgname, itemtype in [ ("Extension", ITEM_CONFNODE)]: - self.TreeImageDict[itemtype]=self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'images', '%s.png'%imgname))) + self.TreeImageDict[itemtype] = self.TreeImageList.Add(GetBitmap(imgname)) # Add beremiz's icon in top left corner of the frame - self.SetIcon(wx.Icon(Bpath( "images", "brz.ico"), wx.BITMAP_TYPE_ICO)) + self.SetIcon(wx.Icon(Bpath("images", "brz.ico"), wx.BITMAP_TYPE_ICO)) if ctr is None and projectOpen is None and self.Config.HasEntry("currenteditedproject"): projectOpen = str(self.Config.Read("currenteditedproject")) @@ -444,7 +445,7 @@ self.Controler = self.CTR result = self.CTR.LoadProject(projectOpen, buildpath) if not result: - self.LibraryPanel.SetControler(self.Controler) + self.LibraryPanel.SetController(self.Controler) self.ProjectTree.Enable(True) self.PouInstanceVariablesPanel.SetController(self.Controler) self.RefreshConfigRecentProjects(os.path.abspath(projectOpen)) @@ -456,7 +457,7 @@ self.CTR = ctr self.Controler = ctr if ctr is not None: - self.LibraryPanel.SetControler(self.Controler) + self.LibraryPanel.SetController(self.Controler) self.ProjectTree.Enable(True) self.PouInstanceVariablesPanel.SetController(self.Controler) self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) @@ -561,7 +562,7 @@ ResourceEditor, ConfigurationEditor, DataTypeEditor))): - return ("confnode", tab.Controler.CTNFullName()) + return ("confnode", tab.Controler.CTNFullName(), tab.GetTagName()) elif (isinstance(tab, TextViewer) and (tab.Controler is None or isinstance(tab.Controler, MiniTextControler))): return ("confnode", None, tab.GetInstancePath()) @@ -604,12 +605,14 @@ if self.CTR is not None: selected = self.TabsOpened.GetSelection() if selected >= 0: - graphic_viewer = isinstance(self.TabsOpened.GetPage(selected), Viewer) + window = self.TabsOpened.GetPage(selected) + viewer_is_modified = window.IsModified() + is_viewer = isinstance(window, Viewer) else: - graphic_viewer = False + viewer_is_modified = is_viewer = False if self.TabsOpened.GetPageCount() > 0: self.FileMenu.Enable(wx.ID_CLOSE, True) - if graphic_viewer: + if is_viewer: self.FileMenu.Enable(wx.ID_PREVIEW, True) self.FileMenu.Enable(wx.ID_PRINT, True) MenuToolBar.EnableTool(wx.ID_PRINT, True) @@ -623,7 +626,7 @@ self.FileMenu.Enable(wx.ID_PRINT, False) MenuToolBar.EnableTool(wx.ID_PRINT, False) self.FileMenu.Enable(wx.ID_PAGE_SETUP, True) - project_modified = self.CTR.ProjectTestModified() + project_modified = self.CTR.ProjectTestModified() or viewer_is_modified self.FileMenu.Enable(wx.ID_SAVE, project_modified) MenuToolBar.EnableTool(wx.ID_SAVE, project_modified) self.FileMenu.Enable(wx.ID_SAVEAS, True) @@ -697,7 +700,7 @@ if "method" in confnode_method and confnode_method.get("shown",True): id = wx.NewId() StatusToolBar.AddSimpleTool(id, - wx.Bitmap(Bpath("images", "%s.png"%confnode_method.get("bitmap", "Unknown"))), + GetBitmap(confnode_method.get("bitmap", "Unknown")), confnode_method["tooltip"]) self.Bind(wx.EVT_MENU, self.GetMenuCallBackFunction(confnode_method["method"]), id=id) @@ -721,10 +724,11 @@ if panel != self.LastPanelSelected: for i in xrange(self.EditMenuSize, self.EditMenu.GetMenuItemCount()): item = self.EditMenu.FindItemByPosition(self.EditMenuSize) - if item.IsSeparator(): - self.EditMenu.RemoveItem(item) - else: - self.EditMenu.Delete(item.GetId()) + if item is not None: + if item.IsSeparator(): + self.EditMenu.RemoveItem(item) + else: + self.EditMenu.Delete(item.GetId()) self.LastPanelSelected = panel if panel is not None: items = panel.GetConfNodeMenuItems() @@ -738,7 +742,11 @@ else: for i in xrange(self.EditMenuSize, self.EditMenu.GetMenuItemCount()): item = self.EditMenu.FindItemByPosition(i) - self.EditMenu.Delete(item.GetId()) + if item is not None: + if item.IsSeparator(): + self.EditMenu.RemoveItem(item) + else: + self.EditMenu.Delete(item.GetId()) self.LastPanelSelected = None self.MenuBar.UpdateMenus() @@ -807,7 +815,7 @@ if not result: self.CTR = ctr self.Controler = self.CTR - self.LibraryPanel.SetControler(self.Controler) + self.LibraryPanel.SetController(self.Controler) self.ProjectTree.Enable(True) self.PouInstanceVariablesPanel.SetController(self.Controler) self.RefreshConfigRecentProjects(projectpath) @@ -844,7 +852,7 @@ self.Controler = self.CTR result = self.CTR.LoadProject(projectpath) if not result: - self.LibraryPanel.SetControler(self.Controler) + self.LibraryPanel.SetController(self.Controler) self.ProjectTree.Enable(True) self.PouInstanceVariablesPanel.SetController(self.Controler) self.RefreshConfigRecentProjects(projectpath) @@ -870,13 +878,23 @@ self.RefreshAll() def OnSaveProjectMenu(self, event): + selected = self.TabsOpened.GetSelection() + if selected != -1: + window = self.TabsOpened.GetPage(selected) + window.Save() if self.CTR is not None: self.CTR.SaveProject() + self.RefreshAll() self._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES) def OnSaveProjectAsMenu(self, event): + selected = self.TabsOpened.GetSelection() + if selected != -1: + window = self.TabsOpened.GetPage(selected) + window.SaveAs() if self.CTR is not None: self.CTR.SaveProjectAs() + self.RefreshAll() self._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES) event.Skip() @@ -933,6 +951,17 @@ else: IDEFrame.OnProjectTreeItemActivated(self, event) + def ProjectTreeItemSelect(self, select_item): + name = self.ProjectTree.GetItemText(select_item) + item_infos = self.ProjectTree.GetPyData(select_item) + if item_infos["type"] == ITEM_CONFNODE: + item_infos["confnode"]._OpenView(onlyopened=True) + elif item_infos["type"] == ITEM_PROJECT: + self.CTR._OpenView(onlyopened=True) + else: + IDEFrame.ProjectTreeItemSelect(self, select_item) + + def SelectProjectTreeItem(self, tagname): if self.ProjectTree is not None: root = self.ProjectTree.GetRootItem()