]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/listctrl.cpp
Got generic wxListCtrl, wxTreeCtrl working under Windows, wxNotebook almost;
[wxWidgets.git] / src / msw / listctrl.cpp
index 266ebb1853fe35ddc21af3033b442ee1a5b904f6..ef8ee7abc9c3f647f04158de9a5b34362d2f4017 100644 (file)
@@ -97,11 +97,10 @@ bool wxListCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, con
 
   // Even with extended styles, need to combine with WS_BORDER
   // for them to look right.
-  if (want3D || (m_windowStyle & wxSIMPLE_BORDER) || (m_windowStyle & wxRAISED_BORDER) ||
-       (m_windowStyle & wxSUNKEN_BORDER) || (m_windowStyle & wxDOUBLE_BORDER))
+  if ( want3D || wxStyleHasBorder(m_windowStyle) )
     wstyle |= WS_BORDER;
 
-  wstyle |= LVS_SHAREIMAGELISTS;
+  wstyle |= LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS   ;
   m_baseStyle = wstyle;
 
   long oldStyle = 0; // Dummy
@@ -126,7 +125,7 @@ bool wxListCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, con
 
   wxSystemSettings settings;
   SetBackgroundColour(settings.GetSystemColour(wxSYS_COLOUR_WINDOW));
-  SetForegroundColour(parent->GetDefaultForegroundColour());
+  SetForegroundColour(parent->GetForegroundColour());
 
   if (parent) parent->AddChild(this);
   
@@ -464,7 +463,11 @@ wxTextCtrl* wxListCtrl::GetEditControl(void) const
 bool wxListCtrl::GetItem(wxListItem& info) const
 {
   LV_ITEM lvItem;
+#ifdef __MINGW32__
+  memset(&lvItem, 0, sizeof(lvItem));
+#else
   ZeroMemory(&lvItem, sizeof(lvItem)); // must set all fields to 0
+#endif
 
   lvItem.iItem = info.m_itemId;
 
@@ -479,6 +482,9 @@ bool wxListCtrl::GetItem(wxListItem& info) const
     lvItem.pszText = NULL;
   }
 
+  if (info.m_mask & wxLIST_MASK_DATA)
+     lvItem.mask |= LVIF_PARAM ;
+
   if ( info.m_mask & wxLIST_MASK_STATE )
   {
     lvItem.mask |= LVIF_STATE;
@@ -619,7 +625,7 @@ bool wxListCtrl::SetItemData(long item, long data)
 }
 
 // Gets the item rectangle
-bool wxListCtrl::GetItemRect(long item, wxRectangle& rect, int code) const
+bool wxListCtrl::GetItemRect(long item, wxRect& rect, int code) const
 {
   RECT rect2;
 
@@ -1108,22 +1114,31 @@ bool wxListCtrl::MSWCommand(WXUINT cmd, WXWORD id)
   else return FALSE;
 }
 
-bool wxListCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam)
+bool wxListCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam, WXLPARAM *result)
 {
   wxListEvent event(wxEVT_NULL, m_windowId);
   wxEventType eventType = wxEVT_NULL;
   NMHDR *hdr1 = (NMHDR *) lParam;
   switch ( hdr1->code )
   {
+    case LVN_BEGINRDRAG:
+        eventType = wxEVT_COMMAND_LIST_BEGIN_RDRAG;
+        // fall through
+
     case LVN_BEGINDRAG:
-    {
-      eventType = wxEVT_COMMAND_LIST_BEGIN_DRAG;
-      NM_LISTVIEW *hdr = (NM_LISTVIEW *)lParam;
-      event.m_itemIndex = hdr->iItem;
-      event.m_pointDrag.x = hdr->ptAction.x;
-      event.m_pointDrag.y = hdr->ptAction.y;
-      break;
-    }
+        if ( eventType == wxEVT_NULL )
+        {
+            eventType = wxEVT_COMMAND_LIST_BEGIN_DRAG;
+        }
+
+        {
+          NM_LISTVIEW *hdr = (NM_LISTVIEW *)lParam;
+          event.m_itemIndex = hdr->iItem;
+          event.m_pointDrag.x = hdr->ptAction.x;
+          event.m_pointDrag.y = hdr->ptAction.y;
+        }
+        break;
+
     case LVN_BEGINLABELEDIT:
     {
       eventType = wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT;
@@ -1131,15 +1146,7 @@ bool wxListCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam)
       wxConvertFromMSWListItem(this, event.m_item, info->item, (HWND) GetHWND());
       break;
     }
-    case LVN_BEGINRDRAG:
-    {
-      eventType = wxEVT_COMMAND_LIST_BEGIN_RDRAG;
-      NM_LISTVIEW* hdr = (NM_LISTVIEW*)lParam;
-      event.m_itemIndex = hdr->iItem;
-      event.m_pointDrag.x = hdr->ptAction.x;
-      event.m_pointDrag.y = hdr->ptAction.y;
-      break;
-    }
+
     case LVN_COLUMNCLICK:
     {
       eventType = wxEVT_COMMAND_LIST_COL_CLICK;
@@ -1225,8 +1232,7 @@ bool wxListCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam)
     }
 
     default :
-      return wxControl::MSWNotify(wParam, lParam);
-      break;
+      return wxControl::MSWNotify(wParam, lParam, result);
   }
 
   event.SetEventObject( this );
@@ -1249,7 +1255,9 @@ bool wxListCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam)
 //    wxConvertToMSWListItem(this, event.m_item, info->item);
   }
 
-    return TRUE;
+  *result = !event.IsAllowed();
+
+  return TRUE;
 }
 
 char *wxListCtrl::AddPool(const wxString& str)
@@ -1425,10 +1433,10 @@ static void wxConvertToMSWListItem(const wxListCtrl *ctrl, wxListItem& info, LV_
 }
 
 // List event
-IMPLEMENT_DYNAMIC_CLASS(wxListEvent, wxCommandEvent)
+IMPLEMENT_DYNAMIC_CLASS(wxListEvent, wxNotifyEvent)
 
-wxListEvent::wxListEvent(wxEventType commandType, int id):
-  wxCommandEvent(commandType, id)
+wxListEvent::wxListEvent(wxEventType commandType, int id)
+           : wxNotifyEvent(commandType, id)
 {
   m_code = 0;
   m_itemIndex = 0;