wxTreeItemId wxTreeCtrl::GetNextChild(const wxTreeItemId& WXUNUSED(item),
wxTreeItemIdValue& cookie) const
{
- wxTreeItemId item(TreeView_GetNextSibling(GetHwnd(),
- HITEM(wxTreeItemId(cookie))));
+ wxTreeItemId fromCookie(cookie);
+
+ HTREEITEM hitem = HITEM(fromCookie);
+
+ hitem = TreeView_GetNextSibling(GetHwnd(), hitem);
+
+ wxTreeItemId item(hitem);
+
cookie = item.m_pItem;
return item;
wxTreeItemId wxTreeCtrl::GetNextChild(const wxTreeItemId& WXUNUSED(item),
long& cookie) const
{
- wxTreeItemId item(TreeView_GetNextSibling
- (
- GetHwnd(),
- HITEM(wxTreeItemId((void *)cookie)
- )));
+ wxTreeItemId fromCookie((void *)cookie);
+
+ HTREEITEM hitem = HITEM(fromCookie);
+
+ hitem = TreeView_GetNextSibling(GetHwnd(), hitem);
+
+ wxTreeItemId item(hitem);
+
cookie = (long)item.m_pItem;
return item;
}
UINT mask = 0;
- if ( !text.IsEmpty() )
+ if ( !text.empty() )
{
mask |= TVIF_TEXT;
tvIns.item.pszText = (wxChar *)text.c_str(); // cast is ok
}
// End label editing, optionally cancelling the edit
-void wxTreeCtrl::EndEditLabel(const wxTreeItemId& WXUNUSED(item), bool discardChanges)
+void wxTreeCtrl::DoEndEditLabel(bool discardChanges)
{
TreeView_EndEditLabelNow(GetHwnd(), discardChanges);
WXLRESULT rc = 0;
bool isMultiple = (GetWindowStyle() & wxTR_MULTIPLE) != 0;
+ if (nMsg == WM_CONTEXTMENU)
+ {
+ wxTreeEvent event( wxEVT_COMMAND_TREE_ITEM_MENU, GetId() );
+ event.m_item = GetSelection();
+ event.SetEventObject( this );
+ GetEventHandler()->ProcessEvent( event );
+
+ return rc;
+ }
+
if ( (nMsg >= WM_MOUSEFIRST) && (nMsg <= WM_MOUSELAST) )
{
// we only process mouse messages here and these parameters have the
processed = true;
}
}
+ else if ( nMsg == WM_COMMAND )
+ {
+ // if we receive a EN_KILLFOCUS command from the in-place edit control
+ // used for label editing, make sure to end editing
+ WORD id, cmd;
+ WXHWND hwnd;
+ UnpackCommand(wParam, lParam, &id, &hwnd, &cmd);
+
+ if ( cmd == EN_KILLFOCUS )
+ {
+ if ( m_textCtrl && m_textCtrl->GetHandle() == hwnd )
+ {
+ DoEndEditLabel();
+
+ processed = true;
+ }
+ }
+ }
if ( !processed )
rc = wxControl::MSWWindowProc(nMsg, wParam, lParam);