X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a9b4940a1f8eef8eb3e7ff65ed45f1daf14c2d9..f3291a824a192f7d672ff9e52aef5987b8795a34:/src/generic/vlbox.cpp diff --git a/src/generic/vlbox.cpp b/src/generic/vlbox.cpp index 86501ead57..df023053a3 100644 --- a/src/generic/vlbox.cpp +++ b/src/generic/vlbox.cpp @@ -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);