X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/78f12104637b06818d6bf7288b3fda6c93b257ab..aa154cb1578ba9d44c7e24c5e76d8238bf8809d0:/src/generic/treectlg.cpp diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index 25b750e3e2..4e79785c02 100644 --- a/src/generic/treectlg.cpp +++ b/src/generic/treectlg.cpp @@ -183,7 +183,7 @@ public: // return the item at given position (or NULL if no item), onButton is // TRUE if the point belongs to the item's button, otherwise it lies - // on the button's label + // on the item's label wxGenericTreeItem *HitTest( const wxPoint& point, const wxGenericTreeCtrl *, int &flags, @@ -578,8 +578,8 @@ wxGenericTreeItem *wxGenericTreeItem::HitTest(const wxPoint& point, HasPlus() && theCtrl->HasButtons() ) #else // 5 is the size of the plus sign - if ((point.x > xCross-5) && (point.x < xCross+5) && - (point.y > y_mid-5) && (point.y < y_mid+5) && + if ((point.x > xCross-6) && (point.x < xCross+6) && + (point.y > y_mid-6) && (point.y < y_mid+6) && HasPlus() && theCtrl->HasButtons() ) #endif { @@ -674,6 +674,7 @@ BEGIN_EVENT_TABLE(wxGenericTreeCtrl,wxScrolledWindow) EVT_CHAR (wxGenericTreeCtrl::OnChar) EVT_SET_FOCUS (wxGenericTreeCtrl::OnSetFocus) EVT_KILL_FOCUS (wxGenericTreeCtrl::OnKillFocus) + EVT_TREE_ITEM_GETTOOLTIP(-1, wxGenericTreeCtrl::OnGetToolTip) END_EVENT_TABLE() #if !defined(__WXMSW__) || defined(__WIN16__) || defined(__WXUNIVERSAL__) @@ -724,7 +725,8 @@ void wxGenericTreeCtrl::Init() m_dragCount = 0; m_isDragging = FALSE; - m_dropTarget = m_oldSelection = (wxGenericTreeItem *)NULL; + m_dropTarget = m_oldSelection = NULL; + m_underMouse = NULL; m_textCtrl = NULL; m_renameTimer = NULL; @@ -2334,7 +2336,13 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level { static const int wImage = 9; static const int hImage = 9; - + + int flag = 0; + if (item->IsExpanded()) + flag |= wxCONTROL_EXPANDED; + if (item == m_underMouse) + flag |= wxCONTROL_CURRENT; + wxRendererNative::Get().DrawTreeItemButton ( this, @@ -2342,9 +2350,7 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level wxRect(x - wImage/2, y_mid - hImage/2, wImage, hImage), - item->IsExpanded() - ? wxCONTROL_EXPANDED - : 0 + flag ); } } @@ -2873,12 +2879,47 @@ void wxGenericTreeCtrl::OnMouse( wxMouseEvent &event ) { if ( !m_anchor ) return; + wxPoint pt = CalcUnscrolledPosition(event.GetPosition()); + + // Is the mouse over a tree item button? + int flags = 0; + wxGenericTreeItem *thisItem = m_anchor->HitTest(pt, this, flags, 0); + wxGenericTreeItem *underMouse = thisItem; + bool underMouseChanged = (underMouse != m_underMouse) ; + + if ((underMouse) && + (flags & wxTREE_HITTEST_ONITEMBUTTON) && + (!event.LeftIsDown()) && + (!m_isDragging) && + (!m_renameTimer || !m_renameTimer->IsRunning())) + { + } + else + { + underMouse = NULL; + } + + if (underMouse != m_underMouse) + { + if (m_underMouse) + { + // unhighlight old item + wxGenericTreeItem *tmp = m_underMouse; + m_underMouse = NULL; + RefreshLine( tmp ); + } + + m_underMouse = underMouse; + if (m_underMouse) + RefreshLine( m_underMouse ); + } + #if wxUSE_TOOLTIPS // Determines what item we are hovering over and need a tooltip for - wxTreeItemId hoverItem = HitTest(ScreenToClient(wxGetMousePosition())); + wxTreeItemId hoverItem = thisItem; // We do not want a tooltip if we are dragging, or if the rename timer is running - if (hoverItem.IsOk() && !m_isDragging && (!m_renameTimer || !m_renameTimer->IsRunning())) + if (underMouseChanged && hoverItem.IsOk() && !m_isDragging && (!m_renameTimer || !m_renameTimer->IsRunning())) { // Ask the tree control what tooltip (if any) should be shown wxTreeEvent hevent(wxEVT_COMMAND_TREE_ITEM_GETTOOLTIP, GetId()); @@ -2907,9 +2948,8 @@ void wxGenericTreeCtrl::OnMouse( wxMouseEvent &event ) return; } - wxPoint pt = CalcUnscrolledPosition(event.GetPosition()); - int flags = 0; + flags = 0; wxGenericTreeItem *item = m_anchor->HitTest(pt, this, flags, 0); if ( event.Dragging() && !m_isDragging ) @@ -3329,4 +3369,11 @@ bool wxGenericTreeCtrl::SetForegroundColour(const wxColour& colour) return TRUE; } +// Process the tooltip event, to speed up event processing. +// Doesn't actually get a tooltip. +void wxGenericTreeCtrl::OnGetToolTip( wxTreeEvent &event ) +{ + event.Veto(); +} + #endif // wxUSE_TREECTRL