Example #1
0
 internal override bool IsNodeSelected(IViewNode node)
 {
     lock ( _selectedNodes )
     {
         return(_selectedNodes.Contains(node));
     }
 }
Example #2
0
 private void OnFocusStateChanged(IViewNode node, bool isFocused)
 {
     if (FocusStateChanged != null)
     {
         FocusStateChanged(this, new ViewNodeStateChangeEventArgs(node, isFocused));
     }
 }
Example #3
0
        internal MouseHandleResult HandleMouseDown(IViewNode itemNode, Keys modifiers)
        {
            MouseHandleResult result = 0;

            _processedMouseDown = false;
            if (itemNode == null)
            {
                return(result);
            }

            if ((modifiers & Keys.Shift) != 0)
            {
                ProcessShiftClick(itemNode, ((modifiers & Keys.Control) != 0));
            }
            else if ((modifiers & Keys.Control) != 0)
            {
                ProcessControlClick(itemNode);
            }
            else
            {
                if (IsSingleNodeSelected(itemNode) && FocusNode == itemNode)
                {
                    result |= MouseHandleResult.MayInPlaceEdit;
                }
                ProcessClick(itemNode);
            }

            if (itemNode != null)
            {
                SetFocusNode(itemNode);
            }
            return(result);
        }
Example #4
0
        public MouseHandleResult HandleMouseDown(int x, int y, MouseButtons button, Keys modifiers)
        {
            MouseHandleResult rrResult = 0;

            int       deltaY;
            IViewNode row = GetRowAndDelta(y, out deltaY);

            if (row is JetListViewNode)
            {
                rrResult = _rowRenderer.HandleMouseDown(row as JetListViewNode, x, deltaY, button, modifiers);
                if ((rrResult & MouseHandleResult.Handled) != 0)
                {
                    return(rrResult);
                }
            }
            else if (row is GroupHeaderNode)
            {
                if (_groupRenderer.HandleMouseDown(row as GroupHeaderNode, x, deltaY, button, modifiers))
                {
                    return(MouseHandleResult.Handled);
                }
            }

            if (button == MouseButtons.Left && row != null)
            {
                MouseHandleResult selResult = _selection.HandleMouseDown(row, modifiers);
                if ((rrResult & MouseHandleResult.MayInPlaceEdit) == 0)
                {
                    selResult = rrResult & ~MouseHandleResult.MayInPlaceEdit;
                }
                return(selResult);
            }
            return(0);
        }
Example #5
0
        public IVisibleNodeEnumerator GetDirectionalEnumerator(IViewNode startNode, MoveDirection direction)
        {
            Guard.NullArgument(startNode, "startNode");
            JetListViewNode startLvNode = startNode as JetListViewNode;

            if (startLvNode != null)
            {
                return(new GroupedItemEnumerator(this,
                                                 _nodeCollection.GetDirectionalEnumerator(startLvNode, direction), direction,
                                                 (direction == MoveDirection.Down)));
            }

            GroupHeaderNode startHeaderNode = startNode as GroupHeaderNode;

            Debug.Assert(startHeaderNode.TopNode != null);
            if (startHeaderNode.TopNode == null)
            {
                return(new GroupedItemEnumerator(this, new EmptyEnumerator(), direction, false));
            }

            GroupedItemEnumerator enumerator = new GroupedItemEnumerator(this,
                                                                         _nodeCollection.GetDirectionalEnumerator(startHeaderNode.TopNode, direction),
                                                                         direction, false);

            if (direction == MoveDirection.Up)
            {
                // move from first node of current group to last node of previous group
                enumerator.MoveNext();
            }
            return(enumerator);
        }
Example #6
0
 public IViewNode GetRowAndDelta(int y, out int deltaY)
 {
     lock ( _nodeCollection )
     {
         if (_topNode != null)
         {
             int         curY       = -_topNodeOffset + _borderSize;
             IEnumerator enumerator = GetRowEnumerator();
             while (enumerator.MoveNext())
             {
                 IViewNode viewNode   = (IViewNode)enumerator.Current;
                 int       itemHeight = GetRowHeight(viewNode);
                 if (y >= curY && y < curY + itemHeight)
                 {
                     deltaY = y - curY;
                     return(viewNode);
                 }
                 curY += itemHeight;
                 if (curY >= _visibleHeight + _borderSize)
                 {
                     break;
                 }
             }
         }
     }
     deltaY = 0;
     return(null);
 }
