Exemplo n.º 1
0
        public override void OnMouseUp(CellContext sender, MouseEventArgs e)
        {
            base.OnMouseUp(sender, e);

            //Note: I can't use the click event because I don't have Button information (Control.MouseButtons returns always None inside the Click event)

            Point     currentPoint = sender.Grid.PointToClient(System.Windows.Forms.Control.MousePosition);
            Rectangle cellRect     = sender.Grid.PositionToRectangle(sender.Position);
            float     distance;

            DevAge.Drawing.RectanglePartType partType = LogicalBorder.GetPointPartType(cellRect, currentPoint, out distance);

            //eseguo il sort solo se non sono attualmente in resize
            if (IsSortEnable(sender) &&
                partType == DevAge.Drawing.RectanglePartType.ContentArea &&
                e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                Models.ISortableHeader sortHeader = (Models.ISortableHeader)sender.Cell.Model.FindModel(typeof(Models.ISortableHeader));
                Models.SortStatus      l_Status   = sortHeader.GetSortStatus(sender);
                if (l_Status.Style == DevAge.Drawing.HeaderSortStyle.Ascending)
                {
                    SortColumn(sender, false, l_Status.Comparer);
                }
                else
                {
                    SortColumn(sender, true, l_Status.Comparer);
                }
            }
        }
Exemplo n.º 2
0
 protected virtual void PrepareVisualElementSortIndicator(CellContext context)
 {
     Models.ISortableHeader sortModel = (Models.ISortableHeader)context.Cell.Model.FindModel(typeof(Models.ISortableHeader));
     if (sortModel != null)
     {
         Models.SortStatus status = sortModel.GetSortStatus(context);
         ElementSort.SortStyle = status.Style;
     }
     else
     {
         ElementSort.SortStyle = DevAge.Drawing.HeaderSortStyle.None;
     }
 }
Exemplo n.º 3
0
        protected override void PrepareView(CellContext context)
        {
            base.PrepareView(context);

            Models.ISortableHeader sortModel = (Models.ISortableHeader)context.Cell.Model.FindModel(typeof(Models.ISortableHeader));
            if (sortModel != null)
            {
                Models.SortStatus status = sortModel.GetSortStatus(context);
                Background.SortStyle = status.Style;
            }
            else
            {
                Background.SortStyle = DevAge.Drawing.HeaderSortStyle.None;
            }
        }
Exemplo n.º 4
0
        public override void OnMouseUp(CellContext sender, MouseEventArgs e)
        {
            base.OnMouseUp(sender, e);

            //Note: I can't use the click event because I don't have Button information (Control.MouseButtons returns always None inside the Click event)

            Point     currentPoint = sender.Grid.PointToClient(System.Windows.Forms.Control.MousePosition);
            Rectangle cellRect     = sender.Grid.PositionToRectangle(sender.Position);
            float     distance;

            DevAge.Drawing.RectanglePartType partType = LogicalBorder.GetPointPartType(cellRect, currentPoint, out distance);

            //eseguo il sort solo se non sono attualmente in resize
            if (IsSortEnable(sender) &&
                partType == DevAge.Drawing.RectanglePartType.ContentArea &&
                e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                // AlanP: Dec 2013.  Do not do a sort if the MouseUp is after a coulmnWidthResize
                Resizable resizableHeader = (Resizable)sender.Cell.Controller.FindController(typeof(Resizable));
                if (resizableHeader != null)
                {
                    // If the mouse down initiated a resize of the header on this cell we don't want to do a sort
                    if (resizableHeader.MouseDownStartedWidthResize)
                    {
                        return;
                    }
                }

                Models.ISortableHeader sortHeader = (Models.ISortableHeader)sender.Cell.Model.FindModel(typeof(Models.ISortableHeader));
                Models.SortStatus      l_Status   = sortHeader.GetSortStatus(sender);
                if (l_Status.Style == DevAge.Drawing.HeaderSortStyle.Ascending)
                {
                    SortColumn(sender, false, l_Status.Comparer);
                }
                else
                {
                    SortColumn(sender, true, l_Status.Comparer);
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Sort the current column. If the range contains all the columns this method move directly the row object otherwise move each cell.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="p_bAscending"></param>
        /// <param name="p_Comparer"></param>
        public void SortColumn(CellContext sender, bool p_bAscending, System.Collections.IComparer p_Comparer)
        {
            //verifico che il sort sia abilitato e che ci sia almeno una riga da ordinare oltra a quella corrente
            if (IsSortEnable(sender) && sender.Position.Row < (sender.Grid.Rows.Count) && sender.Grid.Columns.Count > 0)
            {
                Range l_RangeToSort;
                Range l_RangeHeader;
                if (m_RangeToSort != null)
                {
                    l_RangeToSort = m_RangeToSort.GetRange(sender.Grid);
                }
                else
                {
                    //the range to sort is all the grid range without the rows < of the current row
                    l_RangeToSort = new Range(sender.Position.Row + 1, 0, sender.Grid.Rows.Count - 1, sender.Grid.Columns.Count - 1);
                }

                if (m_HeaderRange != null)
                {
                    l_RangeHeader = m_HeaderRange.GetRange(sender.Grid);
                }
                else
                {
                    //the range header is all the grid range with the rows <= of the current row
                    l_RangeHeader = new Range(0, 0, sender.Position.Row, sender.Grid.Columns.Count - 1);
                }

                Models.ISortableHeader modelSortable = (Models.ISortableHeader)sender.Cell.Model.FindModel(typeof(Models.ISortableHeader));

                if (sender.Grid.Rows.Count > (sender.Position.Row + 1) &&
                    sender.Grid.Columns.Count > sender.Grid.FixedColumns)
                {
                    //Sort
                    sender.Grid.SortRangeRows(l_RangeToSort, sender.Position.Column, p_bAscending, p_Comparer);
                    if (p_bAscending)
                    {
                        modelSortable.SetSortMode(sender, DevAge.Drawing.HeaderSortStyle.Ascending);
                    }
                    else
                    {
                        modelSortable.SetSortMode(sender, DevAge.Drawing.HeaderSortStyle.Descending);
                    }

                    //Remove the image from others ColHeaderSort
                    for (int r = l_RangeHeader.Start.Row; r <= l_RangeHeader.End.Row; r++)
                    {
                        for (int c = l_RangeHeader.Start.Column; c <= l_RangeHeader.End.Column; c++)
                        {
                            Cells.ICellVirtual tmpCell = sender.Grid.GetCell(r, c);

                            if (tmpCell != sender.Cell &&
                                tmpCell != null &&
                                tmpCell.Model.FindModel(typeof(Models.ISortableHeader)) != null)
                            {
                                Models.ISortableHeader header = (Models.ISortableHeader)tmpCell.Model.FindModel(typeof(Models.ISortableHeader));

                                header.SetSortMode(new CellContext(sender.Grid, new Position(r, c), tmpCell), DevAge.Drawing.HeaderSortStyle.None);
                            }
                        }
                    }

                    sender.Grid.InvalidateRange(l_RangeHeader);
                }
            }
        }