Patch from FN that fixes bug in RefreshItem on an item that has no
corresponding node in the tree yet (because its parent isn't expanded yet) triggered an exception. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45503 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -25,8 +25,8 @@ The VirtualTree and DragAndDrop mixins force the wx.TR_HIDE_ROOT style.
|
||||
|
||||
Author: Frank Niessink <frank@niessink.com>
|
||||
License: wxWidgets license
|
||||
Version: 0.9.1
|
||||
Date: 26 March 2007
|
||||
Version: 1.0
|
||||
Date: 15 April 2007
|
||||
|
||||
ExpansionState is based on code and ideas from Karsten Hilbert.
|
||||
Andrea Gavana provided help with the CustomTreeCtrl integration.
|
||||
@@ -40,14 +40,6 @@ class TreeAPIHarmonizer(object):
|
||||
''' This class attempts to hide the differences in API between the
|
||||
different tree controls that are part of wxPython. '''
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
# CustomTreeCtrl uses a different keyword for the window style
|
||||
# argument ('ctstyle'). To hide this, we replace the 'style' keyword
|
||||
# by 'ctstyle' if we're mixed in with CustomTreeCtrl.
|
||||
if isinstance(self, wx.lib.customtreectrl.CustomTreeCtrl):
|
||||
kwargs['ctstyle'] = kwargs.pop('style', wx.TR_DEFAULT_STYLE)
|
||||
super(TreeAPIHarmonizer, self).__init__(*args, **kwargs)
|
||||
|
||||
def __callSuper(self, methodName, default, *args, **kwargs):
|
||||
# If our super class has a method called methodName, call it,
|
||||
# otherwise return the default value.
|
||||
@@ -148,13 +140,21 @@ class TreeAPIHarmonizer(object):
|
||||
else:
|
||||
selections = []
|
||||
# If the root item is hidden, it should never be selected,
|
||||
# unfortunately, CustomTreeCtrl and TreeCtrl allow it to be selected.
|
||||
# unfortunately, CustomTreeCtrl allows it to be selected.
|
||||
if self.HasFlag(wx.TR_HIDE_ROOT):
|
||||
rootItem = self.GetRootItem()
|
||||
if rootItem and rootItem in selections:
|
||||
selections.remove(rootItem)
|
||||
return selections
|
||||
|
||||
def GetFirstVisibleItem(self):
|
||||
# TreeListCtrl raises an exception or even crashes when invoking
|
||||
# GetFirstVisibleItem on an empty tree.
|
||||
if self.GetRootItem():
|
||||
return super(TreeAPIHarmonizer, self).GetFirstVisibleItem()
|
||||
else:
|
||||
return wx.TreeItemId()
|
||||
|
||||
def SelectItem(self, item, *args, **kwargs):
|
||||
# Prevent the hidden root from being selected, otherwise TreeCtrl
|
||||
# crashes
|
||||
@@ -197,7 +197,7 @@ class TreeAPIHarmonizer(object):
|
||||
super(TreeAPIHarmonizer, self).ExpandAll(item)
|
||||
|
||||
def ExpandAllChildren(self, item):
|
||||
# TreeListCtrl doesn't have ExpandallChildren
|
||||
# TreeListCtrl and CustomTreeCtrl don't have ExpandallChildren
|
||||
try:
|
||||
super(TreeAPIHarmonizer, self).ExpandAllChildren(item)
|
||||
except AttributeError:
|
||||
@@ -352,7 +352,12 @@ class VirtualTree(TreeAPIHarmonizer, TreeHelper):
|
||||
|
||||
def RefreshItem(self, index):
|
||||
''' Redraws the item with the specified index. '''
|
||||
item = self.GetItemByIndex(index)
|
||||
try:
|
||||
item = self.GetItemByIndex(index)
|
||||
except IndexError:
|
||||
# There's no corresponding item for index, because its parent
|
||||
# has not been expanded yet.
|
||||
return
|
||||
hasChildren = bool(self.OnGetChildrenCount(index))
|
||||
self.DoRefreshItem(item, index, hasChildren)
|
||||
|
||||
|
Reference in New Issue
Block a user