diff -r 95a0a427f3ef -r 131ea7f237b9 PLCOpenEditor.py --- a/PLCOpenEditor.py Fri Jun 15 18:03:25 2012 +0200 +++ b/PLCOpenEditor.py Mon Jun 25 20:03:53 2012 +0200 @@ -31,6 +31,10 @@ CWD = os.path.split(os.path.realpath(__file__))[0] base_folder = os.path.split(CWD)[0] sys.path.append(base_folder) + +from utils.BitmapLibrary import AddBitmapFolder, GetBitmap +AddBitmapFolder(os.path.join(CWD, "Images")) + from docutil import * from types import TupleType @@ -165,93 +169,93 @@ EditorToolBarItems = { "FBD" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool", - "move.png", _("Move the view")), + "move", _("Move the view")), (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool", - "add_comment.png", _("Create a new comment")), + "add_comment", _("Create a new comment")), (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool", - "add_variable.png", _("Create a new variable")), + "add_variable", _("Create a new variable")), (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool", - "add_block.png", _("Create a new block")), + "add_block", _("Create a new block")), (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool", - "add_connection.png", _("Create a new connection"))], + "add_connection", _("Create a new connection"))], "LD" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool", - "move.png", _("Move the view")), + "move", _("Move the view")), (True, FREEDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool", - "add_comment.png", _("Create a new comment")), + "add_comment", _("Create a new comment")), (True, FREEDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, "OnPowerRailTool", - "add_powerrail.png", _("Create a new power rail")), + "add_powerrail", _("Create a new power rail")), (False, DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARRUNG, "OnRungTool", - "add_rung.png", _("Create a new rung")), + "add_rung", _("Create a new rung")), (True, FREEDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARCOIL, "OnCoilTool", - "add_coil.png", _("Create a new coil")), + "add_coil", _("Create a new coil")), (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARCONTACT, "OnContactTool", - "add_contact.png", _("Create a new contact")), + "add_contact", _("Create a new contact")), (False, DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARBRANCH, "OnBranchTool", - "add_branch.png", _("Create a new branch")), + "add_branch", _("Create a new branch")), (True, FREEDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool", - "add_variable.png", _("Create a new variable")), + "add_variable", _("Create a new variable")), (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool", - "add_block.png", _("Create a new block")), + "add_block", _("Create a new block")), (True, FREEDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool", - "add_connection.png", _("Create a new connection"))], + "add_connection", _("Create a new connection"))], "SFC" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool", - "move.png", _("Move the view")), + "move", _("Move the view")), (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool", - "add_comment.png", _("Create a new comment")), + "add_comment", _("Create a new comment")), (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARINITIALSTEP, "OnInitialStepTool", - "add_initial_step.png", _("Create a new initial step")), + "add_initial_step", _("Create a new initial step")), (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARSTEP, "OnStepTool", - "add_step.png", _("Create a new step")), + "add_step", _("Create a new step")), (True, FREEDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARTRANSITION, "OnTransitionTool", - "add_transition.png", _("Create a new transition")), + "add_transition", _("Create a new transition")), (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARACTIONBLOCK, "OnActionBlockTool", - "add_action.png", _("Create a new action block")), + "add_action", _("Create a new action block")), (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARDIVERGENCE, "OnDivergenceTool", - "add_divergence.png", _("Create a new divergence")), + "add_divergence", _("Create a new divergence")), (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARJUMP, "OnJumpTool", - "add_jump.png", _("Create a new jump")), + "add_jump", _("Create a new jump")), (True, FREEDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool", - "add_variable.png", _("Create a new variable")), + "add_variable", _("Create a new variable")), (True, FREEDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool", - "add_block.png", _("Create a new block")), + "add_block", _("Create a new block")), (True, FREEDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool", - "add_connection.png", _("Create a new connection")), + "add_connection", _("Create a new connection")), (True, FREEDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, "OnPowerRailTool", - "add_powerrail.png", _("Create a new power rail")), + "add_powerrail", _("Create a new power rail")), (True, FREEDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARCONTACT, "OnContactTool", - "add_contact.png", _("Create a new contact"))], + "add_contact", _("Create a new contact"))], "ST" : [], "IL" : [], "debug": [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool", - "move.png", _("Move the view"))], + "move", _("Move the view"))], } #------------------------------------------------------------------------------- @@ -460,14 +464,14 @@ self.Bind(wx.EVT_MENU, self.OnSelectAllMenu, id=wx.ID_SELECTALL) self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE) - self.AddToMenuToolBar([(wx.ID_UNDO, "undo.png", _(u'Undo'), None), - (wx.ID_REDO, "redo.png", _(u'Redo'), None), + self.AddToMenuToolBar([(wx.ID_UNDO, "undo", _(u'Undo'), None), + (wx.ID_REDO, "redo", _(u'Redo'), None), None, - (wx.ID_CUT, "cut.png", _(u'Cut'), None), - (wx.ID_COPY, "copy.png", _(u'Copy'), None), - (wx.ID_PASTE, "paste.png", _(u'Paste'), None), + (wx.ID_CUT, "cut", _(u'Cut'), None), + (wx.ID_COPY, "copy", _(u'Copy'), None), + (wx.ID_PASTE, "paste", _(u'Paste'), None), None, - (ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, "find.png", _(u'Search in Project'), None)]) + (ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, "find", _(u'Search in Project'), None)]) def _init_coll_DisplayMenu_Items(self, parent): AppendMenu(parent, help='', id=wx.ID_REFRESH, @@ -586,7 +590,7 @@ name='ProjectTree', parent=self.ProjectPanel, pos=wx.Point(0, 0), size=wx.Size(0, 0), style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER|wx.TR_EDIT_LABELS) - self.ProjectTree.SetBackgroundBitmap(wx.Bitmap(os.path.join(CWD, 'Images', 'custom_tree_background.png')), + self.ProjectTree.SetBackgroundBitmap(GetBitmap("custom_tree_background"), wx.ALIGN_RIGHT|wx.ALIGN_BOTTOM) add_menu = wx.Menu() self._init_coll_AddMenu_Items(add_menu) @@ -639,7 +643,7 @@ wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER) EditorToolBar.SetToolBitmapSize(wx.Size(25, 25)) EditorToolBar.AddRadioTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION, - wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, _("Select an object")) + GetBitmap("select"), wx.NullBitmap, _("Select an object")) EditorToolBar.Realize() self.Panes["EditorToolBar"] = EditorToolBar self.AUIManager.AddPane(EditorToolBar, wx.aui.AuiPaneInfo(). @@ -670,7 +674,7 @@ self.SetMenuBar(self.MenuBar) if self.EnableDebug: - self.DebugVariablePanel = DebugVariablePanel(self.RightNoteBook, self, self.Controler) + self.DebugVariablePanel = DebugVariablePanel(self.RightNoteBook, self.Controler) self.MainTabs["DebugVariablePanel"] = (self.DebugVariablePanel, _("Debugger")) self.RightNoteBook.AddPage(*self.MainTabs["DebugVariablePanel"]) @@ -694,7 +698,7 @@ # Icons for languages for language in LANGUAGES: - self.TreeImageDict[language]=self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%language))) + self.TreeImageDict[language] = self.TreeImageList.Add(GetBitmap(language)) # Icons for other items for imgname, itemtype in [ @@ -724,7 +728,7 @@ ("CONFIGURATIONS", ITEM_CONFIGURATIONS), ("RESOURCES", ITEM_RESOURCES), ("PROPERTIES", ITEM_PROPERTIES)]: - self.TreeImageDict[itemtype]=self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%imgname))) + self.TreeImageDict[itemtype] = self.TreeImageList.Add(GetBitmap(imgname)) # Assign icon list to TreeCtrls self.ProjectTree.SetImageList(self.TreeImageList) @@ -1088,42 +1092,6 @@ #------------------------------------------------------------------------------- # Notebook Unified Functions #------------------------------------------------------------------------------- - - ## Function that generate bitmap for - # for wx.aui.AUINotebook. - # @param window Panel to display in tab. - # @param text title for the tab ctrl. - def GenerateBitmap(self, icon1_name, icon2_name = None): - # Find index of bitmap if already created - index = self.TabsImageListIndexes.get((icon1_name, icon2_name), None) - # Return index or bitmap if found - if index is not None: - return self.TabsImageList.GetBitmap(index) - if icon2_name is None: - # Bitmap with only one icon - bitmap = wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%icon1_name)) - else: - # Bitmap with two icon - icon1 = wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%icon1_name)) - icon2 = wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%icon2_name)) - - # Calculate bitmap size - width = icon1.GetWidth() + icon2.GetWidth() - 1 - height = max(icon1.GetHeight(), icon2.GetHeight()) - # Create bitmap with both icons - bitmap = wx.EmptyBitmap(width, height) - dc = wx.MemoryDC() - dc.SelectObject(bitmap) - dc.Clear() - dc.DrawBitmap(icon1, 0, 0) - dc.DrawBitmap(icon2, icon1.GetWidth() - 1, 0) - dc.Destroy() - - # Store bitmap in ImageList - index = self.TabsImageList.Add(bitmap) - # Save bitmap index in ImageList in dictionary - self.TabsImageListIndexes[(icon1_name, icon2_name)] = index - return bitmap ## Function that add a tab in Notebook, calling refresh for tab DClick event # for wx.aui.AUINotebook. @@ -1196,7 +1164,7 @@ self.ProjectTree.Enable(False) self.PouInstanceVariablesPanel.ResetView() self.LibraryPanel.ResetTree() - self.LibraryPanel.SetControler(None) + self.LibraryPanel.SetController(None) self.Controler = None def OnCloseTabMenu(self, event): @@ -1603,10 +1571,10 @@ if infos["type"] == ITEM_POU: self.ProjectTree.SetItemImage(root, self.TreeImageDict[self.Controler.GetPouBodyType(infos["name"])]) elif infos.has_key("icon") and infos["icon"] is not None: - icon_path = infos["icon"] - if not self.TreeImageDict.has_key(icon_path): - self.TreeImageDict[icon_path] = self.TreeImageList.Add(wx.Bitmap(icon_path)) - self.ProjectTree.SetItemImage(root, self.TreeImageDict[icon_path]) + icon_name = infos["icon"] + if not self.TreeImageDict.has_key(icon_name): + self.TreeImageDict[icon_name] = self.TreeImageList.Add(GetBitmap(icon_name)) + self.ProjectTree.SetItemImage(root, self.TreeImageDict[icon_name]) elif self.TreeImageDict.has_key(infos["type"]): self.ProjectTree.SetItemImage(root, self.TreeImageDict[infos["type"]]) @@ -1853,11 +1821,11 @@ new_window = None if element == ITEM_CONFIGURATION: new_window = ConfigurationEditor(self.TabsOpened, tagname, self, self.Controler) - new_window.SetIcon(self.GenerateBitmap("CONFIGURATION")) + new_window.SetIcon(GetBitmap("CONFIGURATION")) self.AddPage(new_window, "") elif element == ITEM_RESOURCE: new_window = ResourceEditor(self.TabsOpened, tagname, self, self.Controler) - new_window.SetIcon(self.GenerateBitmap("RESOURCE")) + new_window.SetIcon(GetBitmap("RESOURCE")) self.AddPage(new_window, "") elif element in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]: bodytype = self.Controler.GetEditedElementBodyType(tagname) @@ -1879,16 +1847,16 @@ new_window.SetKeywords(ST_KEYWORDS) if element == ITEM_POU: pou_type = self.Controler.GetEditedElementType(tagname)[1].upper() - icon = self.GenerateBitmap(pou_type, bodytype) + icon = GetBitmap(pou_type, bodytype) elif element == ITEM_TRANSITION: - icon = self.GenerateBitmap("TRANSITION", bodytype) + icon = GetBitmap("TRANSITION", bodytype) elif element == ITEM_ACTION: - icon = self.GenerateBitmap("ACTION", bodytype) + icon = GetBitmap("ACTION", bodytype) new_window.SetIcon(icon) self.AddPage(new_window, "") elif element == ITEM_DATATYPE: new_window = DataTypeEditor(self.TabsOpened, tagname, self, self.Controler) - new_window.SetIcon(self.GenerateBitmap("DATATYPE")) + new_window.SetIcon(GetBitmap("DATATYPE")) self.AddPage(new_window, "") elif isinstance(element, EditorPanel): new_window = element @@ -2098,11 +2066,11 @@ if instance_category in [ITEM_FUNCTIONBLOCK, ITEM_PROGRAM]: pou_type = self.Controler.GetEditedElementType(instance_type, True)[1].upper() - icon = self.GenerateBitmap(pou_type, bodytype) + icon = GetBitmap(pou_type, bodytype) elif instance_category == ITEM_TRANSITION: - icon = self.GenerateBitmap("TRANSITION", bodytype) + icon = GetBitmap("TRANSITION", bodytype) elif instance_category == ITEM_ACTION: - icon = self.GenerateBitmap("ACTION", bodytype) + icon = GetBitmap("ACTION", bodytype) new_window.SetIcon(icon) self.AddPage(new_window, "") new_window.RefreshView() @@ -2114,6 +2082,7 @@ def OpenGraphicViewer(self, var_path): new_window = GraphicViewer(self.TabsOpened, self, self.Controler, var_path) + new_window.SetIcon(GetBitmap("GRAPH")) self.AddPage(new_window, "") new_window.RefreshView() new_window.SetFocus() @@ -2167,7 +2136,7 @@ MenuToolBar.AddSeparator() else: id, bitmap, help, callback = toolbar_item - MenuToolBar.AddSimpleTool(id=id, shortHelpString=help, bitmap=wx.Bitmap(os.path.join(CWD, 'Images', bitmap))) + MenuToolBar.AddSimpleTool(id=id, shortHelpString=help, bitmap=GetBitmap(bitmap)) if callback is not None: self.Bind(wx.EVT_TOOL, callback, id=id) MenuToolBar.Realize() @@ -2210,9 +2179,9 @@ for radio, modes, id, method, picture, help in EditorToolBarItems[menu]: if modes & self.DrawingMode: if radio or self.DrawingMode == FREEDRAWING_MODE: - EditorToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help) + EditorToolBar.AddRadioTool(id, GetBitmap(picture), wx.NullBitmap, help) else: - EditorToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help) + EditorToolBar.AddSimpleTool(id, GetBitmap(picture), help) self.Bind(wx.EVT_MENU, getattr(self, method), id=id) self.CurrentEditorToolBar.append(id) EditorToolBar.Realize() @@ -2667,11 +2636,11 @@ self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, id=wx.ID_PROPERTIES) 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_HelpMenu_Items(self, parent): AppendMenu(parent, help='', id=wx.ID_HELP, @@ -2703,13 +2672,13 @@ result = controler.OpenXMLFile(fileOpen) if result is None: self.Controler = controler - self.LibraryPanel.SetControler(controler) + self.LibraryPanel.SetController(controler) self.ProjectTree.Enable(True) self.PouInstanceVariablesPanel.SetController(controler) self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) # Define PLCOpenEditor icon - self.SetIcon(wx.Icon(os.path.join(CWD,"Images", "poe.ico"),wx.BITMAP_TYPE_ICO)) + self.SetIcon(wx.Icon(os.path.join(CWD, "Images", "poe.ico"),wx.BITMAP_TYPE_ICO)) self.Bind(wx.EVT_CLOSE, self.OnCloseFrame) @@ -2794,7 +2763,7 @@ self.ResetView() self.Controler = PLCControler() self.Controler.CreateNewProject(properties) - self.LibraryPanel.SetControler(self.Controler) + self.LibraryPanel.SetController(self.Controler) self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) @@ -2820,7 +2789,7 @@ result = controler.OpenXMLFile(filepath) if result is None: self.Controler = controler - self.LibraryPanel.SetControler(controler) + self.LibraryPanel.SetController(controler) self.ProjectTree.Enable(True) self.PouInstanceVariablesPanel.SetController(controler) self.LoadProjectLayout()