// init without conversion
void Init(LV_ITEM_NATIVE& item)
{
- wxASSERT_MSG( !m_pItem, _T("Init() called twice?") );
+ wxASSERT_MSG( !m_pItem, wxT("Init() called twice?") );
m_pItem = &item;
}
wxDECLARE_NO_COPY_CLASS(wxMSWListItemData);
};
-// Get the internal data structure
-static wxMSWListItemData *wxGetInternalData(HWND hwnd, long itemId);
-static wxMSWListItemData *wxGetInternalData(const wxListCtrl *ctl, long itemId);
-
-
#if wxUSE_EXTENDED_RTTI
WX_DEFINE_FLAGS( wxListCtrlStyle )
MAP_MODE_STYLE(wxLC_REPORT, LVS_REPORT)
wxASSERT_MSG( nModes == 1,
- _T("wxListCtrl style should have exactly one mode bit set") );
+ wxT("wxListCtrl style should have exactly one mode bit set") );
#undef MAP_MODE_STYLE
wstyle |= LVS_SORTASCENDING;
wxASSERT_MSG( !(style & wxLC_SORT_DESCENDING),
- _T("can't sort in ascending and descending orders at once") );
+ wxT("can't sort in ascending and descending orders at once") );
}
else if ( style & wxLC_SORT_DESCENDING )
wstyle |= LVS_SORTDESCENDING;
{
const int numCols = GetColumnCount();
wxCHECK_MSG( order >= 0 && order < numCols, -1,
- _T("Column position out of bounds") );
+ wxT("Column position out of bounds") );
wxArrayInt indexArray(numCols);
if ( !ListView_GetColumnOrderArray(GetHwnd(), numCols, &indexArray[0]) )
int wxListCtrl::GetColumnOrder(int col) const
{
const int numCols = GetColumnCount();
- wxASSERT_MSG( col >= 0 && col < numCols, _T("Column index out of bounds") );
+ wxASSERT_MSG( col >= 0 && col < numCols, wxT("Column index out of bounds") );
wxArrayInt indexArray(numCols);
if ( !ListView_GetColumnOrderArray(GetHwnd(), numCols, &indexArray[0]) )
return pos;
}
- wxFAIL_MSG( _T("no column with with given order?") );
+ wxFAIL_MSG( wxT("no column with with given order?") );
return -1;
}
const int numCols = GetColumnCount();
wxCHECK_MSG( orders.size() == (size_t)numCols, false,
- _T("wrong number of elements in column orders array") );
+ wxT("wrong number of elements in column orders array") );
return ListView_SetColumnOrderArray(GetHwnd(), numCols, &orders[0]) != 0;
}
{
const long id = info.GetId();
wxCHECK_MSG( id >= 0 && id < GetItemCount(), false,
- _T("invalid item index in SetItem") );
+ wxT("invalid item index in SetItem") );
LV_ITEM item;
wxConvertToMSWListItem(this, info, item);
{
if ( !ListView_SetItem(GetHwnd(), &item) )
{
- wxLogDebug(_T("ListView_SetItem() failed"));
+ wxLogDebug(wxT("ListView_SetItem() failed"));
return false;
}
if ( !::SendMessage(GetHwnd(), LVM_SETITEMSTATE,
(WPARAM)item, (LPARAM)&lvItem) )
{
- wxLogLastError(_T("ListView_SetItemState"));
+ wxLogLastError(wxT("ListView_SetItemState"));
return false;
}
RECT rc;
if ( !ListView_GetViewRect(GetHwnd(), &rc) )
{
- wxLogDebug(_T("ListView_GetViewRect() failed."));
+ wxLogDebug(wxT("ListView_GetViewRect() failed."));
wxZeroMemory(rc);
}
}
else
{
- wxFAIL_MSG( _T("not implemented in this mode") );
+ wxFAIL_MSG( wxT("not implemented in this mode") );
}
return rect;
// completely bogus in this case), so we check item validity ourselves
wxCHECK_MSG( subItem == wxLIST_GETSUBITEMRECT_WHOLEITEM ||
(subItem >= 0 && subItem < GetColumnCount()),
- false, _T("invalid sub item index") );
+ false, wxT("invalid sub item index") );
// use wxCHECK_MSG against "item" too, for coherency with the generic implementation:
wxCHECK_MSG( item >= 0 && item < GetItemCount(), false,
- _T("invalid item in GetSubItemRect") );
+ wxT("invalid item in GetSubItemRect") );
int codeWin;
if ( code == wxLIST_RECT_BOUNDS )
codeWin = LVIR_LABEL;
else
{
- wxFAIL_MSG( _T("incorrect code in GetItemRect() / GetSubItemRect()") );
+ wxFAIL_MSG( wxT("incorrect code in GetItemRect() / GetSubItemRect()") );
codeWin = LVIR_BOUNDS;
}
// there is no way to retrieve the first sub item bounding rectangle using
// wxGetListCtrlSubItemRect() as 0 means the whole item, so we need to
// truncate it at first column ourselves
- if ( subItem == 0 )
+ if ( subItem == 0 && code == wxLIST_RECT_BOUNDS )
rect.width = GetColumnWidth(0);
return true;
{
if ( !ListView_DeleteItem(GetHwnd(), (int) item) )
{
- wxLogLastError(_T("ListView_DeleteItem"));
+ wxLogLastError(wxT("ListView_DeleteItem"));
return false;
}
// -1 otherwise.
long wxListCtrl::InsertItem(const wxListItem& info)
{
- wxASSERT_MSG( !IsVirtual(), _T("can't be used with virtual controls") );
+ wxASSERT_MSG( !IsVirtual(), wxT("can't be used with virtual controls") );
LV_ITEM item;
wxConvertToMSWListItem(this, info, item);
}
}
- long rv = ListView_InsertItem(GetHwnd(), & item);
+ const long rv = ListView_InsertItem(GetHwnd(), & item);
+
+ // failing to insert the item is really unexpected
+ wxCHECK_MSG( rv != -1, rv, "failed to insert an item in wxListCtrl" );
m_count++;
wxASSERT_MSG( m_count == ListView_GetItemCount(GetHwnd()),
{
if ( !ListView_Scroll(GetHwnd(), dx, dy) )
{
- wxLogDebug(_T("ListView_Scroll(%d, %d) failed"), dx, dy);
+ wxLogDebug(wxT("ListView_Scroll(%d, %d) failed"), dx, dy);
return false;
}
wxInternalDataCompareFunc,
(WPARAM) &internalData) )
{
- wxLogDebug(_T("ListView_SortItems() failed"));
+ wxLogDebug(wxT("ListView_SortItems() failed"));
return false;
}
#endif //__WXWINCE__
if ( !::GetCursorPos(ptClick) )
{
- wxLogLastError(_T("GetCursorPos"));
+ wxLogLastError(wxT("GetCursorPos"));
}
// we need to use listctrl coordinates for the event point so this is what
POINT ptClickHeader = *ptClick;
if ( !::ScreenToClient(nmhdr->hwndFrom, &ptClickHeader) )
{
- wxLogLastError(_T("ScreenToClient(listctrl header)"));
+ wxLogLastError(wxT("ScreenToClient(listctrl header)"));
}
if ( !::ScreenToClient(::GetParent(nmhdr->hwndFrom), ptClick) )
{
- wxLogLastError(_T("ScreenToClient(listctrl)"));
+ wxLogLastError(wxT("ScreenToClient(listctrl)"));
}
const int colCount = Header_GetItemCount(nmhdr->hwndFrom);
wxZeroMemory(lvhti);
#if defined(__WXWINCE__) && !defined(__HANDHELDPC__) && _WIN32_WCE < 400
- if(nmhdr->code == GN_CONTEXTMENU) {
- lvhti.pt = ((NMRGINFO*)nmhdr)->ptAction;
- } else
+ if ( nmhdr->code == GN_CONTEXTMENU )
+ {
+ lvhti.pt = ((NMRGINFO*)nmhdr)->ptAction;
+ }
+ else
#endif //__WXWINCE__
- ::GetCursorPos(&(lvhti.pt));
- ::ScreenToClient(GetHwnd(),&(lvhti.pt));
- if ( ListView_HitTest(GetHwnd(),&lvhti) != -1 )
+ {
+ ::GetCursorPos(&(lvhti.pt));
+ }
+
+ ::ScreenToClient(GetHwnd(), &lvhti.pt);
+ if ( ListView_HitTest(GetHwnd(), &lvhti) != -1 )
{
if ( lvhti.flags & LVHT_ONITEM )
{
const int startPos = pFindInfo->iStart;
const int maxPos = GetItemCount();
wxCHECK_MSG( startPos <= maxPos, false,
- _T("bad starting position in LVN_ODFINDITEM") );
+ wxT("bad starting position in LVN_ODFINDITEM") );
int currentPos = startPos;
do
event.SetEventType(eventType);
+ // fill in the item before passing it to the event handler if we do have a
+ // valid item index and haven't filled it yet (e.g. for LVN_ITEMCHANGED)
+ if ( event.m_itemIndex != -1 && !event.m_item.GetMask() )
+ {
+ wxListItem& item = event.m_item;
+
+ item.SetId(event.m_itemIndex);
+ item.SetMask(wxLIST_MASK_TEXT | wxLIST_MASK_IMAGE | wxLIST_MASK_DATA);
+ GetItem(item);
+ }
+
bool processed = HandleWindowEvent(event);
// post processing
numCols,
&indexArray[0]) )
{
- wxFAIL_MSG( _T("invalid column index array in OnPaint()") );
+ wxFAIL_MSG( wxT("invalid column index array in OnPaint()") );
return;
}
{
// this is a pure virtual function, in fact - which is not really pure
// because the controls which are not virtual don't need to implement it
- wxFAIL_MSG( _T("wxListCtrl::OnGetItemText not supposed to be called") );
+ wxFAIL_MSG( wxT("wxListCtrl::OnGetItemText not supposed to be called") );
return wxEmptyString;
}
wxListItemAttr *wxListCtrl::OnGetItemAttr(long WXUNUSED_UNLESS_DEBUG(item)) const
{
wxASSERT_MSG( item >= 0 && item < GetItemCount(),
- _T("invalid item index in OnGetItemAttr()") );
+ wxT("invalid item index in OnGetItemAttr()") );
// no attributes by default
return NULL;
void wxListCtrl::SetItemCount(long count)
{
- wxASSERT_MSG( IsVirtual(), _T("this is for virtual controls only") );
+ wxASSERT_MSG( IsVirtual(), wxT("this is for virtual controls only") );
if ( !::SendMessage(GetHwnd(), LVM_SETITEMCOUNT, (WPARAM)count,
LVSICF_NOSCROLL | LVSICF_NOINVALIDATEALL) )
{
- wxLogLastError(_T("ListView_SetItemCount"));
+ wxLogLastError(wxT("ListView_SetItemCount"));
}
m_count = count;
wxASSERT_MSG( m_count == ListView_GetItemCount(GetHwnd()),