From: Roman Rolinsky Date: Wed, 18 May 2005 08:48:54 +0000 (+0000) Subject: 0.1.5-2 X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/016f67baf6bf35c9d98279dcfee2da2764186de2 0.1.5-2 Using wx.GetDefaultPyEncoding/wx.SetDefaultPyEncoding for changing active encoding. Fixed pasting siblings (Ctrl key pressed while pasting). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34127 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/wxPython/wx/tools/XRCed/CHANGES.txt b/wxPython/wx/tools/XRCed/CHANGES.txt index 3a0764b634..743ae3640a 100644 --- a/wxPython/wx/tools/XRCed/CHANGES.txt +++ b/wxPython/wx/tools/XRCed/CHANGES.txt @@ -1,3 +1,10 @@ +0.1.5-2 +------- + +Using wx.GetDefaultPyEncoding/wx.SetDefaultPyEncoding for changing active encoding. + +Fixed pasting siblings (Ctrl key pressed while pasting). + 0.1.5-1 ------- diff --git a/wxPython/wx/tools/XRCed/globals.py b/wxPython/wx/tools/XRCed/globals.py index 19467981fa..18dae74e4a 100644 --- a/wxPython/wx/tools/XRCed/globals.py +++ b/wxPython/wx/tools/XRCed/globals.py @@ -4,6 +4,7 @@ # Created: 02.12.2002 # RCS-ID: $Id$ +import wx from wxPython.wx import * from wxPython.xrc import * try: @@ -15,9 +16,10 @@ import sys # Global constants progname = 'XRCed' -version = '0.1.5-1' +version = '0.1.5-2' # Can be changed to set other default encoding different -defaultEncoding = sys.getdefaultencoding() +#defaultEncoding = sys.getdefaultencoding() +defaultEncoding = wx.GetDefaultPyEncoding() try: True diff --git a/wxPython/wx/tools/XRCed/params.py b/wxPython/wx/tools/XRCed/params.py index bb88297efb..d2a2a1e72a 100644 --- a/wxPython/wx/tools/XRCed/params.py +++ b/wxPython/wx/tools/XRCed/params.py @@ -250,20 +250,21 @@ class ParamFont(PPanel): error = False try: try: size = int(self.value[0]) - except ValueError: error = True + except ValueError: error = True; wxLogError('Invalid size specification') try: family = fontFamiliesXml2wx[self.value[1]] - except KeyError: error = True + except KeyError: error = True; wxLogError('Invalid family specification') try: style = fontStylesXml2wx[self.value[2]] - except KeyError: error = True + except KeyError: error = True; wxLogError('Invalid style specification') try: weight = fontWeightsXml2wx[self.value[3]] - except KeyError: error = True - try: underlined = int(self.value[4]) - except ValueError: error = True + except KeyError: error = True; wxLogError('Invalid weight specification') + try: underlined = bool(self.value[4]) + except ValueError: error = True; wxLogError('Invalid underlined flag specification') face = self.value[5] - mapper = wxFontMapper() - if not self.value[6]: enc = mapper.CharsetToEncoding(self.value[6]) except IndexError: error = True + mapper = wxFontMapper() + if not self.value[6]: enc = mapper.CharsetToEncoding(self.value[6]) + if error: wxLogError('Invalid font specification') if enc == wxFONTENCODING_DEFAULT: enc = wxFONTENCODING_SYSTEM font = wxFont(size, family, style, weight, underlined, face, enc) @@ -272,13 +273,18 @@ class ParamFont(PPanel): dlg = wxFontDialog(self, data) if dlg.ShowModal() == wxID_OK: font = dlg.GetFontData().GetChosenFont() + print font.GetEncoding() + if font.GetEncoding() == wxFONTENCODING_SYSTEM: + encName = '' + else: + encName = wxFontMapper_GetEncodingName(font.GetEncoding()).encode() value = [str(font.GetPointSize()), fontFamiliesWx2Xml.get(font.GetFamily(), "default"), fontStylesWx2Xml.get(font.GetStyle(), "normal"), fontWeightsWx2Xml.get(font.GetWeight(), "normal"), str(font.GetUnderlined()), font.GetFaceName().encode(), - wxFontMapper_GetEncodingName(font.GetEncoding()).encode() + encName ] # Add ignored flags self.SetValue(value) diff --git a/wxPython/wx/tools/XRCed/tree.py b/wxPython/wx/tools/XRCed/tree.py index cb68fa49a6..c3df6a0ee1 100644 --- a/wxPython/wx/tools/XRCed/tree.py +++ b/wxPython/wx/tools/XRCed/tree.py @@ -105,6 +105,7 @@ class PullDownMenu: ID_EXPAND = wxNewId() ID_COLLAPSE = wxNewId() ID_PASTE_SIBLING = wxNewId() + ID_TOOL_PASTE = wxNewId() ID_SUBCLASS = wxNewId() def __init__(self, parent): @@ -874,7 +875,7 @@ class XML_Tree(wxTreeCtrl): def CloseTestWindow(self): if not g.testWin: return self.SetItemBold(g.testWin.item, False) - g.frame.tb.ToggleTool(g.frame.ID_LOCATE_TOOL, False) + g.frame.tb.ToggleTool(g.frame.ID_TOOL_LOCATE, False) g.testWinPos = g.testWin.GetPosition() g.testWin.Destroy() g.testWin = None diff --git a/wxPython/wx/tools/XRCed/xrced.py b/wxPython/wx/tools/XRCed/xrced.py index be58feb3b5..7e69fbc593 100644 --- a/wxPython/wx/tools/XRCed/xrced.py +++ b/wxPython/wx/tools/XRCed/xrced.py @@ -22,7 +22,7 @@ Options: from globals import * -import os, sys, getopt, re, traceback +import os, sys, getopt, re, traceback, tempfile, shutil # Local modules from tree import * # imports xxx which imports params @@ -135,7 +135,8 @@ class Frame(wxFrame): menu.Append(self.ID_DELETE, '&Delete\tCtrl-D', 'Delete object') menu.AppendSeparator() self.ID_LOCATE = wxNewId() - self.ID_LOCATE_TOOL = wxNewId() + self.ID_TOOL_LOCATE = wxNewId() + self.ID_TOOL_PASTE = wxNewId() menu.Append(self.ID_LOCATE, '&Locate\tCtrl-L', 'Locate control in test window and select it') menuBar.Append(menu, '&Edit') @@ -185,9 +186,9 @@ class Frame(wxFrame): tb.AddControl(wxStaticLine(tb, -1, size=(-1,23), style=wxLI_VERTICAL)) tb.AddSimpleTool(wxID_CUT, images.getCutBitmap(), 'Cut', 'Cut') tb.AddSimpleTool(wxID_COPY, images.getCopyBitmap(), 'Copy', 'Copy') - tb.AddSimpleTool(wxID_PASTE, images.getPasteBitmap(), 'Paste', 'Paste') + tb.AddSimpleTool(self.ID_TOOL_PASTE, images.getPasteBitmap(), 'Paste', 'Paste') tb.AddControl(wxStaticLine(tb, -1, size=(-1,23), style=wxLI_VERTICAL)) - tb.AddCheckTool(self.ID_LOCATE_TOOL, + tb.AddCheckTool(self.ID_TOOL_LOCATE, images.getLocateBitmap(), images.getLocateArmedBitmap(), 'Locate', 'Locate control in test window and select it') tb.AddControl(wxStaticLine(tb, -1, size=(-1,23), style=wxLI_VERTICAL)) @@ -216,9 +217,10 @@ class Frame(wxFrame): EVT_MENU(self, wxID_CUT, self.OnCutDelete) EVT_MENU(self, wxID_COPY, self.OnCopy) EVT_MENU(self, wxID_PASTE, self.OnPaste) + EVT_MENU(self, self.ID_TOOL_PASTE, self.OnPaste) EVT_MENU(self, self.ID_DELETE, self.OnCutDelete) EVT_MENU(self, self.ID_LOCATE, self.OnLocate) - EVT_MENU(self, self.ID_LOCATE_TOOL, self.OnLocate) + EVT_MENU(self, self.ID_TOOL_LOCATE, self.OnLocate) # View EVT_MENU(self, self.ID_EMBED_PANEL, self.OnEmbedPanel) EVT_MENU(self, self.ID_SHOW_TOOLS, self.OnShowTools) @@ -235,7 +237,8 @@ class Frame(wxFrame): EVT_UPDATE_UI(self, wxID_COPY, self.OnUpdateUI) EVT_UPDATE_UI(self, wxID_PASTE, self.OnUpdateUI) EVT_UPDATE_UI(self, self.ID_LOCATE, self.OnUpdateUI) - EVT_UPDATE_UI(self, self.ID_LOCATE_TOOL, self.OnUpdateUI) + EVT_UPDATE_UI(self, self.ID_TOOL_LOCATE, self.OnUpdateUI) + EVT_UPDATE_UI(self, self.ID_TOOL_PASTE, self.OnUpdateUI) EVT_UPDATE_UI(self, wxID_UNDO, self.OnUpdateUI) EVT_UPDATE_UI(self, wxID_REDO, self.OnUpdateUI) EVT_UPDATE_UI(self, self.ID_DELETE, self.OnUpdateUI) @@ -335,12 +338,14 @@ class Frame(wxFrame): self.SetStatusText('Loading...') wxYield() wxBeginBusyCursor() - if self.Open(path): - self.SetStatusText('Data loaded') - else: - self.SetStatusText('Failed') - self.SaveRecent(path) - wxEndBusyCursor() + try: + if self.Open(path): + self.SetStatusText('Data loaded') + else: + self.SetStatusText('Failed') + self.SaveRecent(path) + finally: + wxEndBusyCursor() dlg.Destroy() def OnSaveOrSaveAs(self, evt): @@ -362,13 +367,18 @@ class Frame(wxFrame): wxYield() wxBeginBusyCursor() try: - self.Save(path) - self.dataFile = path - self.SetStatusText('Data saved') - self.SaveRecent(path) - except IOError: - self.SetStatusText('Failed') - wxEndBusyCursor() + try: + tmpFile,tmpName = tempfile.mkstemp(prefix='xrced-') + os.close(tmpFile) + self.Save(tmpName) # save temporary file first + shutil.move(tmpName, path) + self.dataFile = path + self.SetStatusText('Data saved') + self.SaveRecent(path) + except IOError: + self.SetStatusText('Failed') + finally: + wxEndBusyCursor() def SaveRecent(self,path): # append to recently used files @@ -401,7 +411,11 @@ class Frame(wxFrame): selected = tree.selection if not selected: return # key pressed event # For pasting with Ctrl pressed + appendChild = True if evt.GetId() == pullDownMenu.ID_PASTE_SIBLING: appendChild = False + elif evt.GetId() == self.ID_TOOL_PASTE: + if g.tree.ctrl: appendChild = False + else: appendChild = not tree.NeedInsert(selected) else: appendChild = not tree.NeedInsert(selected) xxx = tree.GetPyData(selected) if not appendChild: @@ -627,7 +641,7 @@ class Frame(wxFrame): item = self.FindObject(g.testWin.item, evt.GetEventObject()) if item: tree.SelectItem(item) - self.tb.ToggleTool(self.ID_LOCATE_TOOL, False) + self.tb.ToggleTool(self.ID_TOOL_LOCATE, False) if item: self.SetStatusText('Selected %s' % tree.GetItemText(item)) else: @@ -646,12 +660,12 @@ class Frame(wxFrame): def OnLocate(self, evt): if g.testWin: if evt.GetId() == self.ID_LOCATE or \ - evt.GetId() == self.ID_LOCATE_TOOL and evt.IsChecked(): + evt.GetId() == self.ID_TOOL_LOCATE and evt.IsChecked(): self.SetHandler(g.testWin, g.testWin) g.testWin.Connect(wxID_ANY, wxID_ANY, wxEVT_LEFT_DOWN, self.OnTestWinLeftDown) if evt.GetId() == self.ID_LOCATE: - self.tb.ToggleTool(self.ID_LOCATE_TOOL, True) - elif evt.GetId() == self.ID_LOCATE_TOOL and not evt.IsChecked(): + self.tb.ToggleTool(self.ID_TOOL_LOCATE, True) + elif evt.GetId() == self.ID_TOOL_LOCATE and not evt.IsChecked(): self.SetHandler(g.testWin, None) g.testWin.Disconnect(wxID_ANY, wxID_ANY, wxEVT_LEFT_DOWN) self.SetStatusText('Click somewhere in your test window now') @@ -871,11 +885,11 @@ Homepage: http://xrced.sourceforge.net\ def OnUpdateUI(self, evt): if evt.GetId() in [wxID_CUT, wxID_COPY, self.ID_DELETE]: evt.Enable(tree.selection is not None and tree.selection != tree.root) - elif evt.GetId() == wxID_PASTE: + elif evt.GetId() in [wxID_PASTE, self.ID_TOOL_PASTE]: evt.Enable((self.clipboard and tree.selection) != None) elif evt.GetId() == self.ID_TEST: evt.Enable(tree.selection is not None and tree.selection != tree.root) - elif evt.GetId() in [self.ID_LOCATE, self.ID_LOCATE_TOOL]: + elif evt.GetId() in [self.ID_LOCATE, self.ID_TOOL_LOCATE]: evt.Enable(g.testWin is not None) elif evt.GetId() == wxID_UNDO: evt.Enable(undoMan.CanUndo()) elif evt.GetId() == wxID_REDO: evt.Enable(undoMan.CanRedo()) @@ -949,8 +963,10 @@ Homepage: http://xrced.sourceforge.net\ self.Clear() dom = minidom.parse(f) f.close() - # Set encoding global variable - if dom.encoding: g.currentEncoding = dom.encoding + # Set encoding global variable and default encoding + if dom.encoding: + g.currentEncoding = dom.encoding + wx.SetDefaultPyEncoding(g.currentEncoding.encode()) # Change dir self.dataFile = path = os.path.abspath(path) dir = os.path.dirname(path) @@ -962,6 +978,7 @@ Homepage: http://xrced.sourceforge.net\ inf = sys.exc_info() wxLogError(traceback.format_exception(inf[0], inf[1], None)[-1]) wxLogError('Error reading file: %s' % path) + if debug: raise return False return True @@ -988,7 +1005,10 @@ Homepage: http://xrced.sourceforge.net\ # Apply changes if tree.selection and panel.IsModified(): self.OnRefresh(wxCommandEvent()) - f = codecs.open(path, 'w', g.currentEncoding) + if g.currentEncoding: + f = codecs.open(path, 'w', g.currentEncoding) + else: + f = codecs.open(path, 'w') # Make temporary copy for formatting it # !!! We can't clone dom node, it works only once #self.domCopy = tree.dom.cloneNode(True)