]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/listbox.cpp
fixed TREE_ITEM_MENU generation from right mouse clicks: don't pass WM_RBUTTONDOWN...
[wxWidgets.git] / src / msw / listbox.cpp
index b3037577bcb79b00323587bf9bfec87f66f7511e..1b5d0e4819c49ac705bdea53ab17a5eba9e08d50 100644 (file)
@@ -127,7 +127,7 @@ public:
     wxListBoxItem(const wxString& str = wxEmptyString);
 };
 
     wxListBoxItem(const wxString& str = wxEmptyString);
 };
 
-wxListBoxItem::wxListBoxItem(const wxString& str) : wxOwnerDrawn(str, FALSE)
+wxListBoxItem::wxListBoxItem(const wxString& str) : wxOwnerDrawn(str, false)
 {
     // no bitmaps/checkmarks
     SetMarginWidth(0);
 {
     // no bitmaps/checkmarks
     SetMarginWidth(0);
@@ -287,6 +287,8 @@ void wxListBox::Delete(int N)
 
 int wxListBox::DoAppend(const wxString& item)
 {
 
 int wxListBox::DoAppend(const wxString& item)
 {
+    InvalidateBestSize();
+
     int index = ListBox_AddString(GetHwnd(), item);
     m_noItems++;
 
     int index = ListBox_AddString(GetHwnd(), item);
     m_noItems++;
 
@@ -388,7 +390,7 @@ void wxListBox::Free()
     }
 }
 
     }
 }
 
