Fix for bug# 956875. Added some wxCHECK's to MSW's wxTreeCtrl to make

things more consistent with the generic version.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27417 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn 2004-05-25 04:33:35 +00:00
parent 3ca7ba7403
commit 05b2a432c6
2 changed files with 59 additions and 6 deletions

View File

@ -1878,6 +1878,8 @@ size_t wxGenericTreeCtrl::GetSelections(wxArrayTreeItemIds &array) const
void wxGenericTreeCtrl::EnsureVisible(const wxTreeItemId& item)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
if (!item.IsOk()) return;
wxGenericTreeItem *gitem = (wxGenericTreeItem*) item.m_pItem;

View File

@ -888,8 +888,9 @@ void wxTreeCtrl::AssignStateImageList(wxImageList *imageList)
size_t wxTreeCtrl::GetChildrenCount(const wxTreeItemId& item,
bool recursively) const
{
TraverseCounter counter(this, item, recursively);
wxCHECK_MSG( item.IsOk(), 0u, wxT("invalid tree item") );
TraverseCounter counter(this, item, recursively);
return counter.GetCount() - 1;
}
@ -927,6 +928,8 @@ bool wxTreeCtrl::SetForegroundColour(const wxColour &colour)
wxString wxTreeCtrl::GetItemText(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), wxT(""), wxT("invalid tree item") );
wxChar buf[512]; // the size is arbitrary...
wxTreeViewItem tvItem(item, TVIF_TEXT);
@ -943,6 +946,8 @@ wxString wxTreeCtrl::GetItemText(const wxTreeItemId& item) const
void wxTreeCtrl::SetItemText(const wxTreeItemId& item, const wxString& text)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
if ( IS_VIRTUAL_ROOT(item) )
return;
@ -1018,6 +1023,8 @@ void wxTreeCtrl::DoSetItemImages(const wxTreeItemId& item,
int wxTreeCtrl::GetItemImage(const wxTreeItemId& item,
wxTreeItemIcon which) const
{
wxCHECK_MSG( item.IsOk(), -1, wxT("invalid tree item") );
if ( (HITEM(item) == TVI_ROOT) && (m_windowStyle & wxTR_HIDE_ROOT) )
{
// TODO: Maybe a hidden root can still provide images?
@ -1057,6 +1064,8 @@ int wxTreeCtrl::GetItemImage(const wxTreeItemId& item,
void wxTreeCtrl::SetItemImage(const wxTreeItemId& item, int image,
wxTreeItemIcon which)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
if ( IS_VIRTUAL_ROOT(item) )
{
// TODO: Maybe a hidden root can still store images?
@ -1129,6 +1138,8 @@ void wxTreeCtrl::SetItemImage(const wxTreeItemId& item, int image,
wxTreeItemData *wxTreeCtrl::GetItemData(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), NULL, wxT("invalid tree item") );
wxTreeViewItem tvItem(item, TVIF_PARAM);
// Hidden root may have data.
@ -1154,6 +1165,8 @@ wxTreeItemData *wxTreeCtrl::GetItemData(const wxTreeItemId& item) const
void wxTreeCtrl::SetItemData(const wxTreeItemId& item, wxTreeItemData *data)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
if ( IS_VIRTUAL_ROOT(item) )
{
GET_VIRTUAL_ROOT()->SetData(data);
@ -1213,6 +1226,8 @@ bool wxTreeCtrl::HasIndirectData(const wxTreeItemId& item) const
void wxTreeCtrl::SetItemHasChildren(const wxTreeItemId& item, bool has)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
if ( IS_VIRTUAL_ROOT(item) )
return;
@ -1223,6 +1238,8 @@ void wxTreeCtrl::SetItemHasChildren(const wxTreeItemId& item, bool has)
void wxTreeCtrl::SetItemBold(const wxTreeItemId& item, bool bold)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
if ( IS_VIRTUAL_ROOT(item) )
return;
@ -1255,28 +1272,33 @@ void wxTreeCtrl::RefreshItem(const wxTreeItemId& item)
wxColour wxTreeCtrl::GetItemTextColour(const wxTreeItemId& item) const
{
wxMapTreeAttr::const_iterator it = m_attrs.find(item.m_pItem);
wxCHECK_MSG( item.IsOk(), wxNullColour, wxT("invalid tree item") );
wxMapTreeAttr::const_iterator it = m_attrs.find(item.m_pItem);
return it == m_attrs.end() ? wxNullColour : it->second->GetTextColour();
}
wxColour wxTreeCtrl::GetItemBackgroundColour(const wxTreeItemId& item) const
{
wxMapTreeAttr::const_iterator it = m_attrs.find(item.m_pItem);
wxCHECK_MSG( item.IsOk(), wxNullColour, wxT("invalid tree item") );
wxMapTreeAttr::const_iterator it = m_attrs.find(item.m_pItem);
return it == m_attrs.end() ? wxNullColour : it->second->GetBackgroundColour();
}
wxFont wxTreeCtrl::GetItemFont(const wxTreeItemId& item) const
{
wxMapTreeAttr::const_iterator it = m_attrs.find(item.m_pItem);
wxCHECK_MSG( item.IsOk(), wxNullFont, wxT("invalid tree item") );
wxMapTreeAttr::const_iterator it = m_attrs.find(item.m_pItem);
return it == m_attrs.end() ? wxNullFont : it->second->GetFont();
}
void wxTreeCtrl::SetItemTextColour(const wxTreeItemId& item,
const wxColour& col)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
wxTreeItemAttr *attr;
wxMapTreeAttr::iterator it = m_attrs.find(item.m_pItem);
if ( it == m_attrs.end() )
@ -1299,6 +1321,8 @@ void wxTreeCtrl::SetItemTextColour(const wxTreeItemId& item,
void wxTreeCtrl::SetItemBackgroundColour(const wxTreeItemId& item,
const wxColour& col)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
wxTreeItemAttr *attr;
wxMapTreeAttr::iterator it = m_attrs.find(item.m_pItem);
if ( it == m_attrs.end() )
@ -1320,6 +1344,8 @@ void wxTreeCtrl::SetItemBackgroundColour(const wxTreeItemId& item,
void wxTreeCtrl::SetItemFont(const wxTreeItemId& item, const wxFont& font)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
wxTreeItemAttr *attr;
wxMapTreeAttr::iterator it = m_attrs.find(item.m_pItem);
if ( it == m_attrs.end() )
@ -1345,6 +1371,8 @@ void wxTreeCtrl::SetItemFont(const wxTreeItemId& item, const wxFont& font)
bool wxTreeCtrl::IsVisible(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), FALSE, wxT("invalid tree item") );
if ( item == wxTreeItemId(TVI_ROOT) )
{
// virtual (hidden) root is never visible
@ -1374,6 +1402,8 @@ bool wxTreeCtrl::IsVisible(const wxTreeItemId& item) const
bool wxTreeCtrl::ItemHasChildren(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), FALSE, wxT("invalid tree item") );
wxTreeViewItem tvItem(item, TVIF_CHILDREN);
DoGetItem(&tvItem);
@ -1382,8 +1412,7 @@ bool wxTreeCtrl::ItemHasChildren(const wxTreeItemId& item) const
bool wxTreeCtrl::IsExpanded(const wxTreeItemId& item) const
{
// probably not a good idea to put it here
//wxASSERT( ItemHasChildren(item) );
wxCHECK_MSG( item.IsOk(), FALSE, wxT("invalid tree item") );
wxTreeViewItem tvItem(item, TVIF_STATE, TVIS_EXPANDED);
DoGetItem(&tvItem);
@ -1393,6 +1422,8 @@ bool wxTreeCtrl::IsExpanded(const wxTreeItemId& item) const
bool wxTreeCtrl::IsSelected(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), FALSE, wxT("invalid tree item") );
wxTreeViewItem tvItem(item, TVIF_STATE, TVIS_SELECTED);
DoGetItem(&tvItem);
@ -1401,6 +1432,8 @@ bool wxTreeCtrl::IsSelected(const wxTreeItemId& item) const
bool wxTreeCtrl::IsBold(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), FALSE, wxT("invalid tree item") );
wxTreeViewItem tvItem(item, TVIF_STATE, TVIS_BOLD);
DoGetItem(&tvItem);
@ -1430,6 +1463,8 @@ wxTreeItemId wxTreeCtrl::GetSelection() const
wxTreeItemId wxTreeCtrl::GetItemParent(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
HTREEITEM hItem;
if ( IS_VIRTUAL_ROOT(item) )
@ -1453,6 +1488,8 @@ wxTreeItemId wxTreeCtrl::GetItemParent(const wxTreeItemId& item) const
wxTreeItemId wxTreeCtrl::GetFirstChild(const wxTreeItemId& item,
wxTreeItemIdValue& cookie) const
{
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
// remember the last child returned in 'cookie'
cookie = TreeView_GetChild(GetHwnd(), HITEM(item));
@ -1474,6 +1511,8 @@ wxTreeItemId wxTreeCtrl::GetNextChild(const wxTreeItemId& WXUNUSED(item),
wxTreeItemId wxTreeCtrl::GetFirstChild(const wxTreeItemId& item,
long& cookie) const
{
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
cookie = (long)TreeView_GetChild(GetHwnd(), HITEM(item));
return wxTreeItemId((void *)cookie);
@ -1496,6 +1535,8 @@ wxTreeItemId wxTreeCtrl::GetNextChild(const wxTreeItemId& WXUNUSED(item),
wxTreeItemId wxTreeCtrl::GetLastChild(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
// can this be done more efficiently?
wxTreeItemIdValue cookie;
@ -1512,11 +1553,13 @@ wxTreeItemId wxTreeCtrl::GetLastChild(const wxTreeItemId& item) const
wxTreeItemId wxTreeCtrl::GetNextSibling(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
return wxTreeItemId(TreeView_GetNextSibling(GetHwnd(), HITEM(item)));
}
wxTreeItemId wxTreeCtrl::GetPrevSibling(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
return wxTreeItemId(TreeView_GetPrevSibling(GetHwnd(), HITEM(item)));
}
@ -1527,6 +1570,7 @@ wxTreeItemId wxTreeCtrl::GetFirstVisibleItem() const
wxTreeItemId wxTreeCtrl::GetNextVisible(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
wxASSERT_MSG( IsVisible(item), wxT("The item you call GetNextVisible() for must be visible itself!"));
return wxTreeItemId(TreeView_GetNextVisible(GetHwnd(), HITEM(item)));
@ -1534,6 +1578,7 @@ wxTreeItemId wxTreeCtrl::GetNextVisible(const wxTreeItemId& item) const
wxTreeItemId wxTreeCtrl::GetPrevVisible(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
wxASSERT_MSG( IsVisible(item), wxT("The item you call GetPrevVisible() for must be visible itself!"));
return wxTreeItemId(TreeView_GetPrevVisible(GetHwnd(), HITEM(item)));
@ -1545,6 +1590,8 @@ wxTreeItemId wxTreeCtrl::GetPrevVisible(const wxTreeItemId& item) const
bool wxTreeCtrl::IsItemChecked(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), FALSE, wxT("invalid tree item") );
// receive the desired information.
wxTreeViewItem tvItem(item, TVIF_STATE, TVIS_STATEIMAGEMASK);
DoGetItem(&tvItem);
@ -1555,6 +1602,8 @@ bool wxTreeCtrl::IsItemChecked(const wxTreeItemId& item) const
void wxTreeCtrl::SetItemCheck(const wxTreeItemId& item, bool check)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
// receive the desired information.
wxTreeViewItem tvItem(item, TVIF_STATE, TVIS_STATEIMAGEMASK);
@ -2103,6 +2152,8 @@ int wxTreeCtrl::OnCompareItems(const wxTreeItemId& item1,
void wxTreeCtrl::SortChildren(const wxTreeItemId& item)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
// rely on the fact that TreeView_SortChildren does the same thing as our
// default behaviour, i.e. sorts items alphabetically and so call it
// directly if we're not in derived class (much more efficient!)