0.1.6-4: replace working for sizeritems and spacers
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35192 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
f02a4ffa5f
commit
baba4aa5ec
@ -1,3 +1,9 @@
|
||||
0.1.6-4
|
||||
-------
|
||||
|
||||
Fixed replacing op for sizer children and spacer objects.
|
||||
UndoReplace is not yet implemented.
|
||||
|
||||
0.1.6-3
|
||||
-------
|
||||
|
||||
|
@ -15,7 +15,7 @@ import sys
|
||||
# Global constants
|
||||
|
||||
progname = 'XRCed'
|
||||
version = '0.1.6-3'
|
||||
version = '0.1.6-4'
|
||||
# Can be changed to set other default encoding different
|
||||
#defaultEncoding = ''
|
||||
# you comment above and can uncomment this:
|
||||
|
@ -5,6 +5,7 @@
|
||||
# RCS-ID: $Id$
|
||||
|
||||
from globals import *
|
||||
from xxx import MakeXXXFromDOM
|
||||
#from panel import *
|
||||
|
||||
# Undo/redo classes
|
||||
@ -119,6 +120,49 @@ class UndoPasteCreate:
|
||||
else:
|
||||
g.tree.pendingHighLight = None
|
||||
|
||||
class UndoReplace:
|
||||
def __init__(self, item):
|
||||
self.itemIndex = g.tree.ItemFullIndex(item)
|
||||
self.xxx = g.tree.GetPyData(item)
|
||||
def destroy(self):
|
||||
if self.xxx: self.xxx.element.unlink()
|
||||
def undo(self):
|
||||
print 'Sorry, UndoReplace is not yet implemented.'
|
||||
return
|
||||
item = g.tree.ItemAtFullIndex(self.itemIndex)
|
||||
xxx = g.tree.GetPyData(item)
|
||||
# Replace with old element
|
||||
parent = xxx.parent.element
|
||||
if xxx is self.xxx: # sizeritem or notebookpage - replace child
|
||||
parent.replaceChild(self.xxx.child.element, xxx.child.element)
|
||||
else:
|
||||
parent.replaceChild(self.xxx.element, xxx.element)
|
||||
self.xxx.parent = xxx.parent
|
||||
xxx = self.xxx
|
||||
g.tree.SetPyData(item, xxx)
|
||||
g.tree.SetItemText(item, xxx.treeName())
|
||||
g.tree.SetItemImage(item, xxx.treeImage())
|
||||
|
||||
# Update panel
|
||||
g.panel.SetData(xxx)
|
||||
# Update tools
|
||||
g.tools.UpdateUI()
|
||||
g.tree.EnsureVisible(item)
|
||||
g.tree.SelectItem(item)
|
||||
# Delete testWin?
|
||||
if g.testWin:
|
||||
# If deleting top-level item, delete testWin
|
||||
if selected == g.testWin.item:
|
||||
g.testWin.Destroy()
|
||||
g.testWin = None
|
||||
else:
|
||||
# Remove highlight, update testWin
|
||||
if g.testWin.highLight:
|
||||
g.testWin.highLight.Remove()
|
||||
g.tree.needUpdate = True
|
||||
def redo(self):
|
||||
return
|
||||
|
||||
class UndoEdit:
|
||||
def __init__(self):
|
||||
self.pages = map(ParamPage.GetState, g.panel.pages)
|
||||
|
@ -800,21 +800,25 @@ Homepage: http://xrced.sourceforge.net\
|
||||
tree.SetFocus()
|
||||
self.SetModified()
|
||||
|
||||
|
||||
# Replace one object with another
|
||||
def OnReplace(self, evt):
|
||||
selected = tree.selection
|
||||
xxx = tree.GetPyData(selected).treeObject()
|
||||
elem = xxx.element
|
||||
parent = elem.parentNode
|
||||
parentXXX = xxx.parent
|
||||
undoMan.RegisterUndo(UndoReplace(selected))
|
||||
# New class
|
||||
className = pullDownMenu.createMap[evt.GetId() - 1000]
|
||||
# Create temporary empty node (with default values)
|
||||
dummy = MakeEmptyDOM(className)
|
||||
xxxClass = xxxDict[className]
|
||||
if className == 'spacer' and xxx.className != 'spacer':
|
||||
klass = xxxSpacer
|
||||
elif xxx.className == 'spacer' and className != 'spacer':
|
||||
klass = xxxSizerItem
|
||||
else:
|
||||
klass = xxxDict[className]
|
||||
# Remove non-compatible children
|
||||
if tree.ItemHasChildren(selected) and not xxxClass.hasChildren:
|
||||
if tree.ItemHasChildren(selected) and not klass.hasChildren:
|
||||
tree.DeleteChildren(selected)
|
||||
nodes = elem.childNodes[:]
|
||||
tags = []
|
||||
@ -823,10 +827,9 @@ Homepage: http://xrced.sourceforge.net\
|
||||
remove = False
|
||||
tag = node.tagName
|
||||
if tag == 'object':
|
||||
if not xxxClass.hasChildren:
|
||||
remove = True
|
||||
elif tag not in xxxClass.allParams and \
|
||||
(not xxxClass.hasStyle or tag not in xxxClass.styles):
|
||||
if not klass.hasChildren: remove = True
|
||||
elif tag not in klass.allParams and \
|
||||
(not klass.hasStyle or tag not in klass.styles):
|
||||
remove = True
|
||||
else:
|
||||
tags.append(tag)
|
||||
@ -834,18 +837,37 @@ Homepage: http://xrced.sourceforge.net\
|
||||
elem.removeChild(node)
|
||||
node.unlink()
|
||||
|
||||
# Copy parameters present in dummy but not in elem
|
||||
for node in dummy.childNodes:
|
||||
tag = node.tagName
|
||||
if tag not in tags:
|
||||
elem.appendChild(node.cloneNode(True))
|
||||
# Remove sizeritem child if spacer
|
||||
if className == 'spacer' and xxx.className != 'spacer':
|
||||
sizeritem = elem.parentNode
|
||||
assert sizeritem.getAttribute('class') == 'sizeritem'
|
||||
sizeritem.removeChild(elem)
|
||||
elem.unlink()
|
||||
elem = sizeritem
|
||||
tree.GetPyData(selected).hasChild = false
|
||||
elif xxx.className == 'spacer' and className != 'spacer':
|
||||
# Create sizeritem element
|
||||
assert xxx.parent.isSizer
|
||||
elem.setAttribute('class', 'sizeritem')
|
||||
node = MakeEmptyDOM(className)
|
||||
elem.appendChild(node)
|
||||
# Replace to point to new object
|
||||
xxx = xxxSizerItem(xxx.parent, elem)
|
||||
elem = node
|
||||
tree.SetPyData(selected, xxx)
|
||||
xxx = xxx.child
|
||||
else:
|
||||
# Copy parameters present in dummy but not in elem
|
||||
for node in dummy.childNodes:
|
||||
if node.tagName not in tags: elem.appendChild(node.cloneNode(True))
|
||||
dummy.unlink()
|
||||
|
||||
# Change class name
|
||||
elem.setAttribute('class', className)
|
||||
elem.setAttribute('class', className)
|
||||
if elem.hasAttribute('subclass'):
|
||||
elem.removeAttribute('subclass') # clear subclassing
|
||||
# Re-create xxx element
|
||||
xxx = MakeXXXFromDOM(parentXXX, elem)
|
||||
xxx = MakeXXXFromDOM(xxx.parent, elem)
|
||||
# Update parent in child objects
|
||||
if tree.ItemHasChildren(selected):
|
||||
i, cookie = tree.GetFirstChild(selected)
|
||||
@ -854,13 +876,14 @@ Homepage: http://xrced.sourceforge.net\
|
||||
x.parent = xxx
|
||||
if x.hasChild: x.child.parent = xxx
|
||||
i, cookie = tree.GetNextChild(selected, cookie)
|
||||
|
||||
|
||||
# Update tree
|
||||
if tree.GetPyData(selected).hasChild: # child container
|
||||
container = tree.GetPyData(selected)
|
||||
container.child = xxx
|
||||
container.hasChildren = xxx.hasChildren
|
||||
container.isSizer = xxx.isSizer
|
||||
xxx = container
|
||||
else:
|
||||
tree.SetPyData(selected, xxx)
|
||||
tree.SetItemText(selected, xxx.treeName())
|
||||
|
Loading…
Reference in New Issue
Block a user