plugins/c_ext/CFileEditor.py
changeset 213 d8dc1e51c3bf
parent 185 042ab0643b28
child 401 8106a853a7c7
equal deleted inserted replaced
212:9d3db96129fb 213:d8dc1e51c3bf
    16               'helv' : 'Helvetica',
    16               'helv' : 'Helvetica',
    17               'other': 'new century schoolbook',
    17               'other': 'new century schoolbook',
    18               'size' : 12,
    18               'size' : 12,
    19               'size2': 10,
    19               'size2': 10,
    20              }
    20              }
    21 
       
    22 if wx.VERSION >= (2, 8, 0):
       
    23     import wx.aui
       
    24 
       
    25     class MDICppEditor(wx.aui.AuiMDIChildFrame):
       
    26         def __init__(self, parent, name, window, controler):
       
    27             wx.aui.AuiMDIChildFrame.__init__(self, parent, -1, title = name)
       
    28             
       
    29             sizer = wx.BoxSizer(wx.HORIZONTAL)
       
    30             
       
    31             self.Viewer = CppEditor(self, name, window, controler)
       
    32             
       
    33             sizer.AddWindow(self.Viewer, 1, border=0, flag=wx.GROW)
       
    34             
       
    35             self.SetSizer(sizer)
       
    36         
       
    37         def GetViewer(self):
       
    38             return self.Viewer
       
    39 
       
    40     class MDIVariablesEditor(wx.aui.AuiMDIChildFrame):
       
    41         def __init__(self, parent, name, window, controler):
       
    42             wx.aui.AuiMDIChildFrame.__init__(self, parent, -1, title = name)
       
    43             
       
    44             sizer = wx.BoxSizer(wx.HORIZONTAL)
       
    45             
       
    46             self.Viewer = VariablesEditor(self, window, controler)
       
    47             
       
    48             sizer.AddWindow(self.Viewer, 1, border=0, flag=wx.GROW)
       
    49             
       
    50             self.SetSizer(sizer)
       
    51         
       
    52         def GetViewer(self):
       
    53             return self.Viewer
       
    54 
    21 
    55 
    22 
    56 def AppendMenu(parent, help, id, kind, text):
    23 def AppendMenu(parent, help, id, kind, text):
    57     if wx.VERSION >= (2, 6, 0):
    24     if wx.VERSION >= (2, 6, 0):
    58         parent.Append(help=help, id=id, kind=kind, text=text)
    25         parent.Append(help=help, id=id, kind=kind, text=text)
   817 
   784 
   818 #-------------------------------------------------------------------------------
   785 #-------------------------------------------------------------------------------
   819 #                          SVGUIEditor Main Frame Class
   786 #                          SVGUIEditor Main Frame Class
   820 #-------------------------------------------------------------------------------
   787 #-------------------------------------------------------------------------------
   821 
   788 
   822 if wx.VERSION >= (2, 8, 0):
       
   823     base_class = wx.aui.AuiMDIParentFrame
       
   824 else:
       
   825     base_class = wx.Frame
       
   826 
   789 
   827 CFILE_PARTS = ["Includes", "Variables", "Globals", "Init", "CleanUp", "Retrieve", 
   790 CFILE_PARTS = ["Includes", "Variables", "Globals", "Init", "CleanUp", "Retrieve", 
   828                "Publish"]
   791                "Publish"]
   829 
   792 
   830 [ID_CFILEEDITOR, ID_CFILEEDITORMAINSPLITTER, 
   793 [ID_CFILEEDITOR, ID_CFILEEDITORMAINSPLITTER, 
   831  ID_CFILEEDITORCFILETREE, ID_CFILEEDITORPARTSOPENED, 
   794  ID_CFILEEDITORCFILETREE, ID_CFILEEDITORPARTSOPENED, 
   832 ] = [wx.NewId() for _init_ctrls in range(4)]
   795 ] = [wx.NewId() for _init_ctrls in range(4)]
   833 
   796 
   834 class CFileEditor(base_class):
   797 class CFileEditor(wx.Frame):
   835     
   798     
   836     if wx.VERSION < (2, 6, 0):
   799     if wx.VERSION < (2, 6, 0):
   837         def Bind(self, event, function, id = None):
   800         def Bind(self, event, function, id = None):
   838             if id is not None:
   801             if id is not None:
   839                 event(self, id, function)
   802                 event(self, id, function)
   861         
   824         
   862         self._init_coll_MenuBar_Menus(self.MenuBar)
   825         self._init_coll_MenuBar_Menus(self.MenuBar)
   863         self._init_coll_EditMenu_Items(self.EditMenu)
   826         self._init_coll_EditMenu_Items(self.EditMenu)
   864         
   827         
   865     def _init_ctrls(self, prnt):
   828     def _init_ctrls(self, prnt):
   866         if wx.VERSION >= (2, 8, 0):
   829         wx.Frame.__init__(self, id=ID_CFILEEDITOR, name=u'CFileEditor',
   867             wx.aui.AuiMDIParentFrame.__init__(self, winid=ID_CFILEEDITOR, name=u'CFileEditor', 
   830               parent=prnt, pos=wx.DefaultPosition, size=wx.Size(800, 650),
   868                   parent=prnt, pos=wx.DefaultPosition, size=wx.Size(800, 650),
   831               style=wx.DEFAULT_FRAME_STYLE, title=u'CFileEditor')
   869                   style=wx.DEFAULT_FRAME_STYLE|wx.SUNKEN_BORDER|wx.CLIP_CHILDREN, title=u'CFileEditor')
       
   870         else:
       
   871             wx.Frame.__init__(self, id=ID_CFILEEDITOR, name=u'CFileEditor',
       
   872                   parent=prnt, pos=wx.DefaultPosition, size=wx.Size(800, 650),
       
   873                   style=wx.DEFAULT_FRAME_STYLE, title=u'CFileEditor')
       
   874         self._init_utils()
   832         self._init_utils()
   875         self.SetClientSize(wx.Size(1000, 600))
   833         self.SetClientSize(wx.Size(1000, 600))
   876         self.SetMenuBar(self.MenuBar)
   834         self.SetMenuBar(self.MenuBar)
   877         self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
   835         self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
   878         
   836         
   914             else:
   872             else:
   915                 wx.EVT_NOTEBOOK_PAGE_CHANGED(self.PartsOpened, ID_CFILEEDITORPARTSOPENED,
   873                 wx.EVT_NOTEBOOK_PAGE_CHANGED(self.PartsOpened, ID_CFILEEDITORPARTSOPENED,
   916                     self.OnPartSelectedChanged)
   874                     self.OnPartSelectedChanged)
   917             
   875             
   918             self.MainSplitter.SplitVertically(self.ProjectTree, self.PartsOpened, 200)
   876             self.MainSplitter.SplitVertically(self.ProjectTree, self.PartsOpened, 200)
   919         
   877         else:
       
   878             self.PartsOpened = wx.aui.AuiNotebook(self)
       
   879             self.PartsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED,
       
   880                     self.OnPartSelectedChanged)
       
   881             self.AUIManager.AddPane(self.PartsOpened, wx.aui.AuiPaneInfo().CentrePane())
       
   882             
   920         self.StatusBar = wx.StatusBar( name='HelpBar',
   883         self.StatusBar = wx.StatusBar( name='HelpBar',
   921               parent=self, style=wx.ST_SIZEGRIP)
   884               parent=self, style=wx.ST_SIZEGRIP)
   922         self.SetStatusBar(self.StatusBar)
   885         self.SetStatusBar(self.StatusBar)
   923         
   886         
   924         if wx.VERSION >= (2, 8, 0):
   887         if wx.VERSION >= (2, 8, 0):
   939         if getattr(self, "_onclose", None) is not None:
   902         if getattr(self, "_onclose", None) is not None:
   940             self._onclose()
   903             self._onclose()
   941         event.Skip()
   904         event.Skip()
   942 
   905 
   943     def OnCloseTabMenu(self, event):
   906     def OnCloseTabMenu(self, event):
   944         selected = self.GetPageSelection()
   907         selected = self.PartsOpened.GetSelection()
   945         if selected >= 0:
   908         if selected >= 0:
   946             self.DeletePage(selected)
   909             self.PartsOpened.DeletePage(selected)
   947         event.Skip()
   910         event.Skip()
   948 
   911 
   949     def OnSaveMenu(self, event):
   912     def OnSaveMenu(self, event):
   950         if getattr(self, "_onsave", None) != None:
   913         if getattr(self, "_onsave", None) != None:
   951             self._onsave()
   914             self._onsave()
   954         event.Skip()
   917         event.Skip()
   955 
   918 
   956 #-------------------------------------------------------------------------------
   919 #-------------------------------------------------------------------------------
   957 #                            Notebook Unified Functions
   920 #                            Notebook Unified Functions
   958 #-------------------------------------------------------------------------------
   921 #-------------------------------------------------------------------------------
   959 
   922     
   960     def GetPageCount(self):
       
   961         if wx.VERSION >= (2, 8, 0):
       
   962             notebook = self.GetNotebook()
       
   963             if notebook is not None:
       
   964                 return notebook.GetPageCount()
       
   965             else:
       
   966                 return 0
       
   967         else:
       
   968             return self.PartsOpened.GetPageCount()
       
   969     
       
   970     def GetPage(self, idx):
       
   971         if wx.VERSION >= (2, 8, 0):
       
   972             notebook = self.GetNotebook()
       
   973             if notebook is not None:
       
   974                 return notebook.GetPage(idx).GetViewer()
       
   975             else:
       
   976                 return None
       
   977         else:
       
   978             return self.PartsOpened.GetPage(idx)
       
   979 
       
   980     def GetPageSelection(self):
       
   981         if wx.VERSION >= (2, 8, 0):
       
   982             notebook = self.GetNotebook()
       
   983             if notebook is not None:
       
   984                 return notebook.GetSelection()
       
   985             else:
       
   986                 return -1
       
   987         else:
       
   988             return self.PartsOpened.GetSelection()
       
   989 
       
   990     def SetPageSelection(self, idx):
       
   991         if wx.VERSION >= (2, 8, 0):
       
   992             notebook = self.GetNotebook()
       
   993             if notebook is not None:
       
   994                 notebook.SetSelection(idx)
       
   995         else:
       
   996             self.PartsOpened.SetSelection(idx)
       
   997 
       
   998     def DeletePage(self, idx):
       
   999         if wx.VERSION >= (2, 8, 0):
       
  1000             notebook = self.GetNotebook()
       
  1001             if notebook is not None:
       
  1002                 notebook.DeletePage(idx)
       
  1003         else:
       
  1004             self.PartsOpened.DeletePage(idx)
       
  1005 
       
  1006     def DeleteAllPages(self):
   923     def DeleteAllPages(self):
  1007         if wx.VERSION >= (2, 8, 0):
   924         if wx.VERSION >= (2, 8, 0):
  1008             notebook = self.GetNotebook()
   925             for idx in xrange(self.PartsOpened.GetPageCount()):
  1009             if notebook is not None:
   926                 self.PartsOpened.DeletePage(0)
  1010                 for idx in xrange(notebook.GetPageCount()):
       
  1011                     notebook.DeletePage(0)
       
  1012         else:
   927         else:
  1013             self.PartsOpened.DeleteAllPages()
   928             self.PartsOpened.DeleteAllPages()
  1014 
   929 
  1015     def SetPageText(self, idx, text):
       
  1016         if wx.VERSION >= (2, 8, 0):
       
  1017             notebook = self.GetNotebook()
       
  1018             if notebook is not None:
       
  1019                 return notebook.SetPageText(idx, text)
       
  1020         else:
       
  1021             return self.PartsOpened.SetPageText(idx, text)
       
  1022 
       
  1023     def SetPageBitmap(self, idx, bitmap):
   930     def SetPageBitmap(self, idx, bitmap):
  1024         if wx.VERSION >= (2, 8, 0):
   931         if wx.VERSION >= (2, 8, 0):
  1025             notebook = self.GetNotebook()
   932             return self.PartsOpened.SetPageBitmap(idx, bitmap)
  1026             if notebook is not None:
       
  1027                 return notebook.SetPageBitmap(idx, bitmap)
       
  1028         else:
   933         else:
  1029             return self.PartsOpened.SetPageImage(idx, bitmap)
   934             return self.PartsOpened.SetPageImage(idx, bitmap)
  1030 
   935 
  1031     def GetPageText(self, idx):
       
  1032         if wx.VERSION >= (2, 8, 0):
       
  1033             notebook = self.GetNotebook()
       
  1034             if notebook is not None:
       
  1035                 return notebook.GetPageText(idx)
       
  1036             else:
       
  1037                 return ""
       
  1038         else:
       
  1039             return self.PartsOpened.GetPageText(idx)
       
  1040 
       
  1041     def IsOpened(self, name):
   936     def IsOpened(self, name):
  1042         for idx in xrange(self.GetPageCount()):
   937         for idx in xrange(self.PartsOpened.GetPageCount()):
  1043             if self.GetPage(idx).IsViewing(name):
   938             if self.PartsOpened.GetPage(idx).IsViewing(name):
  1044                 return idx
   939                 return idx
  1045         return None
   940         return None
  1046 
   941 
  1047     def RefreshTitle(self):
   942     def RefreshTitle(self):
  1048         self.SetTitle("CFileEditor - %s"%self.Controler.GetFilename())
   943         self.SetTitle("CFileEditor - %s"%self.Controler.GetFilename())
  1055         undo, redo = self.Controler.GetBufferState()
   950         undo, redo = self.Controler.GetBufferState()
  1056         self.EditMenu.Enable(wx.ID_UNDO, undo)
   951         self.EditMenu.Enable(wx.ID_UNDO, undo)
  1057         self.EditMenu.Enable(wx.ID_REDO, redo)
   952         self.EditMenu.Enable(wx.ID_REDO, redo)
  1058 
   953 
  1059     def OnRefreshMenu(self, event):
   954     def OnRefreshMenu(self, event):
  1060         selected = self.GetPageSelection()
   955         selected = self.PartsOpened.GetSelection()
  1061         if selected != -1:
   956         if selected != -1:
  1062             window = self.GetPage(selected)
   957             window = self.PartsOpened.GetPage(selected)
  1063             window.RefreshView()
   958             window.RefreshView()
  1064         event.Skip()
   959         event.Skip()
  1065 
   960 
  1066     def OnUndoMenu(self, event):
   961     def OnUndoMenu(self, event):
  1067         self.Controler.LoadPrevious()
   962         self.Controler.LoadPrevious()
  1068         selected = self.GetPageSelection()        
   963         selected = self.PartsOpened.GetSelection()        
  1069         if selected != -1:
   964         if selected != -1:
  1070             window = self.GetPage(selected)
   965             window = self.PartsOpened.GetPage(selected)
  1071             window.RefreshView()
   966             window.RefreshView()
  1072         self.RefreshTitle()
   967         self.RefreshTitle()
  1073         self.RefreshEditMenu()
   968         self.RefreshEditMenu()
  1074         event.Skip()
   969         event.Skip()
  1075     
   970     
  1076     def OnRedoMenu(self, event):
   971     def OnRedoMenu(self, event):
  1077         self.Controler.LoadNext()
   972         self.Controler.LoadNext()
  1078         selected = self.GetPageSelection()
   973         selected = self.PartsOpened.GetSelection()
  1079         if selected != -1:
   974         if selected != -1:
  1080             window = self.GetPage(selected)
   975             window = self.PartsOpened.GetPage(selected)
  1081             window.RefreshView()
   976             window.RefreshView()
  1082         self.RefreshTitle()
   977         self.RefreshTitle()
  1083         self.RefreshEditMenu()
   978         self.RefreshEditMenu()
  1084         event.Skip()
   979         event.Skip()
  1085         
   980         
  1086 #-------------------------------------------------------------------------------
   981 #-------------------------------------------------------------------------------
  1087 #                      CFile Editor Panels Management Functions
   982 #                      CFile Editor Panels Management Functions
  1088 #-------------------------------------------------------------------------------
   983 #-------------------------------------------------------------------------------
  1089     
   984     
  1090     def OnPartSelectedChanged(self, event):
   985     def OnPartSelectedChanged(self, event):
  1091         if wx.VERSION < (2, 8, 0) or event.GetActive():
   986         old_selected = self.PartsOpened.GetSelection()
  1092             old_selected = self.GetPageSelection()
   987         if old_selected >= 0:
  1093             if old_selected >= 0:
   988             self.PartsOpened.GetPage(old_selected).ResetBuffer()
  1094                 self.GetPage(old_selected).ResetBuffer()
   989         selected = event.GetSelection()
  1095             if wx.VERSION >= (2, 8, 0):
   990         if selected >= 0:
  1096                 window = event.GetEventObject().GetViewer()
   991             window = self.PartsOpened.GetPage(selected)
  1097             else:
   992             window.RefreshView()
  1098                 selected = event.GetSelection()
       
  1099                 if selected >= 0:
       
  1100                     window = self.GetPage(selected)
       
  1101                 else:
       
  1102                     window = None
       
  1103             if window:
       
  1104                 window.RefreshView()
       
  1105         event.Skip()
   993         event.Skip()
  1106 
   994 
  1107 #-------------------------------------------------------------------------------
   995 #-------------------------------------------------------------------------------
  1108 #                         CFile Tree Management Functions
   996 #                         CFile Tree Management Functions
  1109 #-------------------------------------------------------------------------------
   997 #-------------------------------------------------------------------------------
  1124         event.Skip()
  1012         event.Skip()
  1125         
  1013         
  1126     def EditCFilePart(self, name, onlyopened = False):
  1014     def EditCFilePart(self, name, onlyopened = False):
  1127         openedidx = self.IsOpened(name)
  1015         openedidx = self.IsOpened(name)
  1128         if openedidx is not None:
  1016         if openedidx is not None:
  1129             old_selected = self.GetPageSelection()
  1017             old_selected = self.PartsOpened.GetSelection()
  1130             if old_selected != openedidx:
  1018             if old_selected != openedidx:
  1131                 if old_selected >= 0:
  1019                 if old_selected >= 0:
  1132                     self.GetPage(old_selected).ResetBuffer()
  1020                     self.PartsOpened.GetPage(old_selected).ResetBuffer()
  1133                 self.SetPageSelection(openedidx)
  1021                 self.PartsOpened.SetSelection(openedidx)
  1134             self.GetPage(openedidx).RefreshView()
  1022             self.PartsOpened.GetPage(openedidx).RefreshView()
  1135         elif not onlyopened:
  1023         elif not onlyopened:
  1136             if wx.VERSION >= (2, 8, 0):
  1024             if name == "Variables":
  1137                 if name == "Variables":
  1025                 new_window = VariablesEditor(self.PartsOpened, self, self.Controler)
  1138                     new_window = MDIVariablesEditor(self, name, self, self.Controler)
  1026                 self.PartsOpened.AddPage(new_window, name)
  1139                 else:
       
  1140                     new_window = MDICppEditor(self, name, self, self.Controler)
       
  1141                 new_window.Bind(wx.EVT_ACTIVATE, self.OnPartSelectedChanged)
       
  1142                 new_window.Layout()
       
  1143             else:
  1027             else:
  1144                 if name == "Variables":
  1028                 new_window = CppEditor(self.PartsOpened, name, self, self.Controler)
  1145                     new_window = VariablesEditor(self.TabsOpened, self, self.Controler)
  1029                 self.PartsOpened.AddPage(new_window, name)
  1146                     self.TabsOpened.AddPage(new_window, name)
       
  1147                 else:
       
  1148                     new_window = CppEditor(self.TabsOpened, name, self, self.Controler)
       
  1149                     self.TabsOpened.AddPage(new_window, name)
       
  1150             openedidx = self.IsOpened(name)
  1030             openedidx = self.IsOpened(name)
  1151             old_selected = self.GetPageSelection()
  1031             old_selected = self.PartsOpened.GetSelection()
  1152             if old_selected != openedidx:
  1032             if old_selected != openedidx:
  1153                 if old_selected >= 0:
  1033                 if old_selected >= 0:
  1154                     self.GetPage(old_selected).ResetBuffer()
  1034                     self.PartsOpened.GetPage(old_selected).ResetBuffer()
  1155             for i in xrange(self.GetPageCount()):
  1035             for i in xrange(self.PartsOpened.GetPageCount()):
  1156                 window = self.GetPage(i)
  1036                 window = self.PartsOpened.GetPage(i)
  1157                 if window.IsViewing(name):
  1037                 if window.IsViewing(name):
  1158                     self.SetPageSelection(i)
  1038                     self.PartsOpened.SetSelection(i)
  1159                     window.RefreshView()
  1039                     window.RefreshView()
  1160                     window.SetFocus()
  1040                     window.SetFocus()