Add more sanity checks to virtual list item nums as the native control sometimes fires events before things are totally set up.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44132 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1069,25 +1069,28 @@ bool wxListCtrl::GetItem(wxListItem& info) const
|
|||||||
{
|
{
|
||||||
if (!IsVirtual())
|
if (!IsVirtual())
|
||||||
{
|
{
|
||||||
if (info.m_itemId > 0 && info.m_itemId < GetItemCount())
|
if (info.m_itemId >= 0 && info.m_itemId < GetItemCount())
|
||||||
m_dbImpl->MacGetColumnInfo(info.m_itemId, info.m_col, info);
|
m_dbImpl->MacGetColumnInfo(info.m_itemId, info.m_col, info);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
info.SetText( OnGetItemText(info.m_itemId, info.m_col) );
|
if (info.m_itemId >= 0 && info.m_itemId < GetItemCount())
|
||||||
info.SetImage( OnGetItemColumnImage(info.m_itemId, info.m_col) );
|
|
||||||
if (info.GetMask() & wxLIST_MASK_STATE)
|
|
||||||
{
|
{
|
||||||
if (IsDataBrowserItemSelected( m_dbImpl->GetControlRef(), info.m_itemId+1 ))
|
info.SetText( OnGetItemText(info.m_itemId, info.m_col) );
|
||||||
info.SetState(info.GetState() | wxLIST_STATE_SELECTED);
|
info.SetImage( OnGetItemColumnImage(info.m_itemId, info.m_col) );
|
||||||
}
|
if (info.GetMask() & wxLIST_MASK_STATE)
|
||||||
|
{
|
||||||
|
if (IsDataBrowserItemSelected( m_dbImpl->GetControlRef(), info.m_itemId+1 ))
|
||||||
|
info.SetState(info.GetState() | wxLIST_STATE_SELECTED);
|
||||||
|
}
|
||||||
|
|
||||||
wxListItemAttr* attrs = OnGetItemAttr( info.m_itemId );
|
wxListItemAttr* attrs = OnGetItemAttr( info.m_itemId );
|
||||||
if (attrs)
|
if (attrs)
|
||||||
{
|
{
|
||||||
info.SetFont( attrs->GetFont() );
|
info.SetFont( attrs->GetFont() );
|
||||||
info.SetBackgroundColour( attrs->GetBackgroundColour() );
|
info.SetBackgroundColour( attrs->GetBackgroundColour() );
|
||||||
info.SetTextColour( attrs->GetTextColour() );
|
info.SetTextColour( attrs->GetTextColour() );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2583,17 +2586,21 @@ void wxMacDataBrowserListCtrlControl::DrawItem(
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
text = list->OnGetItemText( (long)itemID-1, listColumn );
|
long itemNum = (long)itemID-1;
|
||||||
imgIndex = list->OnGetItemColumnImage( (long)itemID-1, listColumn );
|
if (itemNum >= 0 && itemNum < list->GetItemCount())
|
||||||
wxListItemAttr* attrs = list->OnGetItemAttr( (long)itemID-1 );
|
|
||||||
if (attrs)
|
|
||||||
{
|
{
|
||||||
if (attrs->HasBackgroundColour())
|
text = list->OnGetItemText( itemNum, listColumn );
|
||||||
bgColor = attrs->GetBackgroundColour();
|
imgIndex = list->OnGetItemColumnImage( itemNum, listColumn );
|
||||||
if (attrs->HasTextColour())
|
wxListItemAttr* attrs = list->OnGetItemAttr( itemNum );
|
||||||
color = attrs->GetTextColour();
|
if (attrs)
|
||||||
if (attrs->HasFont())
|
{
|
||||||
font = attrs->GetFont();
|
if (attrs->HasBackgroundColour())
|
||||||
|
bgColor = attrs->GetBackgroundColour();
|
||||||
|
if (attrs->HasTextColour())
|
||||||
|
color = attrs->GetTextColour();
|
||||||
|
if (attrs->HasFont())
|
||||||
|
font = attrs->GetFont();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2788,8 +2795,12 @@ OSStatus wxMacDataBrowserListCtrlControl::GetSetItemData(DataBrowserItemID itemI
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
text = list->OnGetItemText( (long)itemID-1, listColumn );
|
long itemNum = (long)itemID-1;
|
||||||
imgIndex = list->OnGetItemColumnImage( (long)itemID-1, listColumn );
|
if (itemNum >= 0 && itemNum < list->GetItemCount())
|
||||||
|
{
|
||||||
|
text = list->OnGetItemText( itemNum, listColumn );
|
||||||
|
imgIndex = list->OnGetItemColumnImage( itemNum, listColumn );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3000,9 +3011,7 @@ Boolean wxMacDataBrowserListCtrlControl::CompareItems(DataBrowserItemID itemOneI
|
|||||||
|
|
||||||
long itemNum = (long)itemOneID;
|
long itemNum = (long)itemOneID;
|
||||||
long otherItemNum = (long)itemTwoID;
|
long otherItemNum = (long)itemTwoID;
|
||||||
itemText = list->OnGetItemText( itemNum-1, colId );
|
|
||||||
otherItemText = list->OnGetItemText( otherItemNum-1, colId );
|
|
||||||
|
|
||||||
// virtual listctrls don't support sorting
|
// virtual listctrls don't support sorting
|
||||||
return itemNum < otherItemNum;
|
return itemNum < otherItemNum;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user