Example #7
0
        public bool GetRowBounds(IViewNode node, out int startY, out int endY)
        {
            if (_rowRenderer != null && _topNode != null)
            {
                lock ( _nodeCollection )
                {
                    if (_topNode != null)
                    {
                        int         curY       = -_topNodeOffset + _borderSize;
                        IEnumerator enumerator = GetRowEnumerator();
                        while (enumerator.MoveNext())
                        {
                            IViewNode itemNode   = (IViewNode)enumerator.Current;
                            int       itemHeight = GetRowHeight(itemNode);
                            if (itemNode == node)
                            {
                                startY = curY;
                                endY   = curY + itemHeight;
                                return(endY > 0);
                            }
                            curY += itemHeight;
                            if (curY > _visibleHeight + _borderSize)
                            {
                                break;
                            }
                        }
                    }
                }
            }

            startY = -1;
            endY   = -1;
            return(false);
        }
Example #8
0
        private void HandleVisibleNodeAdded(object sender, JetListViewNodeEventArgs e)
        {
            Guard.NullArgument(e.Node, "e.Node");
            if (_topNode == null)    // first node added to the view
            {
                _topNode = e.Node;
            }
            UpdateScrollRange();

            IViewNode topNode = _topNode;

            if (topNode == null)
            {
                topNode = e.Node;
            }
            if (_visibleNodeCollection.GetMoveDirection(e.Node, topNode) == MoveDirection.Down)
            {
                // If we were scrolled so that the top item in the list was visible,
                // add the new item to the visible area. If the top item in the list was
                // not visible, scroll down so that the visible area remains the same and
                // the new item does not appear in it.
                if (_scrollOffset == 0)
                {
                    UpdateTopNode();
                }
                else
                {
                    OnRequestVerticalScroll(_scrollOffset + GetRowHeight(e.Node));
                }
            }
            InvalidateBelow(e.Node);
        }
Example #9
0
 private void OnActiveNodeChanged(IViewNode node)
 {
     if (ActiveNodeChanged != null)
     {
         ActiveNodeChanged(this, new ViewNodeEventArgs(node));
     }
 }
Example #10
0
        public void ScrollInView(IViewNode node)
        {
            if (_rowRenderer == null)
            {
                return;
            }

            int         curY       = 0;
            IEnumerator enumerator = _visibleNodeCollection.GetFullEnumerator();

            while (enumerator.MoveNext())
            {
                IViewNode itemNode   = (IViewNode)enumerator.Current;
                int       itemHeight = GetRowHeight(itemNode);
                if (itemNode == node)
                {
                    if (curY < _scrollOffset)
                    {
                        OnRequestVerticalScroll(curY);
                    }
                    else if (itemHeight > _visibleHeight && curY >= _scrollOffset + _visibleHeight)
                    {
                        OnRequestVerticalScroll(curY);
                    }
                    else if (itemHeight < _visibleHeight && curY + itemHeight > _scrollOffset + _visibleHeight)
                    {
                        OnRequestVerticalScroll(curY + itemHeight - _visibleHeight);
                    }
                    return;
                }
                curY += itemHeight;
            }
        }
Example #11
0
 private void UpdateTopNode()
 {
     if (!inUpdateTopNode)
     {
         inUpdateTopNode = true;
         try
         {
             lock ( _nodeCollection )
             {
                 _topNode = null;
                 int delta = _scrollOffset;
                 IVisibleNodeEnumerator enumerator = _visibleNodeCollection.GetFullEnumerator();
                 while (enumerator.MoveNext())
                 {
                     int height = GetRowHeight(enumerator.CurrentNode);
                     if (delta < height)
                     {
                         _topNode       = enumerator.CurrentNode;
                         _topNodeOffset = delta;
                         break;
                     }
                     delta -= height;
                 }
             }
         }
         finally
         {
             inUpdateTopNode = false;
         }
     }
 }
