From df4a099cbea76cf49104ea9ec79583d845b04b40 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 25 Jan 2009 18:34:45 +0000 Subject: [PATCH] fix state images after changing their style (see #9591) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58409 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/treectrl/treetest.cpp | 28 ++++++++++++++++++++++++++++ samples/treectrl/treetest.h | 10 ++++++++++ 2 files changed, 38 insertions(+) diff --git a/samples/treectrl/treetest.cpp b/samples/treectrl/treetest.cpp index 15069ad..1daf446 100644 --- a/samples/treectrl/treetest.cpp +++ b/samples/treectrl/treetest.cpp @@ -680,6 +680,11 @@ void MyFrame::OnToggleAlternateStates(wxCommandEvent& WXUNUSED(event)) m_treeCtrl->SetAlternateStates(!alternateStates); m_treeCtrl->CreateStateImageList(); + + // normal states < alternate states + // so we must reset broken states + if ( alternateStates ) + m_treeCtrl->ResetBrokenStateImages(); } void MyFrame::OnToggleButtons(wxCommandEvent& WXUNUSED(event)) @@ -1152,6 +1157,29 @@ void MyTreeCtrl::DoToggleState(const wxTreeItemId& item) } } +void MyTreeCtrl::DoResetBrokenStateImages(const wxTreeItemId& idParent, + wxTreeItemIdValue cookie, int state) +{ + wxTreeItemId id; + + if ( !cookie ) + id = GetFirstChild(idParent, cookie); + else + id = GetNextChild(idParent, cookie); + + if ( !id.IsOk() ) + return; + + int curState = GetItemState(id); + if ( curState != wxTREE_ITEMSTATE_NONE && curState > state ) + SetItemState(id, state); + + if (ItemHasChildren(id)) + DoResetBrokenStateImages(id, 0, state); + + DoResetBrokenStateImages(idParent, cookie, state); +} + void MyTreeCtrl::LogEvent(const wxChar *name, const wxTreeEvent& event) { wxTreeItemId item = event.GetItem(); diff --git a/samples/treectrl/treetest.h b/samples/treectrl/treetest.h index 5b93a81..8fd1775 100644 --- a/samples/treectrl/treetest.h +++ b/samples/treectrl/treetest.h @@ -123,6 +123,13 @@ public: void SetAlternateStates(bool show) { m_alternateStates = show; } bool AlternateStates() const { return m_alternateStates; } + void ResetBrokenStateImages() + { + const size_t count = GetStateImageList()->GetImageCount(); + int state = count > 0 ? count - 1 : wxTREE_ITEMSTATE_NONE; + DoResetBrokenStateImages(GetRootItem(), 0, state); + } + protected: virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2); @@ -139,6 +146,9 @@ private: size_t depth, size_t folder); + void DoResetBrokenStateImages(const wxTreeItemId& idParent, + wxTreeItemIdValue cookie, int state); + void LogEvent(const wxChar *name, const wxTreeEvent& event); int m_imageSize; // current size of images -- 2.7.4