]> git.saurik.com Git - wxWidgets.git/commitdiff
made wx[Array]TreeItemId[s] more backwards compatible
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 19 Jul 2003 23:12:33 +0000 (23:12 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 19 Jul 2003 23:12:33 +0000 (23:12 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22133 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/treebase.h
src/msw/treectrl.cpp

index 52c1cdd6eae7b3c812a49373d60c25fab122b60b..b67b80d02a8a0c441e6ca3d2257b301645f2bedc 100644 (file)
@@ -52,8 +52,15 @@ public:
         // is this a valid tree item?
     bool IsOk() const { return m_pItem != 0; }
 
         // is this a valid tree item?
     bool IsOk() const { return m_pItem != 0; }
 
-    // deprecated: only for compatibility
-    operator wxTreeItemIdValue() const { return m_pItem; }
+    // operations
+        // invalidate the item
+    void Unset() { m_pItem = 0; }
+
+#if WXWIN_COMPATIBILITY_2_4
+    // deprecated: only for compatibility, don't work on 64 bit archs
+    wxTreeItemId(long item) { m_pItem = (wxTreeItemIdValue)item; }
+    operator long() const { return (long)m_pItem; }
+#endif // WXWIN_COMPATIBILITY_2_4
 
     wxTreeItemIdValue m_pItem;
 };
 
     wxTreeItemIdValue m_pItem;
 };
@@ -92,7 +99,14 @@ protected:
     wxTreeItemId m_pItem;
 };
 
     wxTreeItemId m_pItem;
 };
 
-WX_DEFINE_EXPORTED_ARRAY_NO_PTR(wxTreeItemId, wxArrayTreeItemIds);
+WX_DEFINE_EXPORTED_ARRAY_NO_PTR(wxTreeItemIdValue, wxArrayTreeItemIdsBase);
+
+class WXDLLEXPORT wxArrayTreeItemIds : public wxArrayTreeItemIdsBase
+{
+public:
+    void Add(const wxTreeItemId& id)
+        { wxArrayTreeItemIdsBase::Add(id.m_pItem); }
+};
 
 // ----------------------------------------------------------------------------
 // constants
 
 // ----------------------------------------------------------------------------
 // constants
index 342d8188d7eb9aa209a1b28af428ca06b3edb884..a9ab74859356067adb0264ff50585f2d37c23540 100644 (file)
     #define TVM_SETTEXTCOLOR        (TV_FIRST + 30)
 #endif
 
     #define TVM_SETTEXTCOLOR        (TV_FIRST + 30)
 #endif
 
-// a macro to hide the cast ugliness
-#define HITEM(item)     (HTREEITEM)((item).m_pItem)
+// macros to hide the cast ugliness
+// --------------------------------
+
+// ptr is the real item id, i.e. wxTreeItemId::m_pItem
+#define HITEM_PTR(ptr)     (HTREEITEM)(ptr)
+
+// item here is a wxTreeItemId
+#define HITEM(item)     HITEM_PTR((item).m_pItem)
 
 // the native control doesn't support multiple selections under MSW and we
 // have 2 ways to emulate them: either using TVS_CHECKBOXES style and let
 
 // the native control doesn't support multiple selections under MSW and we
 // have 2 ways to emulate them: either using TVS_CHECKBOXES style and let
@@ -569,7 +575,6 @@ void wxTreeCtrl::Init()
     m_textCtrl = NULL;
     m_hasAnyAttr = false;
     m_dragImage = NULL;
     m_textCtrl = NULL;
     m_hasAnyAttr = false;
     m_dragImage = NULL;
-    m_htSelStart = 0;
     m_pVirtualRoot = NULL;
 
     // initialize the global array of events now as it can't be done statically
     m_pVirtualRoot = NULL;
 
     // initialize the global array of events now as it can't be done statically
