X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..2d19ad25782b1b370cd26d0f17d45856d201fc70:/src/msw/treectrl.cpp diff --git a/src/msw/treectrl.cpp b/src/msw/treectrl.cpp index 73e8d4d856..84ec966cea 100644 --- a/src/msw/treectrl.cpp +++ b/src/msw/treectrl.cpp @@ -46,9 +46,8 @@ #include "wx/log.h" #include "wx/dynarray.h" #include "wx/imaglist.h" -#include "wx/treectrl.h" #include "wx/settings.h" - +#include "wx/msw/treectrl.h" #include "wx/msw/dragimag.h" #ifdef __GNUWIN32_OLD__ @@ -498,6 +497,7 @@ void wxTreeCtrl::Init() { m_imageListNormal = NULL; m_imageListState = NULL; + m_ownsImageListNormal = m_ownsImageListState = FALSE; m_textCtrl = NULL; m_hasAnyAttr = FALSE; m_dragImage = NULL; @@ -519,8 +519,10 @@ bool wxTreeCtrl::Create(wxWindow *parent, return FALSE; DWORD wstyle = WS_VISIBLE | WS_CHILD | WS_TABSTOP | - TVS_HASLINES | TVS_SHOWSELALWAYS /* | WS_CLIPSIBLINGS */; + TVS_SHOWSELALWAYS /* | WS_CLIPSIBLINGS */; + if ((m_windowStyle & wxTR_NO_LINES) == 0) + wstyle |= TVS_HASLINES; if ( m_windowStyle & wxTR_HAS_BUTTONS ) wstyle |= TVS_HASBUTTONS; @@ -640,6 +642,9 @@ wxTreeCtrl::~wxTreeCtrl() // delete user data to prevent memory leaks DeleteAllItems(); + + if (m_ownsImageListNormal) delete m_imageListNormal; + if (m_ownsImageListState) delete m_imageListState; } // ---------------------------------------------------------------------------- @@ -703,12 +708,28 @@ void wxTreeCtrl::SetAnyImageList(wxImageList *imageList, int which) void wxTreeCtrl::SetImageList(wxImageList *imageList) { + if (m_ownsImageListNormal) delete m_imageListNormal; SetAnyImageList(m_imageListNormal = imageList, TVSIL_NORMAL); + m_ownsImageListNormal = FALSE; } void wxTreeCtrl::SetStateImageList(wxImageList *imageList) { + if (m_ownsImageListState) delete m_imageListState; SetAnyImageList(m_imageListState = imageList, TVSIL_STATE); + 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, @@ -1101,7 +1122,7 @@ wxTreeItemId wxTreeCtrl::GetRootItem() const wxTreeItemId wxTreeCtrl::GetSelection() const { - wxCHECK_MSG( !(m_windowStyle & wxTR_MULTIPLE), (WXHTREEITEM)0, + wxCHECK_MSG( !(m_windowStyle & wxTR_MULTIPLE), (long)(WXHTREEITEM)0, wxT("this only works with single selection controls") ); return wxTreeItemId((WXHTREEITEM) TreeView_GetSelection(GetHwnd())); @@ -1300,7 +1321,7 @@ wxTreeItemId wxTreeCtrl::AddRoot(const wxString& text, int image, int selectedImage, wxTreeItemData *data) { - return DoInsertItem(wxTreeItemId((WXHTREEITEM) 0), (WXHTREEITEM) 0, + return DoInsertItem(wxTreeItemId((long) (WXHTREEITEM) 0), (long)(WXHTREEITEM) 0, text, image, selectedImage, data); } @@ -1465,7 +1486,7 @@ void wxTreeCtrl::Unselect() wxT("doesn't make sense, may be you want UnselectAll()?") ); // just remove the selection - SelectItem(wxTreeItemId((WXHTREEITEM) 0)); + SelectItem(wxTreeItemId((long) (WXHTREEITEM) 0)); } void wxTreeCtrl::UnselectAll() @@ -2255,6 +2276,11 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) delete data; // can't be NULL here m_itemsWithIndirectData.Remove(item); +#if 0 + int iIndex = m_itemsWithIndirectData.Index(item); + wxASSERT( iIndex != wxNOT_FOUND) ; + m_itemsWithIndirectData.wxBaseArray::RemoveAt((size_t)iIndex); +#endif } else { @@ -2324,18 +2350,5 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) return processed; } -// ---------------------------------------------------------------------------- -// Tree event -// ---------------------------------------------------------------------------- - -IMPLEMENT_DYNAMIC_CLASS(wxTreeEvent, wxNotifyEvent) - -wxTreeEvent::wxTreeEvent(wxEventType commandType, int id) - : wxNotifyEvent(commandType, id) -{ - m_code = 0; - m_itemOld = 0; -} - #endif // __WIN95__