Example #12
0
        public MoveDirection GetMoveDirection(IViewNode startNode, IViewNode endNode)
        {
            JetListViewNode startLvNode = startNode as JetListViewNode;

            if (startLvNode == null)
            {
                GroupHeaderNode startHeaderNode = (GroupHeaderNode)startNode;
                startLvNode = startHeaderNode.TopNode;
            }

            JetListViewNode endLvNode = endNode as JetListViewNode;

            if (endLvNode == null)
            {
                GroupHeaderNode endHeaderNode = (GroupHeaderNode)endNode;
                endLvNode = endHeaderNode.TopNode;
            }

            int orderDiff = _nodeCollection.CompareVisibleOrder(startLvNode, endLvNode);

            if (orderDiff == 0 && startNode is GroupHeaderNode && !(endNode is GroupHeaderNode))
            {
                return(MoveDirection.Down);
            }
            return((orderDiff < 0)
                    ? MoveDirection.Down
                    : MoveDirection.Up);
        }
Example #13
0
        public bool HandleKeyDown(KeyEventArgs e)
        {
            IViewNode viewNode = _selection.FocusViewNode;

            if (viewNode is JetListViewNode)
            {
                if (_rowRenderer.HandleKeyDown(viewNode as JetListViewNode, e))
                {
                    return(true);
                }
            }
            if (viewNode is GroupHeaderNode)
            {
                if (_groupRenderer.HandleGroupKeyDown(viewNode as GroupHeaderNode, e))
                {
                    return(true);
                }
            }
            if (viewNode is JetListViewNode && _groupRenderer != null)
            {
                if (_groupRenderer.HandleNodeKeyDown(viewNode as JetListViewNode, e))
                {
                    return(true);
                }
            }

            return(_selection.HandleKeyDown(e.KeyData));
        }
Example #14
0
        public int GetWheelScrollDistance(int lines)
        {
            // the wheel scroll can be requested between BeginUpdate() and EndUpdate(),
            // when the node which was _topNode has already been removed from the collection
            // but UpdateTopNode() was not yet called (OM-10633)
            int result = 0;

            lock ( _nodeCollection )
            {
                IViewNode topNode = _topNode;          // avoid race condition (OM-11963)
                if (topNode != null && _visibleNodeCollection.IsNodeVisible(topNode))
                {
                    IVisibleNodeEnumerator enumerator = _visibleNodeCollection.GetDirectionalEnumerator(topNode,
                                                                                                        (lines < 0) ? MoveDirection.Up : MoveDirection.Down);
                    while (enumerator.MoveNext() && lines != 0)
                    {
                        int rowHeight = GetRowHeight(enumerator.CurrentNode);
                        if (lines > 0)
                        {
                            result += rowHeight;
                            lines--;
                        }
                        else
                        {
                            result -= rowHeight;
                            lines++;
                        }
                    }
                }
            }
            return(result);
        }
Example #15
0
 public void OnSelectionStateChanged(IViewNode node, bool isSelected)
 {
     if (SelectionStateChanged != null)
     {
         SelectionStateChanged(this, new ViewNodeStateChangeEventArgs(node, isSelected));
     }
 }
Example #16
0
 private void OnViewNodeRemoving(IViewNode viewNode)
 {
     if (ViewNodeRemoving != null)
     {
         ViewNodeRemoving(this, new ViewNodeEventArgs(viewNode));
     }
 }
Example #17
0
 IVisibleNodeEnumerator IVisibleNodeCollection.GetDirectionalEnumerator(IViewNode startNode, MoveDirection direction)
 {
     if (startNode is JetListViewNode)
     {
         return(GetDirectionalEnumerator((JetListViewNode)startNode, direction));
     }
     return(new EmptyVisibleNodeEnumerator());
 }
Example #18
0
 private void HandleNodeRemoving(object sender, ViewNodeEventArgs e)
 {
     if (_selectionStartNode == e.ViewNode)
     {
         _selectionStartNode = null;
     }
     RemoveNodeFromSelection(e.ViewNode);
 }
Example #19
0
 private void ProcessControlClick(IViewNode itemNode)
 {
     _selectionStartNode = itemNode;
     if (!IsNodeSelected(itemNode))
     {
         SelectNode(itemNode);
         _processedMouseDown = true;
     }
 }
