const wxString& name)
{
#ifdef __WXMSW__
- if ((style & wxBORDER_MASK) == wxDEFAULT)
- style |= wxBORDER_THEME;
+ if ( (style & wxBORDER_MASK) == wxDEFAULT )
+ style |= wxBORDER_THEME;
#endif
style |= wxWANTS_CHARS | wxFULL_REPAINT_ON_RESIZE;
void wxVListBox::SetItemCount(size_t count)
{
+ // don't leave the current index invalid
+ if ( m_current != wxNOT_FOUND && (size_t)m_current >= count )
+ m_current = count - 1; // also ok when count == 0 as wxNOT_FOUND == -1
+
if ( m_selStore )
{
// tell the selection store that our number of items has changed
{
}
-void wxVListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
+bool
+wxVListBox::DoDrawSolidBackground(const wxColour& col,
+ wxDC& dc,
+ const wxRect& rect,
+ size_t n) const
{
- if ( m_colBgSel.IsOk() )
+ if ( !col.IsOk() )
+ return false;
+
+ // we need to render selected and current items differently
+ const bool isSelected = IsSelected(n),
+ isCurrent = IsCurrent(n);
+ if ( isSelected || isCurrent )
{
- // we need to render selected and current items differently
- const bool isSelected = IsSelected(n),
- isCurrent = IsCurrent(n);
- if ( isSelected || isCurrent )
+ if ( isSelected )
{
- if ( isSelected )
- {
- dc.SetBrush(wxBrush(m_colBgSel, wxSOLID));
- }
- else // !selected
- {
- dc.SetBrush(*wxTRANSPARENT_BRUSH);
- }
- dc.SetPen(*(isCurrent ? wxBLACK_PEN : wxTRANSPARENT_PEN));
- dc.DrawRectangle(rect);
+ dc.SetBrush(wxBrush(col, wxBRUSHSTYLE_SOLID));
+ }
+ else // !selected
+ {
+ dc.SetBrush(*wxTRANSPARENT_BRUSH);
}
- //else: do nothing for the normal items
+ dc.SetPen(*(isCurrent ? wxBLACK_PEN : wxTRANSPARENT_PEN));
+ dc.DrawRectangle(rect);
}
- else // use wxRendererNative for a more native look&feel:
+ //else: do nothing for the normal items
+
+ return true;
+}
+
+void wxVListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
+{
+ // use wxRendererNative for more native look unless we use custom bg colour
+ if ( !DoDrawSolidBackground(m_colBgSel, dc, rect, n) )
{
int flags = 0;
if ( IsSelected(n) )
case WXK_TAB:
// Since we are using wxWANTS_CHARS we need to send navigation
// events for the tabs on MSW
- {
- wxNavigationKeyEvent ne;
- ne.SetDirection(!event.ShiftDown());
- ne.SetCurrentFocus(this);
- ne.SetEventObject(this);
- GetParent()->GetEventHandler()->ProcessEvent(ne);
- }
+ HandleAsNavigationKey(event);
// fall through to default
#endif
default: