X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a9c1265fcad7d69e22647c6a598c91cbfb26faee..24fe8dc7f8f5426de2fb748b97c79e52b60db89d:/src/msw/treectrl.cpp diff --git a/src/msw/treectrl.cpp b/src/msw/treectrl.cpp index 242eab62b1..5628353b4b 100644 --- a/src/msw/treectrl.cpp +++ b/src/msw/treectrl.cpp @@ -303,27 +303,24 @@ struct wxTreeViewItem : public TV_ITEM // wxVirutalNode is used in place of a single root when 'hidden' root is // specified. -class wxVirtualNode +class wxVirtualNode : public wxTreeViewItem { public: wxVirtualNode(wxTreeItemData *data) + : wxTreeViewItem(TVI_ROOT, 0) { m_data = data; - - m_tvItem = new wxTreeViewItem(TVI_ROOT, 0); } ~wxVirtualNode() { delete m_data; - delete m_tvItem; } wxTreeItemData *GetData() const { return m_data; } void SetData(wxTreeItemData *data) { delete m_data; m_data = data; } private: - wxTreeViewItem *m_tvItem; wxTreeItemData *m_data; }; @@ -1298,11 +1295,21 @@ wxTreeItemId wxTreeCtrl::GetSelection() const wxTreeItemId wxTreeCtrl::GetParent(const wxTreeItemId& item) const { - HTREEITEM hItem = TreeView_GetParent(GetHwnd(), HITEM(item)); - if ( !hItem && HasFlag(wxTR_HIDE_ROOT) ) + HTREEITEM hItem; + + if ( IS_VIRTUAL_ROOT(item) ) { - // the top level items should have the virtual root as their parent - hItem = TVI_ROOT; + // no parent for the virtual root + hItem = 0; + } + else // normal item + { + hItem = TreeView_GetParent(GetHwnd(), HITEM(item)); + if ( !hItem && HasFlag(wxTR_HIDE_ROOT) ) + { + // the top level items should have the virtual root as their parent + hItem = TVI_ROOT; + } } return wxTreeItemId((WXHTREEITEM)hItem); @@ -1507,7 +1514,7 @@ wxTreeItemId wxTreeCtrl::AddRoot(const wxString& text, return TVI_ROOT; } - return DoInsertItem(wxTreeItemId((WXHTREEITEM) 0), (WXHTREEITEM) 0, + return DoInsertItem(wxTreeItemId((long)(WXHTREEITEM) 0), (long)(WXHTREEITEM) 0, text, image, selectedImage, data); } @@ -1614,11 +1621,8 @@ void wxTreeCtrl::DoExpand(const wxTreeItemId& item, int flag) wxT("Unknown flag in wxTreeCtrl::DoExpand") ); // A hidden root can be neither expanded nor collapsed. - if ( (HITEM(item) == TVI_ROOT) && (m_windowStyle & wxTR_HIDE_ROOT) ) - { - // No action will be taken. - return; - } + wxCHECK_RET( !(m_windowStyle & wxTR_HIDE_ROOT) || (HITEM(item) != TVI_ROOT), + 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 @@ -2295,13 +2299,12 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) eventType = wxEVT_COMMAND_TREE_KEY_DOWN; TV_KEYDOWN *info = (TV_KEYDOWN *)lParam; - // we pass 0 as last CreateKeyEvent() parameter because we + // we pass 0 as 2 last CreateKeyEvent() parameters because we // don't have access to the real key press flags here - but as // it is only used to determin wxKeyEvent::m_altDown flag it's // not too bad event.m_evtKey = CreateKeyEvent(wxEVT_KEY_DOWN, - wxCharCodeMSWToWX(info->wVKey), - 0); + wxCharCodeMSWToWX(info->wVKey)); // a separate event for Space/Return if ( !wxIsCtrlDown() && !wxIsShiftDown() &&