private unsafe bool WmSelChanging(ref Message m) { if (!bEnableSelectEvents) { return(false); } Native.NMTREEVIEW *nmtv = (Native.NMTREEVIEW *)m.LParam; TreeNode node = TreeNode.FromHandle(this, nmtv->itemNew.hItem); OnBeforeMultiSelectStart(new CMSTreeViewMultiSelectEventArgs(SelectedNodes, TreeViewAction.Unknown)); bool bIsSelected = true; CMSTreeViewCancelEventArgs e = new CMSTreeViewCancelEventArgs(node, false, bIsSelected, TreeViewAction.Unknown); OnBeforeSelect(e); if (e.Cancel) { // user canceled operation, cancel changing of the selection m.Result = (IntPtr)1; return(true); } return(false); }
private bool SetFocusedItem(TreeNode node, bool bSelect, TreeNode oldNode, TreeViewAction action) { CMSTreeViewCancelEventArgs e = new CMSTreeViewCancelEventArgs(node, false, bSelect, action); OnBeforeSelect(e); if (e.Cancel) { return(false); } // temporary disable OnXXXSelect events this.bEnableSelectEvents = false; IntPtr hItem = SetFocusedItem(node); if (bSelect) { AddSelectedItem(node); } else { RemoveSelectedItem(node); } SetSelectedState(node, bSelect); // enable OnXXXSelect events this.bEnableSelectEvents = true; OnAfterSelect(new CMSTreeViewEventArgs(node, bSelect, action)); return(true); }
protected virtual void OnBeforeSelect(CMSTreeViewCancelEventArgs e) { if (!bEnableSelectEvents) { return; } #if MSTREE_TRACE Debug.Write("EVENT: " + traceCount.ToString() + (e.Selected ? " OnBeforeSelect:" : " OnBeforeUnselect:")); Debug.Write(" node=" + (e.Node != null ? "\"" + e.Node.Text + "\"": "null")); Debug.WriteLine(" action=" + e.Action); #endif TreeViewCancelEventArgs newE = new TreeViewCancelEventArgs(e.Node, e.Cancel, e.Action); if (e.Selected) { if (onBeforeSelect != null) { onBeforeSelect(this, newE); } } else { if (onBeforeUnselect != null) { onBeforeUnselect(this, newE); } } e.Cancel = newE.Cancel; }
private unsafe bool TvnSelectItem(ref Message m) { Native.TV_ITEM *item = (Native.TV_ITEM *)m.LParam; // Check for invalid node handle if (item == null || item->hItem == IntPtr.Zero) { return(false); } if ((item->mask & Native.TVIF_STATE) == 0 || (item->stateMask & Native.TVIS_SELECTED) == 0) { return(false); } TreeNode node = TreeNode.FromHandle(this, item->hItem); Debug.Assert(node != null); bool bIsSelected = (item->state & Native.TVIS_SELECTED) != 0; bool bDontFireEvents = bIsSelected == this.selectedNodes.Contains(node); if (!bDontFireEvents) { CMSTreeViewCancelEventArgs e = new CMSTreeViewCancelEventArgs(node, false, bIsSelected, TreeViewAction.Unknown); OnBeforeSelect(e); if (e.Cancel) { m.Result = (IntPtr)1; return(true); } if (bIsSelected) { AddSelectedItem(node); } else { RemoveSelectedItem(node); } } base.WndProc(ref m); if (!bDontFireEvents) { OnAfterSelect(new CMSTreeViewEventArgs(node, bIsSelected, TreeViewAction.Unknown)); } return(true); }