]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/treectrl.cpp
test wxExecute() in the sample
[wxWidgets.git] / src / msw / treectrl.cpp
index 242eab62b1e51998924a14c590c28aeb4d42eacd..5628353b4b2ed7e391d62c25aaab4b7b51326bcb 100644 (file)
@@ -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() &&