static const int LINE_SPACING = 0;
// extra margins around the text label
+#ifdef __WXGTK__
+static const int EXTRA_WIDTH = 6;
+#else
static const int EXTRA_WIDTH = 4;
+#endif
static const int EXTRA_HEIGHT = 4;
// margin between the window and the items
// 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
{
return m_hasFocus ? m_highlightBrush : m_highlightUnfocusedBrush;
}
+
+ bool HasFocus() const
+ {
+ return m_hasFocus;
+ }
//protected:
// the array of all line objects for a non virtual list control (for the
if ( item->HasText() )
{
if (m_gi->m_rectAll.width > spacing)
- m_gi->m_rectLabel.x = m_gi->m_rectAll.x + 2;
+ m_gi->m_rectLabel.x = m_gi->m_rectAll.x + (EXTRA_WIDTH/2);
else
- m_gi->m_rectLabel.x = m_gi->m_rectAll.x + 2 + (spacing / 2) - (m_gi->m_rectLabel.width / 2);
+ m_gi->m_rectLabel.x = m_gi->m_rectAll.x + (EXTRA_WIDTH/2) + (spacing / 2) - (m_gi->m_rectLabel.width / 2);
m_gi->m_rectLabel.y = m_gi->m_rectAll.y + m_gi->m_rectAll.height + 2 - m_gi->m_rectLabel.height;
m_gi->m_rectHighlight.x = m_gi->m_rectLabel.x - 2;
m_gi->m_rectHighlight.y = m_gi->m_rectLabel.y - 2;
{
m_gi->m_rectIcon.x = m_gi->m_rectAll.x + 2;
m_gi->m_rectIcon.y = m_gi->m_rectAll.y + 2;
- m_gi->m_rectLabel.x = m_gi->m_rectAll.x + 6 + m_gi->m_rectIcon.width;
+ m_gi->m_rectLabel.x = m_gi->m_rectAll.x + 4 + (EXTRA_WIDTH/2) + m_gi->m_rectIcon.width;
}
else
{
- m_gi->m_rectLabel.x = m_gi->m_rectAll.x + 2;
+ m_gi->m_rectLabel.x = m_gi->m_rectAll.x + (EXTRA_WIDTH/2);
}
break;
wxColour colText;
if ( highlighted )
#ifdef __WXMAC__
- colText = *wxWHITE;
+ {
+ if (m_owner->HasFocus())
+ colText = *wxWHITE;
+ else
+ colText = *wxBLACK;
+ }
#else
colText = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT);
#endif
wxListItemAttr *attr = GetAttr();
if ( SetAttributes(dc, attr, highlighted) )
+#ifndef __WXGTK20__
+ {
dc->DrawRectangle( m_gi->m_rectHighlight );
+ }
+#else
+ {
+ if (highlighted)
+ {
+ int flags = wxCONTROL_SELECTED;
+ if (m_owner->HasFocus())
+ flags |= wxCONTROL_FOCUSED;
+ wxRendererNative::Get().DrawItemSelectionRect( m_owner, *dc, m_gi->m_rectHighlight, flags );
+
+ }
+ else
+ {
+ dc->DrawRectangle( m_gi->m_rectHighlight );
+ }
+ }
+#endif
// just for debugging to better see where the items are
#if 0
// GetAttr() and move these lines into the loop below
wxListItemAttr *attr = GetAttr();
if ( SetAttributes(dc, attr, highlighted) )
+#ifndef __WXGTK20__
+ {
dc->DrawRectangle( rectHL );
+ }
+#else
+ {
+ if (highlighted)
+ {
+ int flags = wxCONTROL_SELECTED;
+ if (m_owner->HasFocus())
+ flags |= wxCONTROL_FOCUSED;
+ wxRendererNative::Get().DrawItemSelectionRect( m_owner, *dc, rectHL, flags );
+ }
+ else
+ {
+ dc->DrawRectangle( rectHL );
+ }
+ }
+#endif
wxCoord x = rect.x + HEADER_OFFSET_X,
yMid = rect.y + rect.height/2;
+#ifdef __WXGTK__
+ // This probably needs to be done
+ // on all platforms as the icons
+ // otherwise nearly touch the border
+ x += 2;
+#endif
size_t col = 0;
for ( wxListItemDataList::compatibility_iterator node = m_items.GetFirst();
{
if ( m_hasFocus )
{
+ wxRect rect( GetLineHighlightRect( m_current ) );
+#ifndef __WXGTK20__
dc.SetPen( *wxBLACK_PEN );
dc.SetBrush( *wxTRANSPARENT_BRUSH );
- dc.DrawRectangle( GetLineHighlightRect( m_current ) );
+ dc.DrawRectangle( rect );
+#else
+ wxRendererNative::Get().DrawItemSelectionRect( this, dc, rect, wxCONTROL_CURRENT|wxCONTROL_FOCUSED );
+
+#endif
}
}
#endif
{
wxListEvent le( command, GetParent()->GetId() );
le.SetEventObject( GetParent() );
+
le.m_itemIndex = line;
// set only for events which have position
// 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 )
{
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;
ResetVisibleLinesRange();
}
+ SendNotify( index, wxEVT_COMMAND_LIST_DELETE_ITEM, wxDefaultPosition );
+
if ( IsVirtual() )
{
m_countVirt--;
// 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);
}