bool wxListCtrl::GetItem(wxListItem& info) const
{
LV_ITEM lvItem;
-#ifdef __GNUWIN32__
- memset(&lvItem, 0, sizeof(lvItem));
-#else
- ZeroMemory(&lvItem, sizeof(lvItem)); // must set all fields to 0
-#endif
+ wxZeroMemory(lvItem);
lvItem.iItem = info.m_itemId;
lvItem.iSubItem = info.m_col;
switch ( hdr1->code )
{
case LVN_BEGINRDRAG:
- eventType = wxEVT_COMMAND_LIST_BEGIN_RDRAG;
+ eventType = wxEVT_COMMAND_LIST_BEGIN_RDRAG;
// fall through
-
+
case LVN_BEGINDRAG:
if ( eventType == wxEVT_NULL )
{
{
eventType = wxEVT_COMMAND_LIST_END_LABEL_EDIT;
LV_DISPINFO *info = (LV_DISPINFO *)lParam;
- wxConvertFromMSWListItem(this, event.m_item, info->item, GetHwnd());
+ wxConvertFromMSWListItem(this, event.m_item, info->item);
if ( info->item.pszText == NULL || info->item.iItem == -1 )
- event.m_cancelled = TRUE;
+ return FALSE;
break;
}
case LVN_GETDISPINFO:
}
// else translate it into wxEVT_COMMAND_LIST_ITEM_ACTIVATED event
- eventType = wxEVT_COMMAND_LIST_ITEM_ACTIVATED;
+ {
+ eventType = wxEVT_COMMAND_LIST_ITEM_ACTIVATED;
+ NM_LISTVIEW* hdr = (NM_LISTVIEW*)lParam;
+ event.m_itemIndex = hdr->iItem;
+ }
break;
-
- case NM_RCLICK:
- /* TECH NOTE: NM_RCLICK isn't really good enough here. We want to
- subclass and check for the actual WM_RBUTTONDOWN message, because
- NM_RCLICK waits for the WM_RBUTTONUP message as well before firing off.
- We want to have notify events for both down -and- up. */
- {
- // if the user processes it in wxEVT_COMMAND_RIGHT_CLICK(), don't do
- // anything else
- if ( wxControl::MSWOnNotify(idCtrl, lParam, result) ) {
- return TRUE;
- }
-
- // else translate it into wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK event
- LV_HITTESTINFO lvhti;
-#ifdef __GNUWIN32__
- memset(&lvhti,0,sizeof(LV_HITTESTINFO));
-#else
- ZeroMemory(&lvhti, sizeof(LV_HITTESTINFO)); // must set all fields to 0
+
+ case NM_RCLICK:
+ /* TECH NOTE: NM_RCLICK isn't really good enough here. We want to
+ subclass and check for the actual WM_RBUTTONDOWN message, because
+ NM_RCLICK waits for the WM_RBUTTONUP message as well before firing off.
+ We want to have notify events for both down -and- up. */
+ {
+ // if the user processes it in wxEVT_COMMAND_RIGHT_CLICK(), don't do
+ // anything else
+ if ( wxControl::MSWOnNotify(idCtrl, lParam, result) ) {
+ return TRUE;
+ }
+
+ // else translate it into wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK event
+ LV_HITTESTINFO lvhti;
+ wxZeroMemory(lvhti);
+
+ ::GetCursorPos(&(lvhti.pt));
+ ::ScreenToClient(GetHwnd(),&(lvhti.pt));
+ if ( ListView_HitTest(GetHwnd(),&lvhti) != -1 )
+ {
+ // older headers don't have this symbol
+#ifndef LVHT_ONITEM
+ #define LVHT_ONITEM \
+ (LVHT_ONITEMICON | LVHT_ONITEMLABEL | LVHT_ONITEMSTATEICON)
#endif
- ::GetCursorPos(&(lvhti.pt));
- ::ScreenToClient(GetHwnd(),&(lvhti.pt));
- if(ListView_HitTest(GetHwnd(),&lvhti)!=-1) {
- if(lvhti.flags & LVHT_ONITEM) {
- eventType = wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK;
- event.m_itemIndex = lvhti.iItem;
- }
+ if ( lvhti.flags & LVHT_ONITEM )
+ {
+ eventType = wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK;
+ event.m_itemIndex = lvhti.iItem;
+ }
}
- }
- break;
-
- /*
- case NM_MCLICK: // ***** THERE IS NO NM_MCLICK. Subclass anyone? ******
- {
- // if the user processes it in wxEVT_COMMAND_MIDDLE_CLICK(), don't do
- // anything else
- if ( wxControl::MSWOnNotify(idCtrl, lParam, result) )
- {
- return TRUE;
- }
-
- // else translate it into wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK event
- eventType = wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK;
- NMITEMACTIVATE* hdr = (NMITEMACTIVATE*)lParam;
- event.m_itemIndex = hdr->iItem;
- }
- break;
- */
-
+ }
+ break;
+
+ /*
+ case NM_MCLICK: // ***** THERE IS NO NM_MCLICK. Subclass anyone? ******
+ {
+ // if the user processes it in wxEVT_COMMAND_MIDDLE_CLICK(), don't do
+ // anything else
+ if ( wxControl::MSWOnNotify(idCtrl, lParam, result) )
+ {
+ return TRUE;
+ }
+
+ // else translate it into wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK event
+ eventType = wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK;
+ NMITEMACTIVATE* hdr = (NMITEMACTIVATE*)lParam;
+ event.m_itemIndex = hdr->iItem;
+ }
+ break;
+ */
+
case LVN_SETDISPINFO:
{
eventType = wxEVT_COMMAND_LIST_SET_INFO;
if ( !GetEventHandler()->ProcessEvent(event) )
return FALSE;
- if ( (int)hdr1->code == LVN_GETDISPINFO)
+ switch ((int)hdr1->code)
{
- LV_DISPINFO *info = (LV_DISPINFO *)lParam;
- if ( info->item.mask & LVIF_TEXT )
- {
- if ( !event.m_item.m_text.IsNull() )
+ case LVN_GETDISPINFO:
+ {
+ LV_DISPINFO *info = (LV_DISPINFO *)lParam;
+ if ( info->item.mask & LVIF_TEXT )
+ {
+ if ( !event.m_item.m_text.IsNull() )
+ {
+ info->item.pszText = AddPool(event.m_item.m_text);
+ info->item.cchTextMax = wxStrlen(info->item.pszText) + 1;
+ }
+ }
+ // wxConvertToMSWListItem(this, event.m_item, info->item);
+ break;
+ }
+ case LVN_ENDLABELEDIT:
{
- info->item.pszText = AddPool(event.m_item.m_text);
- info->item.cchTextMax = wxStrlen(info->item.pszText) + 1;
+ *result = event.IsAllowed();
+ return TRUE;
}
- }
- // wxConvertToMSWListItem(this, event.m_item, info->item);
+ default:
+ break;
}
*result = !event.IsAllowed();