@@ -1189,21 +1194,21 @@ void wxTreeCtrl::RefreshItem(const wxTreeItemId& item)
 
 wxColour wxTreeCtrl::GetItemTextColour(const wxTreeItemId& item) const
 {
 
 wxColour wxTreeCtrl::GetItemTextColour(const wxTreeItemId& item) const
 {
-    wxMapTreeAttr::const_iterator it = m_attrs.find(item);
+    wxMapTreeAttr::const_iterator it = m_attrs.find(item.m_pItem);
 
     return it == m_attrs.end() ? wxNullColour : it->second->GetTextColour();
 }
 
 wxColour wxTreeCtrl::GetItemBackgroundColour(const wxTreeItemId& item) const
 {
 
     return it == m_attrs.end() ? wxNullColour : it->second->GetTextColour();
 }
 
 wxColour wxTreeCtrl::GetItemBackgroundColour(const wxTreeItemId& item) const
 {
-    wxMapTreeAttr::const_iterator it = m_attrs.find(item);
+    wxMapTreeAttr::const_iterator it = m_attrs.find(item.m_pItem);
 
     return it == m_attrs.end() ? wxNullColour : it->second->GetBackgroundColour();
 }
 
 wxFont wxTreeCtrl::GetItemFont(const wxTreeItemId& item) const
 {
 
     return it == m_attrs.end() ? wxNullColour : it->second->GetBackgroundColour();
 }
 
 wxFont wxTreeCtrl::GetItemFont(const wxTreeItemId& item) const
 {
-    wxMapTreeAttr::const_iterator it = m_attrs.find(item);
+    wxMapTreeAttr::const_iterator it = m_attrs.find(item.m_pItem);
 
     return it == m_attrs.end() ? wxNullFont : it->second->GetFont();
 }
 
     return it == m_attrs.end() ? wxNullFont : it->second->GetFont();
 }
