]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/listctrl.cpp
use wxDiskspaceSize_t which is long and not wxLongLong if wxUSE_LONGLONG==0 (part...
[wxWidgets.git] / src / msw / listctrl.cpp
index 6b9ef732a65bc86486e6abb9ecb3effffaa112b8..9efd6f226b6fea96546d9d10df74db2ad30dbe9c 100644 (file)
@@ -78,7 +78,9 @@ static void wxConvertFromMSWListItem(HWND hwndListCtrl,
                                      /* 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);
 
 // ----------------------------------------------------------------------------
@@ -666,7 +668,7 @@ bool wxListCtrl::GetColumn(int col, wxListItem& item) const
 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;
 }
@@ -1370,11 +1372,25 @@ wxTextCtrl* wxListCtrl::EditLabel(long item, wxClassInfo* textControlClass)
 }
 
 // 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
@@ -1569,7 +1585,7 @@ long wxListCtrl::InsertItem(long index, const wxString& label, int imageIndex)
 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) )
     {
@@ -2796,7 +2812,9 @@ static void wxConvertToMSWListItem(const wxListCtrl *ctrl,
         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);
@@ -2836,9 +2854,9 @@ static void wxConvertToMSWListCol(int WXUNUSED(col), const wxListItem& item,
     {
         if ( wxTheApp->GetComCtl32Version() >= 470 )
         {
-            lvCol.mask |= LVCF_IMAGE | LVCF_FMT;
+            lvCol.mask |= LVCF_IMAGE;
 
-            // we use LVCFMT_BITMAP_ON_RIGHT because themages 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)
@@ -2846,7 +2864,24 @@ static void wxConvertToMSWListCol(int WXUNUSED(col), const wxListItem& item,
             // 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;
         }