#include "state4.xpm"
#include "state5.xpm"
+#include "unchecked.xpm"
+#include "checked.xpm"
+
#ifndef __WXMSW__
#include "../sample.xpm"
#endif
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))
}
else
{
-#if 0
- int width = ::GetSystemMetrics(SM_CXMENUCHECK),
- height = ::GetSystemMetrics(SM_CYMENUCHECK);
-#else
- int width = 16;
- int height = 16;
-#endif
-
- // make an state checkbox image list
+ wxIcon icons[2];
+ icons[0] = wxIcon(unchecked_xpm);
+ icons[1] = wxIcon(checked_xpm);
+
+ int width = icons[0].GetWidth(),
+ height = icons[0].GetHeight();
+
+ // Make an state image list containing small icons
states = new wxImageList(width, height, true);
- wxBitmap checkBmp(width, height);
- wxRect rect (0, 0, width, height);
-
- wxRendererNative& renderer = wxRendererNative::Get();
-
- // create no checked image
- {
- // first create bitmap in a memory DC
- wxMemoryDC memDC(checkBmp);
- memDC.Clear();
- // then draw a check mark into it
- renderer.DrawCheckBox(this, memDC, rect, 0);
- } // select checkBmp out of memDC
-
- states->Add(checkBmp);
-
- // create checked image
- {
- wxMemoryDC memDC(checkBmp);
- renderer.DrawCheckBox(this, memDC, rect, wxCONTROL_CHECKED);
- }
-
- states->Add(checkBmp);
+ for ( size_t i = 0; i < WXSIZEOF(icons); i++ )
+ states->Add(icons[i]);
}
AssignStateImageList(states);
}
}
+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();
wxPoint pt = event.GetPosition();
wxLogMessage(wxT("OnContextMenu at screen coords (%i, %i)"), pt.x, pt.y);
+
+ event.Skip();
}
void MyTreeCtrl::ShowMenu(wxTreeItemId id, const wxPoint& pt)