X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d1526a6787a5dc39dd7c07662a355818527041e7..cc4a79c0f0ec6aa099056de841066a4038d84944:/src/generic/treectlg.cpp diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index 611a7ea7e4..71d4246999 100644 --- a/src/generic/treectlg.cpp +++ b/src/generic/treectlg.cpp @@ -753,6 +753,13 @@ void wxGenericTreeCtrl::Init() 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 @@ -761,7 +768,14 @@ void wxGenericTreeCtrl::Init() ), 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 @@ -770,7 +784,7 @@ void wxGenericTreeCtrl::Init() ), wxSOLID ); - +#endif m_imageListButtons = NULL; m_ownsImageListButtons = false; @@ -819,7 +833,14 @@ bool wxGenericTreeCtrl::Create(wxWindow *parent, style |= wxTR_NO_LINES; if (major < 10) style |= wxTR_ROW_LINES; + + if (style == 0 || style & wxTR_DEFAULT_STYLE) + style |= wxTR_FULL_ROW_HIGHLIGHT; + #endif // __WXMAC__ +#ifdef __WXGTK20__ + style |= wxTR_NO_LINES; +#endif if ( !wxControl::Create( parent, id, pos, size, style|wxHSCROLL|wxVSCROLL, @@ -844,7 +865,7 @@ bool wxGenericTreeCtrl::Create(wxWindow *parent, m_dottedPen = wxPen( wxT("grey"), 0, 0 ); - SetBestSize(size); + SetInitialSize(size); return true; } @@ -1395,10 +1416,12 @@ wxTreeItemId wxGenericTreeCtrl::FindItem(const wxTreeItemId& idParent, } // and try all the items (stop when we get to the one we started from) - while ( id != idParent && !GetItemText(id).Lower().StartsWith(prefix) ) + while (id.IsOk() && id != idParent && !GetItemText(id).Lower().StartsWith(prefix) ) { id = GetNext(id); } + // If we haven't found the item, id.IsOk() will be false, as per + // documentation } return id; @@ -1890,9 +1913,16 @@ void wxGenericTreeCtrl::SelectItem(const wxTreeItemId& itemId, bool select) { wxGenericTreeItem *item = (wxGenericTreeItem*) itemId.m_pItem; wxCHECK_RET( item, wxT("SelectItem(): invalid tree item") ); + + wxTreeEvent event(wxEVT_COMMAND_TREE_SEL_CHANGING, this, item); + if ( GetEventHandler()->ProcessEvent( event ) && !event.IsAllowed() ) + return; item->SetHilight(false); RefreshLine(item); + + event.SetEventType(wxEVT_COMMAND_TREE_SEL_CHANGED); + GetEventHandler()->ProcessEvent( event ); } } @@ -2179,20 +2209,7 @@ void wxGenericTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc) if ( item->IsSelected() ) { -// under mac selections are only a rectangle in case they don't have the focus -#ifdef __WXMAC__ - if ( !m_hasFocus ) - { - dc.SetBrush( *wxTRANSPARENT_BRUSH ) ; - dc.SetPen( wxPen( wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHT ) , 1 , wxSOLID ) ) ; - } - else - { - dc.SetBrush( *m_hilightBrush ) ; - } -#else dc.SetBrush(*(m_hasFocus ? m_hilightBrush : m_hilightUnfocusedBrush)); -#endif drawItemBackground = true; } else @@ -2214,10 +2231,9 @@ void wxGenericTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc) if ( HasFlag(wxTR_FULL_ROW_HIGHLIGHT) ) { - int x, y, w, h; - - DoGetPosition(&x, &y); - DoGetSize(&w, &h); + int x, w, h; + x=0; + GetVirtualSize(&w, &h); dc.DrawRectangle(x, item->GetY()+offset, w, total_h-offset); } else @@ -2325,7 +2341,11 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level #endif ) { +#ifdef __WXMAC__ + colText = *wxWHITE; +#else colText = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT); +#endif } else {