#include "wx/mac/private.h"
#endif
-#ifdef __WXGTK20__
- #include "wx/gtk/private.h"
- #include "wx/gtk/win_gtk.h"
-#endif
-
// -----------------------------------------------------------------------------
// array types
// -----------------------------------------------------------------------------
m_indent = 15;
m_spacing = 18;
-#ifdef __WXMAC__
- // OS X sel item highlight color differs from text highlight color, which is
- // what wxSYS_COLOUR_HIGHLIGHT returns.
- RGBColor hilight;
- GetThemeBrushAsColor(kThemeBrushAlternatePrimaryHighlightColor, 32, true, &hilight);
- m_hilightBrush = new wxBrush( wxColour(hilight.red, hilight.green, hilight.blue ), wxSOLID );
-#else
m_hilightBrush = new wxBrush
(
wxSystemSettings::GetColour
),
wxSOLID
);
-#endif
-#ifdef __WXMAC__
- // on Mac, this color also differs from the wxSYS_COLOUR_BTNSHADOW, enough to be noticable.
- // I don't know if BTNSHADOW is appropriate in other contexts, so I'm just changing it here.
- GetThemeBrushAsColor(kThemeBrushSecondaryHighlightColor, 32, true, &hilight);
- m_hilightUnfocusedBrush = new wxBrush( wxColour(hilight.red, hilight.green, hilight.blue ), wxSOLID );
-#else
m_hilightUnfocusedBrush = new wxBrush
(
wxSystemSettings::GetColour
),
wxSOLID
);
-#endif
+
m_imageListButtons = NULL;
m_ownsImageListButtons = false;
}
}
-#if WXWIN_COMPATIBILITY_2_4
-
-wxTreeItemId wxGenericTreeCtrl::GetFirstChild(const wxTreeItemId& item,
- long& cookie) const
-{
- wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
-
- cookie = 0;
- return GetNextChild(item, cookie);
-}
-
-wxTreeItemId wxGenericTreeCtrl::GetNextChild(const wxTreeItemId& item,
- long& cookie) const
-{
- wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
-
- wxArrayGenericTreeItems& children = ((wxGenericTreeItem*) item.m_pItem)->GetChildren();
- if ( (size_t)cookie < children.Count() )
- {
- return children.Item((size_t)cookie++);
- }
- else
- {
- // there are no more of them
- return wxTreeItemId();
- }
-}
-
-#endif // WXWIN_COMPATIBILITY_2_4
-
wxTreeItemId wxGenericTreeCtrl::GetLastChild(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
x=0;
GetVirtualSize(&w, &h);
wxRect rect( x, item->GetY()+offset, w, total_h-offset);
-#ifndef __WXGTK20__
+#if !defined(__WXGTK20__) && !defined(__WXMAC__)
dc.DrawRectangle(rect);
#else
if (!item->IsSelected())
}
else
{
- CalcScrolledPosition( rect.x, rect.y, &rect.x, &rect.y );
-
- gtk_paint_flat_box( m_widget->style,
- GTK_PIZZA(m_wxwindow)->bin_window,
- GTK_STATE_SELECTED,
- GTK_SHADOW_NONE,
- NULL,
- m_wxwindow,
- "cell_even",
- rect.x, rect.y, rect.width, rect.height );
-
+ int flags = wxCONTROL_SELECTED;
+ if (m_hasFocus
+#ifdef __WXMAC__
+ && IsControlActive( (ControlRef)GetHandle() )
+#endif
+ )
+ flags |= wxCONTROL_FOCUSED;
if ((item == m_current) && (m_hasFocus))
- 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 );
+ flags |= wxCONTROL_CURRENT;
+ wxRendererNative::Get().DrawItemSelectionRect( this, dc, rect, flags );
}
#endif
}
// background colour.
wxRect rect( item->GetX() + image_w - 2, item->GetY()+offset,
item->GetWidth() - image_w + 2, total_h-offset );
-#ifndef __WXGTK20__
+#if !defined(__WXGTK20__) && !defined(__WXMAC__)
dc.DrawRectangle( rect );
#else
- CalcScrolledPosition( rect.x, rect.y, &rect.x, &rect.y );
rect.x -= 1;
rect.width += 2;
- gtk_paint_flat_box( m_widget->style,
- GTK_PIZZA(m_wxwindow)->bin_window,
- GTK_STATE_SELECTED,
- GTK_SHADOW_NONE,
- NULL,
- m_wxwindow,
- "cell_even",
- rect.x, rect.y, rect.width, rect.height );
-
+ int flags = wxCONTROL_SELECTED;
+ if (m_hasFocus)
+ flags |= wxCONTROL_FOCUSED;
if ((item == m_current) && (m_hasFocus))
- 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 );
-
+ flags |= wxCONTROL_CURRENT;
+ wxRendererNative::Get().DrawItemSelectionRect( this, dc, rect, flags );
#endif
}
// On GTK+ 2, drawing a 'normal' background is wrong for themes that
{
wxRect rect( item->GetX()-2, item->GetY()+offset,
item->GetWidth()+2, total_h-offset );
-#ifndef __WXGTK20__
+#if !defined(__WXGTK20__) && !defined(__WXMAC__)
dc.DrawRectangle( rect );
#else
if ( attr && attr->HasBackgroundColour() )
}
else
{
- CalcScrolledPosition( rect.x, rect.y, &rect.x, &rect.y );
rect.x -= 1;
rect.width += 2;
-
- gtk_paint_flat_box( m_widget->style,
- GTK_PIZZA(m_wxwindow)->bin_window,
- GTK_STATE_SELECTED,
- GTK_SHADOW_NONE,
- NULL,
- m_wxwindow,
- "cell_even",
- rect.x, rect.y, rect.width, rect.height );
-
+
+ int flags = wxCONTROL_SELECTED;
+ if (m_hasFocus)
+ flags |= wxCONTROL_FOCUSED;
if ((item == m_current) && (m_hasFocus))
- 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 );
+ flags |= wxCONTROL_CURRENT;
+ wxRendererNative::Get().DrawItemSelectionRect( this, dc, rect, flags );
}
#endif
}
// rectangle, so we want to make sure that the text is visible
// against the normal background, not the highlightbackground, so
// don't use the highlight text colour unless we have the focus.
- && m_hasFocus
+ && m_hasFocus && IsControlActive( (ControlRef)GetHandle() )
#endif
)
{
#endif
}
-#if WXWIN_COMPATIBILITY_2_4
-
-int wxGenericTreeCtrl::GetItemSelectedImage(const wxTreeItemId& item) const
-{
- return GetItemImage(item, wxTreeItemIcon_Selected);
-}
-
-void wxGenericTreeCtrl::SetItemSelectedImage(const wxTreeItemId& item, int image)
-{
- SetItemImage(item, image, wxTreeItemIcon_Selected);
-}
-
-#endif // WXWIN_COMPATIBILITY_2_4
-
void wxGenericTreeCtrl::DoDirtyProcessing()
{
if (m_freezeCount)
AdjustMyScrollbars();
}
+wxSize wxGenericTreeCtrl::DoGetBestSize() const
+{
+ // make sure all positions are calculated as normally this only done during
+ // idle time but we need them for base class DoGetBestSize() to return the
+ // correct result
+ wxConstCast(this, wxGenericTreeCtrl)->CalculatePositions();
+
+ wxSize size = wxTreeCtrlBase::DoGetBestSize();
+
+ // there seems to be an implicit extra border around the items, although
+ // I'm not really sure where does it come from -- but without this, the
+ // scrollbars appear in a tree with default/best size
+ size.IncBy(4, 4);
+
+ // and the border has to be rounded up to a multiple of PIXELS_PER_UNIT or
+ // scrollbars still appear
+ const wxSize& borderSize = GetWindowBorderSize();
+
+ int dx = (size.x - borderSize.x) % PIXELS_PER_UNIT;
+ if ( dx )
+ size.x += PIXELS_PER_UNIT - dx;
+ int dy = (size.y - borderSize.y) % PIXELS_PER_UNIT;
+ if ( dy )
+ size.y += PIXELS_PER_UNIT - dy;
+
+ // we need to update the cache too as the base class cached its own value
+ CacheBestSize(size);
+
+ return size;
+}
+
#endif // wxUSE_TREECTRL