X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/49732ef2016ce983a66945007f093692cc734b0b..afd0f084f419d769dba772863472a3f388fd6ab1:/src/msw/treectrl.cpp diff --git a/src/msw/treectrl.cpp b/src/msw/treectrl.cpp index 840aa202c4..52c7d9f768 100644 --- a/src/msw/treectrl.cpp +++ b/src/msw/treectrl.cpp @@ -42,7 +42,7 @@ #include "wx/dynarray.h" #include "wx/imaglist.h" #include "wx/settings.h" -#include "wx/msw/treectrl.h" +#include "wx/treectrl.h" #include "wx/msw/dragimag.h" // macros to hide the cast ugliness @@ -311,6 +311,11 @@ public: m_tree = tree; } + // give it a virtual dtor: not really needed as the class is never used + // polymorphically and not even allocated on heap at all, but this is safer + // (in case it ever is) and silences the compiler warnings for now + virtual ~wxTreeTraversal() { } + // do traverse the tree: visit all items (recursively by default) under the // given one; return true if all items were traversed or false if the // traversal was aborted because OnVisit returned false @@ -606,9 +611,6 @@ bool wxTreeTraversal::Traverse(const wxTreeItemId& root, bool recursively) void wxTreeCtrl::Init() { - m_imageListNormal = NULL; - m_imageListState = NULL; - m_ownsImageListNormal = m_ownsImageListState = false; m_textCtrl = NULL; m_hasAnyAttr = false; m_dragImage = NULL; @@ -772,9 +774,6 @@ wxTreeCtrl::~wxTreeCtrl() // delete user data to prevent memory leaks // also deletes hidden root node storage. DeleteAllItems(); - - if (m_ownsImageListNormal) delete m_imageListNormal; - if (m_ownsImageListState) delete m_imageListState; } // ---------------------------------------------------------------------------- @@ -818,9 +817,9 @@ void wxTreeCtrl::DoSetItem(wxTreeViewItem* tvItem) } } -size_t wxTreeCtrl::GetCount() const +unsigned int wxTreeCtrl::GetCount() const { - return (size_t)TreeView_GetCount(GetHwnd()); + return (unsigned int)TreeView_GetCount(GetHwnd()); } unsigned int wxTreeCtrl::GetIndent() const @@ -833,22 +832,12 @@ void wxTreeCtrl::SetIndent(unsigned int indent) TreeView_SetIndent(GetHwnd(), indent); } -wxImageList *wxTreeCtrl::GetImageList() const -{ - return m_imageListNormal; -} - -wxImageList *wxTreeCtrl::GetStateImageList() const -{ - return m_imageListState; -} - void wxTreeCtrl::SetAnyImageList(wxImageList *imageList, int which) { // no error return - TreeView_SetImageList(GetHwnd(), - imageList ? imageList->GetHIMAGELIST() : 0, - which); + (void) TreeView_SetImageList(GetHwnd(), + imageList ? imageList->GetHIMAGELIST() : 0, + which); } void wxTreeCtrl::SetImageList(wxImageList *imageList) @@ -867,18 +856,6 @@ void wxTreeCtrl::SetStateImageList(wxImageList *imageList) m_ownsImageListState = false; } -void wxTreeCtrl::AssignImageList(wxImageList *imageList) -{ - SetImageList(imageList); - m_ownsImageListNormal = true; -} - -void wxTreeCtrl::AssignStateImageList(wxImageList *imageList) -{ - SetStateImageList(imageList); - m_ownsImageListState = true; -} - size_t wxTreeCtrl::GetChildrenCount(const wxTreeItemId& item, bool recursively) const { @@ -1629,11 +1606,11 @@ size_t wxTreeCtrl::GetSelections(wxArrayTreeItemIds& selections) const // Usual operations // ---------------------------------------------------------------------------- -wxTreeItemId wxTreeCtrl::DoInsertItem(const wxTreeItemId& parent, - wxTreeItemId hInsertAfter, - const wxString& text, - int image, int selectedImage, - wxTreeItemData *data) +wxTreeItemId wxTreeCtrl::DoInsertAfter(const wxTreeItemId& parent, + const wxTreeItemId& hInsertAfter, + const wxString& text, + int image, int selectedImage, + wxTreeItemData *data) { wxCHECK_MSG( parent.IsOk() || !TreeView_GetRoot(GetHwnd()), wxTreeItemId(), @@ -1706,20 +1683,6 @@ wxTreeItemId wxTreeCtrl::DoInsertItem(const wxTreeItemId& parent, // for compatibility only #if WXWIN_COMPATIBILITY_2_4 -wxTreeItemId wxTreeCtrl::InsertItem(const wxTreeItemId& parent, - const wxString& text, - int image, int selImage, - long insertAfter) -{ - return DoInsertItem(parent, wxTreeItemId((void *)insertAfter), text, - image, selImage, NULL); -} - -wxImageList *wxTreeCtrl::GetImageList(int) const -{ - return GetImageList(); -} - void wxTreeCtrl::SetImageList(wxImageList *imageList, int) { SetImageList(imageList); @@ -1750,59 +1713,40 @@ wxTreeItemId wxTreeCtrl::AddRoot(const wxString& text, return TVI_ROOT; } - return DoInsertItem(wxTreeItemId(), wxTreeItemId(), - text, image, selectedImage, data); -} - -wxTreeItemId wxTreeCtrl::PrependItem(const wxTreeItemId& parent, - const wxString& text, - int image, int selectedImage, - wxTreeItemData *data) -{ - return DoInsertItem(parent, TVI_FIRST, - text, image, selectedImage, data); + return DoInsertAfter(wxTreeItemId(), wxTreeItemId(), + text, image, selectedImage, data); } -wxTreeItemId wxTreeCtrl::InsertItem(const wxTreeItemId& parent, - const wxTreeItemId& idPrevious, - const wxString& text, - int image, int selectedImage, - wxTreeItemData *data) -{ - return DoInsertItem(parent, idPrevious, text, image, selectedImage, data); -} - -wxTreeItemId wxTreeCtrl::InsertItem(const wxTreeItemId& parent, - size_t index, - const wxString& text, - int image, int selectedImage, - wxTreeItemData *data) +wxTreeItemId wxTreeCtrl::DoInsertItem(const wxTreeItemId& parent, + size_t index, + const wxString& text, + int image, int selectedImage, + wxTreeItemData *data) { - // find the item from index - wxTreeItemIdValue cookie; - wxTreeItemId idPrev, idCur = GetFirstChild(parent, cookie); - while ( index != 0 && idCur.IsOk() ) + wxTreeItemId idPrev; + if ( index == (size_t)-1 ) { - index--; - - idPrev = idCur; - idCur = GetNextChild(parent, cookie); + // special value: append to the end + idPrev = TVI_LAST; } + else // find the item from index + { + wxTreeItemIdValue cookie; + wxTreeItemId idCur = GetFirstChild(parent, cookie); + while ( index != 0 && idCur.IsOk() ) + { + index--; - // assert, not check: if the index is invalid, we will append the item - // to the end - wxASSERT_MSG( index == 0, _T("bad index in wxTreeCtrl::InsertItem") ); + idPrev = idCur; + idCur = GetNextChild(parent, cookie); + } - return DoInsertItem(parent, idPrev, text, image, selectedImage, data); -} + // assert, not check: if the index is invalid, we will append the item + // to the end + wxASSERT_MSG( index == 0, _T("bad index in wxTreeCtrl::InsertItem") ); + } -wxTreeItemId wxTreeCtrl::AppendItem(const wxTreeItemId& parent, - const wxString& text, - int image, int selectedImage, - wxTreeItemData *data) -{ - return DoInsertItem(parent, TVI_LAST, - text, image, selectedImage, data); + return DoInsertAfter(parent, idPrev, text, image, selectedImage, data); } void wxTreeCtrl::Delete(const wxTreeItemId& item) @@ -1864,7 +1808,7 @@ void wxTreeCtrl::DoExpand(const wxTreeItemId& item, int flag) // A hidden root can be neither expanded nor collapsed. wxCHECK_RET( !(m_windowStyle & wxTR_HIDE_ROOT) || (HITEM(item) != TVI_ROOT), - wxT("Can't expand/collapse hidden root node!") ) + wxT("Can't expand/collapse hidden root node!") ); // TreeView_Expand doesn't send TVN_ITEMEXPAND(ING) messages, so we must // emulate them. This behaviour has changed slightly with comctl32.dll @@ -1998,16 +1942,6 @@ void wxTreeCtrl::SelectItem(const wxTreeItemId& item, bool select) } } -void wxTreeCtrl::UnselectItem(const wxTreeItemId& item) -{ - SelectItem(item, false); -} - -void wxTreeCtrl::ToggleItemSelection(const wxTreeItemId& item) -{ - SelectItem(item, !IsSelected(item)); -} - void wxTreeCtrl::EnsureVisible(const wxTreeItemId& item) { // no error return @@ -2080,13 +2014,13 @@ void wxTreeCtrl::DoEndEditLabel(bool discardChanges) DeleteTextCtrl(); } -wxTreeItemId wxTreeCtrl::HitTest(const wxPoint& point, int& flags) +wxTreeItemId wxTreeCtrl::DoTreeHitTest(const wxPoint& point, int& flags) { TV_HITTESTINFO hitTestInfo; hitTestInfo.pt.x = (int)point.x; hitTestInfo.pt.y = (int)point.y; - TreeView_HitTest(GetHwnd(), &hitTestInfo); + (void) TreeView_HitTest(GetHwnd(), &hitTestInfo); flags = 0; @@ -2137,38 +2071,6 @@ bool wxTreeCtrl::GetBoundingRect(const wxTreeItemId& item, } } -wxSize wxTreeCtrl::DoGetBestSize() const -{ - wxSize size; - - // this doesn't really compute the total bounding rectangle of all items - // but a not too bad guess of it which has the advantage of not having to - // examine all (potentially hundreds or thousands) items in the control - for ( wxTreeItemId item = GetRootItem(); - item.IsOk(); - item = GetLastChild(item) ) - { - wxRect rect; - - // last parameter is "true" to get only the dimensions of the text - // label, we don't want to get the entire item width as it's determined - // by the current size - if ( GetBoundingRect(item, rect, true) ) - { - if ( size.x < rect.x + rect.width ) - size.x = rect.x + rect.width; - if ( size.y < rect.y + rect.height ) - size.y = rect.y + rect.height; - } - } - - // need some minimal size even for empty tree - if ( !size.x || !size.y ) - size = wxControl::DoGetBestSize(); - - return size; -} - // ---------------------------------------------------------------------------- // sorting stuff // ---------------------------------------------------------------------------- @@ -2206,12 +2108,6 @@ int CALLBACK wxTreeSortHelper::Compare(LPARAM pItem1, GetIdFromData(tree, pItem2)); } -int wxTreeCtrl::OnCompareItems(const wxTreeItemId& item1, - const wxTreeItemId& item2) -{ - return wxStrcmp(GetItemText(item1), GetItemText(item2)); -} - void wxTreeCtrl::SortChildren(const wxTreeItemId& item) { wxCHECK_RET( item.IsOk(), wxT("invalid tree item") ); @@ -2314,12 +2210,12 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara int x = GET_X_LPARAM(lParam), y = GET_Y_LPARAM(lParam); HTREEITEM htItem = GetItemFromPoint(GetHwnd(), x, y); - + TV_HITTESTINFO tvht; tvht.pt.x = x; tvht.pt.y = y; - - TreeView_HitTest(GetHwnd(), &tvht); + + (void) TreeView_HitTest(GetHwnd(), &tvht); switch ( nMsg ) { @@ -2344,7 +2240,7 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara { m_htClickedItem = (WXHTREEITEM) htItem; m_ptClick = wxPoint(x, y); - + if ( wParam & MK_CONTROL ) { SetFocus(); @@ -2384,7 +2280,7 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara { // avoid doing anything if we click on the only // currently selected item - + SetFocus(); wxArrayTreeItemIds selections; @@ -2438,29 +2334,29 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara tv.hdr.hwndFrom = GetHwnd(); tv.hdr.idFrom = ::GetWindowLong( GetHwnd(), GWL_ID ); tv.hdr.code = TVN_BEGINDRAG; - + tv.itemNew.hItem = HITEM(m_htClickedItem); - + TVITEM tviAux; ZeroMemory(&tviAux, sizeof(tviAux)); tviAux.hItem = HITEM(m_htClickedItem); tviAux.mask = TVIF_STATE | TVIF_PARAM; tviAux.stateMask = 0xffffffff; TreeView_GetItem( GetHwnd(), &tviAux ); - + tv.itemNew.state = tviAux.state; tv.itemNew.lParam = tviAux.lParam; - + tv.ptDrag.x = x; tv.ptDrag.y = y; - + ::SendMessage( pWnd, WM_NOTIFY, tv.hdr.idFrom, (LPARAM)&tv ); } m_htClickedItem.Unset(); } } #endif // __WXWINCE__ - + if ( m_dragImage ) { m_dragImage->Move(wxPoint(x, y)); @@ -2847,7 +2743,7 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) WXWPARAM wParam = info->wVKey; - int keyCode = wxCharCodeMSWToWX(info->wVKey); + int keyCode = wxCharCodeMSWToWX(wParam); if ( !keyCode ) { // wxCharCodeMSWToWX() returns 0 to indicate that this is a @@ -3256,4 +3152,3 @@ int wxTreeCtrl::GetState(const wxTreeItemId& node) } #endif // wxUSE_TREECTRL -