// first item precedes the second, +1 if the second precedes the first or 0 if
// they're equivalent
class wxTreeItemData;
-typedef int (*wxTreeItemCmpFunc)(wxTreeItemData *item1, wxTreeItemData *item2);
// ----------------------------------------------------------------------------
// constants
// end editing and accept or discard the changes to item label
void EndEditLabel(const wxTreeItemId& item, bool discardChanges = FALSE);
- // sort the children of this item using the specified callback function
- // (it should return -1, 0 or +1 as usual), if it's not specified
- // alphabetical comparaison is performed.
+ // sorting
+ // this function is called to compare 2 items and should return -1, 0
+ // or +1 if the first item is less than, equal to or greater than the
+ // second one. The base class version performs alphabetic comparaison
+ // of item labels (GetText)
+ virtual int OnCompareItems(const wxTreeItemId& item1,
+ const wxTreeItemId& item2);
+ // sort the children of this item using OnCompareItems
//
- // NB: this function is not reentrant!
- void SortChildren(const wxTreeItemId& item,
- wxTreeItemCmpFunc *cmpFunction = NULL);
+ // NB: this function is not reentrant and not MT-safe (FIXME)!
+ void SortChildren(const wxTreeItemId& item);
// helpers
// -------
return wxTreeItemId((WXHTREEITEM) hitTestInfo.hItem);
}
-void wxTreeCtrl::SortChildren(const wxTreeItemId& item,
- wxTreeItemCmpFunc *cmpFunction)
+int wxTreeCtrl::OnCompareItems(const wxTreeItemId& item1,
+ const wxTreeItemId& item2)
{
- if ( cmpFunction == NULL )
+ return strcmp(GetItemText(item1), GetItemText(item2));
+}
+
+void wxTreeCtrl::SortChildren(const wxTreeItemId& item)
+{
+ // rely on the fact that TreeView_SortChildren does the same thing as our
+ // default behaviour, i.e. sorts items alphabetically
+ if ( wxIS_KIND_OF(this, wxTreeCtrl) )
{
TreeView_SortChildren(wxhWnd, (HTREEITEM) (WXHTREEITEM) item, 0);
}
}
}
-// TODO
size_t wxTreeCtrl::GetChildrenCount(const wxTreeItemId& item, bool recursively)
{
+ // TODO
+ wxFAIL_MSG("wxTreeCtrl::GetChildrenCount not implemented");
+
return 0;
}
void wxTreeCtrl::DeleteChildren(const wxTreeItemId& item)
{
// TODO
+ wxFAIL_MSG("wxTreeCtrl::DeleteChildren not implemented");
}
// ----------------------------------------------------------------------------