From 80389ff7094bb385733198573fa091db5be480a1 Mon Sep 17 00:00:00 2001 From: Roman Rolinsky <rolinsky@femagsoft.com> Date: Mon, 11 Oct 2004 00:00:31 +0000 Subject: [PATCH] Applied changes by Bartlomiej Gorny for recent files and style panel fix. cellpos & cellspan parameters are changed to type ParamPosSize. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29779 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/wx/tools/XRCed/globals.py | 7 ++-- wxPython/wx/tools/XRCed/panel.py | 1 + wxPython/wx/tools/XRCed/params.py | 1 + wxPython/wx/tools/XRCed/xrced.py | 51 ++++++++++++++++++++++++++++-- wxPython/wx/tools/XRCed/xxx.py | 5 ++- 5 files changed, 59 insertions(+), 6 deletions(-) diff --git a/wxPython/wx/tools/XRCed/globals.py b/wxPython/wx/tools/XRCed/globals.py index 74ac8bd28f..e800ff9fdd 100644 --- a/wxPython/wx/tools/XRCed/globals.py +++ b/wxPython/wx/tools/XRCed/globals.py @@ -11,7 +11,9 @@ import sys # Global constants progname = 'XRCed' -version = '0.1.2-1' +version = '0.1.3-1' +# Can be changed to set other default encoding different +defaultEncoding = sys.getdefaultencoding() try: True @@ -30,7 +32,7 @@ class Globals: testWin = None testWinPos = wxDefaultPosition currentXXX = None - currentEncoding = sys.getdefaultencoding() # wxLocale_GetSystemEncodingName() + currentEncoding = defaultEncoding def _makeFonts(self): self._sysFont = wxSystemSettings_GetFont(wxSYS_SYSTEM_FONT) @@ -51,6 +53,5 @@ class Globals: if not hasattr(self, "_smallerFont"): self._makeFonts() return self._smallerFont - g = Globals() diff --git a/wxPython/wx/tools/XRCed/panel.py b/wxPython/wx/tools/XRCed/panel.py index bd72eab068..7c48230059 100644 --- a/wxPython/wx/tools/XRCed/panel.py +++ b/wxPython/wx/tools/XRCed/panel.py @@ -136,6 +136,7 @@ class Panel(wxNotebook): if not self.GetPageCount() == 2: self.AddPage(self.page2, 'Style') self.page2.Layout() + self.page2.Show(True) size = self.page2.GetSizer().GetMinSize() self.page2.SetScrollbars(1, 1, size.width, size.height, 0, 0, True) else: diff --git a/wxPython/wx/tools/XRCed/params.py b/wxPython/wx/tools/XRCed/params.py index caee545fca..64330ae9ec 100644 --- a/wxPython/wx/tools/XRCed/params.py +++ b/wxPython/wx/tools/XRCed/params.py @@ -861,6 +861,7 @@ paramDict = { 'flag': ParamFlag, 'style': ParamStyle, 'exstyle': ParamExStyle, 'pos': ParamPosSize, 'size': ParamPosSize, + 'cellpos': ParamPosSize, 'cellspan': ParamPosSize, 'border': ParamUnit, 'cols': ParamInt, 'rows': ParamInt, 'vgap': ParamUnit, 'hgap': ParamUnit, 'checkable': ParamBool, 'checked': ParamBool, 'radio': ParamBool, diff --git a/wxPython/wx/tools/XRCed/xrced.py b/wxPython/wx/tools/XRCed/xrced.py index 8cb9c034ec..6bab858c5a 100644 --- a/wxPython/wx/tools/XRCed/xrced.py +++ b/wxPython/wx/tools/XRCed/xrced.py @@ -96,11 +96,17 @@ class Frame(wxFrame): menu = wxMenu() menu.Append(wxID_NEW, '&New\tCtrl-N', 'New file') + menu.AppendSeparator() menu.Append(wxID_OPEN, '&Open...\tCtrl-O', 'Open XRC file') + self.recentMenu = wxMenu() + self.AppendRecent(self.recentMenu) + menu.AppendMenu(-1, 'Open Recent', self.recentMenu, 'Open a recent file') + menu.AppendSeparator() menu.Append(wxID_SAVE, '&Save\tCtrl-S', 'Save XRC file') menu.Append(wxID_SAVEAS, 'Save &As...', 'Save XRC file under different name') menu.AppendSeparator() menu.Append(wxID_EXIT, '&Quit\tCtrl-Q', 'Exit application') + menuBar.Append(menu, '&File') menu = wxMenu() @@ -268,6 +274,27 @@ class Frame(wxFrame): EVT_LEFT_DOWN(self, self.OnLeftDown) EVT_KEY_DOWN(self, tools.OnKeyDown) EVT_KEY_UP(self, tools.OnKeyUp) + + def AppendRecent(self, menu): + # add recently used files to the menu + for id,name in conf.recentfiles.iteritems(): + menu.Append(id,name) + EVT_MENU(self,id,self.OnRecentFile) + return + + def OnRecentFile(self,evt): + # open recently used file + if not self.AskSave(): return + wxBeginBusyCursor() + try: + path=conf.recentfiles[evt.GetId()] + if self.Open(path): + self.SetStatusText('Data loaded') + else: + self.SetStatusText('Failed') + except KeyError: + self.SetStatusText('No such file') + wxEndBusyCursor() def OnNew(self, evt): if not self.AskSave(): return @@ -286,6 +313,7 @@ class Frame(wxFrame): self.SetStatusText('Data loaded') else: self.SetStatusText('Failed') + self.SaveRecent(path) wxEndBusyCursor() dlg.Destroy() @@ -311,9 +339,18 @@ class Frame(wxFrame): self.Save(path) self.dataFile = path self.SetStatusText('Data saved') + self.SaveRecent(path) except IOError: self.SetStatusText('Failed') - wxEndBusyCursor() + wxEndBusyCursor() + + def SaveRecent(self,path): + # append to recently used files + if path not in conf.recentfiles.values(): + newid = wxNewId() + self.recentMenu.Append(newid, path) + EVT_MENU(self, newid, self.OnRecentFile) + conf.recentfiles[newid] = path def OnExit(self, evt): self.Close() @@ -513,7 +550,7 @@ class Frame(wxFrame): pos = self.GetPosition() sizePanel = panel.GetSize() panel.Reparent(self.splitter) - self.miniFrame.GetSizer().RemoveWindow(panel) + self.miniFrame.GetSizer().Remove(panel) wxYield() # Widen self.SetDimensions(pos.x, pos.y, size.width + sizePanel.width, size.height) @@ -796,6 +833,9 @@ Homepage: http://xrced.sourceforge.net\ if g.testWin: g.testWin.Destroy() if not panel.GetPageCount() == 2: panel.page2.Destroy() + else: + # If we don't do this, page does not get destroyed (a bug?) + panel.RemovePage(1) if not self.IsIconized(): conf.x, conf.y = self.GetPosition() conf.width, conf.height = self.GetSize() @@ -958,6 +998,12 @@ class App(wxApp): conf.embedPanel = conf.ReadInt('embedPanel', True) conf.showTools = conf.ReadInt('showTools', True) conf.sashPos = conf.ReadInt('sashPos', 200) + # read recently used files + recentfiles=conf.Read('recentFiles','') + conf.recentfiles={} + if recentfiles: + for fil in recentfiles.split('|'): + conf.recentfiles[wxNewId()]=fil if not conf.embedPanel: conf.panelX = conf.ReadInt('panelX', -1) conf.panelY = conf.ReadInt('panelY', -1) @@ -1001,6 +1047,7 @@ class App(wxApp): wc.WriteInt('panelWidth', conf.panelWidth) wc.WriteInt('panelHeight', conf.panelHeight) wc.WriteInt('nopanic', True) + wc.Write('recentFiles', '|'.join(conf.recentfiles.values()[-5:])) wc.Flush() def main(): diff --git a/wxPython/wx/tools/XRCed/xxx.py b/wxPython/wx/tools/XRCed/xxx.py index 364a5682f9..90542e52ce 100644 --- a/wxPython/wx/tools/XRCed/xxx.py +++ b/wxPython/wx/tools/XRCed/xxx.py @@ -49,7 +49,10 @@ class xxxParam(xxxNode): def value(self): return self.textNode.data.encode(g.currentEncoding) def update(self, value): - self.textNode.data = unicode(value, g.currentEncoding) + try: # handle exception if encoding is wrong + self.textNode.data = unicode(value, g.currentEncoding) + except UnicodeDecodeError: + wxLogMessage("Unicode error: set encoding in file\nglobals.py to something appropriate") # Integer parameter class xxxParamInt(xxxParam): -- 2.47.2