diff -r 2a8476222ba8 -r 91b2ae63ea3d plugins/c_ext/CFileEditor.py --- a/plugins/c_ext/CFileEditor.py Mon Oct 17 09:04:13 2011 +0200 +++ b/plugins/c_ext/CFileEditor.py Tue Nov 08 22:01:39 2011 +0100 @@ -1,8 +1,11 @@ -import wx, wx.grid -import wx.stc as stc import keyword -from controls import CustomGrid +import wx +import wx.grid +import wx.stc as stc +import wx.lib.buttons + +from controls import CustomGrid, EditorPanel if wx.Platform == '__WXMSW__': faces = { 'times': 'Times New Roman', @@ -69,7 +72,7 @@ def __init__(self, parent, name, window, controler): stc.StyledTextCtrl.__init__(self, parent, ID_CPPEDITOR, wx.DefaultPosition, - wx.DefaultSize, 0) + wx.Size(0, 0), 0) self.SetMarginType(1, stc.STC_MARGIN_NUMBER) self.SetMarginWidth(1, 25) @@ -231,6 +234,7 @@ self.ParentWindow.RefreshTitle() self.ParentWindow.RefreshFileMenu() self.ParentWindow.RefreshEditMenu() + self.ParentWindow.RefreshPageTitles() def StartBuffering(self): self.Controler.StartBuffering() @@ -238,6 +242,7 @@ self.ParentWindow.RefreshTitle() self.ParentWindow.RefreshFileMenu() self.ParentWindow.RefreshEditMenu() + self.ParentWindow.RefreshPageTitles() def ResetBuffer(self): if self.CurrentAction != None: @@ -262,6 +267,9 @@ self.Colourise(0, -1) + def DoGetBestSize(self): + return self.ParentWindow.GetPanelBestSize() + def RefreshModel(self): self.Controler.SetPartText(self.Name, self.GetText()) @@ -622,7 +630,7 @@ def _init_ctrls(self, prnt): wx.Panel.__init__(self, id=ID_VARIABLESEDITOR, name='', parent=prnt, - size=wx.Size(0, 0), style=wx.SUNKEN_BORDER) + size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) self.VariablesGrid = CustomGrid(id=ID_VARIABLESEDITORVARIABLESGRID, name='VariablesGrid', parent=self, pos=wx.Point(0, 0), @@ -719,12 +727,16 @@ self.ParentWindow.RefreshTitle() self.ParentWindow.RefreshFileMenu() self.ParentWindow.RefreshEditMenu() + self.ParentWindow.RefreshPageTitles() def RefreshView(self): self.Table.SetData(self.Controler.GetVariables()) self.Table.ResetView(self.VariablesGrid) self.VariablesGrid.RefreshButtons() + def DoGetBestSize(self): + return self.ParentWindow.GetPanelBestSize() + def OnVariablesGridCellChange(self, event): self.RefreshModel() self.RefreshView() @@ -796,264 +808,257 @@ # SVGUIEditor Main Frame Class #------------------------------------------------------------------------------- - -CFILE_PARTS = ["Includes", "Variables", "Globals", "Init", "CleanUp", "Retrieve", - "Publish"] +CFILE_PARTS = [ + ("Includes", CppEditor), + ("Variables", VariablesEditor), + ("Globals", CppEditor), + ("Init", CppEditor), + ("CleanUp", CppEditor), + ("Retrieve", CppEditor), + ("Publish", CppEditor), +] + +#---------------------------------------------------------------------- +# different icons for the collapsed/expanded states. +# Taken from standard Windows XP collapsed/expanded states. +#---------------------------------------------------------------------- + +def GetCollapsedIconData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x01\x8eIDAT8\x8d\xa5\x93-n\xe4@\x10\x85?g\x03\n6lh)\xc4\xd2\x12\xc3\x81\ +\xd6\xa2I\x90\x154\xb9\x81\x8f1G\xc8\x11\x16\x86\xcd\xa0\x99F\xb3A\x91\xa1\ +\xc9J&\x96L"5lX\xcc\x0bl\xf7v\xb2\x7fZ\xa5\x98\xebU\xbdz\xf5\\\x9deW\x9f\xf8\ +H\\\xbfO|{y\x9dT\x15P\x04\x01\x01UPUD\x84\xdb/7YZ\x9f\xa5\n\xce\x97aRU\x8a\ +\xdc`\xacA\x00\x04P\xf0!0\xf6\x81\xa0\xf0p\xff9\xfb\x85\xe0|\x19&T)K\x8b\x18\ +\xf9\xa3\xe4\xbe\xf3\x8c^#\xc9\xd5\n\xa8*\xc5?\x9a\x01\x8a\xd2b\r\x1cN\xc3\ +\x14\t\xce\x97a\xb2F0Ks\xd58\xaa\xc6\xc5\xa6\xf7\xdfya\xe7\xbdR\x13M2\xf9\ +\xf9qKQ\x1fi\xf6-\x00~T\xfac\x1dq#\x82,\xe5q\x05\x91D\xba@\xefj\xba1\xf0\xdc\ +zzW\xcff&\xb8,\x89\xa8@Q\xd6\xaaf\xdfRm,\xee\xb1BDxr#\xae\xf5|\xddo\xd6\xe2H\ +\x18\x15\x84\xa0q@]\xe54\x8d\xa3\xedf\x05M\xe3\xd8Uy\xc4\x15\x8d\xf5\xd7\x8b\ +~\x82\x0fh\x0e"\xb0\xad,\xee\xb8c\xbb\x18\xe7\x8e;6\xa5\x89\x04\xde\xff\x1c\ +\x16\xef\xe0p\xfa>\x19\x11\xca\x8d\x8d\xe0\x93\x1b\x01\xd8m\xf3(;x\xa5\xef=\ +\xb7w\xf3\x1d$\x7f\xc1\xe0\xbd\xa7\xeb\xa0(,"Kc\x12\xc1+\xfd\xe8\tI\xee\xed)\ +\xbf\xbcN\xc1{D\x04k\x05#\x12\xfd\xf2a\xde[\x81\x87\xbb\xdf\x9cr\x1a\x87\xd3\ +0)\xba>\x83\xd5\xb97o\xe0\xaf\x04\xff\x13?\x00\xd2\xfb\xa9`z\xac\x80w\x00\ +\x00\x00\x00IEND\xaeB`\x82' + +def GetCollapsedIconBitmap(): + return wx.BitmapFromImage(GetCollapsedIconImage()) + +def GetCollapsedIconImage(): + import cStringIO + stream = cStringIO.StringIO(GetCollapsedIconData()) + return wx.ImageFromStream(stream) + +#---------------------------------------------------------------------- +def GetExpandedIconData(): + return \ +'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ +\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ +\x00\x01\x9fIDAT8\x8d\x95\x93\xa1\x8e\xdc0\x14EO\xb2\xc4\xd0\xd2\x12\xb7(mI\ +\xa4%V\xd1lQT4[4-\x9a\xfe\xc1\xc2|\xc6\xc2~BY\x83:A3E\xd3\xa0*\xa4\xd2\x90H!\ +\x95\x0c\r\r\x1fK\x81g\xb2\x99\x84\xb4\x0fY\xd6\xbb\xc7\xf7>=\'Iz\xc3\xbcv\ +\xfbn\xb8\x9c\x15 \xe7\xf3\xc7\x0fw\xc9\xbc7\x99\x03\x0e\xfbn0\x99F+\x85R\ +\x80RH\x10\x82\x08\xde\x05\x1ef\x90+\xc0\xe1\xd8\ryn\xd0Z-\\A\xb4\xd2\xf7\ +\x9e\xfbwoF\xc8\x088\x1c\xbbae\xb3\xe8y&\x9a\xdf\xf5\xbd\xe7\xfem\x84\xa4\ +\x97\xccYf\x16\x8d\xdb\xb2a]\xfeX\x18\xc9s\xc3\xe1\x18\xe7\x94\x12cb\xcc\xb5\ +\xfa\xb1l8\xf5\x01\xe7\x84\xc7\xb2Y@\xb2\xcc0\x02\xb4\x9a\x88%\xbe\xdc\xb4\ +\x9e\xb6Zs\xaa74\xadg[6\x88<\xb7]\xc6\x14\x1dL\x86\xe6\x83\xa0\x81\xba\xda\ +\x10\x02x/\xd4\xd5\x06\r\x840!\x9c\x1fM\x92\xf4\x86\x9f\xbf\xfe\x0c\xd6\x9ae\ +\xd6u\x8d \xf4\xf5\x165\x9b\x8f\x04\xe1\xc5\xcb\xdb$\x05\x90\xa97@\x04lQas\ +\xcd*7\x14\xdb\x9aY\xcb\xb8\\\xe9E\x10|\xbc\xf2^\xb0E\x85\xc95_\x9f\n\xaa/\ +\x05\x10\x81\xce\xc9\xa8\xf6>\x13\xc0n\xff{PJ\xc5\xfdP\x11""<\xbc\ +\xff\x87\xdf\xf8\xbf\xf5\x17FF\xaf\x8f\x8b\xd3\xe6K\x00\x00\x00\x00IEND\xaeB\ +`\x82' + +def GetExpandedIconBitmap(): + return wx.BitmapFromImage(GetExpandedIconImage()) + +def GetExpandedIconImage(): + import cStringIO + stream = cStringIO.StringIO(GetExpandedIconData()) + return wx.ImageFromStream(stream) + +class FoldPanelCaption(wx.lib.buttons.GenBitmapTextToggleButton): + + def GetBackgroundBrush(self, dc): + colBg = self.GetBackgroundColour() + brush = wx.Brush(colBg, wx.SOLID) + if self.style & wx.BORDER_NONE: + myAttr = self.GetDefaultAttributes() + parAttr = self.GetParent().GetDefaultAttributes() + myDef = colBg == myAttr.colBg + parDef = self.GetParent().GetBackgroundColour() == parAttr.colBg + if myDef and parDef: + if wx.Platform == "__WXMAC__": + brush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActive + elif wx.Platform == "__WXMSW__": + if self.DoEraseBackground(dc): + brush = None + elif myDef and not parDef: + colBg = self.GetParent().GetBackgroundColour() + brush = wx.Brush(colBg, wx.SOLID) + return brush + + def DrawLabel(self, dc, width, height, dx=0, dy=0): + bmp = self.bmpLabel + if bmp is not None: # if the bitmap is used + if self.bmpDisabled and not self.IsEnabled(): + bmp = self.bmpDisabled + if self.bmpFocus and self.hasFocus: + bmp = self.bmpFocus + if self.bmpSelected and not self.up: + bmp = self.bmpSelected + bw,bh = bmp.GetWidth(), bmp.GetHeight() + hasMask = bmp.GetMask() is not None + else: + bw = bh = 0 # no bitmap -> size is zero + + dc.SetFont(self.GetFont()) + if self.IsEnabled(): + dc.SetTextForeground(self.GetForegroundColour()) + else: + dc.SetTextForeground(wx.SystemSettings.GetColour(wx.SYS_COLOUR_GRAYTEXT)) + + label = self.GetLabel() + tw, th = dc.GetTextExtent(label) # size of text + + if bmp is not None: + dc.DrawBitmap(bmp, width - bw - 2, (height-bh)/2, hasMask) # draw bitmap if available + + dc.DrawText(label, 2, (height-th)/2) # draw the text + + dc.SetPen(wx.Pen(self.GetForegroundColour())) + dc.SetBrush(wx.TRANSPARENT_BRUSH) + dc.DrawRectangle(0, 0, width, height) [ID_CFILEEDITOR, ID_CFILEEDITORMAINSPLITTER, ID_CFILEEDITORCFILETREE, ID_CFILEEDITORPARTSOPENED, ] = [wx.NewId() for _init_ctrls in range(4)] -class CFileEditor(wx.Frame): - - if wx.VERSION < (2, 6, 0): - def Bind(self, event, function, id = None): - if id is not None: - event(self, id, function) +class CFileEditor(EditorPanel): + + def _init_Editor(self, prnt): + self.Editor = wx.Panel(id=-1, parent=prnt, pos=wx.Point(0, 0), + size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) + + self.Panels = {} + self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2 * len(CFILE_PARTS) + 1, vgap=0) + self.MainSizer.AddGrowableCol(0) + + for idx, (name, panel_class) in enumerate(CFILE_PARTS): + button_id = wx.NewId() + button = FoldPanelCaption(id=button_id, name='FoldPanelCaption_%s' % name, + label=name, bitmap=GetCollapsedIconBitmap(), parent=self.Editor, pos=wx.Point(0, 0), + size=wx.Size(0, 20), style=wx.NO_BORDER|wx.ALIGN_LEFT) + button.SetBitmapSelected(GetExpandedIconBitmap()) + button.Bind(wx.EVT_BUTTON, self.GenPanelButtonCallback(name), id=button_id) + self.MainSizer.AddWindow(button, 0, border=0, flag=wx.TOP|wx.GROW) + + if panel_class == VariablesEditor: + panel = VariablesEditor(self.Editor, self.ParentWindow, self.Controler) else: - event(self, function) - - def _init_coll_EditMenu_Items(self, parent): - AppendMenu(parent, help='', id=wx.ID_REFRESH, - kind=wx.ITEM_NORMAL, text=u'Refresh\tCTRL+R') - AppendMenu(parent, help='', id=wx.ID_UNDO, - kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z') - AppendMenu(parent, help='', id=wx.ID_REDO, - kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y') - self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH) - self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO) - self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO) - - def _init_coll_FileMenu_Items(self, parent): - AppendMenu(parent, help='', id=wx.ID_SAVE, - kind=wx.ITEM_NORMAL, text=u'Save\tCTRL+S') - self.Bind(wx.EVT_MENU, self.OnSaveMenu, id=wx.ID_SAVE) - - def _init_coll_MenuBar_Menus(self, parent): - parent.Append(menu=self.FileMenu, title=u'&File') - parent.Append(menu=self.EditMenu, title=u'&Edit') - - def _init_utils(self): - self.MenuBar = wx.MenuBar() - - self.FileMenu = wx.Menu(title='') - self.EditMenu = wx.Menu(title='') - - self._init_coll_MenuBar_Menus(self.MenuBar) - self._init_coll_FileMenu_Items(self.FileMenu) - self._init_coll_EditMenu_Items(self.EditMenu) - - def _init_ctrls(self, prnt): - wx.Frame.__init__(self, id=ID_CFILEEDITOR, name=u'CFileEditor', - parent=prnt, pos=wx.DefaultPosition, size=wx.Size(800, 650), - style=wx.DEFAULT_FRAME_STYLE, title=u'CFileEditor') - self._init_utils() - self.SetClientSize(wx.Size(1000, 600)) - self.SetMenuBar(self.MenuBar) - self.Bind(wx.EVT_CLOSE, self.OnCloseFrame) - - self.Bind(wx.EVT_MENU, self.OnSaveMenu, id=wx.ID_SAVE) - accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, wx.ID_SAVE)]) - self.SetAcceleratorTable(accel) - - if wx.VERSION >= (2, 8, 0): - self.AUIManager = wx.aui.AuiManager(self) - self.AUIManager.SetDockSizeConstraint(0.5, 0.5) - - if wx.VERSION < (2, 8, 0): - self.MainSplitter = wx.SplitterWindow(id=ID_CFILEEDITORMAINSPLITTER, - name='MainSplitter', parent=self, point=wx.Point(0, 0), - size=wx.Size(-1, -1), style=wx.SP_3D) - self.MainSplitter.SetNeedUpdating(True) - self.MainSplitter.SetMinimumPaneSize(1) - - self.CFileTree = wx.TreeCtrl(id=ID_CFILEEDITORCFILETREE, - name='CFileTree', parent=self.MainSplitter, pos=wx.Point(0, 0), - size=wx.Size(-1, -1), style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER) - else: - self.CFileTree = wx.TreeCtrl(id=ID_CFILEEDITORCFILETREE, - name='CFileTree', parent=self, pos=wx.Point(0, 0), - size=wx.Size(-1, -1), style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER) - self.AUIManager.AddPane(self.CFileTree, wx.aui.AuiPaneInfo().Caption("CFile Tree").Left().Layer(1).BestSize(wx.Size(200, 500)).CloseButton(False)) - self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnCFileTreeItemSelected, - id=ID_CFILEEDITORCFILETREE) - self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnCFileTreeItemActivated, - id=ID_CFILEEDITORCFILETREE) - - if wx.VERSION < (2, 8, 0): - self.PartsOpened = wx.Notebook(id=ID_CFILEEDITORPARTSOPENED, - name='PartsOpened', parent=self.MainSplitter, pos=wx.Point(0, - 0), size=wx.Size(0, 0), style=0) - if wx.VERSION >= (2, 6, 0): - self.PartsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, - self.OnPartSelectedChanged, id=ID_CFILEEDITORPARTSOPENED) + panel = panel_class(self.Editor, name, self.ParentWindow, self.Controler) + self.MainSizer.AddWindow(panel, 0, border=0, flag=wx.BOTTOM|wx.GROW) + panel.Hide() + + self.Panels[name] = {"button": button, "panel": panel, "expanded": False, "row": 2 * idx + 1} + + self.Spacer = wx.Panel(self.Editor, -1) + self.SpacerExpanded = True + self.MainSizer.AddWindow(self.Spacer, 0, border=0, flag=wx.GROW) + + self.MainSizer.AddGrowableRow(2 * len(CFILE_PARTS)) + + self.Editor.SetSizer(self.MainSizer) + + def __init__(self, parent, controler, window): + EditorPanel.__init__(self, parent, "", window, controler) + + img = wx.Bitmap(self.Controler.GetIconPath("Cfile.png"), wx.BITMAP_TYPE_PNG).ConvertToImage() + self.SetIcon(wx.BitmapFromImage(img.Rescale(16, 16))) + + def GetTitle(self): + filename = self.Controler.GetFilename() + if not self.Controler.CFileIsSaved(): + return "~%s~" % filename + return filename + + def GetBufferState(self): + return self.Controler.GetBufferState() + + def Undo(self): + self.Controler.LoadPrevious() + self.RefreshView() + + def Redo(self): + self.Controler.LoadNext() + self.RefreshView() + + def HasNoModel(self): + return False + + def RefreshView(self): + for infos in self.Panels.itervalues(): + infos["panel"].RefreshView() + + def GenPanelButtonCallback(self, name): + def PanelButtonCallback(event): + self.TogglePanel(name) + return PanelButtonCallback + + def ExpandPanel(self, name): + infos = self.Panels.get(name, None) + if infos is not None and not infos["expanded"]: + infos["expanded"] = True + infos["button"].SetToggle(True) + infos["panel"].Show() + self.MainSizer.AddGrowableRow(infos["row"]) + + self.RefreshSizerLayout() + + def CollapsePanel(self, name): + infos = self.Panels.get(name, None) + if infos is not None and infos["expanded"]: + infos["expanded"] = False + infos["button"].SetToggle(False) + infos["panel"].Hide() + self.MainSizer.RemoveGrowableRow(infos["row"]) + + self.RefreshSizerLayout() + + def TogglePanel(self, name): + infos = self.Panels.get(name, None) + if infos is not None: + infos["expanded"] = not infos["expanded"] + infos["button"].SetToggle(infos["expanded"]) + if infos["expanded"]: + infos["panel"].Show() + self.MainSizer.AddGrowableRow(infos["row"]) else: - wx.EVT_NOTEBOOK_PAGE_CHANGED(self.PartsOpened, ID_CFILEEDITORPARTSOPENED, - self.OnPartSelectedChanged) + infos["panel"].Hide() + self.MainSizer.RemoveGrowableRow(infos["row"]) - self.MainSplitter.SplitVertically(self.ProjectTree, self.PartsOpened, 200) - else: - self.PartsOpened = wx.aui.AuiNotebook(self) - self.PartsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, - self.OnPartSelectedChanged) - self.AUIManager.AddPane(self.PartsOpened, wx.aui.AuiPaneInfo().CentrePane()) + self.RefreshSizerLayout() + + def RefreshSizerLayout(self): + expand_spacer = True + for infos in self.Panels.itervalues(): + expand_spacer = expand_spacer and not infos["expanded"] + + if self.SpacerExpanded != expand_spacer: + self.SpacerExpanded = expand_spacer + if expand_spacer: + self.Spacer.Show() + self.MainSizer.AddGrowableRow(2 * len(CFILE_PARTS)) + else: + self.Spacer.Hide() + self.MainSizer.RemoveGrowableRow(2 * len(CFILE_PARTS)) + + self.MainSizer.Layout() - self.StatusBar = wx.StatusBar( name='HelpBar', - parent=self, style=wx.ST_SIZEGRIP) - self.SetStatusBar(self.StatusBar) - - if wx.VERSION >= (2, 8, 0): - self.AUIManager.Update() - - def __init__(self, parent, controler): - self._init_ctrls(parent) - - self.Controler = controler - - self.InitCFileTree() - self.RefreshTitle() - self.RefreshEditMenu() - - def OnCloseFrame(self, event): - if wx.VERSION >= (2, 8, 0): - self.AUIManager.UnInit() - if getattr(self, "_onclose", None) is not None: - self._onclose() - event.Skip() - - def OnCloseTabMenu(self, event): - selected = self.PartsOpened.GetSelection() - if selected >= 0: - self.PartsOpened.DeletePage(selected) - - def OnSaveMenu(self, event): - if getattr(self, "_onsave", None) != None: - self._onsave() - self.RefreshTitle() - self.RefreshEditMenu() - -#------------------------------------------------------------------------------- -# Notebook Unified Functions -#------------------------------------------------------------------------------- - - def DeleteAllPages(self): - if wx.VERSION >= (2, 8, 0): - for idx in xrange(self.PartsOpened.GetPageCount()): - self.PartsOpened.DeletePage(0) - else: - self.PartsOpened.DeleteAllPages() - - def SetPageBitmap(self, idx, bitmap): - if wx.VERSION >= (2, 8, 0): - return self.PartsOpened.SetPageBitmap(idx, bitmap) - else: - return self.PartsOpened.SetPageImage(idx, bitmap) - - def IsOpened(self, name): - for idx in xrange(self.PartsOpened.GetPageCount()): - if self.PartsOpened.GetPage(idx).IsViewing(name): - return idx - return None - - def RefreshTitle(self): - self.SetTitle("CFileEditor - %s"%self.Controler.GetFilename()) - -#------------------------------------------------------------------------------- -# Edit Project Menu Functions -#------------------------------------------------------------------------------- - - def RefreshEditMenu(self): - undo, redo = self.Controler.GetBufferState() - self.EditMenu.Enable(wx.ID_UNDO, undo) - self.EditMenu.Enable(wx.ID_REDO, redo) - - def OnRefreshMenu(self, event): - selected = self.PartsOpened.GetSelection() - if selected != -1: - window = self.PartsOpened.GetPage(selected) - window.RefreshView() - - def OnUndoMenu(self, event): - self.Controler.LoadPrevious() - selected = self.PartsOpened.GetSelection() - if selected != -1: - window = self.PartsOpened.GetPage(selected) - window.RefreshView() - self.RefreshTitle() - self.RefreshEditMenu() - - def OnRedoMenu(self, event): - self.Controler.LoadNext() - selected = self.PartsOpened.GetSelection() - if selected != -1: - window = self.PartsOpened.GetPage(selected) - window.RefreshView() - self.RefreshTitle() - self.RefreshEditMenu() - -#------------------------------------------------------------------------------- -# File Project Menu Functions -#------------------------------------------------------------------------------- - def RefreshFileMenu(self): - self.FileMenu.Enable(wx.ID_SAVE, True) - -#------------------------------------------------------------------------------- -# CFile Editor Panels Management Functions -#------------------------------------------------------------------------------- - - def OnPartSelectedChanged(self, event): - old_selected = self.PartsOpened.GetSelection() - if old_selected >= 0: - self.PartsOpened.GetPage(old_selected).ResetBuffer() - selected = event.GetSelection() - if selected >= 0: - window = self.PartsOpened.GetPage(selected) - window.RefreshView() - event.Skip() - -#------------------------------------------------------------------------------- -# CFile Tree Management Functions -#------------------------------------------------------------------------------- - - def InitCFileTree(self): - root = self.CFileTree.AddRoot("C File") - for name in CFILE_PARTS: - self.CFileTree.AppendItem(root, name) - self.CFileTree.Expand(root) - - def OnCFileTreeItemActivated(self, event): - self.EditCFilePart(self.CFileTree.GetItemText(event.GetItem())) - event.Skip() - - def OnCFileTreeItemSelected(self, event): - select_item = event.GetItem() - self.EditCFilePart(self.CFileTree.GetItemText(event.GetItem()), True) - event.Skip() - - def EditCFilePart(self, name, onlyopened = False): - openedidx = self.IsOpened(name) - if openedidx is not None: - old_selected = self.PartsOpened.GetSelection() - if old_selected != openedidx: - if old_selected >= 0: - self.PartsOpened.GetPage(old_selected).ResetBuffer() - self.PartsOpened.SetSelection(openedidx) - self.PartsOpened.GetPage(openedidx).RefreshView() - elif not onlyopened: - if name == "Variables": - new_window = VariablesEditor(self.PartsOpened, self, self.Controler) - self.PartsOpened.AddPage(new_window, name) - else: - new_window = CppEditor(self.PartsOpened, name, self, self.Controler) - self.PartsOpened.AddPage(new_window, name) - openedidx = self.IsOpened(name) - old_selected = self.PartsOpened.GetSelection() - if old_selected != openedidx: - if old_selected >= 0: - self.PartsOpened.GetPage(old_selected).ResetBuffer() - for i in xrange(self.PartsOpened.GetPageCount()): - window = self.PartsOpened.GetPage(i) - if window.IsViewing(name): - self.PartsOpened.SetSelection(i) - window.RefreshView() - window.SetFocus()