X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/80752b57a9bbdfa7613a917d9ece00fc47677080..9859d369b49e35a1cad0f760173e165f974fb6cb:/wxPython/contrib/gizmos/wxCode/src/treelistctrl.cpp diff --git a/wxPython/contrib/gizmos/wxCode/src/treelistctrl.cpp b/wxPython/contrib/gizmos/wxCode/src/treelistctrl.cpp index 5d97fe6f35..1fbe0b94e9 100644 --- a/wxPython/contrib/gizmos/wxCode/src/treelistctrl.cpp +++ b/wxPython/contrib/gizmos/wxCode/src/treelistctrl.cpp @@ -18,10 +18,6 @@ // headers // --------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(__APPLE__) - #pragma implementation "treelistctrl.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -1340,7 +1336,7 @@ int wxTreeListHeaderWindow::XToCol(int x) void wxTreeListHeaderWindow::RefreshColLabel(int col) { - if ( col > GetColumnCount() ) + if ( col >= GetColumnCount() ) return; int x = 0; @@ -1856,8 +1852,6 @@ bool wxTreeListMainWindow::Create (wxTreeListCtrl *parent, const wxString& name) { #ifdef __WXMAC__ - 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; @@ -2675,7 +2669,7 @@ void wxTreeListMainWindow::SelectItem (const wxTreeItemId& itemId, } void wxTreeListMainWindow::SelectAll() { - wxCHECK_RET (HasFlag(wxTR_MULTIPLE), _T("invalid tree style")); + wxCHECK_RET (HasFlag(wxTR_MULTIPLE), _T("invalid tree style, must have wxTR_MULTIPLE style to select all items")); // send event to user code wxTreeEvent event (wxEVT_COMMAND_TREE_SEL_CHANGING, m_owner->GetId()); @@ -2696,6 +2690,7 @@ void wxTreeListMainWindow::SelectAll() { wxTreeItemId root = GetRootItem(); wxTreeListItem *first = (wxTreeListItem *)GetFirstChild (root, cookie).m_pItem; wxTreeListItem *last = (wxTreeListItem *)GetLastChild (root, cookie).m_pItem; + if (!first || !last) return; if (!TagAllChildrenUntilLast (first, last)) { TagNextChildren (first, last); } @@ -3026,24 +3021,34 @@ void wxTreeListMainWindow::PaintItem (wxTreeListItem *item, wxDC& dc) { #endif // !__WXMAC__ dc.SetTextForeground (colTextHilight); }else if (item->IsSelected()) { +#if defined(__WXGTK2__) || defined(__WXMAC__) + int flags = wxCONTROL_SELECTED; + if (m_hasFocus) + { + flags |= wxCONTROL_FOCUSED; +#ifdef __WXMAC__ + dc.SetTextForeground( *wxWHITE ); +#endif + } + wxRendererNative::GetDefault().DrawItemSelectionRect( m_owner, dc, wxRect( 0, item->GetY() + off_h, total_w, total_h - off_h ), flags); +#else if (!m_isDragging && m_hasFocus) { dc.SetBrush (*m_hilightBrush); -#ifndef __WXMAC__ // don't draw rect outline if we already have the background color dc.SetPen (*wxBLACK_PEN); -#endif // !__WXMAC__ }else{ dc.SetBrush (*m_hilightUnfocusedBrush); -#ifndef __WXMAC__ // don't draw rect outline if we already have the background color dc.SetPen (*wxTRANSPARENT_PEN); -#endif // !__WXMAC__ } dc.SetTextForeground (colTextHilight); +#endif // defined(__WXGTK2__) || defined(__WXMAC__) }else if (item == m_curItem) { dc.SetPen (m_hasFocus? *wxBLACK_PEN: *wxTRANSPARENT_PEN); }else{ dc.SetTextForeground (colText); } +#if !defined(__WXGTK2__) && !defined(__WXMAC__) dc.DrawRectangle (0, item->GetY() + off_h, total_w, total_h - off_h); +#endif }else{ dc.SetTextForeground (colText); } @@ -3104,24 +3109,34 @@ void wxTreeListMainWindow::PaintItem (wxTreeListItem *item, wxDC& dc) { #endif // !__WXMAC__ dc.SetTextForeground (colTextHilight); }else if (item->IsSelected()) { +#if defined(__WXGTK2__) || defined(__WXMAC__) + int flags = wxCONTROL_SELECTED; + if (m_hasFocus) + { + flags |= wxCONTROL_FOCUSED; +#ifdef __WXMAC__ + dc.SetTextForeground( *wxWHITE ); +#endif + } + wxRendererNative::GetDefault().DrawItemSelectionRect( m_owner, dc, wxRect( 0, item->GetY() + off_h, total_w, total_h - off_h ), flags); +#else if (!m_isDragging && m_hasFocus) { dc.SetBrush (*m_hilightBrush); -#ifndef __WXMAC__ // don't draw rect outline if we already have the background color dc.SetPen (*wxBLACK_PEN); -#endif // !__WXMAC__ }else{ dc.SetBrush (*m_hilightUnfocusedBrush); -#ifndef __WXMAC__ // don't draw rect outline if we already have the background color - dc.SetPen (*wxTRANSPARENT_PEN); -#endif // !__WXMAC__ + dc.SetPen (*wxTRANSPARENT_PEN); } dc.SetTextForeground (colTextHilight); +#endif // defined(__WXGTK2__) || defined(__WXMAC__) }else if (item == m_curItem) { dc.SetPen (m_hasFocus? *wxBLACK_PEN: *wxTRANSPARENT_PEN); }else{ dc.SetTextForeground (colText); } +#if !defined(__WXGTK2__) && !defined(__WXMAC__) dc.DrawRectangle (text_x, item->GetY() + off_h, text_w, total_h - off_h); +#endif }else{ dc.SetTextForeground (colText); } @@ -3585,7 +3600,7 @@ void wxTreeListMainWindow::OnChar (wxKeyEvent &event) { default: if (event.GetKeyCode() >= (int)' ') { if (!m_findTimer->IsRunning()) m_findStr.Clear(); - m_findStr.Append (event.GetKeyCode()); + m_findStr.Append ((char)event.GetKeyCode()); m_findTimer->Start (FIND_TIMER_TICKS, wxTIMER_ONE_SHOT); wxTreeItemId prev = m_curItem? (wxTreeItemId*)m_curItem: (wxTreeItemId*)NULL; while (true) { @@ -3795,6 +3810,7 @@ void wxTreeListMainWindow::OnMouse (wxMouseEvent &event) { #else nevent.SetItem (item); // the item the drag is ended #endif + nevent.SetPoint (p); nevent.Veto(); // dragging must be explicit allowed! m_owner->GetEventHandler()->ProcessEvent (nevent); @@ -4620,8 +4636,7 @@ void wxTreeListCtrl::ScrollTo(const wxTreeItemId& item) wxTreeItemId wxTreeListCtrl::HitTest(const wxPoint& pos, int& flags, int& column) { - wxPoint p = m_main_win->ScreenToClient (ClientToScreen (pos)); - return m_main_win->HitTest (p, flags, column); + return m_main_win->HitTest (pos, flags, column); } bool wxTreeListCtrl::GetBoundingRect(const wxTreeItemId& item, wxRect& rect, @@ -4666,6 +4681,18 @@ int wxTreeListCtrl::GetColumnCount() const void wxTreeListCtrl::SetColumnWidth(int column, int width) { + if (width == wxLIST_AUTOSIZE_USEHEADER) + { + wxFont font = m_header_win->GetFont(); + m_header_win->GetTextExtent(m_header_win->GetColumnText(column), &width, NULL, NULL, NULL, font.Ok()? &font: NULL); + //search wxTreeListHeaderWindow::OnPaint to understand this: + width += 2*EXTRA_WIDTH + MARGIN; + } + else if (width == wxLIST_AUTOSIZE) + { + width = m_main_win->GetBestColumnWidth(column); + } + m_header_win->SetColumnWidth (column, width); m_header_win->Refresh(); }