1. expand/collapse (and -ing variants) events are now separated

2. ExpandItem(action) can now be also called as ExpandItem(), CollapseItem()
   and ToggleItem()
3. several other minor changes (IsExpanded function added)


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@242 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1998-07-12 22:25:34 +00:00
parent abc7998686
commit 02ce7b722e

View File

@@ -260,13 +260,15 @@ long wxTreeCtrl::GetRootItem(void) const
return (long) ::SendMessage((HWND) GetHWND(), TVM_GETNEXTITEM, TVGN_ROOT, 0); return (long) ::SendMessage((HWND) GetHWND(), TVM_GETNEXTITEM, TVGN_ROOT, 0);
} }
// TODO: convert mask
bool wxTreeCtrl::GetItem(wxTreeItem& info) const bool wxTreeCtrl::GetItem(wxTreeItem& info) const
{ {
TV_ITEM tvItem; TV_ITEM tvItem;
tvItem.hItem = (HTREEITEM)info.m_itemId; tvItem.hItem = (HTREEITEM)info.m_itemId;
tvItem.pszText = NULL; tvItem.pszText = NULL;
tvItem.mask = 0; tvItem.mask =
tvItem.stateMask = 0;
// TODO: convert other bits in the mask
if ( info.m_mask & wxTREE_MASK_TEXT ) if ( info.m_mask & wxTREE_MASK_TEXT )
{ {
tvItem.mask |= TVIF_TEXT; tvItem.mask |= TVIF_TEXT;
@@ -275,6 +277,10 @@ bool wxTreeCtrl::GetItem(wxTreeItem& info) const
} }
if ( info.m_mask & wxTREE_MASK_DATA ) if ( info.m_mask & wxTREE_MASK_DATA )
tvItem.mask |= TVIF_PARAM; tvItem.mask |= TVIF_PARAM;
if ( info.m_stateMask & wxTREE_STATE_EXPANDED ) {
tvItem.mask |= TVIF_STATE;
tvItem.stateMask |= TVIS_EXPANDED;
}
bool success = TreeView_GetItem((HWND)GetHWND(), &tvItem) != 0; bool success = TreeView_GetItem((HWND)GetHWND(), &tvItem) != 0;
@@ -427,17 +433,53 @@ bool wxTreeCtrl::ExpandItem(long item, int action)
case wxTREE_EXPAND_EXPAND: case wxTREE_EXPAND_EXPAND:
mswAction = TVE_EXPAND; mswAction = TVE_EXPAND;
break; break;
case wxTREE_EXPAND_COLLAPSE: case wxTREE_EXPAND_COLLAPSE:
mswAction = TVE_COLLAPSE; mswAction = TVE_COLLAPSE;
break;
case wxTREE_EXPAND_COLLAPSE_RESET: case wxTREE_EXPAND_COLLAPSE_RESET:
// @@@ it should also delete all the items! currently, if you do use this
// code your program will probaly crash. Feel free to remove this if
// it does work
wxFAIL_MSG("wxTREE_EXPAND_COLLAPSE_RESET probably doesn't work.");
mswAction = TVE_COLLAPSERESET; mswAction = TVE_COLLAPSERESET;
break;
case wxTREE_EXPAND_TOGGLE: case wxTREE_EXPAND_TOGGLE:
mswAction = TVE_TOGGLE; mswAction = TVE_TOGGLE;
break; break;
default: default:
break; wxFAIL_MSG("unknown action in wxTreeCtrl::ExpandItem");
} }
return (TreeView_Expand((HWND) GetHWND(), (HTREEITEM) item, mswAction) != 0);
bool bOk = TreeView_Expand((HWND)GetHWND(), (HTREEITEM)item, mswAction) != 0;
// TreeView_Expand doesn't send TVN_EXPAND(ING) messages, so emulate them
if ( bOk ) {
wxTreeEvent event(wxEVT_NULL, m_windowId);
event.m_item.m_itemId = item;
event.m_item.m_mask =
event.m_item.m_stateMask = 0xffff; // get all
GetItem(event.m_item);
bool bIsExpanded = (event.m_item.m_state & wxTREE_STATE_EXPANDED) != 0;
event.m_code = action;
event.SetEventObject(this);
// @@@ return values of {EXPAND|COLLAPS}ING event handler is discarded
event.SetEventType(bIsExpanded ? wxEVT_COMMAND_TREE_ITEM_EXPANDING
: wxEVT_COMMAND_TREE_ITEM_COLLAPSING);
GetEventHandler()->ProcessEvent(event);
event.SetEventType(bIsExpanded ? wxEVT_COMMAND_TREE_ITEM_EXPANDED
: wxEVT_COMMAND_TREE_ITEM_COLLAPSED);
GetEventHandler()->ProcessEvent(event);
}
return bOk;
} }
long wxTreeCtrl::InsertItem(long parent, wxTreeItem& info, long insertAfter) long wxTreeCtrl::InsertItem(long parent, wxTreeItem& info, long insertAfter)
@@ -619,45 +661,44 @@ bool wxTreeCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam)
} }
case TVN_ITEMEXPANDING: case TVN_ITEMEXPANDING:
{ {
eventType = wxEVT_COMMAND_TREE_ITEM_EXPANDING;
NM_TREEVIEW* hdr = (NM_TREEVIEW*)lParam; NM_TREEVIEW* hdr = (NM_TREEVIEW*)lParam;
wxConvertFromMSWTreeItem(event.m_item, hdr->itemNew, (HWND) GetHWND()); wxConvertFromMSWTreeItem(event.m_item, hdr->itemNew, (HWND) GetHWND());
switch ( hdr->action ) switch ( hdr->action )
{ {
case TVE_EXPAND: case TVE_EXPAND:
event.m_code = wxTREE_EXPAND_EXPAND; eventType = wxEVT_COMMAND_TREE_ITEM_EXPANDING;
break; break;
case TVE_COLLAPSE: case TVE_COLLAPSE:
event.m_code = wxTREE_EXPAND_COLLAPSE; eventType = wxEVT_COMMAND_TREE_ITEM_COLLAPSING;
break;
case TVE_COLLAPSERESET: case TVE_COLLAPSERESET:
event.m_code = wxTREE_EXPAND_COLLAPSE_RESET;
case TVE_TOGGLE: case TVE_TOGGLE:
event.m_code = wxTREE_EXPAND_TOGGLE; wxLogDebug("unexpected code in TVN_ITEMEXPANDING message");
break;
default :
break; break;
} }
break; break;
} }
case TVN_ITEMEXPANDED: case TVN_ITEMEXPANDED:
{ {
eventType = wxEVT_COMMAND_TREE_ITEM_EXPANDED;
NM_TREEVIEW* hdr = (NM_TREEVIEW*)lParam; NM_TREEVIEW* hdr = (NM_TREEVIEW*)lParam;
wxConvertFromMSWTreeItem(event.m_item, hdr->itemNew, (HWND) GetHWND()); wxConvertFromMSWTreeItem(event.m_item, hdr->itemNew, (HWND) GetHWND());
switch ( hdr->action ) switch ( hdr->action )
{ {
case TVE_EXPAND: case TVE_EXPAND:
event.m_code = wxTREE_EXPAND_EXPAND; eventType = wxEVT_COMMAND_TREE_ITEM_EXPANDED;
break; break;
case TVE_COLLAPSE: case TVE_COLLAPSE:
event.m_code = wxTREE_EXPAND_COLLAPSE; eventType = wxEVT_COMMAND_TREE_ITEM_COLLAPSED;
case TVE_COLLAPSERESET:
event.m_code = wxTREE_EXPAND_COLLAPSE_RESET;
case TVE_TOGGLE:
event.m_code = wxTREE_EXPAND_TOGGLE;
break; break;
default :
case TVE_COLLAPSERESET:
case TVE_TOGGLE:
wxLogDebug("unexpected code in TVN_ITEMEXPANDED message");
break; break;
} }
break; break;