private:
wxTreeItemData *m_data;
+
+ DECLARE_NO_COPY_CLASS(wxVirtualNode)
};
#ifdef __VISUALC__
bool Traverse(const wxTreeItemId& root, bool recursively);
const wxTreeCtrl *m_tree;
+
+ DECLARE_NO_COPY_CLASS(wxTreeTraversal)
};
// internal class for getting the selected items
// the real client data
wxTreeItemData *m_data;
+
+ DECLARE_NO_COPY_CLASS(wxTreeItemIndirectData)
};
// ----------------------------------------------------------------------------
return wxTreeItemId((WXHTREEITEM) TreeView_GetSelection(GetHwnd()));
}
-wxTreeItemId wxTreeCtrl::GetParent(const wxTreeItemId& item) const
+wxTreeItemId wxTreeCtrl::GetItemParent(const wxTreeItemId& item) const
{
HTREEITEM hItem;
void wxTreeCtrl::DeleteAllItems()
{
- // delete stored root item.
- delete GET_VIRTUAL_ROOT();
+ // delete the "virtual" root item.
+ if ( GET_VIRTUAL_ROOT() )
+ {
+ delete GET_VIRTUAL_ROOT();
+ m_pVirtualRoot = NULL;
+ }
+
+ // and all the real items
if ( !TreeView_DeleteAllItems(GetHwnd()) )
{
}
else // normal click
{
- // clear the selection and then let the default handler
- // do the job
- UnselectAll();
-
- // prevent the click from starting in-place editing
- // when there was no selection in the control
- TreeView_SelectItem(GetHwnd(), 0);
+ // avoid doing anything if we click on the only
+ // currently selected item
+ wxArrayTreeItemIds selections;
+ size_t count = GetSelections(selections);
+ if ( count == 0 ||
+ count > 1 ||
+ HITEM(selections[0]) != htItem )
+ {
+ // clear the previously selected items
+ UnselectAll();
+
+ // prevent the click from starting in-place editing
+ // which should only happen if we click on the
+ // already selected item (and nothing else is
+ // selected)
+ TreeView_SelectItem(GetHwnd(), 0);
+ }
// reset on any click without Shift
m_htSelStart = 0;
eventType = wxEVT_COMMAND_TREE_SEL_CHANGING;
//else: already set above
- NM_TREEVIEW* tv = (NM_TREEVIEW *)lParam;
-
if (hdr->code == TVN_SELCHANGINGW ||
hdr->code == TVN_SELCHANGEDW)
{