/* const */ LV_ITEM& lvItem);
// convert our wxListItem to LV_COLUMN
-static void wxConvertToMSWListCol(int col, const wxListItem& item,
+static void wxConvertToMSWListCol(HWND hwndList,
+ int col,
+ const wxListItem& item,
LV_COLUMN& lvCol);
// ----------------------------------------------------------------------------
bool wxListCtrl::SetColumn(int col, const wxListItem& item)
{
LV_COLUMN lvCol;
- wxConvertToMSWListCol(col, item, lvCol);
+ wxConvertToMSWListCol(GetHwnd(), col, item, lvCol);
return ListView_SetColumn(GetHwnd(), col, &lvCol) != 0;
}
}
// End label editing, optionally cancelling the edit
-bool wxListCtrl::EndEditLabel(bool WXUNUSED(cancel))
+bool wxListCtrl::EndEditLabel(bool cancel)
{
- wxFAIL_MSG( _T("not implemented") );
-
- return false;
+ // m_textCtrl is not always ready, ie. in EVT_LIST_BEGIN_LABEL_EDIT
+ HWND hwnd = ListView_GetEditControl(GetHwnd());
+ bool b = (hwnd != NULL);
+ if (b)
+ {
+ if (cancel)
+ ::SetWindowText(hwnd, wxEmptyString); // dubious but better than nothing
+ if (m_textCtrl)
+ {
+ m_textCtrl->UnsubclassWin();
+ m_textCtrl->SetHWND(0);
+ delete m_textCtrl;
+ m_textCtrl = NULL;
+ }
+ ::DestroyWindow(hwnd);
+ }
+ return b;
}
// Ensures this item is visible
long wxListCtrl::InsertColumn(long col, const wxListItem& item)
{
LV_COLUMN lvCol;
- wxConvertToMSWListCol(col, item, lvCol);
+ wxConvertToMSWListCol(GetHwnd(), col, item, lvCol);
if ( !(lvCol.mask & LVCF_WIDTH) )
{
lvItem.mask |= LVIF_IMAGE;
}
-static void wxConvertToMSWListCol(int WXUNUSED(col), const wxListItem& item,
+static void wxConvertToMSWListCol(HWND hwndList,
+ int col,
+ const wxListItem& item,
LV_COLUMN& lvCol)
{
wxZeroMemory(lvCol);
{
if ( wxTheApp->GetComCtl32Version() >= 470 )
{
- lvCol.mask |= LVCF_IMAGE | LVCF_FMT;
+ lvCol.mask |= LVCF_IMAGE;
- // we use LVCFMT_BITMAP_ON_RIGHT because thei mages on the right
+ // we use LVCFMT_BITMAP_ON_RIGHT because the images on the right
// seem to be generally nicer than on the left and the generic
// version only draws them on the right (we don't have a flag to
// specify the image location anyhow)
// we don't use LVCFMT_COL_HAS_IMAGES because it doesn't seem to
// make any difference in my tests -- but maybe we should?
if ( item.m_image != -1 )
+ {
+ // as we're going to overwrite the format field, get its
+ // current value first -- unless we want to overwrite it anyhow
+ if ( !(lvCol.mask & LVCF_FMT) )
+ {
+ LV_COLUMN lvColOld;
+ wxZeroMemory(lvColOld);
+ lvColOld.mask = LVCF_FMT;
+ if ( ListView_GetColumn(hwndList, col, &lvColOld) )
+ {
+ lvCol.fmt = lvColOld.fmt;
+ }
+
+ lvCol.mask |= LVCF_FMT;
+ }
+
lvCol.fmt |= LVCFMT_BITMAP_ON_RIGHT | LVCFMT_IMAGE;
+ }
lvCol.iImage = item.m_image;
}