@@ -1212,12 +1217,12 @@ void wxTreeCtrl::SetItemTextColour(const wxTreeItemId& item,
                                    const wxColour& col)
 {
     wxTreeItemAttr *attr;
                                    const wxColour& col)
 {
     wxTreeItemAttr *attr;
-    wxMapTreeAttr::iterator it = m_attrs.find(item);
+    wxMapTreeAttr::iterator it = m_attrs.find(item.m_pItem);
     if ( it == m_attrs.end() )
     {
         m_hasAnyAttr = true;
 
     if ( it == m_attrs.end() )
     {
         m_hasAnyAttr = true;
 
-        m_attrs[item] =
+        m_attrs[item.m_pItem] =
         attr = new wxTreeItemAttr;
     }
     else
         attr = new wxTreeItemAttr;
     }
     else
@@ -1234,12 +1239,12 @@ void wxTreeCtrl::SetItemBackgroundColour(const wxTreeItemId& item,
                                          const wxColour& col)
 {
     wxTreeItemAttr *attr;
                                          const wxColour& col)
 {
     wxTreeItemAttr *attr;
-    wxMapTreeAttr::iterator it = m_attrs.find(item);
+    wxMapTreeAttr::iterator it = m_attrs.find(item.m_pItem);
     if ( it == m_attrs.end() )
     {
         m_hasAnyAttr = true;
 
     if ( it == m_attrs.end() )
     {
         m_hasAnyAttr = true;
 
-        m_attrs[item] =
+        m_attrs[item.m_pItem] =
         attr = new wxTreeItemAttr;
     }
     else // already in the hash
         attr = new wxTreeItemAttr;
     }
     else // already in the hash
@@ -1255,12 +1260,12 @@ void wxTreeCtrl::SetItemBackgroundColour(const wxTreeItemId& item,
 void wxTreeCtrl::SetItemFont(const wxTreeItemId& item, const wxFont& font)
 {
     wxTreeItemAttr *attr;
 void wxTreeCtrl::SetItemFont(const wxTreeItemId& item, const wxFont& font)
 {
     wxTreeItemAttr *attr;
-    wxMapTreeAttr::iterator it = m_attrs.find(item);
+    wxMapTreeAttr::iterator it = m_attrs.find(item.m_pItem);
     if ( it == m_attrs.end() )
     {
         m_hasAnyAttr = true;
 
     if ( it == m_attrs.end() )
     {
         m_hasAnyAttr = true;
 
-        m_attrs[item] =
+        m_attrs[item.m_pItem] =
         attr = new wxTreeItemAttr;
     }
     else // already in the hash
         attr = new wxTreeItemAttr;
     }
     else // already in the hash
@@ -1346,7 +1351,7 @@ wxTreeItemId wxTreeCtrl::GetRootItem() const
 
 wxTreeItemId wxTreeCtrl::GetSelection() const
 {
 
 wxTreeItemId wxTreeCtrl::GetSelection() const
 {
-    wxCHECK_MSG( !(m_windowStyle & wxTR_MULTIPLE), NULL,
+    wxCHECK_MSG( !(m_windowStyle & wxTR_MULTIPLE), wxTreeItemId(),
                  wxT("this only works with single selection controls") );
 
     return wxTreeItemId(TreeView_GetSelection(GetHwnd()));
                  wxT("this only works with single selection controls") );
 
     return wxTreeItemId(TreeView_GetSelection(GetHwnd()));
@@ -1602,7 +1607,7 @@ wxTreeItemId wxTreeCtrl::AddRoot(const wxString& text,
         return TVI_ROOT;
     }
 
         return TVI_ROOT;
     }
 
-    return DoInsertItem(wxTreeItemId(), 0,
+    return DoInsertItem(wxTreeItemId(), wxTreeItemId(),
                         text, image, selectedImage, data);
 }
 
                         text, image, selectedImage, data);
 }
 
@@ -1682,7 +1687,7 @@ void wxTreeCtrl::DeleteChildren(const wxTreeItemId& item)
     size_t nCount = children.Count();
     for ( size_t n = 0; n < nCount; n++ )
     {
     size_t nCount = children.Count();
     for ( size_t n = 0; n < nCount; n++ )
     {
-        if ( !TreeView_DeleteItem(GetHwnd(), HITEM(children[n])) )
+        if ( !TreeView_DeleteItem(GetHwnd(), HITEM_PTR(children[n])) )
         {
             wxLogLastError(wxT("TreeView_DeleteItem"));
         }
         {
             wxLogLastError(wxT("TreeView_DeleteItem"));
         }
@@ -1790,9 +1795,9 @@ void wxTreeCtrl::UnselectAll()
         for ( size_t n = 0; n < count; n++ )
         {
 #if wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE
         for ( size_t n = 0; n < count; n++ )
         {
 #if wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE
-            SetItemCheck(selections[n], false);
+            SetItemCheck(HITEM_PTR(selections[n]), false);
 #else // !wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE
 #else // !wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE
-            ::UnselectItem(GetHwnd(), HITEM(selections[n]));
+            ::UnselectItem(GetHwnd(), HITEM_PTR(selections[n]));
 #endif // wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE/!wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE
         }
     }
 #endif // wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE/!wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE
         }
     }
@@ -2106,7 +2111,7 @@ long wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
                         ::SetFocus(GetHwnd(), htItem);
 
                         // reset on any click without Shift
                         ::SetFocus(GetHwnd(), htItem);
 
                         // reset on any click without Shift
-                        m_htSelStart = 0;
+                        m_htSelStart.Unset();
 
                         processed = true;
                     }
 
                         processed = true;
                     }
@@ -2137,7 +2142,7 @@ long wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
                         size_t count = GetSelections(selections);
                         if ( count == 0 ||
                              count > 1 ||
                         size_t count = GetSelections(selections);
                         if ( count == 0 ||
                              count > 1 ||
-                             HITEM(selections[0]) != htItem )
+                             HITEM_PTR(selections[0]) != htItem )
                         {
                             // clear the previously selected items, if the
                             // user clicked outside of the present selection.
                         {
                             // clear the previously selected items, if the
                             // user clicked outside of the present selection.
@@ -2163,7 +2168,7 @@ long wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
                         }
 
                         // reset on any click without Shift
                         }
 
                         // reset on any click without Shift
-                        m_htSelStart = 0;
+                        m_htSelStart.Unset();
                     }
                 }
                 break;
                     }
                 }
                 break;
@@ -2239,7 +2244,7 @@ long wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
         {
             // TreeView_GetItemRect() will return false if item is not visible,
             // which may happen perfectly well
         {
             // TreeView_GetItemRect() will return false if item is not visible,
             // which may happen perfectly well
-            if ( TreeView_GetItemRect(GetHwnd(), HITEM(selections[n]),
+            if ( TreeView_GetItemRect(GetHwnd(), HITEM_PTR(selections[n]),
                                       &rect, true) )
             {
                 ::InvalidateRect(GetHwnd(), &rect, false);
                                       &rect, true) )
             {
                 ::InvalidateRect(GetHwnd(), &rect, false);