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:
Roman Rolinsky
2005-01-31 19:49:04 +00:00
parent 5d2ac6b8c6
commit fd91945141
3 changed files with 65 additions and 24 deletions

View File

@@ -11,7 +11,7 @@ import sys
# Global constants
progname = 'XRCed'
version = '0.1.3-1'
version = '0.1.4-1'
# Can be changed to set other default encoding different
defaultEncoding = sys.getdefaultencoding()

View File

@@ -523,12 +523,20 @@ class XML_Tree(wxTreeCtrl):
# Find position
for i in range(notebook.GetPageCount()):
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
# Find first ancestor which is a wxWindow (not a sizer)
winParent = itemParent
while self.GetPyData(winParent).isSizer:
winParent = self.GetItemParent(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)
pos = obj.GetPosition()
@@ -559,6 +567,9 @@ class XML_Tree(wxTreeCtrl):
return child
def OnSelChanged(self, evt):
self.ChangeSelection(evt.GetItem())
def ChangeSelection(self, item):
# Apply changes
# !!! problem with wxGTK - GetOldItem is Ok if nothing selected
#oldItem = evt.GetOldItem()
@@ -577,7 +588,7 @@ class XML_Tree(wxTreeCtrl):
status = 'Changes were applied'
g.frame.SetStatusText(status)
# Generate view
self.selection = evt.GetItem()
self.selection = item
if not self.selection.IsOk():
self.selection = None
return
@@ -753,7 +764,6 @@ class XML_Tree(wxTreeCtrl):
testWin.panel = testWin
testWin.CreateStatusBar()
testWin.SetClientSize(testWin.GetBestSize())
testWin.panel = testWin
testWin.SetPosition(pos)
testWin.Show(True)
elif xxx.__class__ == xxxPanel:

View File

@@ -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):
def __init__(self, pos, size):
wxFrame.__init__(self, None, -1, '', pos, size)
@@ -119,8 +124,8 @@ class Frame(wxFrame):
self.ID_DELETE = wxNewId()
menu.Append(self.ID_DELETE, '&Delete\tCtrl-D', 'Delete object')
# menu.AppendSeparator()
ID_SELECT = wxNewId()
# menu.Append(ID_SELECT, '&Select', 'Select object')
self.ID_LOCATE = wxNewId()
menu.Append(self.ID_LOCATE, '&Locate\tCtrl-L', 'Locate control in test window and select it')
menuBar.Append(menu, '&Edit')
menu = wxMenu()
@@ -133,7 +138,7 @@ class Frame(wxFrame):
menu.Check(self.ID_SHOW_TOOLS, conf.showTools)
menu.AppendSeparator()
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()
menu.Append(self.ID_REFRESH, '&Refresh\tCtrl-R', 'Refresh test window')
self.ID_AUTO_REFRESH = wxNewId()
@@ -194,7 +199,7 @@ class Frame(wxFrame):
EVT_MENU(self, wxID_COPY, self.OnCopy)
EVT_MENU(self, wxID_PASTE, self.OnPaste)
EVT_MENU(self, self.ID_DELETE, self.OnCutDelete)
EVT_MENU(self, ID_SELECT, self.OnSelect)
EVT_MENU(self, self.ID_LOCATE, self.OnLocate)
# View
EVT_MENU(self, self.ID_EMBED_PANEL, self.OnEmbedPanel)
EVT_MENU(self, self.ID_SHOW_TOOLS, self.OnShowTools)
@@ -271,7 +276,6 @@ class Frame(wxFrame):
# Other events
EVT_IDLE(self, self.OnIdle)
EVT_CLOSE(self, self.OnCloseWindow)
EVT_LEFT_DOWN(self, self.OnLeftDown)
EVT_KEY_DOWN(self, tools.OnKeyDown)
EVT_KEY_UP(self, tools.OnKeyUp)
@@ -321,8 +325,8 @@ class Frame(wxFrame):
if evt.GetId() == wxID_SAVEAS or not self.dataFile:
if self.dataFile: defaultName = ''
else: defaultName = 'UNTITLED.xrc'
dlg = wxFileDialog(self, 'Save As', os.path.dirname(self.dataFile),
defaultName, '*.xrc',
dirname = os.path.dirname(self.dataFile)
dlg = wxFileDialog(self, 'Save As', dirname, defaultName, '*.xrc',
wxSAVE | wxOVERWRITE_PROMPT | wxCHANGE_DIR)
if dlg.ShowModal() == wxID_OK:
path = dlg.GetPath()
@@ -529,17 +533,6 @@ class Frame(wxFrame):
panel.pages[0].box.SetLabel(xxx.panelName())
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):
conf.embedPanel = evt.IsChecked()
if conf.embedPanel:
@@ -587,6 +580,44 @@ class Frame(wxFrame):
if not tree.selection: return # key pressed event
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):
# If modified, apply first
selection = tree.selection
@@ -877,10 +908,10 @@ Homepage: http://xrced.sourceforge.net\
# Set encoding global variable
if dom.encoding: g.currentEncoding = dom.encoding
# Change dir
self.dataFile = path = os.path.abspath(path)
dir = os.path.dirname(path)
if dir: os.chdir(dir)
tree.SetData(dom)
self.dataFile = path
self.SetTitle(progname + ': ' + os.path.basename(path))
except:
# Nice exception printing