(This is similar to, but not the same as a problem I reported a few weeks
ago.)
For a wxTreeItemData object, I use SetId() to set it to a wxTreeItemId, but
when I call GetId() on it I get back a different wxTreeItemId object.
NewTreeItemData = wx.wxTreeItemData( iRID );
NewItemId = self.AddRoot( "string", -1, -1, NewTreeItemData );
NewTreeItemData.SetId( NewItemId );
print "NewItemId = " + str(NewItemId);
print "ItemData.GetId() =" + str(NewTreeItemData.GetId());
These print statements yield (I expected them to be the same):
NewItemId = <C wxTreeItemId instance at _842fe8_wxTreeItemId_p>
ItemData.GetId() =<C wxTreeItemId instance at _12f8cc_wxTreeItemId_p>
I've included the whole method at the bottom in case I haven't included
enough here. I realize that there are Python-specific shortcut methods for
doing these things, but I want to do it the C++ way since I might need to
convert this to C++ later.
BTW, I'm also confused by the idea that wxTreeItemData is both associated
with (through the call to SetId()) and inherits from wxTreeItemId.
Thanks for any suggestions,
Tom.
def __init__(self, parent, id ):
wx.wxTreeCtrl.__init__(self, parent, id);
self.SetImageList( TypeImages );
self.ObjMap = CNsiTree.CObjMap();
# Add Root Item
RootPyObj = ns.ObjStore.GetRoot();
assert RootPyObj; # ObjStore must have a root.
iRID = CNsiTree.CItemData( "Nametree Root", RootPyObj );
NewTreeItemData = wx.wxTreeItemData( iRID ); # temp
NewItemId = self.AddRoot( iRID.GetDispStr(), -1, -1,
NewTreeItemData );
# NewTreeItemData = iRID.SetId( NewItemId );
NewTreeItemData.SetId( NewItemId ); # temp
print "NewItemId = " + str(NewItemId);
print "ItemData.GetId() =" + str(NewTreeItemData.GetId());
# NewItemId = <C wxTreeItemId instance at _842fe8_wxTreeItemId_p>
# ItemData.GetId() =<C wxTreeItemId instance at
_12f8cc_wxTreeItemId_p>
assert NewItemId == NewTreeItemData.GetId();
# Fails
self.SetItemData( NewItemId, NewTreeItemData );
self.RootItemId = NewItemId;
self.ObjMap.Add( iRID );
self.SetItemHasChildren( NewItemId, iRID.HasChildren() );
# End of add root item.
print "Root ItemId is " + str(NewItemId);
# Test going from ItemId to PyObj
assert self.GetPyObj( NewItemId ) == RootPyObj;
# Test going from PyObj to ItemId.
ItemDataList = self.ObjMap.get( RootPyObj.Id );
assert len( ItemDataList ) == 1;
ItemData = ItemDataList[0];
assert ItemData == NewTreeItemData;
ItemId = ItemData.GetId();
assert ItemId == NewItemId;
wx.EVT_TREE_ITEM_EXPANDING(self, self.GetId(),
self.OnItemExpanding);
wx.EVT_TREE_ITEM_COLLAPSING(self, self.GetId(),
self.OnItemCollapsing);
wx.EVT_TREE_DELETE_ITEM(self, self.GetId(), self.OnItemDeleted);
EventMan.Subscribe( self.EventReceptor );