794 |
806 |
795 #------------------------------------------------------------------------------- |
807 #------------------------------------------------------------------------------- |
796 # SVGUIEditor Main Frame Class |
808 # SVGUIEditor Main Frame Class |
797 #------------------------------------------------------------------------------- |
809 #------------------------------------------------------------------------------- |
798 |
810 |
799 |
811 CFILE_PARTS = [ |
800 CFILE_PARTS = ["Includes", "Variables", "Globals", "Init", "CleanUp", "Retrieve", |
812 ("Includes", CppEditor), |
801 "Publish"] |
813 ("Variables", VariablesEditor), |
|
814 ("Globals", CppEditor), |
|
815 ("Init", CppEditor), |
|
816 ("CleanUp", CppEditor), |
|
817 ("Retrieve", CppEditor), |
|
818 ("Publish", CppEditor), |
|
819 ] |
|
820 |
|
821 #---------------------------------------------------------------------- |
|
822 # different icons for the collapsed/expanded states. |
|
823 # Taken from standard Windows XP collapsed/expanded states. |
|
824 #---------------------------------------------------------------------- |
|
825 |
|
826 def GetCollapsedIconData(): |
|
827 return \ |
|
828 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ |
|
829 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ |
|
830 \x00\x01\x8eIDAT8\x8d\xa5\x93-n\xe4@\x10\x85?g\x03\n6lh)\xc4\xd2\x12\xc3\x81\ |
|
831 \xd6\xa2I\x90\x154\xb9\x81\x8f1G\xc8\x11\x16\x86\xcd\xa0\x99F\xb3A\x91\xa1\ |
|
832 \xc9J&\x96L"5lX\xcc\x0bl\xf7v\xb2\x7fZ\xa5\x98\xebU\xbdz\xf5\\\x9deW\x9f\xf8\ |
|
833 H\\\xbfO|{y\x9dT\x15P\x04\x01\x01UPUD\x84\xdb/7YZ\x9f\xa5\n\xce\x97aRU\x8a\ |
|
834 \xdc`\xacA\x00\x04P\xf0!0\xf6\x81\xa0\xf0p\xff9\xfb\x85\xe0|\x19&T)K\x8b\x18\ |
|
835 \xf9\xa3\xe4\xbe\xf3\x8c^#\xc9\xd5\n\xa8*\xc5?\x9a\x01\x8a\xd2b\r\x1cN\xc3\ |
|
836 \x14\t\xce\x97a\xb2F0Ks\xd58\xaa\xc6\xc5\xa6\xf7\xdfya\xe7\xbdR\x13M2\xf9\ |
|
837 \xf9qKQ\x1fi\xf6-\x00~T\xfac\x1dq#\x82,\xe5q\x05\x91D\xba@\xefj\xba1\xf0\xdc\ |
|
838 zzW\xcff&\xb8,\x89\xa8@Q\xd6\xaaf\xdfRm,\xee\xb1BDxr#\xae\xf5|\xddo\xd6\xe2H\ |
|
839 \x18\x15\x84\xa0q@]\xe54\x8d\xa3\xedf\x05M\xe3\xd8Uy\xc4\x15\x8d\xf5\xd7\x8b\ |
|
840 ~\x82\x0fh\x0e"\xb0\xad,\xee\xb8c\xbb\x18\xe7\x8e;6\xa5\x89\x04\xde\xff\x1c\ |
|
841 \x16\xef\xe0p\xfa>\x19\x11\xca\x8d\x8d\xe0\x93\x1b\x01\xd8m\xf3(;x\xa5\xef=\ |
|
842 \xb7w\xf3\x1d$\x7f\xc1\xe0\xbd\xa7\xeb\xa0(,"Kc\x12\xc1+\xfd\xe8\tI\xee\xed)\ |
|
843 \xbf\xbcN\xc1{D\x04k\x05#\x12\xfd\xf2a\xde[\x81\x87\xbb\xdf\x9cr\x1a\x87\xd3\ |
|
844 0)\xba>\x83\xd5\xb97o\xe0\xaf\x04\xff\x13?\x00\xd2\xfb\xa9`z\xac\x80w\x00\ |
|
845 \x00\x00\x00IEND\xaeB`\x82' |
|
846 |
|
847 def GetCollapsedIconBitmap(): |
|
848 return wx.BitmapFromImage(GetCollapsedIconImage()) |
|
849 |
|
850 def GetCollapsedIconImage(): |
|
851 import cStringIO |
|
852 stream = cStringIO.StringIO(GetCollapsedIconData()) |
|
853 return wx.ImageFromStream(stream) |
|
854 |
|
855 #---------------------------------------------------------------------- |
|
856 def GetExpandedIconData(): |
|
857 return \ |
|
858 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ |
|
859 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ |
|
860 \x00\x01\x9fIDAT8\x8d\x95\x93\xa1\x8e\xdc0\x14EO\xb2\xc4\xd0\xd2\x12\xb7(mI\ |
|
861 \xa4%V\xd1lQT4[4-\x9a\xfe\xc1\xc2|\xc6\xc2~BY\x83:A3E\xd3\xa0*\xa4\xd2\x90H!\ |
|
862 \x95\x0c\r\r\x1fK\x81g\xb2\x99\x84\xb4\x0fY\xd6\xbb\xc7\xf7>=\'Iz\xc3\xbcv\ |
|
863 \xfbn\xb8\x9c\x15 \xe7\xf3\xc7\x0fw\xc9\xbc7\x99\x03\x0e\xfbn0\x99F+\x85R\ |
|
864 \x80RH\x10\x82\x08\xde\x05\x1ef\x90+\xc0\xe1\xd8\ryn\xd0Z-\\A\xb4\xd2\xf7\ |
|
865 \x9e\xfbwoF\xc8\x088\x1c\xbbae\xb3\xe8y&\x9a\xdf\xf5\xbd\xe7\xfem\x84\xa4\ |
|
866 \x97\xccYf\x16\x8d\xdb\xb2a]\xfeX\x18\xc9s\xc3\xe1\x18\xe7\x94\x12cb\xcc\xb5\ |
|
867 \xfa\xb1l8\xf5\x01\xe7\x84\xc7\xb2Y@\xb2\xcc0\x02\xb4\x9a\x88%\xbe\xdc\xb4\ |
|
868 \x9e\xb6Zs\xaa74\xadg[6\x88<\xb7]\xc6\x14\x1dL\x86\xe6\x83\xa0\x81\xba\xda\ |
|
869 \x10\x02x/\xd4\xd5\x06\r\x840!\x9c\x1fM\x92\xf4\x86\x9f\xbf\xfe\x0c\xd6\x9ae\ |
|
870 \xd6u\x8d \xf4\xf5\x165\x9b\x8f\x04\xe1\xc5\xcb\xdb$\x05\x90\xa97@\x04lQas\ |
|
871 \xcd*7\x14\xdb\x9aY\xcb\xb8\\\xe9E\x10|\xbc\xf2^\xb0E\x85\xc95_\x9f\n\xaa/\ |
|
872 \x05\x10\x81\xce\xc9\xa8\xf6><G\xd8\xed\xbbA)X\xd9\x0c\x01\x9a\xc6Q\x14\xd9h\ |
|
873 [\x04\xda\xd6c\xadFkE\xf0\xc2\xab\xd7\xb7\xc9\x08\x00\xf8\xf6\xbd\x1b\x8cQ\ |
|
874 \xd8|\xb9\x0f\xd3\x9a\x8a\xc7\x08\x00\x9f?\xdd%\xde\x07\xda\x93\xc3{\x19C\ |
|
875 \x8a\x9c\x03\x0b8\x17\xe8\x9d\xbf\x02.>\x13\xc0n\xff{PJ\xc5\xfdP\x11""<\xbc\ |
|
876 \xff\x87\xdf\xf8\xbf\xf5\x17FF\xaf\x8f\x8b\xd3\xe6K\x00\x00\x00\x00IEND\xaeB\ |
|
877 `\x82' |
|
878 |
|
879 def GetExpandedIconBitmap(): |
|
880 return wx.BitmapFromImage(GetExpandedIconImage()) |
|
881 |
|
882 def GetExpandedIconImage(): |
|
883 import cStringIO |
|
884 stream = cStringIO.StringIO(GetExpandedIconData()) |
|
885 return wx.ImageFromStream(stream) |
|
886 |
|
887 class FoldPanelCaption(wx.lib.buttons.GenBitmapTextToggleButton): |
|
888 |
|
889 def GetBackgroundBrush(self, dc): |
|
890 colBg = self.GetBackgroundColour() |
|
891 brush = wx.Brush(colBg, wx.SOLID) |
|
892 if self.style & wx.BORDER_NONE: |
|
893 myAttr = self.GetDefaultAttributes() |
|
894 parAttr = self.GetParent().GetDefaultAttributes() |
|
895 myDef = colBg == myAttr.colBg |
|
896 parDef = self.GetParent().GetBackgroundColour() == parAttr.colBg |
|
897 if myDef and parDef: |
|
898 if wx.Platform == "__WXMAC__": |
|
899 brush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActive |
|
900 elif wx.Platform == "__WXMSW__": |
|
901 if self.DoEraseBackground(dc): |
|
902 brush = None |
|
903 elif myDef and not parDef: |
|
904 colBg = self.GetParent().GetBackgroundColour() |
|
905 brush = wx.Brush(colBg, wx.SOLID) |
|
906 return brush |
|
907 |
|
908 def DrawLabel(self, dc, width, height, dx=0, dy=0): |
|
909 bmp = self.bmpLabel |
|
910 if bmp is not None: # if the bitmap is used |
|
911 if self.bmpDisabled and not self.IsEnabled(): |
|
912 bmp = self.bmpDisabled |
|
913 if self.bmpFocus and self.hasFocus: |
|
914 bmp = self.bmpFocus |
|
915 if self.bmpSelected and not self.up: |
|
916 bmp = self.bmpSelected |
|
917 bw,bh = bmp.GetWidth(), bmp.GetHeight() |
|
918 hasMask = bmp.GetMask() is not None |
|
919 else: |
|
920 bw = bh = 0 # no bitmap -> size is zero |
|
921 |
|
922 dc.SetFont(self.GetFont()) |
|
923 if self.IsEnabled(): |
|
924 dc.SetTextForeground(self.GetForegroundColour()) |
|
925 else: |
|
926 dc.SetTextForeground(wx.SystemSettings.GetColour(wx.SYS_COLOUR_GRAYTEXT)) |
|
927 |
|
928 label = self.GetLabel() |
|
929 tw, th = dc.GetTextExtent(label) # size of text |
|
930 |
|
931 if bmp is not None: |
|
932 dc.DrawBitmap(bmp, width - bw - 2, (height-bh)/2, hasMask) # draw bitmap if available |
|
933 |
|
934 dc.DrawText(label, 2, (height-th)/2) # draw the text |
|
935 |
|
936 dc.SetPen(wx.Pen(self.GetForegroundColour())) |
|
937 dc.SetBrush(wx.TRANSPARENT_BRUSH) |
|
938 dc.DrawRectangle(0, 0, width, height) |
802 |
939 |
803 [ID_CFILEEDITOR, ID_CFILEEDITORMAINSPLITTER, |
940 [ID_CFILEEDITOR, ID_CFILEEDITORMAINSPLITTER, |
804 ID_CFILEEDITORCFILETREE, ID_CFILEEDITORPARTSOPENED, |
941 ID_CFILEEDITORCFILETREE, ID_CFILEEDITORPARTSOPENED, |
805 ] = [wx.NewId() for _init_ctrls in range(4)] |
942 ] = [wx.NewId() for _init_ctrls in range(4)] |
806 |
943 |
807 class CFileEditor(wx.Frame): |
944 class CFileEditor(EditorPanel): |
808 |
945 |
809 if wx.VERSION < (2, 6, 0): |
946 def _init_Editor(self, prnt): |
810 def Bind(self, event, function, id = None): |
947 self.Editor = wx.Panel(id=-1, parent=prnt, pos=wx.Point(0, 0), |
811 if id is not None: |
948 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
812 event(self, id, function) |
949 |
|
950 self.Panels = {} |
|
951 self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2 * len(CFILE_PARTS) + 1, vgap=0) |
|
952 self.MainSizer.AddGrowableCol(0) |
|
953 |
|
954 for idx, (name, panel_class) in enumerate(CFILE_PARTS): |
|
955 button_id = wx.NewId() |
|
956 button = FoldPanelCaption(id=button_id, name='FoldPanelCaption_%s' % name, |
|
957 label=name, bitmap=GetCollapsedIconBitmap(), parent=self.Editor, pos=wx.Point(0, 0), |
|
958 size=wx.Size(0, 20), style=wx.NO_BORDER|wx.ALIGN_LEFT) |
|
959 button.SetBitmapSelected(GetExpandedIconBitmap()) |
|
960 button.Bind(wx.EVT_BUTTON, self.GenPanelButtonCallback(name), id=button_id) |
|
961 self.MainSizer.AddWindow(button, 0, border=0, flag=wx.TOP|wx.GROW) |
|
962 |
|
963 if panel_class == VariablesEditor: |
|
964 panel = VariablesEditor(self.Editor, self.ParentWindow, self.Controler) |
813 else: |
965 else: |
814 event(self, function) |
966 panel = panel_class(self.Editor, name, self.ParentWindow, self.Controler) |
815 |
967 self.MainSizer.AddWindow(panel, 0, border=0, flag=wx.BOTTOM|wx.GROW) |
816 def _init_coll_EditMenu_Items(self, parent): |
968 panel.Hide() |
817 AppendMenu(parent, help='', id=wx.ID_REFRESH, |
969 |
818 kind=wx.ITEM_NORMAL, text=u'Refresh\tCTRL+R') |
970 self.Panels[name] = {"button": button, "panel": panel, "expanded": False, "row": 2 * idx + 1} |
819 AppendMenu(parent, help='', id=wx.ID_UNDO, |
971 |
820 kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z') |
972 self.Spacer = wx.Panel(self.Editor, -1) |
821 AppendMenu(parent, help='', id=wx.ID_REDO, |
973 self.SpacerExpanded = True |
822 kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y') |
974 self.MainSizer.AddWindow(self.Spacer, 0, border=0, flag=wx.GROW) |
823 self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH) |
975 |
824 self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO) |
976 self.MainSizer.AddGrowableRow(2 * len(CFILE_PARTS)) |
825 self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO) |
977 |
826 |
978 self.Editor.SetSizer(self.MainSizer) |
827 def _init_coll_FileMenu_Items(self, parent): |
979 |
828 AppendMenu(parent, help='', id=wx.ID_SAVE, |
980 def __init__(self, parent, controler, window): |
829 kind=wx.ITEM_NORMAL, text=u'Save\tCTRL+S') |
981 EditorPanel.__init__(self, parent, "", window, controler) |
830 self.Bind(wx.EVT_MENU, self.OnSaveMenu, id=wx.ID_SAVE) |
982 |
831 |
983 img = wx.Bitmap(self.Controler.GetIconPath("Cfile.png"), wx.BITMAP_TYPE_PNG).ConvertToImage() |
832 def _init_coll_MenuBar_Menus(self, parent): |
984 self.SetIcon(wx.BitmapFromImage(img.Rescale(16, 16))) |
833 parent.Append(menu=self.FileMenu, title=u'&File') |
985 |
834 parent.Append(menu=self.EditMenu, title=u'&Edit') |
986 def GetTitle(self): |
835 |
987 filename = self.Controler.GetFilename() |
836 def _init_utils(self): |
988 if not self.Controler.CFileIsSaved(): |
837 self.MenuBar = wx.MenuBar() |
989 return "~%s~" % filename |
838 |
990 return filename |
839 self.FileMenu = wx.Menu(title='') |
991 |
840 self.EditMenu = wx.Menu(title='') |
992 def GetBufferState(self): |
841 |
993 return self.Controler.GetBufferState() |
842 self._init_coll_MenuBar_Menus(self.MenuBar) |
994 |
843 self._init_coll_FileMenu_Items(self.FileMenu) |
995 def Undo(self): |
844 self._init_coll_EditMenu_Items(self.EditMenu) |
996 self.Controler.LoadPrevious() |
845 |
997 self.RefreshView() |
846 def _init_ctrls(self, prnt): |
998 |
847 wx.Frame.__init__(self, id=ID_CFILEEDITOR, name=u'CFileEditor', |
999 def Redo(self): |
848 parent=prnt, pos=wx.DefaultPosition, size=wx.Size(800, 650), |
1000 self.Controler.LoadNext() |
849 style=wx.DEFAULT_FRAME_STYLE, title=u'CFileEditor') |
1001 self.RefreshView() |
850 self._init_utils() |
1002 |
851 self.SetClientSize(wx.Size(1000, 600)) |
1003 def HasNoModel(self): |
852 self.SetMenuBar(self.MenuBar) |
1004 return False |
853 self.Bind(wx.EVT_CLOSE, self.OnCloseFrame) |
1005 |
854 |
1006 def RefreshView(self): |
855 self.Bind(wx.EVT_MENU, self.OnSaveMenu, id=wx.ID_SAVE) |
1007 for infos in self.Panels.itervalues(): |
856 accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, wx.ID_SAVE)]) |
1008 infos["panel"].RefreshView() |
857 self.SetAcceleratorTable(accel) |
1009 |
858 |
1010 def GenPanelButtonCallback(self, name): |
859 if wx.VERSION >= (2, 8, 0): |
1011 def PanelButtonCallback(event): |
860 self.AUIManager = wx.aui.AuiManager(self) |
1012 self.TogglePanel(name) |
861 self.AUIManager.SetDockSizeConstraint(0.5, 0.5) |
1013 return PanelButtonCallback |
862 |
1014 |
863 if wx.VERSION < (2, 8, 0): |
1015 def ExpandPanel(self, name): |
864 self.MainSplitter = wx.SplitterWindow(id=ID_CFILEEDITORMAINSPLITTER, |
1016 infos = self.Panels.get(name, None) |
865 name='MainSplitter', parent=self, point=wx.Point(0, 0), |
1017 if infos is not None and not infos["expanded"]: |
866 size=wx.Size(-1, -1), style=wx.SP_3D) |
1018 infos["expanded"] = True |
867 self.MainSplitter.SetNeedUpdating(True) |
1019 infos["button"].SetToggle(True) |
868 self.MainSplitter.SetMinimumPaneSize(1) |
1020 infos["panel"].Show() |
869 |
1021 self.MainSizer.AddGrowableRow(infos["row"]) |
870 self.CFileTree = wx.TreeCtrl(id=ID_CFILEEDITORCFILETREE, |
1022 |
871 name='CFileTree', parent=self.MainSplitter, pos=wx.Point(0, 0), |
1023 self.RefreshSizerLayout() |
872 size=wx.Size(-1, -1), style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER) |
1024 |
873 else: |
1025 def CollapsePanel(self, name): |
874 self.CFileTree = wx.TreeCtrl(id=ID_CFILEEDITORCFILETREE, |
1026 infos = self.Panels.get(name, None) |
875 name='CFileTree', parent=self, pos=wx.Point(0, 0), |
1027 if infos is not None and infos["expanded"]: |
876 size=wx.Size(-1, -1), style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER) |
1028 infos["expanded"] = False |
877 self.AUIManager.AddPane(self.CFileTree, wx.aui.AuiPaneInfo().Caption("CFile Tree").Left().Layer(1).BestSize(wx.Size(200, 500)).CloseButton(False)) |
1029 infos["button"].SetToggle(False) |
878 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnCFileTreeItemSelected, |
1030 infos["panel"].Hide() |
879 id=ID_CFILEEDITORCFILETREE) |
1031 self.MainSizer.RemoveGrowableRow(infos["row"]) |
880 self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnCFileTreeItemActivated, |
1032 |
881 id=ID_CFILEEDITORCFILETREE) |
1033 self.RefreshSizerLayout() |
882 |
1034 |
883 if wx.VERSION < (2, 8, 0): |
1035 def TogglePanel(self, name): |
884 self.PartsOpened = wx.Notebook(id=ID_CFILEEDITORPARTSOPENED, |
1036 infos = self.Panels.get(name, None) |
885 name='PartsOpened', parent=self.MainSplitter, pos=wx.Point(0, |
1037 if infos is not None: |
886 0), size=wx.Size(0, 0), style=0) |
1038 infos["expanded"] = not infos["expanded"] |
887 if wx.VERSION >= (2, 6, 0): |
1039 infos["button"].SetToggle(infos["expanded"]) |
888 self.PartsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, |
1040 if infos["expanded"]: |
889 self.OnPartSelectedChanged, id=ID_CFILEEDITORPARTSOPENED) |
1041 infos["panel"].Show() |
|
1042 self.MainSizer.AddGrowableRow(infos["row"]) |
890 else: |
1043 else: |
891 wx.EVT_NOTEBOOK_PAGE_CHANGED(self.PartsOpened, ID_CFILEEDITORPARTSOPENED, |
1044 infos["panel"].Hide() |
892 self.OnPartSelectedChanged) |
1045 self.MainSizer.RemoveGrowableRow(infos["row"]) |
893 |
1046 |
894 self.MainSplitter.SplitVertically(self.ProjectTree, self.PartsOpened, 200) |
1047 self.RefreshSizerLayout() |
895 else: |
1048 |
896 self.PartsOpened = wx.aui.AuiNotebook(self) |
1049 def RefreshSizerLayout(self): |
897 self.PartsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, |
1050 expand_spacer = True |
898 self.OnPartSelectedChanged) |
1051 for infos in self.Panels.itervalues(): |
899 self.AUIManager.AddPane(self.PartsOpened, wx.aui.AuiPaneInfo().CentrePane()) |
1052 expand_spacer = expand_spacer and not infos["expanded"] |
|
1053 |
|
1054 if self.SpacerExpanded != expand_spacer: |
|
1055 self.SpacerExpanded = expand_spacer |
|
1056 if expand_spacer: |
|
1057 self.Spacer.Show() |
|
1058 self.MainSizer.AddGrowableRow(2 * len(CFILE_PARTS)) |
|
1059 else: |
|
1060 self.Spacer.Hide() |
|
1061 self.MainSizer.RemoveGrowableRow(2 * len(CFILE_PARTS)) |
|
1062 |
|
1063 self.MainSizer.Layout() |
900 |
1064 |
901 self.StatusBar = wx.StatusBar( name='HelpBar', |
|
902 parent=self, style=wx.ST_SIZEGRIP) |
|
903 self.SetStatusBar(self.StatusBar) |
|
904 |
|
905 if wx.VERSION >= (2, 8, 0): |
|
906 self.AUIManager.Update() |
|
907 |
|
908 def __init__(self, parent, controler): |
|
909 self._init_ctrls(parent) |
|
910 |
|
911 self.Controler = controler |
|
912 |
|
913 self.InitCFileTree() |
|
914 self.RefreshTitle() |
|
915 self.RefreshEditMenu() |
|
916 |
|
917 def OnCloseFrame(self, event): |
|
918 if wx.VERSION >= (2, 8, 0): |
|
919 self.AUIManager.UnInit() |
|
920 if getattr(self, "_onclose", None) is not None: |
|
921 self._onclose() |
|
922 event.Skip() |
|
923 |
|
924 def OnCloseTabMenu(self, event): |
|
925 selected = self.PartsOpened.GetSelection() |
|
926 if selected >= 0: |
|
927 self.PartsOpened.DeletePage(selected) |
|
928 |
|
929 def OnSaveMenu(self, event): |
|
930 if getattr(self, "_onsave", None) != None: |
|
931 self._onsave() |
|
932 self.RefreshTitle() |
|
933 self.RefreshEditMenu() |
|
934 |
|
935 #------------------------------------------------------------------------------- |
|
936 # Notebook Unified Functions |
|
937 #------------------------------------------------------------------------------- |
|
938 |
|
939 def DeleteAllPages(self): |
|
940 if wx.VERSION >= (2, 8, 0): |
|
941 for idx in xrange(self.PartsOpened.GetPageCount()): |
|
942 self.PartsOpened.DeletePage(0) |
|
943 else: |
|
944 self.PartsOpened.DeleteAllPages() |
|
945 |
|
946 def SetPageBitmap(self, idx, bitmap): |
|
947 if wx.VERSION >= (2, 8, 0): |
|
948 return self.PartsOpened.SetPageBitmap(idx, bitmap) |
|
949 else: |
|
950 return self.PartsOpened.SetPageImage(idx, bitmap) |
|
951 |
|
952 def IsOpened(self, name): |
|
953 for idx in xrange(self.PartsOpened.GetPageCount()): |
|
954 if self.PartsOpened.GetPage(idx).IsViewing(name): |
|
955 return idx |
|
956 return None |
|
957 |
|
958 def RefreshTitle(self): |
|
959 self.SetTitle("CFileEditor - %s"%self.Controler.GetFilename()) |
|
960 |
|
961 #------------------------------------------------------------------------------- |
|
962 # Edit Project Menu Functions |
|
963 #------------------------------------------------------------------------------- |
|
964 |
|
965 def RefreshEditMenu(self): |
|
966 undo, redo = self.Controler.GetBufferState() |
|
967 self.EditMenu.Enable(wx.ID_UNDO, undo) |
|
968 self.EditMenu.Enable(wx.ID_REDO, redo) |
|
969 |
|
970 def OnRefreshMenu(self, event): |
|
971 selected = self.PartsOpened.GetSelection() |
|
972 if selected != -1: |
|
973 window = self.PartsOpened.GetPage(selected) |
|
974 window.RefreshView() |
|
975 |
|
976 def OnUndoMenu(self, event): |
|
977 self.Controler.LoadPrevious() |
|
978 selected = self.PartsOpened.GetSelection() |
|
979 if selected != -1: |
|
980 window = self.PartsOpened.GetPage(selected) |
|
981 window.RefreshView() |
|
982 self.RefreshTitle() |
|
983 self.RefreshEditMenu() |
|
984 |
|
985 def OnRedoMenu(self, event): |
|
986 self.Controler.LoadNext() |
|
987 selected = self.PartsOpened.GetSelection() |
|
988 if selected != -1: |
|
989 window = self.PartsOpened.GetPage(selected) |
|
990 window.RefreshView() |
|
991 self.RefreshTitle() |
|
992 self.RefreshEditMenu() |
|
993 |
|
994 #------------------------------------------------------------------------------- |
|
995 # File Project Menu Functions |
|
996 #------------------------------------------------------------------------------- |
|
997 def RefreshFileMenu(self): |
|
998 self.FileMenu.Enable(wx.ID_SAVE, True) |
|
999 |
|
1000 #------------------------------------------------------------------------------- |
|
1001 # CFile Editor Panels Management Functions |
|
1002 #------------------------------------------------------------------------------- |
|
1003 |
|
1004 def OnPartSelectedChanged(self, event): |
|
1005 old_selected = self.PartsOpened.GetSelection() |
|
1006 if old_selected >= 0: |
|
1007 self.PartsOpened.GetPage(old_selected).ResetBuffer() |
|
1008 selected = event.GetSelection() |
|
1009 if selected >= 0: |
|
1010 window = self.PartsOpened.GetPage(selected) |
|
1011 window.RefreshView() |
|
1012 event.Skip() |
|
1013 |
|
1014 #------------------------------------------------------------------------------- |
|
1015 # CFile Tree Management Functions |
|
1016 #------------------------------------------------------------------------------- |
|
1017 |
|
1018 def InitCFileTree(self): |
|
1019 root = self.CFileTree.AddRoot("C File") |
|
1020 for name in CFILE_PARTS: |
|
1021 self.CFileTree.AppendItem(root, name) |
|
1022 self.CFileTree.Expand(root) |
|
1023 |
|
1024 def OnCFileTreeItemActivated(self, event): |
|
1025 self.EditCFilePart(self.CFileTree.GetItemText(event.GetItem())) |
|
1026 event.Skip() |
|
1027 |
|
1028 def OnCFileTreeItemSelected(self, event): |
|
1029 select_item = event.GetItem() |
|
1030 self.EditCFilePart(self.CFileTree.GetItemText(event.GetItem()), True) |
|
1031 event.Skip() |
|
1032 |
|
1033 def EditCFilePart(self, name, onlyopened = False): |
|
1034 openedidx = self.IsOpened(name) |
|
1035 if openedidx is not None: |
|
1036 old_selected = self.PartsOpened.GetSelection() |
|
1037 if old_selected != openedidx: |
|
1038 if old_selected >= 0: |
|
1039 self.PartsOpened.GetPage(old_selected).ResetBuffer() |
|
1040 self.PartsOpened.SetSelection(openedidx) |
|
1041 self.PartsOpened.GetPage(openedidx).RefreshView() |
|
1042 elif not onlyopened: |
|
1043 if name == "Variables": |
|
1044 new_window = VariablesEditor(self.PartsOpened, self, self.Controler) |
|
1045 self.PartsOpened.AddPage(new_window, name) |
|
1046 else: |
|
1047 new_window = CppEditor(self.PartsOpened, name, self, self.Controler) |
|
1048 self.PartsOpened.AddPage(new_window, name) |
|
1049 openedidx = self.IsOpened(name) |
|
1050 old_selected = self.PartsOpened.GetSelection() |
|
1051 if old_selected != openedidx: |
|
1052 if old_selected >= 0: |
|
1053 self.PartsOpened.GetPage(old_selected).ResetBuffer() |
|
1054 for i in xrange(self.PartsOpened.GetPageCount()): |
|
1055 window = self.PartsOpened.GetPage(i) |
|
1056 if window.IsViewing(name): |
|
1057 self.PartsOpened.SetSelection(i) |
|
1058 window.RefreshView() |
|
1059 window.SetFocus() |
|