Implemented xxxComment. Due to different minidom XML types (Comments

are not Elements) had to add xxxObject.isElement flag and changed
xxxObject.element variable to xxxObject.node (xxxComment is derived
from xxxObject to minimize changes in processing). More testing is still
needed to verify that things didn't break. Use previous commit (0.1.8-4
release on 2007/03/10) if you need a stable version.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44764 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Roman Rolinsky
2007-03-11 05:08:45 +00:00
parent 047c5f3e6d
commit b372319fa0
9 changed files with 240 additions and 123 deletions

View File

@@ -86,10 +86,12 @@ class ID_NEW:
CHOICEBOOK = wx.NewId()
LISTBOOK = wx.NewId()
SPLITTER_WINDOW = wx.NewId()
GRID = wx.NewId()
SCROLLED_WINDOW = wx.NewId()
HTML_WINDOW = wx.NewId()
CALENDAR_CTRL = wx.NewId()
DATE_CTRL = wx.NewId()
FILE_PICKER_CTRL = wx.NewId()
GENERIC_DIR_CTRL = wx.NewId()
SPIN_CTRL = wx.NewId()
UNKNOWN = wx.NewId()
@@ -124,6 +126,7 @@ class ID_NEW:
CONTEXT_HELP_BUTTON = wx.NewId()
REF = wx.NewId()
COMMENT = wx.NewId()
LAST = wx.NewId()
@@ -193,10 +196,12 @@ class PullDownMenu:
ID_NEW.CHOICEBOOK: 'wxChoicebook',
ID_NEW.LISTBOOK: 'wxListbook',
ID_NEW.SPLITTER_WINDOW: 'wxSplitterWindow',
ID_NEW.GRID: 'wxGrid',
ID_NEW.SCROLLED_WINDOW: 'wxScrolledWindow',
ID_NEW.HTML_WINDOW: 'wxHtmlWindow',
ID_NEW.CALENDAR_CTRL: 'wxCalendarCtrl',
ID_NEW.DATE_CTRL: 'wxDatePickerCtrl',
ID_NEW.FILE_PICKER_CTRL: 'wxFilePickerCtrl',
ID_NEW.GENERIC_DIR_CTRL: 'wxGenericDirCtrl',
ID_NEW.SPIN_CTRL: 'wxSpinCtrl',
@@ -268,10 +273,12 @@ class PullDownMenu:
(ID_NEW.SCROLL_BAR, 'ScrollBar', 'Create scroll bar'),
(ID_NEW.TREE_CTRL, 'TreeCtrl', 'Create tree'),
(ID_NEW.LIST_CTRL, 'ListCtrl', 'Create list'),
# (ID_NEW.GRID, 'Grid', 'Create grid'),
(ID_NEW.SCROLLED_WINDOW, 'ScrolledWindow', 'Create scrolled window'),
(ID_NEW.HTML_WINDOW, 'HtmlWindow', 'Create HTML window'),
(ID_NEW.CALENDAR_CTRL, 'CalendarCtrl', 'Create calendar control'),
(ID_NEW.DATE_CTRL, 'DatePickerCtrl', 'Create date picker control'),
# (ID_NEW.FILE_PICKER_CTRL, 'FilePickerCtrl', 'Create file picker control'),
(ID_NEW.GENERIC_DIR_CTRL, 'GenericDirCtrl', 'Create generic dir control'),
(ID_NEW.UNKNOWN, 'Unknown', 'Create custom control placeholder'),
],
@@ -430,6 +437,8 @@ class XML_Tree(wx.TreeCtrl):
def __init__(self, parent, id):
wx.TreeCtrl.__init__(self, parent, id, style = wx.TR_HAS_BUTTONS | wx.TR_MULTIPLE)
self.SetBackgroundColour(wx.Colour(224, 248, 224))
self.fontComment = wx.Font(g.sysFont().GetPointSize(), wx.DEFAULT,
wx.FONTSTYLE_ITALIC, wx.NORMAL)
# Register events
wx.EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
# One works on Linux, another on Windows
@@ -450,6 +459,7 @@ class XML_Tree(wx.TreeCtrl):
# Create image list
il = wx.ImageList(16, 16, True)
self.rootImage = il.Add(images.getTreeRootImage().Scale(16,16).ConvertToBitmap())
xxxComment.image = il.Add(images.getTreeCommentImage().Scale(16,16).ConvertToBitmap())
xxxObject.image = il.Add(images.getTreeDefaultImage().Scale(16,16).ConvertToBitmap())
xxxPanel.image = il.Add(images.getTreePanelImage().Scale(16,16).ConvertToBitmap())
xxxDialog.image = il.Add(images.getTreeDialogImage().Scale(16,16).ConvertToBitmap())
@@ -560,19 +570,22 @@ class XML_Tree(wx.TreeCtrl):
item = self.AppendItem(itemParent, treeObj.treeName(),
image=treeObj.treeImage(),
data=wx.TreeItemData(xxx))
# Different color for references
if treeObj.ref:
# Different color for comments and references
if xxx.className == 'comment':
self.SetItemTextColour(item, 'Blue')
self.SetItemFont(item, self.fontComment)
elif treeObj.ref:
self.SetItemTextColour(item, 'DarkGreen')
elif treeObj.hasStyle and treeObj.params.get('hidden', False):
self.SetItemTextColour(item, 'Grey')
# Try to find children objects
if treeObj.hasChildren:
nodes = treeObj.element.childNodes[:]
nodes = treeObj.node.childNodes[:]
for n in nodes:
if IsObject(n):
self.AddNode(item, treeObj, n)
elif n.nodeType != minidom.Node.ELEMENT_NODE:
treeObj.element.removeChild(n)
treeObj.node.removeChild(n)
n.unlink()
# Insert new item at specific position
@@ -581,23 +594,29 @@ class XML_Tree(wx.TreeCtrl):
xxx = MakeXXXFromDOM(parent, elem)
# If nextItem is None, we append to parent, otherwise insert before it
if nextItem.IsOk():
node = self.GetPyData(nextItem).element
parent.element.insertBefore(elem, node)
node = self.GetPyData(nextItem).node
parent.node.insertBefore(elem, node)
# Inserting before is difficult, se we insert after or first child
index = self.ItemIndex(nextItem)
newItem = self.InsertItemBefore(itemParent, index,
xxx.treeName(), image=xxx.treeImage())
self.SetPyData(newItem, xxx)
else:
parent.element.appendChild(elem)
parent.node.appendChild(elem)
newItem = self.AppendItem(itemParent, xxx.treeName(), image=xxx.treeImage(),
data=wx.TreeItemData(xxx))
# Different color for references
if xxx.treeObject().ref: self.SetItemTextColour(newItem, 'DarkGreen')
treeObj = xxx.treeObject()
# Different color for references and comments
if xxx.className == 'comment':
self.SetItemTextColour(newItem, 'Blue')
elif treeObj.ref:
self.SetItemTextColour(newItem, 'DarkGreen')
elif treeObj.hasStyle and treeObj.params.get('hidden', False):
self.SetItemTextColour(newItem, 'Grey')
# Add children items
if xxx.hasChildren:
treeObj = xxx.treeObject()
for n in treeObj.element.childNodes:
for n in treeObj.node.childNodes:
if IsObject(n):
self.AddNode(newItem, treeObj, n)
return newItem
@@ -605,7 +624,7 @@ class XML_Tree(wx.TreeCtrl):
# Remove leaf of tree, return it's data object
def RemoveLeaf(self, leaf):
xxx = self.GetPyData(leaf)
node = xxx.element
node = xxx.node
parent = node.parentNode
parent.removeChild(node)
self.Delete(leaf)
@@ -849,7 +868,7 @@ class XML_Tree(wx.TreeCtrl):
# Save in memory FS
memFile = MemoryFile('xxx.xrc')
# Create memory XML file
elem = xxx.element.cloneNode(True)
elem = xxx.node.cloneNode(True)
if not xxx.name:
name = 'noname'
else:
@@ -1076,6 +1095,7 @@ class XML_Tree(wx.TreeCtrl):
SetMenu(m, pullDownMenu.topLevel)
m.AppendSeparator()
m.Append(ID_NEW.REF, 'reference...', 'Create object_ref node')
m.Append(ID_NEW.COMMENT, 'comment', 'Create comment node')
else:
xxx = self.GetPyData(item).treeObject()
# Check parent for possible child nodes if inserting sibling
@@ -1099,6 +1119,7 @@ class XML_Tree(wx.TreeCtrl):
m.Enable(ID_NEW.MENU_BAR, False)
m.AppendSeparator()
m.Append(ID_NEW.REF, 'reference...', 'Create object_ref node')
m.Append(ID_NEW.COMMENT, 'comment', 'Create comment node')
# Select correct label for create menu
if not needInsert:
if self.shift:
@@ -1134,11 +1155,12 @@ class XML_Tree(wx.TreeCtrl):
SetMenu(m, pullDownMenu.sizers, shift=True)
else:
SetMenu(m, pullDownMenu.controls, shift=True)
id = wx.NewId()
menu.AppendMenu(id, 'Replace With', m)
if not m.GetMenuItemCount(): menu.Enable(id, False)
menu.Append(pullDownMenu.ID_SUBCLASS, 'Subclass...',
'Set "subclass" property')
if xxx.isElement:
id = wx.NewId()
menu.AppendMenu(id, 'Replace With', m)
if not m.GetMenuItemCount(): menu.Enable(id, False)
menu.Append(pullDownMenu.ID_SUBCLASS, 'Subclass...',
'Set "subclass" property')
menu.AppendSeparator()
# Not using standart IDs because we don't want to show shortcuts
menu.Append(wx.ID_CUT, 'Cut', 'Cut to the clipboard')
@@ -1173,6 +1195,8 @@ class XML_Tree(wx.TreeCtrl):
# Item width may have changed
# !!! Tric to update tree width (wxGTK, ??)
self.SetIndent(self.GetIndent())
elif xxx.className == 'comment':
self.SetItemText(item, xxx.treeName())
# Change tree icon for sizers
if isinstance(xxx, xxxBoxSizer):
self.SetItemImage(item, xxx.treeImage())