protected override void ProcessDragDrop(Point dropLocation, ISupportDrag dragObject)
        {
            object      dataContext  = dragObject.GetDataContext();
            RadPosition dropPosition = RadGridViewDragDropService.GetDropPosition(dropLocation, this.Size);
            ColumnGroupsViewDefinition viewDefinition = this.ViewTemplate.ViewDefinition as ColumnGroupsViewDefinition;

            if (viewDefinition != null)
            {
                if (dataContext is GridViewColumnGroup)
                {
                    ((GridViewColumnGroup)dataContext).IsVisible = true;
                    this.TableElement.UpdateLayout();
                    if (!this.ViewTemplate.AllowColumnReorder)
                    {
                        return;
                    }
                    this.DropColumnGroup(viewDefinition, (GridViewColumnGroup)dataContext, dropPosition);
                    return;
                }
                if (dataContext is GridViewDataColumn || dataContext is GridViewGroupColumn)
                {
                    this.DropInColumnGroupsView(viewDefinition, dataContext as GridViewColumn, dropPosition);
                    return;
                }
            }
            base.ProcessDragDrop(dropLocation, dragObject);
        }
        protected override void DropInColumnGroupsView(
            ColumnGroupsViewDefinition view,
            GridViewColumn column,
            RadPosition dropPosition)
        {
            GridViewDataColumn gridViewDataColumn = column as GridViewDataColumn;

            if (gridViewDataColumn != null)
            {
                if (this.ViewTemplate.AllowColumnReorder && this.GridViewGroupColumn.Group.Groups.Count == 0)
                {
                    GridViewColumnGroupRow row = this.FindRow(view.ColumnGroups, (GridViewColumn)gridViewDataColumn);
                    if (this.GridViewGroupColumn.Group != null && this.GridViewGroupColumn.Group.Rows.Count == 0 && (dropPosition & RadPosition.Bottom) != RadPosition.None)
                    {
                        this.GridViewGroupColumn.Group.Rows.Add(new GridViewColumnGroupRow());
                    }
                    if (this.GridViewGroupColumn.Group != null && this.GridViewGroupColumn.Group.Rows.Count > 0)
                    {
                        if (row != null)
                        {
                            row.ColumnNames.Remove(gridViewDataColumn.Name);
                            if (row.ColumnNames.Count == 0)
                            {
                                this.FindGroup(view.ColumnGroups, row)?.Rows.Remove(row);
                            }
                        }
                        if ((dropPosition & RadPosition.Left) != RadPosition.None)
                        {
                            this.GridViewGroupColumn.Group.Rows[0].ColumnNames.Insert(0, gridViewDataColumn.Name);
                        }
                        else
                        {
                            this.GridViewGroupColumn.Group.Rows[0].ColumnNames.Add(gridViewDataColumn.Name);
                        }
                    }
                }
                if (!column.IsVisible && this.GridViewGroupColumn.Group.Groups.Count == 0)
                {
                    column.IsVisible = true;
                }
                else
                {
                    ColumnGroupRowLayout rowLayout = this.TableElement.ViewElement.RowLayout as ColumnGroupRowLayout;
                    rowLayout.InvalidateLayout();
                    rowLayout.InvalidateRenderColumns();
                    this.TableElement.ViewElement.UpdateRows(true);
                }
            }
            else
            {
                if (!(column is GridViewGroupColumn))
                {
                    return;
                }
                this.DropColumnGroup(view, ((GridViewGroupColumn)column).Group, dropPosition);
            }
        }
示例#3
0
        protected override void PerformStop()
        {
            SnapshotDragItem context = this.Context as SnapshotDragItem;

            if (context != null)
            {
                context.Capture          = false;
                context.Item.IsMouseDown = false;
            }
            base.PerformStop();
            this.DisposeDragHint();
            this.dragDropBehavior = (IGridDragDropBehavior)null;
            this.lastDropPosition = RadPosition.None;
        }
        private void DropColumnGroup(
            ColumnGroupsViewDefinition view,
            GridViewColumnGroup group,
            RadPosition dropPosition)
        {
            ColumnGroupCollection groupCollection1 = this.FindGroupCollection(view, this.GridViewGroupColumn.Group);
            ColumnGroupCollection groupCollection2 = this.FindGroupCollection(view, group);
            int index = groupCollection1.IndexOf(this.GridViewGroupColumn.Group);

            if (groupCollection1 == groupCollection2 && groupCollection2 != null && groupCollection2.IndexOf(group) < index)
            {
                --index;
            }
            if (group.Parent != null)
            {
                group.Parent.Groups.Remove(group);
            }
            else
            {
                view.ColumnGroups.Remove(group);
            }
            if ((dropPosition & RadPosition.Bottom) != RadPosition.None && this.GridViewGroupColumn.Group.Rows.Count == 0)
            {
                this.GridViewGroupColumn.Group.Groups.Add(group);
            }
            else if ((dropPosition & RadPosition.Left) != RadPosition.None)
            {
                groupCollection1.Insert(index, group);
            }
            else if (index < groupCollection1.Count - 1)
            {
                groupCollection1.Remove(group);
                groupCollection1.Insert(index + 1, group);
            }
            else
            {
                groupCollection1.Add(group);
            }
            if (!group.IsVisible)
            {
                group.IsVisible = true;
            }
            ColumnGroupRowLayout rowLayout = this.TableElement.ViewElement.RowLayout as ColumnGroupRowLayout;

            rowLayout.InvalidateLayout();
            rowLayout.InvalidateRenderColumns();
            this.TableElement.ViewElement.UpdateRows(true);
        }
示例#5
0
        internal static RadPosition GetDropPosition(Point dropLocation, Size size)
        {
            RadPosition radPosition1 = RadPosition.None;
            int         num1         = size.Width / 2;
            int         num2         = size.Width / 3;
            int         num3         = 2 * size.Width / 3;
            RadPosition radPosition2 = dropLocation.X > num1 ? radPosition1 | RadPosition.Right : radPosition1 | RadPosition.Left;

            if (num2 < dropLocation.X && dropLocation.X < num3)
            {
                int num4 = size.Height / 2;
                if (dropLocation.Y <= num4)
                {
                    radPosition2 |= RadPosition.Top;
                }
                else
                {
                    radPosition2 |= RadPosition.Bottom;
                }
            }
            return(radPosition2);
        }
示例#6
0
        protected override void HandleMouseMove(Point mousePosition)
        {
            ISupportDrop dropTarget = this.DropTarget;

            this.AutoScroll();
            base.HandleMouseMove(mousePosition);
            RadElement  radElement  = dropTarget as RadElement;
            RadPosition radPosition = RadPosition.None;

            if (radElement != null)
            {
                radPosition = RadGridViewDragDropService.GetDropPosition(radElement.PointFromScreen(mousePosition), radElement.ControlBoundingRectangle.Size);
            }
            if (dropTarget != this.DropTarget || dropTarget == null || radPosition != this.lastDropPosition)
            {
                this.SetDragDropBehavior();
            }
            this.lastDropPosition = radPosition;
            if (this.dragHintWindow == null)
            {
                return;
            }
            this.UpdateDragHintLocation(mousePosition);
        }