Beispiel #1
0
        /// <summary>
        /// Currently it is hooked up to mouse down event
        /// </summary>
        /// <param name="node"></param>
        /// <param name="evt"></param>
        public void MapNodeClick(MapNode node, NodeMouseEventArgs evt)
        {
            if (mapCtrl.MapView.NodeTextEditor.IsTextEditing)
            {
                mapCtrl.EndNodeEdit();
                return;
            }

            bool shiftKeyDown = (Control.ModifierKeys & Keys.Shift) == Keys.Shift;
            bool ctrlKeyDown  = (Control.ModifierKeys & Keys.Control) == Keys.Control;

            // Toggle folding or follow link (node has children + no key modifier)
            if (node.HasChildren && !shiftKeyDown && !ctrlKeyDown)
            {
                mapCtrl.MapView.SelectedNodes.Add(node, shiftKeyDown || ctrlKeyDown);
                if (node.Link == null || evt.NodePortion == NodePortion.Body)
                {
                    if (node.Parent != null)
                    {
                        mapCtrl.ToggleFolded(node);
                    }
                }
                else
                {
                    mapCtrl.FollowLink(node);
                }
            }
            // deselect already selected node (ctrl key + node already selected)
            else if (mapCtrl.MapView.SelectedNodes.Count > 1 && mapCtrl.MapView.SelectedNodes.Contains(node) && ctrlKeyDown)
            {
                mapCtrl.MapView.SelectedNodes.Remove(node);
            }
            else
            {
                mapCtrl.MapView.SelectedNodes.Add(node, shiftKeyDown || ctrlKeyDown);

                //edit node or follow link (no children + only selected node + no key modifier)
                if (mapCtrl.MapView.SelectedNodes.Count == 1 && !node.HasChildren &&
                    !shiftKeyDown && !ctrlKeyDown)
                {
                    if (node.Link != null)
                    {
                        mapCtrl.FollowLink(node);
                    }
                    else if (evt.SubControlType == SubControlType.Text || node.IsEmpty())
                    {
                        mapCtrl.BeginNodeEdit(node, TextCursorPosition.End);
                    }
                }
            }
        }