]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/vlbox.cpp
minimal changes needed to allow linking wxCocoa as shared lib
[wxWidgets.git] / src / generic / vlbox.cpp
index 86501ead577034d4827e9063200a250793c4b7ef..50a484eec634cdf492f1f82398b548874161bc32 100644 (file)
@@ -48,6 +48,8 @@ END_EVENT_TABLE()
 // implementation
 // ============================================================================
 
+IMPLEMENT_ABSTRACT_CLASS(wxVListBox, wxVScrolledWindow)
+
 // ----------------------------------------------------------------------------
 // wxVListBox creation
 // ----------------------------------------------------------------------------
@@ -249,8 +251,11 @@ void wxVListBox::SetSelection(int selection)
                   (selection >= 0 && (size_t)selection < GetItemCount()),
                   _T("wxVListBox::SetSelection(): invalid item index") );
 
-    wxASSERT_MSG( !HasMultipleSelection(),
-                  _T("SetSelection() is invalid with multiselection listbox") );
+    if ( HasMultipleSelection() )
+    {
+        Select(selection);
+        m_anchor = selection;
+    }
 
     DoSetCurrent(selection);
 }
@@ -316,7 +321,30 @@ void wxVListBox::OnDrawSeparator(wxDC& WXUNUSED(dc),
 {
 }
 
-void wxVListBox::OnPaint(wxPaintEvent& event)
+void wxVListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
+{
+    // we need to render selected and current items differently
+    const bool isSelected = IsSelected(n),
+               isCurrent = IsCurrent(n);
+    if ( isSelected || isCurrent )
+    {
+        if ( isSelected )
+        {
+            dc.SetBrush(wxBrush(m_colBgSel, wxSOLID));
+        }
+        else // !selected
+        {
+            dc.SetBrush(*wxTRANSPARENT_BRUSH);
+        }
+
+        dc.SetPen(*(isCurrent ? wxBLACK_PEN : wxTRANSPARENT_PEN));
+
+        dc.DrawRectangle(rect);
+    }
+    //else: do nothing for the normal items
+}
+
+void wxVListBox::OnPaint(wxPaintEvent& WXUNUSED(event))
 {
     wxPaintDC dc(this);
 
@@ -341,25 +369,9 @@ void wxVListBox::OnPaint(wxPaintEvent& event)
             // don't allow drawing outside of the lines rectangle
             wxDCClipper clip(dc, rectLine);
 
-            // we need to render selected and current items differently
-            const bool isSelected = IsSelected(line);
-            if ( isSelected || IsCurrent(line) )
-            {
-                if ( isSelected )
-                {
-                    dc.SetBrush(wxBrush(m_colBgSel, wxSOLID));
-                }
-                else // !selected
-                {
-                    dc.SetBrush(*wxTRANSPARENT_BRUSH);
-                }
-
-                dc.SetPen(*(IsCurrent(line) ? wxBLACK_PEN : wxTRANSPARENT_PEN));
-
-                dc.DrawRectangle(rectLine);
-            }
-
             wxRect rect = rectLine;
+            OnDrawBackground(dc, rect, line);
+
             OnDrawSeparator(dc, rect, line);
 
             rect.Deflate(m_ptMargins.x, m_ptMargins.y);
@@ -474,7 +486,7 @@ void wxVListBox::OnKeyDown(wxKeyEvent& event)
     // flags for DoHandleItemClick()
     int flags = ItemClick_Kbd;
 
-    int current = 0; // just to silent the stupid compiler warnings
+    int current;
     switch ( event.GetKeyCode() )
     {
         case WXK_HOME:
@@ -527,6 +539,8 @@ void wxVListBox::OnKeyDown(wxKeyEvent& event)
 
         default:
             event.Skip();
+            current = 0; // just to silent the stupid compiler warnings
+            wxUnusedVar(current);
             return;
     }