-void wxListBox::SetSelection(int N, bool select)
+void wxListBox::DoSetSelection(int N, bool select)
 {
     wxCHECK_RET( N == wxNOT_FOUND ||
                     (N >= 0 && N < m_noItems),
 {
     wxCHECK_RET( N == wxNOT_FOUND ||
                     (N >= 0 && N < m_noItems),
@@ -406,10 +408,10 @@ void wxListBox::SetSelection(int N, bool select)
 
 bool wxListBox::IsSelected(int N) const
 {
 
 bool wxListBox::IsSelected(int N) const
 {
-    wxCHECK_MSG( N >= 0 && N < m_noItems, FALSE,
+    wxCHECK_MSG( N >= 0 && N < m_noItems, false,
                  wxT("invalid index in wxListBox::Selected") );
 
                  wxT("invalid index in wxListBox::Selected") );
 
-    return SendMessage(GetHwnd(), LB_GETSEL, N, 0) == 0 ? FALSE : TRUE;
+    return SendMessage(GetHwnd(), LB_GETSEL, N, 0) == 0 ? false : true;
 }
 
 wxClientData* wxListBox::DoGetItemClientObject(int n) const
 }
 
 wxClientData* wxListBox::DoGetItemClientObject(int n) const
@@ -505,13 +507,13 @@ int wxListBox::GetSelection() const
 wxString wxListBox::GetString(int N) const
 {
     wxCHECK_MSG( N >= 0 && N < m_noItems, wxEmptyString,
 wxString wxListBox::GetString(int N) const
 {
     wxCHECK_MSG( N >= 0 && N < m_noItems, wxEmptyString,
-                 wxT("invalid index in wxListBox::GetClientData") );
+                 wxT("invalid index in wxListBox::GetString") );
 
     int len = ListBox_GetTextLen(GetHwnd(), N);
 
     // +1 for terminating NUL
     wxString result;
 
     int len = ListBox_GetTextLen(GetHwnd(), N);
 
     // +1 for terminating NUL
     wxString result;
-    ListBox_GetText(GetHwnd(), N, wxStringBuffer(result, len + 1));
+    ListBox_GetText(GetHwnd(), N, (wxChar*)wxStringBuffer(result, len + 1));
 
     return result;
 }
 
     return result;
 }
@@ -522,6 +524,8 @@ wxListBox::DoInsertItems(const wxArrayString& items, int pos)
     wxCHECK_RET( pos >= 0 && pos <= m_noItems,
                  wxT("invalid index in wxListBox::InsertItems") );
 
     wxCHECK_RET( pos >= 0 && pos <= m_noItems,
                  wxT("invalid index in wxListBox::InsertItems") );
 
+    InvalidateBestSize();
+
     int nItems = items.GetCount();
     for ( int i = 0; i < nItems; i++ )
     {
     int nItems = items.GetCount();
     for ( int i = 0; i < nItems; i++ )
     {
@@ -612,12 +616,12 @@ void wxListBox::SetHorizontalExtent(const wxString& s)
         return;
     TEXTMETRIC lpTextMetric;
 
         return;
     TEXTMETRIC lpTextMetric;
 
-    if ( !s.IsEmpty() )
+    if ( !s.empty() )
     {
         int existingExtent = (int)SendMessage(GetHwnd(), LB_GETHORIZONTALEXTENT, 0, 0L);
         HDC dc = GetWindowDC(GetHwnd());
         HFONT oldFont = 0;
     {
         int existingExtent = (int)SendMessage(GetHwnd(), LB_GETHORIZONTALEXTENT, 0, 0L);
         HDC dc = GetWindowDC(GetHwnd());
         HFONT oldFont = 0;
-        if (GetFont().Ok() && GetFont().GetResourceHandle())
+        if (GetFont().Ok() && GetFont().GetResourceHandle() != 0)
             oldFont = (HFONT) ::SelectObject(dc, (HFONT) GetFont().GetResourceHandle());
 
         GetTextMetrics(dc, &lpTextMetric);
             oldFont = (HFONT) ::SelectObject(dc, (HFONT) GetFont().GetResourceHandle());
 
         GetTextMetrics(dc, &lpTextMetric);
@@ -637,19 +641,16 @@ void wxListBox::SetHorizontalExtent(const wxString& s)
         int largestExtent = 0;
         HDC dc = GetWindowDC(GetHwnd());
         HFONT oldFont = 0;
         int largestExtent = 0;
         HDC dc = GetWindowDC(GetHwnd());
         HFONT oldFont = 0;
-        if (GetFont().Ok() && GetFont().GetResourceHandle())
+        if (GetFont().Ok() && GetFont().GetResourceHandle() != 0)
             oldFont = (HFONT) ::SelectObject(dc, (HFONT) GetFont().GetResourceHandle());
 
         GetTextMetrics(dc, &lpTextMetric);
 
             oldFont = (HFONT) ::SelectObject(dc, (HFONT) GetFont().GetResourceHandle());
 
         GetTextMetrics(dc, &lpTextMetric);
 
-        // FIXME: buffer overflow!!
-        wxChar buf[1024];
         for (int i = 0; i < m_noItems; i++)
         {
         for (int i = 0; i < m_noItems; i++)
         {
-            int len = (int)SendMessage(GetHwnd(), LB_GETTEXT, i, (LPARAM)buf);
-            buf[len] = 0;
+            wxString str = GetString(i);
             SIZE extentXY;
             SIZE extentXY;
-            ::GetTextExtentPoint(dc, buf, len, &extentXY);
+            ::GetTextExtentPoint(dc, str.c_str(), str.length(), &extentXY);
             int extentX = (int)(extentXY.cx + lpTextMetric.tmAveCharWidth);
             if (extentX > largestExtent)
                 largestExtent = extentX;
             int extentX = (int)(extentXY.cx + lpTextMetric.tmAveCharWidth);
             if (extentX > largestExtent)
                 largestExtent = extentX;
@@ -712,7 +713,7 @@ bool wxListBox::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
     else
     {
         // some event we're not interested in
     else
     {
         // some event we're not interested in
-        return FALSE;
+        return false;
     }
 
     wxCommandEvent event(evtType, m_windowId);
     }
 
     wxCommandEvent event(evtType, m_windowId);
@@ -728,10 +729,10 @@ bool wxListBox::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
             event.SetClientData( GetClientData(n) );
 
         event.SetString( GetString(n) );
             event.SetClientData( GetClientData(n) );
 
         event.SetString( GetString(n) );
-        event.SetExtraLong( HasMultipleSelection() ? IsSelected(n) : TRUE );
+        event.SetExtraLong( HasMultipleSelection() ? IsSelected(n) : true );
     }
 
     }
 
-    event.m_commandInt = n;
+    event.SetInt(n);
 
     return GetEventHandler()->ProcessEvent(event);
 }
 
     return GetEventHandler()->ProcessEvent(event);
 }
@@ -757,7 +758,7 @@ bool wxListBox::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
 bool wxListBox::MSWOnMeasure(WXMEASUREITEMSTRUCT *item)
 {
     // only owner-drawn control should receive this message
 bool wxListBox::MSWOnMeasure(WXMEASUREITEMSTRUCT *item)
 {
     // only owner-drawn control should receive this message
-    wxCHECK( ((m_windowStyle & wxLB_OWNERDRAW) == wxLB_OWNERDRAW), FALSE );
+    wxCHECK( ((m_windowStyle & wxLB_OWNERDRAW) == wxLB_OWNERDRAW), false );
 
     MEASUREITEMSTRUCT *pStruct = (MEASUREITEMSTRUCT *)item;
 
 
     MEASUREITEMSTRUCT *pStruct = (MEASUREITEMSTRUCT *)item;
 
@@ -769,7 +770,7 @@ bool wxListBox::MSWOnMeasure(WXMEASUREITEMSTRUCT *item)
 
     wxDC dc;
     dc.SetHDC((WXHDC)hdc);
 
     wxDC dc;
     dc.SetHDC((WXHDC)hdc);
-    dc.SetFont(wxSystemSettings::GetFont(wxSYS_ANSI_VAR_FONT));
+    dc.SetFont(GetFont());
 
     pStruct->itemHeight = dc.GetCharHeight() + 2*OWNER_DRAWN_LISTBOX_EXTRA_SPACE;
     pStruct->itemWidth  = dc.GetCharWidth();
 
     pStruct->itemHeight = dc.GetCharHeight() + 2*OWNER_DRAWN_LISTBOX_EXTRA_SPACE;
     pStruct->itemWidth  = dc.GetCharWidth();
@@ -778,31 +779,32 @@ bool wxListBox::MSWOnMeasure(WXMEASUREITEMSTRUCT *item)
 
     DeleteDC(hdc);
 
 
     DeleteDC(hdc);
 
-    return TRUE;
+    return true;
 }
 
 // forward the message to the appropriate item
 bool wxListBox::MSWOnDraw(WXDRAWITEMSTRUCT *item)
 {
     // only owner-drawn control should receive this message
 }
 
 // forward the message to the appropriate item
 bool wxListBox::MSWOnDraw(WXDRAWITEMSTRUCT *item)
 {
     // only owner-drawn control should receive this message
-    wxCHECK( ((m_windowStyle & wxLB_OWNERDRAW) == wxLB_OWNERDRAW), FALSE );
+    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 )
 
     DRAWITEMSTRUCT *pStruct = (DRAWITEMSTRUCT *)item;
     UINT itemID = pStruct->itemID;
 
     // the item may be -1 for an empty listbox
     if ( itemID == (UINT)-1 )
-        return FALSE;
+        return false;
 
     long data = ListBox_GetItemData(GetHwnd(), pStruct->itemID);
 
 
     long data = ListBox_GetItemData(GetHwnd(), pStruct->itemID);
 
-    wxCHECK( data && (data != LB_ERR), FALSE );
+    wxCHECK( data && (data != LB_ERR), false );
 
     wxListBoxItem *pItem = (wxListBoxItem *)data;
 
     wxDCTemp dc((WXHDC)pStruct->hDC);
 
     wxListBoxItem *pItem = (wxListBoxItem *)data;
 
     wxDCTemp dc((WXHDC)pStruct->hDC);
-    wxRect rect(wxPoint(pStruct->rcItem.left, pStruct->rcItem.top),
-                wxPoint(pStruct->rcItem.right, pStruct->rcItem.bottom));
+    wxPoint pt1(pStruct->rcItem.left, pStruct->rcItem.top);
+    wxPoint pt2(pStruct->rcItem.right, pStruct->rcItem.bottom);
+    wxRect rect(pt1, pt2);
 
     return pItem->OnDrawItem(dc, rect,
                              (wxOwnerDrawn::wxODAction)pStruct->itemAction,
 
     return pItem->OnDrawItem(dc, rect,
                              (wxOwnerDrawn::wxODAction)pStruct->itemAction,