Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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;
        }
Exemple #4
0
        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);
        }