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
This commit is contained in:
@@ -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
|
0.1.5-1
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
# Created: 02.12.2002
|
# Created: 02.12.2002
|
||||||
# RCS-ID: $Id$
|
# RCS-ID: $Id$
|
||||||
|
|
||||||
|
import wx
|
||||||
from wxPython.wx import *
|
from wxPython.wx import *
|
||||||
from wxPython.xrc import *
|
from wxPython.xrc import *
|
||||||
try:
|
try:
|
||||||
@@ -15,9 +16,10 @@ import sys
|
|||||||
# Global constants
|
# Global constants
|
||||||
|
|
||||||
progname = 'XRCed'
|
progname = 'XRCed'
|
||||||
version = '0.1.5-1'
|
version = '0.1.5-2'
|
||||||
# Can be changed to set other default encoding different
|
# Can be changed to set other default encoding different
|
||||||
defaultEncoding = sys.getdefaultencoding()
|
#defaultEncoding = sys.getdefaultencoding()
|
||||||
|
defaultEncoding = wx.GetDefaultPyEncoding()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
True
|
True
|
||||||
|
@@ -250,20 +250,21 @@ class ParamFont(PPanel):
|
|||||||
error = False
|
error = False
|
||||||
try:
|
try:
|
||||||
try: size = int(self.value[0])
|
try: size = int(self.value[0])
|
||||||
except ValueError: error = True
|
except ValueError: error = True; wxLogError('Invalid size specification')
|
||||||
try: family = fontFamiliesXml2wx[self.value[1]]
|
try: family = fontFamiliesXml2wx[self.value[1]]
|
||||||
except KeyError: error = True
|
except KeyError: error = True; wxLogError('Invalid family specification')
|
||||||
try: style = fontStylesXml2wx[self.value[2]]
|
try: style = fontStylesXml2wx[self.value[2]]
|
||||||
except KeyError: error = True
|
except KeyError: error = True; wxLogError('Invalid style specification')
|
||||||
try: weight = fontWeightsXml2wx[self.value[3]]
|
try: weight = fontWeightsXml2wx[self.value[3]]
|
||||||
except KeyError: error = True
|
except KeyError: error = True; wxLogError('Invalid weight specification')
|
||||||
try: underlined = int(self.value[4])
|
try: underlined = bool(self.value[4])
|
||||||
except ValueError: error = True
|
except ValueError: error = True; wxLogError('Invalid underlined flag specification')
|
||||||
face = self.value[5]
|
face = self.value[5]
|
||||||
mapper = wxFontMapper()
|
|
||||||
if not self.value[6]: enc = mapper.CharsetToEncoding(self.value[6])
|
|
||||||
except IndexError:
|
except IndexError:
|
||||||
error = True
|
error = True
|
||||||
|
mapper = wxFontMapper()
|
||||||
|
if not self.value[6]: enc = mapper.CharsetToEncoding(self.value[6])
|
||||||
|
|
||||||
if error: wxLogError('Invalid font specification')
|
if error: wxLogError('Invalid font specification')
|
||||||
if enc == wxFONTENCODING_DEFAULT: enc = wxFONTENCODING_SYSTEM
|
if enc == wxFONTENCODING_DEFAULT: enc = wxFONTENCODING_SYSTEM
|
||||||
font = wxFont(size, family, style, weight, underlined, face, enc)
|
font = wxFont(size, family, style, weight, underlined, face, enc)
|
||||||
@@ -272,13 +273,18 @@ class ParamFont(PPanel):
|
|||||||
dlg = wxFontDialog(self, data)
|
dlg = wxFontDialog(self, data)
|
||||||
if dlg.ShowModal() == wxID_OK:
|
if dlg.ShowModal() == wxID_OK:
|
||||||
font = dlg.GetFontData().GetChosenFont()
|
font = dlg.GetFontData().GetChosenFont()
|
||||||
|
print font.GetEncoding()
|
||||||
|
if font.GetEncoding() == wxFONTENCODING_SYSTEM:
|
||||||
|
encName = ''
|
||||||
|
else:
|
||||||
|
encName = wxFontMapper_GetEncodingName(font.GetEncoding()).encode()
|
||||||
value = [str(font.GetPointSize()),
|
value = [str(font.GetPointSize()),
|
||||||
fontFamiliesWx2Xml.get(font.GetFamily(), "default"),
|
fontFamiliesWx2Xml.get(font.GetFamily(), "default"),
|
||||||
fontStylesWx2Xml.get(font.GetStyle(), "normal"),
|
fontStylesWx2Xml.get(font.GetStyle(), "normal"),
|
||||||
fontWeightsWx2Xml.get(font.GetWeight(), "normal"),
|
fontWeightsWx2Xml.get(font.GetWeight(), "normal"),
|
||||||
str(font.GetUnderlined()),
|
str(font.GetUnderlined()),
|
||||||
font.GetFaceName().encode(),
|
font.GetFaceName().encode(),
|
||||||
wxFontMapper_GetEncodingName(font.GetEncoding()).encode()
|
encName
|
||||||
]
|
]
|
||||||
# Add ignored flags
|
# Add ignored flags
|
||||||
self.SetValue(value)
|
self.SetValue(value)
|
||||||
|
@@ -105,6 +105,7 @@ class PullDownMenu:
|
|||||||
ID_EXPAND = wxNewId()
|
ID_EXPAND = wxNewId()
|
||||||
ID_COLLAPSE = wxNewId()
|
ID_COLLAPSE = wxNewId()
|
||||||
ID_PASTE_SIBLING = wxNewId()
|
ID_PASTE_SIBLING = wxNewId()
|
||||||
|
ID_TOOL_PASTE = wxNewId()
|
||||||
ID_SUBCLASS = wxNewId()
|
ID_SUBCLASS = wxNewId()
|
||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
@@ -874,7 +875,7 @@ class XML_Tree(wxTreeCtrl):
|
|||||||
def CloseTestWindow(self):
|
def CloseTestWindow(self):
|
||||||
if not g.testWin: return
|
if not g.testWin: return
|
||||||
self.SetItemBold(g.testWin.item, False)
|
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.testWinPos = g.testWin.GetPosition()
|
||||||
g.testWin.Destroy()
|
g.testWin.Destroy()
|
||||||
g.testWin = None
|
g.testWin = None
|
||||||
|
@@ -22,7 +22,7 @@ Options:
|
|||||||
|
|
||||||
|
|
||||||
from globals import *
|
from globals import *
|
||||||
import os, sys, getopt, re, traceback
|
import os, sys, getopt, re, traceback, tempfile, shutil
|
||||||
|
|
||||||
# Local modules
|
# Local modules
|
||||||
from tree import * # imports xxx which imports params
|
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.Append(self.ID_DELETE, '&Delete\tCtrl-D', 'Delete object')
|
||||||
menu.AppendSeparator()
|
menu.AppendSeparator()
|
||||||
self.ID_LOCATE = wxNewId()
|
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')
|
menu.Append(self.ID_LOCATE, '&Locate\tCtrl-L', 'Locate control in test window and select it')
|
||||||
menuBar.Append(menu, '&Edit')
|
menuBar.Append(menu, '&Edit')
|
||||||
|
|
||||||
@@ -185,9 +186,9 @@ class Frame(wxFrame):
|
|||||||
tb.AddControl(wxStaticLine(tb, -1, size=(-1,23), style=wxLI_VERTICAL))
|
tb.AddControl(wxStaticLine(tb, -1, size=(-1,23), style=wxLI_VERTICAL))
|
||||||
tb.AddSimpleTool(wxID_CUT, images.getCutBitmap(), 'Cut', 'Cut')
|
tb.AddSimpleTool(wxID_CUT, images.getCutBitmap(), 'Cut', 'Cut')
|
||||||
tb.AddSimpleTool(wxID_COPY, images.getCopyBitmap(), 'Copy', 'Copy')
|
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.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(),
|
images.getLocateBitmap(), images.getLocateArmedBitmap(),
|
||||||
'Locate', 'Locate control in test window and select it')
|
'Locate', 'Locate control in test window and select it')
|
||||||
tb.AddControl(wxStaticLine(tb, -1, size=(-1,23), style=wxLI_VERTICAL))
|
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_CUT, self.OnCutDelete)
|
||||||
EVT_MENU(self, wxID_COPY, self.OnCopy)
|
EVT_MENU(self, wxID_COPY, self.OnCopy)
|
||||||
EVT_MENU(self, wxID_PASTE, self.OnPaste)
|
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_DELETE, self.OnCutDelete)
|
||||||
EVT_MENU(self, self.ID_LOCATE, self.OnLocate)
|
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
|
# View
|
||||||
EVT_MENU(self, self.ID_EMBED_PANEL, self.OnEmbedPanel)
|
EVT_MENU(self, self.ID_EMBED_PANEL, self.OnEmbedPanel)
|
||||||
EVT_MENU(self, self.ID_SHOW_TOOLS, self.OnShowTools)
|
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_COPY, self.OnUpdateUI)
|
||||||
EVT_UPDATE_UI(self, wxID_PASTE, 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, 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_UNDO, self.OnUpdateUI)
|
||||||
EVT_UPDATE_UI(self, wxID_REDO, self.OnUpdateUI)
|
EVT_UPDATE_UI(self, wxID_REDO, self.OnUpdateUI)
|
||||||
EVT_UPDATE_UI(self, self.ID_DELETE, self.OnUpdateUI)
|
EVT_UPDATE_UI(self, self.ID_DELETE, self.OnUpdateUI)
|
||||||
@@ -335,11 +338,13 @@ class Frame(wxFrame):
|
|||||||
self.SetStatusText('Loading...')
|
self.SetStatusText('Loading...')
|
||||||
wxYield()
|
wxYield()
|
||||||
wxBeginBusyCursor()
|
wxBeginBusyCursor()
|
||||||
|
try:
|
||||||
if self.Open(path):
|
if self.Open(path):
|
||||||
self.SetStatusText('Data loaded')
|
self.SetStatusText('Data loaded')
|
||||||
else:
|
else:
|
||||||
self.SetStatusText('Failed')
|
self.SetStatusText('Failed')
|
||||||
self.SaveRecent(path)
|
self.SaveRecent(path)
|
||||||
|
finally:
|
||||||
wxEndBusyCursor()
|
wxEndBusyCursor()
|
||||||
dlg.Destroy()
|
dlg.Destroy()
|
||||||
|
|
||||||
@@ -362,12 +367,17 @@ class Frame(wxFrame):
|
|||||||
wxYield()
|
wxYield()
|
||||||
wxBeginBusyCursor()
|
wxBeginBusyCursor()
|
||||||
try:
|
try:
|
||||||
self.Save(path)
|
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.dataFile = path
|
||||||
self.SetStatusText('Data saved')
|
self.SetStatusText('Data saved')
|
||||||
self.SaveRecent(path)
|
self.SaveRecent(path)
|
||||||
except IOError:
|
except IOError:
|
||||||
self.SetStatusText('Failed')
|
self.SetStatusText('Failed')
|
||||||
|
finally:
|
||||||
wxEndBusyCursor()
|
wxEndBusyCursor()
|
||||||
|
|
||||||
def SaveRecent(self,path):
|
def SaveRecent(self,path):
|
||||||
@@ -401,7 +411,11 @@ class Frame(wxFrame):
|
|||||||
selected = tree.selection
|
selected = tree.selection
|
||||||
if not selected: return # key pressed event
|
if not selected: return # key pressed event
|
||||||
# For pasting with Ctrl pressed
|
# For pasting with Ctrl pressed
|
||||||
|
appendChild = True
|
||||||
if evt.GetId() == pullDownMenu.ID_PASTE_SIBLING: appendChild = False
|
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)
|
else: appendChild = not tree.NeedInsert(selected)
|
||||||
xxx = tree.GetPyData(selected)
|
xxx = tree.GetPyData(selected)
|
||||||
if not appendChild:
|
if not appendChild:
|
||||||
@@ -627,7 +641,7 @@ class Frame(wxFrame):
|
|||||||
item = self.FindObject(g.testWin.item, evt.GetEventObject())
|
item = self.FindObject(g.testWin.item, evt.GetEventObject())
|
||||||
if item:
|
if item:
|
||||||
tree.SelectItem(item)
|
tree.SelectItem(item)
|
||||||
self.tb.ToggleTool(self.ID_LOCATE_TOOL, False)
|
self.tb.ToggleTool(self.ID_TOOL_LOCATE, False)
|
||||||
if item:
|
if item:
|
||||||
self.SetStatusText('Selected %s' % tree.GetItemText(item))
|
self.SetStatusText('Selected %s' % tree.GetItemText(item))
|
||||||
else:
|
else:
|
||||||
@@ -646,12 +660,12 @@ class Frame(wxFrame):
|
|||||||
def OnLocate(self, evt):
|
def OnLocate(self, evt):
|
||||||
if g.testWin:
|
if g.testWin:
|
||||||
if evt.GetId() == self.ID_LOCATE or \
|
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)
|
self.SetHandler(g.testWin, g.testWin)
|
||||||
g.testWin.Connect(wxID_ANY, wxID_ANY, wxEVT_LEFT_DOWN, self.OnTestWinLeftDown)
|
g.testWin.Connect(wxID_ANY, wxID_ANY, wxEVT_LEFT_DOWN, self.OnTestWinLeftDown)
|
||||||
if evt.GetId() == self.ID_LOCATE:
|
if evt.GetId() == self.ID_LOCATE:
|
||||||
self.tb.ToggleTool(self.ID_LOCATE_TOOL, True)
|
self.tb.ToggleTool(self.ID_TOOL_LOCATE, True)
|
||||||
elif evt.GetId() == self.ID_LOCATE_TOOL and not evt.IsChecked():
|
elif evt.GetId() == self.ID_TOOL_LOCATE and not evt.IsChecked():
|
||||||
self.SetHandler(g.testWin, None)
|
self.SetHandler(g.testWin, None)
|
||||||
g.testWin.Disconnect(wxID_ANY, wxID_ANY, wxEVT_LEFT_DOWN)
|
g.testWin.Disconnect(wxID_ANY, wxID_ANY, wxEVT_LEFT_DOWN)
|
||||||
self.SetStatusText('Click somewhere in your test window now')
|
self.SetStatusText('Click somewhere in your test window now')
|
||||||
@@ -871,11 +885,11 @@ Homepage: http://xrced.sourceforge.net\
|
|||||||
def OnUpdateUI(self, evt):
|
def OnUpdateUI(self, evt):
|
||||||
if evt.GetId() in [wxID_CUT, wxID_COPY, self.ID_DELETE]:
|
if evt.GetId() in [wxID_CUT, wxID_COPY, self.ID_DELETE]:
|
||||||
evt.Enable(tree.selection is not None and tree.selection != tree.root)
|
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)
|
evt.Enable((self.clipboard and tree.selection) != None)
|
||||||
elif evt.GetId() == self.ID_TEST:
|
elif evt.GetId() == self.ID_TEST:
|
||||||
evt.Enable(tree.selection is not None and tree.selection != tree.root)
|
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)
|
evt.Enable(g.testWin is not None)
|
||||||
elif evt.GetId() == wxID_UNDO: evt.Enable(undoMan.CanUndo())
|
elif evt.GetId() == wxID_UNDO: evt.Enable(undoMan.CanUndo())
|
||||||
elif evt.GetId() == wxID_REDO: evt.Enable(undoMan.CanRedo())
|
elif evt.GetId() == wxID_REDO: evt.Enable(undoMan.CanRedo())
|
||||||
@@ -949,8 +963,10 @@ Homepage: http://xrced.sourceforge.net\
|
|||||||
self.Clear()
|
self.Clear()
|
||||||
dom = minidom.parse(f)
|
dom = minidom.parse(f)
|
||||||
f.close()
|
f.close()
|
||||||
# Set encoding global variable
|
# Set encoding global variable and default encoding
|
||||||
if dom.encoding: g.currentEncoding = dom.encoding
|
if dom.encoding:
|
||||||
|
g.currentEncoding = dom.encoding
|
||||||
|
wx.SetDefaultPyEncoding(g.currentEncoding.encode())
|
||||||
# Change dir
|
# Change dir
|
||||||
self.dataFile = path = os.path.abspath(path)
|
self.dataFile = path = os.path.abspath(path)
|
||||||
dir = os.path.dirname(path)
|
dir = os.path.dirname(path)
|
||||||
@@ -962,6 +978,7 @@ Homepage: http://xrced.sourceforge.net\
|
|||||||
inf = sys.exc_info()
|
inf = sys.exc_info()
|
||||||
wxLogError(traceback.format_exception(inf[0], inf[1], None)[-1])
|
wxLogError(traceback.format_exception(inf[0], inf[1], None)[-1])
|
||||||
wxLogError('Error reading file: %s' % path)
|
wxLogError('Error reading file: %s' % path)
|
||||||
|
if debug: raise
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -988,7 +1005,10 @@ Homepage: http://xrced.sourceforge.net\
|
|||||||
# Apply changes
|
# Apply changes
|
||||||
if tree.selection and panel.IsModified():
|
if tree.selection and panel.IsModified():
|
||||||
self.OnRefresh(wxCommandEvent())
|
self.OnRefresh(wxCommandEvent())
|
||||||
|
if g.currentEncoding:
|
||||||
f = codecs.open(path, 'w', g.currentEncoding)
|
f = codecs.open(path, 'w', g.currentEncoding)
|
||||||
|
else:
|
||||||
|
f = codecs.open(path, 'w')
|
||||||
# Make temporary copy for formatting it
|
# Make temporary copy for formatting it
|
||||||
# !!! We can't clone dom node, it works only once
|
# !!! We can't clone dom node, it works only once
|
||||||
#self.domCopy = tree.dom.cloneNode(True)
|
#self.domCopy = tree.dom.cloneNode(True)
|
||||||
|
Reference in New Issue
Block a user