Batch of changes:
- converting relative paths to absolute to compensate chdir - added Locate command (Edit menu) - Notebook children are highlighted correctly (at least on wxGTK 2.5.3) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31678 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -11,7 +11,7 @@ import sys
|
|||||||
# Global constants
|
# Global constants
|
||||||
|
|
||||||
progname = 'XRCed'
|
progname = 'XRCed'
|
||||||
version = '0.1.3-1'
|
version = '0.1.4-1'
|
||||||
# Can be changed to set other default encoding different
|
# Can be changed to set other default encoding different
|
||||||
defaultEncoding = sys.getdefaultencoding()
|
defaultEncoding = sys.getdefaultencoding()
|
||||||
|
|
||||||
|
@@ -523,13 +523,21 @@ class XML_Tree(wxTreeCtrl):
|
|||||||
# Find position
|
# Find position
|
||||||
for i in range(notebook.GetPageCount()):
|
for i in range(notebook.GetPageCount()):
|
||||||
if notebook.GetPage(i) == obj:
|
if notebook.GetPage(i) == obj:
|
||||||
if notebook.GetSelection() != i: notebook.SetSelection(i)
|
if notebook.GetSelection() != i:
|
||||||
|
notebook.SetSelection(i)
|
||||||
|
# Remove highlight - otherwise highlight window won't be visible
|
||||||
|
if g.testWin.highLight:
|
||||||
|
g.testWin.highLight.Remove()
|
||||||
break
|
break
|
||||||
# Find first ancestor which is a wxWindow (not a sizer)
|
# Find first ancestor which is a wxWindow (not a sizer)
|
||||||
winParent = itemParent
|
winParent = itemParent
|
||||||
while self.GetPyData(winParent).isSizer:
|
while self.GetPyData(winParent).isSizer:
|
||||||
winParent = self.GetItemParent(winParent)
|
winParent = self.GetItemParent(winParent)
|
||||||
parentPos = self.FindNodePos(winParent)
|
# Notebook children are layed out in a little strange way
|
||||||
|
if self.GetPyData(itemParent).treeObject().__class__ == xxxNotebook:
|
||||||
|
parentPos = wxPoint(0,0)
|
||||||
|
else:
|
||||||
|
parentPos = self.FindNodePos(winParent)
|
||||||
# Position (-1,-1) is really (0,0)
|
# Position (-1,-1) is really (0,0)
|
||||||
pos = obj.GetPosition()
|
pos = obj.GetPosition()
|
||||||
if pos == (-1,-1): pos = (0,0)
|
if pos == (-1,-1): pos = (0,0)
|
||||||
@@ -559,6 +567,9 @@ class XML_Tree(wxTreeCtrl):
|
|||||||
return child
|
return child
|
||||||
|
|
||||||
def OnSelChanged(self, evt):
|
def OnSelChanged(self, evt):
|
||||||
|
self.ChangeSelection(evt.GetItem())
|
||||||
|
|
||||||
|
def ChangeSelection(self, item):
|
||||||
# Apply changes
|
# Apply changes
|
||||||
# !!! problem with wxGTK - GetOldItem is Ok if nothing selected
|
# !!! problem with wxGTK - GetOldItem is Ok if nothing selected
|
||||||
#oldItem = evt.GetOldItem()
|
#oldItem = evt.GetOldItem()
|
||||||
@@ -577,7 +588,7 @@ class XML_Tree(wxTreeCtrl):
|
|||||||
status = 'Changes were applied'
|
status = 'Changes were applied'
|
||||||
g.frame.SetStatusText(status)
|
g.frame.SetStatusText(status)
|
||||||
# Generate view
|
# Generate view
|
||||||
self.selection = evt.GetItem()
|
self.selection = item
|
||||||
if not self.selection.IsOk():
|
if not self.selection.IsOk():
|
||||||
self.selection = None
|
self.selection = None
|
||||||
return
|
return
|
||||||
@@ -753,7 +764,6 @@ class XML_Tree(wxTreeCtrl):
|
|||||||
testWin.panel = testWin
|
testWin.panel = testWin
|
||||||
testWin.CreateStatusBar()
|
testWin.CreateStatusBar()
|
||||||
testWin.SetClientSize(testWin.GetBestSize())
|
testWin.SetClientSize(testWin.GetBestSize())
|
||||||
testWin.panel = testWin
|
|
||||||
testWin.SetPosition(pos)
|
testWin.SetPosition(pos)
|
||||||
testWin.Show(True)
|
testWin.Show(True)
|
||||||
elif xxx.__class__ == xxxPanel:
|
elif xxx.__class__ == xxxPanel:
|
||||||
|
@@ -79,6 +79,11 @@ class ScrolledMessageDialog(wxDialog):
|
|||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
|
# Event handler for using during location
|
||||||
|
class Locator(wxEvtHandler):
|
||||||
|
def ProcessEvent(self, evt):
|
||||||
|
print evt
|
||||||
|
|
||||||
class Frame(wxFrame):
|
class Frame(wxFrame):
|
||||||
def __init__(self, pos, size):
|
def __init__(self, pos, size):
|
||||||
wxFrame.__init__(self, None, -1, '', pos, size)
|
wxFrame.__init__(self, None, -1, '', pos, size)
|
||||||
@@ -119,8 +124,8 @@ class Frame(wxFrame):
|
|||||||
self.ID_DELETE = wxNewId()
|
self.ID_DELETE = wxNewId()
|
||||||
menu.Append(self.ID_DELETE, '&Delete\tCtrl-D', 'Delete object')
|
menu.Append(self.ID_DELETE, '&Delete\tCtrl-D', 'Delete object')
|
||||||
# menu.AppendSeparator()
|
# menu.AppendSeparator()
|
||||||
ID_SELECT = wxNewId()
|
self.ID_LOCATE = wxNewId()
|
||||||
# menu.Append(ID_SELECT, '&Select', 'Select object')
|
menu.Append(self.ID_LOCATE, '&Locate\tCtrl-L', 'Locate control in test window and select it')
|
||||||
menuBar.Append(menu, '&Edit')
|
menuBar.Append(menu, '&Edit')
|
||||||
|
|
||||||
menu = wxMenu()
|
menu = wxMenu()
|
||||||
@@ -133,7 +138,7 @@ class Frame(wxFrame):
|
|||||||
menu.Check(self.ID_SHOW_TOOLS, conf.showTools)
|
menu.Check(self.ID_SHOW_TOOLS, conf.showTools)
|
||||||
menu.AppendSeparator()
|
menu.AppendSeparator()
|
||||||
self.ID_TEST = wxNewId()
|
self.ID_TEST = wxNewId()
|
||||||
menu.Append(self.ID_TEST, '&Test\tF5', 'Test window')
|
menu.Append(self.ID_TEST, '&Test\tF5', 'Show test window')
|
||||||
self.ID_REFRESH = wxNewId()
|
self.ID_REFRESH = wxNewId()
|
||||||
menu.Append(self.ID_REFRESH, '&Refresh\tCtrl-R', 'Refresh test window')
|
menu.Append(self.ID_REFRESH, '&Refresh\tCtrl-R', 'Refresh test window')
|
||||||
self.ID_AUTO_REFRESH = wxNewId()
|
self.ID_AUTO_REFRESH = wxNewId()
|
||||||
@@ -194,7 +199,7 @@ class Frame(wxFrame):
|
|||||||
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_DELETE, self.OnCutDelete)
|
EVT_MENU(self, self.ID_DELETE, self.OnCutDelete)
|
||||||
EVT_MENU(self, ID_SELECT, self.OnSelect)
|
EVT_MENU(self, self.ID_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)
|
||||||
@@ -271,7 +276,6 @@ class Frame(wxFrame):
|
|||||||
# Other events
|
# Other events
|
||||||
EVT_IDLE(self, self.OnIdle)
|
EVT_IDLE(self, self.OnIdle)
|
||||||
EVT_CLOSE(self, self.OnCloseWindow)
|
EVT_CLOSE(self, self.OnCloseWindow)
|
||||||
EVT_LEFT_DOWN(self, self.OnLeftDown)
|
|
||||||
EVT_KEY_DOWN(self, tools.OnKeyDown)
|
EVT_KEY_DOWN(self, tools.OnKeyDown)
|
||||||
EVT_KEY_UP(self, tools.OnKeyUp)
|
EVT_KEY_UP(self, tools.OnKeyUp)
|
||||||
|
|
||||||
@@ -321,8 +325,8 @@ class Frame(wxFrame):
|
|||||||
if evt.GetId() == wxID_SAVEAS or not self.dataFile:
|
if evt.GetId() == wxID_SAVEAS or not self.dataFile:
|
||||||
if self.dataFile: defaultName = ''
|
if self.dataFile: defaultName = ''
|
||||||
else: defaultName = 'UNTITLED.xrc'
|
else: defaultName = 'UNTITLED.xrc'
|
||||||
dlg = wxFileDialog(self, 'Save As', os.path.dirname(self.dataFile),
|
dirname = os.path.dirname(self.dataFile)
|
||||||
defaultName, '*.xrc',
|
dlg = wxFileDialog(self, 'Save As', dirname, defaultName, '*.xrc',
|
||||||
wxSAVE | wxOVERWRITE_PROMPT | wxCHANGE_DIR)
|
wxSAVE | wxOVERWRITE_PROMPT | wxCHANGE_DIR)
|
||||||
if dlg.ShowModal() == wxID_OK:
|
if dlg.ShowModal() == wxID_OK:
|
||||||
path = dlg.GetPath()
|
path = dlg.GetPath()
|
||||||
@@ -529,17 +533,6 @@ class Frame(wxFrame):
|
|||||||
panel.pages[0].box.SetLabel(xxx.panelName())
|
panel.pages[0].box.SetLabel(xxx.panelName())
|
||||||
dlg.Destroy()
|
dlg.Destroy()
|
||||||
|
|
||||||
def OnSelect(self, evt):
|
|
||||||
print >> sys.stderr, 'Xperimental function!'
|
|
||||||
wxYield()
|
|
||||||
self.SetCursor(wxCROSS_CURSOR)
|
|
||||||
self.CaptureMouse()
|
|
||||||
|
|
||||||
def OnLeftDown(self, evt):
|
|
||||||
pos = evt.GetPosition()
|
|
||||||
self.SetCursor(wxNullCursor)
|
|
||||||
self.ReleaseMouse()
|
|
||||||
|
|
||||||
def OnEmbedPanel(self, evt):
|
def OnEmbedPanel(self, evt):
|
||||||
conf.embedPanel = evt.IsChecked()
|
conf.embedPanel = evt.IsChecked()
|
||||||
if conf.embedPanel:
|
if conf.embedPanel:
|
||||||
@@ -587,6 +580,44 @@ class Frame(wxFrame):
|
|||||||
if not tree.selection: return # key pressed event
|
if not tree.selection: return # key pressed event
|
||||||
tree.ShowTestWindow(tree.selection)
|
tree.ShowTestWindow(tree.selection)
|
||||||
|
|
||||||
|
# Find object by relative position
|
||||||
|
def FindObject(self, item, obj):
|
||||||
|
# We simply perform depth-first traversal, sinse it's too much
|
||||||
|
# hassle to deal with all sizer/window combinations
|
||||||
|
w = tree.FindNodeObject(item)
|
||||||
|
if w == obj:
|
||||||
|
return item
|
||||||
|
if tree.ItemHasChildren(item):
|
||||||
|
child = tree.GetFirstChild(item)[0]
|
||||||
|
while child:
|
||||||
|
found = self.FindObject(child, obj)
|
||||||
|
if found: return found
|
||||||
|
child = tree.GetNextSibling(child)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def OnTestWinLeftDown(self, evt):
|
||||||
|
pos = evt.GetPosition()
|
||||||
|
self.SetHandler(g.testWin)
|
||||||
|
g.testWin.Disconnect(wxID_ANY, wxID_ANY, wxEVT_LEFT_DOWN)
|
||||||
|
item = self.FindObject(g.testWin.item, evt.GetEventObject())
|
||||||
|
if item:
|
||||||
|
tree.SelectItem(item)
|
||||||
|
|
||||||
|
def SetHandler(self, w, h=None):
|
||||||
|
if h:
|
||||||
|
w.SetEventHandler(h)
|
||||||
|
w.SetCursor(wxCROSS_CURSOR)
|
||||||
|
else:
|
||||||
|
w.SetEventHandler(w)
|
||||||
|
w.SetCursor(wxNullCursor)
|
||||||
|
for ch in w.GetChildren():
|
||||||
|
self.SetHandler(ch, h)
|
||||||
|
|
||||||
|
def OnLocate(self, evt):
|
||||||
|
if g.testWin:
|
||||||
|
self.SetHandler(g.testWin, g.testWin)
|
||||||
|
g.testWin.Connect(wxID_ANY, wxID_ANY, wxEVT_LEFT_DOWN, self.OnTestWinLeftDown)
|
||||||
|
|
||||||
def OnRefresh(self, evt):
|
def OnRefresh(self, evt):
|
||||||
# If modified, apply first
|
# If modified, apply first
|
||||||
selection = tree.selection
|
selection = tree.selection
|
||||||
@@ -877,10 +908,10 @@ Homepage: http://xrced.sourceforge.net\
|
|||||||
# Set encoding global variable
|
# Set encoding global variable
|
||||||
if dom.encoding: g.currentEncoding = dom.encoding
|
if dom.encoding: g.currentEncoding = dom.encoding
|
||||||
# Change dir
|
# Change dir
|
||||||
|
self.dataFile = path = os.path.abspath(path)
|
||||||
dir = os.path.dirname(path)
|
dir = os.path.dirname(path)
|
||||||
if dir: os.chdir(dir)
|
if dir: os.chdir(dir)
|
||||||
tree.SetData(dom)
|
tree.SetData(dom)
|
||||||
self.dataFile = path
|
|
||||||
self.SetTitle(progname + ': ' + os.path.basename(path))
|
self.SetTitle(progname + ': ' + os.path.basename(path))
|
||||||
except:
|
except:
|
||||||
# Nice exception printing
|
# Nice exception printing
|
||||||
|
Reference in New Issue
Block a user