Example #20
0
        internal void InvalidateRow(IViewNode node)
        {
            int startY, endY;

            if (GetRowBounds(node, out startY, out endY))
            {
                OnInvalidate(startY, endY);
            }
        }
Example #21
0
 internal override void ClearSelection()
 {
     if (_selectedNode != null)
     {
         IViewNode oldSelectedNode = _selectedNode;
         _selectedNode = null;
         OnSelectionStateChanged(oldSelectedNode, false);
     }
 }
Example #22
0
        private void InvalidateBelow(IViewNode node)
        {
            int startY, endY;

            if (GetRowBounds(node, out startY, out endY))
            {
                InvalidateBelow(startY);
            }
        }
Example #23
0
 internal void SelectAndFocusNode(IViewNode destNode)
 {
     if (!IsSingleNodeSelected(destNode))
     {
         ClearSelection();
         SelectNode(destNode);
         SetFocusNode(destNode);
     }
     _selectionStartNode = destNode;
 }
Example #24
0
        IViewNode IVisibleNodeCollection.GetVisibleParent(IViewNode node)
        {
            JetListViewNode lvNode = node as JetListViewNode;

            if (lvNode == null)
            {
                return(null);
            }
            return(GetVisibleParent(lvNode));
        }
Example #25
0
        private void ProcessShiftClick(IViewNode itemNode, bool ctrlPressed)
        {
            if (_selectionStartNode == null || _selectionStartNode == itemNode)
            {
                ProcessClick(itemNode);
                return;
            }

            SelectItemRange(_selectionStartNode, itemNode, !ctrlPressed);
        }
Example #26
0
 internal override bool UnselectNode(IViewNode node)
 {
     if (_selectedNode == node)
     {
         _selectedNode = null;
         OnSelectionStateChanged(node, false);
         return(true);
     }
     return(false);
 }
Example #27
0
        private void TreeView_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            ExtTreeView etv = sender as ExtTreeView;
            IViewNode   ivn = etv.SelectedNode as IViewNode;

            if (ivn != null)
            {
                ivn.ShowView();
            }
        }
Example #28
0
        internal bool HandleKeyDown(Keys keys)
        {
            Keys modifiers = Keys.None;

            if ((keys & Keys.Shift) != 0)
            {
                modifiers |= Keys.Shift;
                keys      &= ~Keys.Shift;
            }
            if ((keys & Keys.Control) != 0)
            {
                modifiers |= Keys.Control;
                keys      &= ~Keys.Control;
            }

            switch (keys)
            {
            case Keys.Down:
                MoveSelection(MoveDirection.Down, modifiers);
                return(true);

            case Keys.Up:
                MoveSelection(MoveDirection.Up, modifiers);
                return(true);

            case Keys.PageDown:
                MoveSelectionByPage(MoveDirection.Down, modifiers);
                return(true);

            case Keys.PageUp:
                MoveSelectionByPage(MoveDirection.Up, modifiers);
                return(true);

            case Keys.End:
                IViewNode lastVisibleNode = _visibleNodeCollection.LastVisibleViewNode;
                if (lastVisibleNode != null)
                {
                    MoveSelectionTo(lastVisibleNode, modifiers & ~Keys.Control);
                }
                return(true);

            case Keys.Home:
                IViewNode firstVisibleNode = _visibleNodeCollection.FirstVisibleViewNode;
                if (firstVisibleNode != null)
                {
                    MoveSelectionTo(firstVisibleNode, modifiers & ~Keys.Control);
                }
                return(true);

            case Keys.Space:
                ProcessSpaceKey();
                return(true);
            }
            return(false);
        }
Example #29
0
        public void EnsureNodeVisible(IViewNode node)
        {
            JetListViewNode lvNode = node as JetListViewNode;

            if (lvNode != null)
            {
                _nodeCollection.ExpandParents(lvNode);
                GroupHeaderNode group = GetNodeGroupHeader(lvNode);
                group.Expanded = true;
            }
        }
Example #30
0
        private void MoveSelectionByPage(MoveDirection direction, Keys modifiers)
        {
            if (_focusNode == null || _pagingProvider == null)
            {
                MoveSelection(direction, Keys.None);
                return;
            }

            IViewNode destNode = _pagingProvider.MoveByPage(_focusNode, direction);

            MoveSelectionTo(destNode, modifiers);
        }