X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/59a2e6354dec7c250dd40e86bb79c259bfecca36..b916f809336755620b010293637b12763f01455d:/src/generic/treectlg.cpp diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index ad9602c0b8..2a2e7c814d 100644 --- a/src/generic/treectlg.cpp +++ b/src/generic/treectlg.cpp @@ -96,6 +96,7 @@ private: wxString *m_res; wxGenericTreeCtrl *m_owner; wxString m_startValue; + bool m_finished; DECLARE_EVENT_TABLE() }; @@ -304,21 +305,24 @@ wxTreeTextCtrl::wxTreeTextCtrl( wxWindow *parent, (*m_accept) = FALSE; (*m_res) = wxEmptyString; m_startValue = value; + m_finished = FALSE; } void wxTreeTextCtrl::OnChar( wxKeyEvent &event ) { - // TODO focus doesn't return to the wxTextCtrl when this closes... if (event.m_keyCode == WXK_RETURN) { (*m_accept) = TRUE; (*m_res) = GetValue(); - if ((*m_accept) && ((*m_res) != m_startValue)) + if ((*m_res) != m_startValue) m_owner->OnRenameAccept(); if (!wxPendingDelete.Member(this)) wxPendingDelete.Append(this); + + m_finished = TRUE; + m_owner->SetFocus(); // This doesn't work. TODO. return; } @@ -330,6 +334,9 @@ void wxTreeTextCtrl::OnChar( wxKeyEvent &event ) if (!wxPendingDelete.Member(this)) wxPendingDelete.Append(this); + m_finished = TRUE; + m_owner->SetFocus(); // This doesn't work. TODO. + return; } event.Skip(); @@ -337,12 +344,18 @@ void wxTreeTextCtrl::OnChar( wxKeyEvent &event ) void wxTreeTextCtrl::OnKeyUp( wxKeyEvent &event ) { + if (m_finished) + { + event.Skip(); + return; + } + // auto-grow the textctrl: wxSize parentSize = m_owner->GetSize(); wxPoint myPos = GetPosition(); wxSize mySize = GetSize(); int sx, sy; - GetTextExtent(GetValue() + _T("MM"), &sx, &sy); + GetTextExtent(GetValue() + _T("M"), &sx, &sy); if (myPos.x + sx > parentSize.x) sx = parentSize.x - myPos.x; if (mySize.x > sx) sx = mySize.x; SetSize(sx, -1); @@ -350,12 +363,21 @@ void wxTreeTextCtrl::OnKeyUp( wxKeyEvent &event ) event.Skip(); } -void wxTreeTextCtrl::OnKillFocus( wxFocusEvent &WXUNUSED(event) ) +void wxTreeTextCtrl::OnKillFocus( wxFocusEvent &event ) { + if (m_finished) + { + event.Skip(); + return; + } + if (!wxPendingDelete.Member(this)) wxPendingDelete.Append(this); - if ((*m_accept) && ((*m_res) != m_startValue)) + (*m_accept) = TRUE; + (*m_res) = GetValue(); + + if ((*m_res) != m_startValue) m_owner->OnRenameAccept(); } @@ -643,6 +665,21 @@ bool wxGenericTreeCtrl::Create(wxWindow *parent, const wxValidator &validator, const wxString& name ) { +#ifdef __WXMAC__ + int major,minor; + wxGetOsVersion( &major, &minor ); + + if (style & wxTR_HAS_BUTTONS) style |= wxTR_MAC_BUTTONS; + if (style & wxTR_HAS_BUTTONS) style &= ~wxTR_HAS_BUTTONS; + style &= ~wxTR_LINES_AT_ROOT; + style |= wxTR_NO_LINES; + if (major < 10) + style |= wxTR_ROW_LINES; + if (major >= 10) + style |= wxTR_AQUA_BUTTONS; +#endif + + wxScrolledWindow::Create( parent, id, pos, size, style|wxHSCROLL|wxVSCROLL, name ); @@ -886,7 +923,7 @@ bool wxGenericTreeCtrl::ItemHasChildren(const wxTreeItemId& item) const // could have them as well and it's better to err on this side rather than // disabling some operations which are restricted to the items with // children for an item which does have them - return !((wxGenericTreeItem*) item.m_pItem)->HasPlus(); + return ((wxGenericTreeItem*) item.m_pItem)->HasPlus(); } bool wxGenericTreeCtrl::IsExpanded(const wxTreeItemId& item) const @@ -1955,28 +1992,55 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level else if (HasFlag(wxTR_TWIST_BUTTONS)) { // draw the twisty button here - dc.SetPen(*wxBLACK_PEN); - dc.SetBrush(*m_hilightBrush); - + wxPoint button[3]; - - if (item->IsExpanded()) + dc.SetBrush(*m_hilightBrush); + + if (HasFlag(wxTR_AQUA_BUTTONS)) { - button[0].x = x-5; - button[0].y = y_mid-2; - button[1].x = x+5; - button[1].y = y_mid-2; - button[2].x = x; - button[2].y = y_mid+3; + dc.SetPen(*wxTRANSPARENT_PEN); + + if (item->IsExpanded()) + { + button[0].x = x-6; + button[0].y = y_mid-2; + button[1].x = x+6; + button[1].y = y_mid-2; + button[2].x = x; + button[2].y = y_mid+7; + } + else + { + button[0].y = y_mid-6; + button[0].x = x-2; + button[1].y = y_mid+6; + button[1].x = x-2; + button[2].y = y_mid; + button[2].x = x+7; + } } else { - button[0].y = y_mid-5; - button[0].x = x-2; - button[1].y = y_mid+5; - button[1].x = x-2; - button[2].y = y_mid; - button[2].x = x+3; + dc.SetPen(*wxBLACK_PEN); + + if (item->IsExpanded()) + { + button[0].x = x-5; + button[0].y = y_mid-2; + button[1].x = x+5; + button[1].y = y_mid-2; + button[2].x = x; + button[2].y = y_mid+3; + } + else + { + button[0].y = y_mid-5; + button[0].x = x-2; + button[1].y = y_mid+5; + button[1].x = x-2; + button[2].y = y_mid; + button[2].x = x+3; + } } dc.DrawPolygon(3, button);