X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ccdbdc893684dee60877f35132c5ec5d8ec23446..1dab6da91b702ad41b249ecaf826a628bad05fce:/src/generic/listctrl.cpp diff --git a/src/generic/listctrl.cpp b/src/generic/listctrl.cpp index 4f76d244cb..fd4300b579 100644 --- a/src/generic/listctrl.cpp +++ b/src/generic/listctrl.cpp @@ -52,12 +52,6 @@ #include "wx/mac/private.h" #endif -#ifdef __WXGTK__ - #include "wx/gtk/private.h" - #include "wx/gtk/win_gtk.h" -#endif - - // NOTE: If using the wxListBox visual attributes works everywhere then this can // be removed, as well as the #else case below. @@ -697,7 +691,7 @@ public: // send out a wxListEvent void SendNotify( size_t line, - wxEventType command, + wxEventType command, const wxPoint& point = wxDefaultPosition ); // override base class virtual to reset m_lineHeight when the font changes @@ -1448,7 +1442,7 @@ void wxListLineData::Draw( wxDC *dc ) wxListItemAttr *attr = GetAttr(); if ( SetAttributes(dc, attr, highlighted) ) -#ifndef __WXGTK__ +#ifndef __WXGTK20__ { dc->DrawRectangle( m_gi->m_rectHighlight ); } @@ -1456,17 +1450,11 @@ void wxListLineData::Draw( wxDC *dc ) { if (highlighted) { - wxRect rect2( m_gi->m_rectHighlight ); - m_owner->CalcScrolledPosition( rect2.x, rect2.y, &rect2.x, &rect2.y ); - - gtk_paint_flat_box( m_owner->m_widget->style, - GTK_PIZZA(m_owner->m_wxwindow)->bin_window, - GTK_STATE_SELECTED, - GTK_SHADOW_NONE, - NULL, - m_owner->m_wxwindow, - "cell_even", - rect2.x, rect2.y, rect2.width, rect2.height ); + int flags = wxCONTROL_SELECTED; + if (m_owner->HasFocus()) + flags |= wxCONTROL_FOCUSED; + wxRendererNative::Get().DrawItemSelectionRect( m_owner, *dc, m_gi->m_rectHighlight, flags ); + } else { @@ -1513,7 +1501,7 @@ void wxListLineData::DrawInReportMode( wxDC *dc, // GetAttr() and move these lines into the loop below wxListItemAttr *attr = GetAttr(); if ( SetAttributes(dc, attr, highlighted) ) -#ifndef __WXGTK__ +#ifndef __WXGTK20__ { dc->DrawRectangle( rectHL ); } @@ -1521,17 +1509,10 @@ void wxListLineData::DrawInReportMode( wxDC *dc, { if (highlighted) { - wxRect rect2( rectHL ); - m_owner->CalcScrolledPosition( rect2.x, rect2.y, &rect2.x, &rect2.y ); - - gtk_paint_flat_box( m_owner->m_widget->style, - GTK_PIZZA(m_owner->m_wxwindow)->bin_window, - GTK_STATE_SELECTED, - GTK_SHADOW_NONE, - NULL, - m_owner->m_wxwindow, - "cell_even", - rect2.x, rect2.y, rect2.width, rect2.height ); + int flags = wxCONTROL_SELECTED; + if (m_owner->HasFocus()) + flags |= wxCONTROL_FOCUSED; + wxRendererNative::Get().DrawItemSelectionRect( m_owner, *dc, rectHL, flags ); } else { @@ -2796,20 +2777,12 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) if ( m_hasFocus ) { wxRect rect( GetLineHighlightRect( m_current ) ); -#ifndef __WXGTK__ +#ifndef __WXGTK20__ dc.SetPen( *wxBLACK_PEN ); dc.SetBrush( *wxTRANSPARENT_BRUSH ); dc.DrawRectangle( rect ); #else - CalcScrolledPosition( rect.x, rect.y, &rect.x, &rect.y ); - - gtk_paint_focus( m_widget->style, - GTK_PIZZA(m_wxwindow)->bin_window, - GTK_STATE_SELECTED, - NULL, - m_wxwindow, - "treeview", - rect.x, rect.y, rect.width, rect.height ); + wxRendererNative::Get().DrawItemSelectionRect( this, dc, rect, wxCONTROL_CURRENT|wxCONTROL_FOCUSED ); #endif } @@ -2842,6 +2815,7 @@ void wxListMainWindow::SendNotify( size_t line, { wxListEvent le( command, GetParent()->GetId() ); le.SetEventObject( GetParent() ); + le.m_itemIndex = line; // set only for events which have position @@ -2852,7 +2826,7 @@ void wxListMainWindow::SendNotify( size_t line, // program has it anyhow and if we did it would result in accessing all // the lines, even those which are not visible now and this is precisely // what we're trying to avoid - if ( !IsVirtual() && (command != wxEVT_COMMAND_LIST_DELETE_ITEM) ) + if ( !IsVirtual() ) { if ( line != (size_t)-1 ) { @@ -4332,11 +4306,11 @@ void wxListMainWindow::DeleteItem( long lindex ) if ( m_current != index || m_current == count - 1 ) m_current--; } - + if ( InReportView() ) { - // mark the Column Max Width cache as dirty if the items in the line - // we're deleting contain the Max Column Width + // mark the Column Max Width cache as dirty if the items in the line + // we're deleting contain the Max Column Width wxListLineData * const line = GetLine(index); wxListItemDataList::compatibility_iterator n; wxListItemData *itemData; @@ -4358,6 +4332,8 @@ void wxListMainWindow::DeleteItem( long lindex ) ResetVisibleLinesRange(); } + SendNotify( index, wxEVT_COMMAND_LIST_DELETE_ITEM, wxDefaultPosition ); + if ( IsVirtual() ) { m_countVirt--; @@ -4371,8 +4347,6 @@ void wxListMainWindow::DeleteItem( long lindex ) // we need to refresh the (vert) scrollbar as the number of items changed m_dirty = true; - SendNotify( index, wxEVT_COMMAND_LIST_DELETE_ITEM ); - RefreshAfter(index); }