// ----------------------------------------------------------------------------
#if wxUSE_EXTENDED_RTTI
+WX_DEFINE_FLAGS( wxTreeCtrlStyle )
+
+wxBEGIN_FLAGS( wxTreeCtrlStyle )
+ // new style border flags, we put them first to
+ // use them for streaming out
+ wxFLAGS_MEMBER(wxBORDER_SIMPLE)
+ wxFLAGS_MEMBER(wxBORDER_SUNKEN)
+ wxFLAGS_MEMBER(wxBORDER_DOUBLE)
+ wxFLAGS_MEMBER(wxBORDER_RAISED)
+ wxFLAGS_MEMBER(wxBORDER_STATIC)
+ wxFLAGS_MEMBER(wxBORDER_NONE)
+
+ // old style border flags
+ wxFLAGS_MEMBER(wxSIMPLE_BORDER)
+ wxFLAGS_MEMBER(wxSUNKEN_BORDER)
+ wxFLAGS_MEMBER(wxDOUBLE_BORDER)
+ wxFLAGS_MEMBER(wxRAISED_BORDER)
+ wxFLAGS_MEMBER(wxSTATIC_BORDER)
+ wxFLAGS_MEMBER(wxBORDER)
+
+ // standard window styles
+ wxFLAGS_MEMBER(wxTAB_TRAVERSAL)
+ wxFLAGS_MEMBER(wxCLIP_CHILDREN)
+ wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW)
+ wxFLAGS_MEMBER(wxWANTS_CHARS)
+ wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE)
+ wxFLAGS_MEMBER(wxALWAYS_SHOW_SB )
+ wxFLAGS_MEMBER(wxVSCROLL)
+ wxFLAGS_MEMBER(wxHSCROLL)
+
+ wxFLAGS_MEMBER(wxTR_EDIT_LABELS)
+ wxFLAGS_MEMBER(wxTR_NO_BUTTONS)
+ wxFLAGS_MEMBER(wxTR_HAS_BUTTONS)
+ wxFLAGS_MEMBER(wxTR_TWIST_BUTTONS)
+ wxFLAGS_MEMBER(wxTR_NO_LINES)
+ wxFLAGS_MEMBER(wxTR_FULL_ROW_HIGHLIGHT)
+ wxFLAGS_MEMBER(wxTR_LINES_AT_ROOT)
+ wxFLAGS_MEMBER(wxTR_HIDE_ROOT)
+ wxFLAGS_MEMBER(wxTR_ROW_LINES)
+ wxFLAGS_MEMBER(wxTR_HAS_VARIABLE_ROW_HEIGHT)
+ wxFLAGS_MEMBER(wxTR_SINGLE)
+ wxFLAGS_MEMBER(wxTR_MULTIPLE)
+ wxFLAGS_MEMBER(wxTR_EXTENDED)
+ wxFLAGS_MEMBER(wxTR_DEFAULT_STYLE)
+
+wxEND_FLAGS( wxTreeCtrlStyle )
+
IMPLEMENT_DYNAMIC_CLASS_XTI(wxTreeCtrl, wxControl,"wx/treectrl.h")
-WX_BEGIN_PROPERTIES_TABLE(wxTreeCtrl)
-WX_END_PROPERTIES_TABLE()
+wxBEGIN_PROPERTIES_TABLE(wxTreeCtrl)
+ wxEVENT_PROPERTY( TextUpdated , wxEVT_COMMAND_TEXT_UPDATED , wxCommandEvent )
+ wxEVENT_RANGE_PROPERTY( TreeEvent , wxEVT_COMMAND_TREE_BEGIN_DRAG , wxEVT_COMMAND_TREE_STATE_IMAGE_CLICK , wxTreeEvent )
+ wxPROPERTY_FLAGS( WindowStyle , wxTreeCtrlStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style
+wxEND_PROPERTIES_TABLE()
-WX_BEGIN_HANDLERS_TABLE(wxTreeCtrl)
-WX_END_HANDLERS_TABLE()
+wxBEGIN_HANDLERS_TABLE(wxTreeCtrl)
+wxEND_HANDLERS_TABLE()
-WX_CONSTRUCTOR_5( wxTreeCtrl , wxWindow* , Parent , wxWindowID , Id , wxPoint , Position , wxSize , Size , long , WindowStyle )
+wxCONSTRUCTOR_5( wxTreeCtrl , wxWindow* , Parent , wxWindowID , Id , wxPoint , Position , wxSize , Size , long , WindowStyle )
#else
IMPLEMENT_DYNAMIC_CLASS(wxTreeCtrl, wxControl)
#endif
// the HTREEITEM with TVM_GETITEMRECT
*(HTREEITEM *)&rect = HITEM(item);
- // false means get item rect for the whole item, not only text
- return SendMessage(GetHwnd(), TVM_GETITEMRECT, false, (LPARAM)&rect) != 0;
+ // true means to get rect for just the text, not the whole line
+ if ( !::SendMessage(GetHwnd(), TVM_GETITEMRECT, true, (LPARAM)&rect) )
+ {
+ // if TVM_GETITEMRECT returned false, then the item is definitely not
+ // visible (because its parent is not expanded)
+ return false;
+ }
+
+ // however if it returned true, the item might still be outside the
+ // currently visible part of the tree, test for it (notice that partly
+ // visible means visible here)
+ return rect.bottom > 0 && rect.top < GetClientSize().y;
}
bool wxTreeCtrl::ItemHasChildren(const wxTreeItemId& item) const
switch ( nMsg )
{
case WM_RBUTTONDOWN:
- // if the item we are about to right click on
- // is not already select, remove the entire
- // previous selection
- if (!::IsItemSelected(GetHwnd(), htItem))
+ // if the item we are about to right click on is not already
+ // selected or if we click outside of any item, remove the
+ // entire previous selection
+ if ( !htItem || !::IsItemSelected(GetHwnd(), htItem) )
{
UnselectAll();
}