X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/847dfdb422c4d56bb56d3c92a9cd706ee2b45530..88e183d7693c5272673d109b21e40e1bb525a386:/src/generic/treectlg.cpp diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index 00ba1e08ee..32498c5093 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 @@ -2242,12 +2259,7 @@ void wxGenericTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc) if ( image != NO_IMAGE ) { -#ifdef __WXGTK__ - if (GetLayoutDirection() == wxLayout_RightToLeft) - dc.SetClippingRegion( item->GetX()+image_w-2, item->GetY(), image_w-2, total_h ); - else -#endif - dc.SetClippingRegion( item->GetX(), item->GetY(), image_w-2, total_h ); + dc.SetClippingRegion( item->GetX(), item->GetY(), image_w-2, total_h ); m_imageListNormal->Draw( image, dc, item->GetX(), item->GetY() +((total_h > image_h)?((total_h-image_h)/2):0), @@ -2330,7 +2342,11 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level #endif ) { +#ifdef __WXMAC__ + colText = *wxWHITE; +#else colText = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT); +#endif } else { @@ -2585,6 +2601,14 @@ void wxGenericTreeCtrl::OnChar( wxKeyEvent &event ) event.CmdDown(), is_multiple, extended_select, unselect_others); + if (GetLayoutDirection() == wxLayout_RightToLeft) + { + if (event.GetKeyCode() == WXK_RIGHT) + event.m_keyCode = WXK_LEFT; + else if (event.GetKeyCode() == WXK_LEFT) + event.m_keyCode = WXK_RIGHT; + } + // + : Expand // - : Collaspe // * : Expand all/Collapse all