- Fixed infinite loop in wxThread::Wait() in console applications.
- Return the restored window size from GetSize() when window is minimized.
- wxCheckListBox now looks more native, especially under XP (Marcin Malich).
+- wxCheckListBox now also supports use of client data (Marcin Malich).
- Allow tooltips longer than 64 (up to 128) characters in wxTaskBarIcon
- Fix centering wxFileDialog and allow positioning it.
- Allow centering wxMessageDialog on its parent window (troelsk).
virtual wxOwnerDrawn* CreateItem(size_t n);
virtual long OS2OnMeasure(WXMEASUREITEMSTRUCT* pItem);
- virtual int DoInsertItems(const wxArrayStringsAdapter & items,
- unsigned int pos,
- void **clientData, wxClientDataType type);
-
//
// Pressing space or clicking the check box toggles the item
//
When using this class under Windows wxWidgets must be compiled with
wxUSE_OWNER_DRAWN set to 1.
- Only the new functions for this class are documented; see also wxListBox.
-
- Please note that wxCheckListBox uses client data in its implementation,
- and therefore this is not available to the application.
-
@beginEventTable{wxCommandEvent}
@event{EVT_CHECKLISTBOX(id, func)}
Process a wxEVT_COMMAND_CHECKLISTBOX_TOGGLED event, when an item in
wxCHECK_RET( IsValid(n),
wxT("invalid index in wxListBox::SetClientData") );
-#if wxUSE_OWNER_DRAWN
- if ( m_windowStyle & wxLB_OWNERDRAW )
- {
- // client data must be pointer to wxOwnerDrawn, otherwise we would crash
- // in OnMeasure/OnDraw.
- wxFAIL_MSG(wxT("Can't use client data with owner-drawn listboxes"));
- }
-#endif // wxUSE_OWNER_DRAWN
-
if ( ListBox_SetItemData(GetHwnd(), n, clientData) == LB_ERR )
wxLogDebug(wxT("LB_SETITEMDATA failed"));
}
pNewItem->SetName(items[i]);
pNewItem->SetFont(GetFont());
m_aItems.Insert(pNewItem, n);
-
- ListBox_SetItemData(GetHwnd(), n, pNewItem);
}
#endif // wxUSE_OWNER_DRAWN
AssignNewItemClientData(n, clientData, i, type);
{
// update item's text
m_aItems[n]->SetName(s);
-
- // reassign the item's data
- ListBox_SetItemData(GetHwnd(), n, m_aItems[n]);
}
#endif //USE_OWNER_DRAWN
wxCHECK( ((m_windowStyle & wxLB_OWNERDRAW) == wxLB_OWNERDRAW), false );
DRAWITEMSTRUCT *pStruct = (DRAWITEMSTRUCT *)item;
- UINT itemID = pStruct->itemID;
// the item may be -1 for an empty listbox
- if ( itemID == (UINT)-1 )
+ if ( pStruct->itemID == (UINT)-1 )
return false;
- LRESULT data = ListBox_GetItemData(GetHwnd(), pStruct->itemID);
-
- wxCHECK( data && (data != LB_ERR), false );
-
- wxListBoxItem *pItem = (wxListBoxItem *)data;
+ wxListBoxItem *pItem = (wxListBoxItem *)m_aItems[pStruct->itemID];
wxDCTemp dc((WXHDC)pStruct->hDC);
wxPoint pt1(pStruct->rcItem.left, pStruct->rcItem.top);
m_aItems.RemoveAt(n);
} // end of wxCheckListBox::Delete
-int wxCheckListBox::DoInsertItems(const wxArrayStringsAdapter& items,
- unsigned int pos,
- void **clientData,
- wxClientDataType type)
-{
- // pos is validated in wxListBox
- int result = wxListBox::DoInsertItems( items, pos, clientData, type );
- unsigned int n = items.GetCount();
- for (unsigned int i = 0; i < n; i++)
- {
- wxOwnerDrawn* pNewItem = CreateItem((size_t)(pos + i));
-
- pNewItem->SetName(items[i]);
- m_aItems.Insert(pNewItem, (size_t)(pos + i));
- ::WinSendMsg( (HWND)GetHWND(),
- LM_SETITEMHANDLE,
- (MPARAM)(i + pos),
- MPFROMP(pNewItem)
- );
- }
- return result;
-} // end of wxCheckListBox::DoInsertItems
-
bool wxCheckListBox::SetFont ( const wxFont& rFont )
{
for (unsigned int i = 0; i < m_aItems.GetCount(); i++)
pNewItem->SetName(items[i]);
m_aItems.Insert(pNewItem, n);
- ::WinSendMsg(GetHwnd(), LM_SETITEMHANDLE, (MPARAM)n, MPFROMP(pNewItem));
pNewItem->SetFont(GetFont());
}
#endif
wxCHECK_RET( IsValid(n),
wxT("invalid index in wxListBox::SetClientData") );
-#if wxUSE_OWNER_DRAWN
- if ( m_windowStyle & wxLB_OWNERDRAW )
- {
- //
- // Client data must be pointer to wxOwnerDrawn, otherwise we would crash
- // in OnMeasure/OnDraw.
- //
- wxFAIL_MSG(wxT("Can't use client data with owner-drawn listboxes"));
- }
-#endif // wxUSE_OWNER_DRAWN
-
::WinSendMsg(GetHwnd(), LM_SETITEMHANDLE, MPFROMLONG(n), MPFROMP(pClientData));
} // end of wxListBox::DoSetItemClientData
)
{
POWNERITEM pDrawStruct = (POWNERITEM)pItem;
- LONG lItemID = pDrawStruct->idItem;
int eAction = 0;
int eStatus = 0;
//
// The item may be -1 for an empty listbox
//
- if (lItemID == -1L)
+ if (pDrawStruct->idItem == -1L)
return false;
- wxListBoxItem* pData = (wxListBoxItem*)PVOIDFROMMR( ::WinSendMsg( GetHwnd()
- ,LM_QUERYITEMHANDLE
- ,MPFROMLONG(pDrawStruct->idItem)
- ,(MPARAM)0
- )
- );
-
- wxCHECK(pData, false );
+ wxListBoxItem* pData = (wxListBoxItem*)m_aItems[pDrawStruct->idItem];
wxClientDC vDc(this);
wxPMDCImpl *impl = (wxPMDCImpl*) vDc.GetImpl();