Beispiel #1
0
 public void UpdateOrders()
 {
     fOrderedColumns.Clear();
     if (fColumns.Count > 0)
     {
         foreach (var column in fColumns)
         {
             fOrderedColumns.Add(column);
         }
         SysUtils.MergeSort(fOrderedColumns, CompareItems);
     }
 }
Beispiel #2
0
        /*protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e)
         * {
         #if DEFAULT_HEADER
         *
         *  e.DrawDefault = true;
         *
         #else
         *
         *  using (var sf = new StringFormat())
         *  {
         *      Graphics gfx = e.Graphics;
         *      Rectangle rt = e.Bounds;
         *
         #if !__MonoCS__
         *      VisualStyleElement element = VisualStyleElement.Header.Item.Normal;
         *      if ((e.State & ListViewItemStates.Hot) == ListViewItemStates.Hot)
         *          element = VisualStyleElement.Header.Item.Hot;
         *      if ((e.State & ListViewItemStates.Selected) == ListViewItemStates.Selected)
         *          element = VisualStyleElement.Header.Item.Pressed;
         *
         *      var visualStyleRenderer = new VisualStyleRenderer(element);
         *      visualStyleRenderer.DrawBackground(gfx, rt);
         #else
         *      e.DrawBackground();
         #endif
         *
         *      switch (e.Header.TextAlign)
         *      {
         *          case HorizontalAlignment.Left:
         *              sf.Alignment = StringAlignment.Near;
         *              break;
         *
         *          case HorizontalAlignment.Right:
         *              sf.Alignment = StringAlignment.Far;
         *              break;
         *
         *          case HorizontalAlignment.Center:
         *              sf.Alignment = StringAlignment.Center;
         *              break;
         *      }
         *
         *      sf.LineAlignment = StringAlignment.Center;
         *      sf.Trimming = StringTrimming.EllipsisCharacter;
         *      sf.FormatFlags = StringFormatFlags.NoWrap;
         *
         *      int w = TextRenderer.MeasureText(" ", Font).Width;
         *      rt.Inflate(-(w / 5), 0);
         *
         *      gfx.DrawString(e.Header.Text, Font, Brushes.Black, rt, sf);
         *
         *      string arrow = "";
         *      switch (GetColumnSortOrder(e.ColumnIndex)) {
         *          case SortOrder.Ascending:
         *              arrow = "▲";
         *              break;
         *          case SortOrder.Descending:
         *              arrow = "▼";
         *              break;
         *      }
         *
         *      if (arrow != "") {
         *          using (var fnt = new Font(Font.FontFamily, Font.SizeInPoints * 0.6f, FontStyle.Regular)) {
         *              float aw = gfx.MeasureString(arrow, fnt).Width;
         *              float x = rt.Left + (rt.Width - aw) / 2.0f;
         *              gfx.TextRenderingHint = TextRenderingHint.AntiAlias;
         *              gfx.DrawString(arrow, fnt, Brushes.Black, x, rt.Top);
         *          }
         *      }
         *  }
         *
         #endif
         *
         *  base.OnDrawColumnHeader(e);
         * }*/

        /*protected override void OnCellFormatting(GridCellFormatEventArgs e)
         * {
         *  if (e.Row == fItems.IndexOf((GKListItem)SelectedItem)) {
         *      e.BackgroundColor = SystemColors.Highlight;
         *      e.ForegroundColor = Colors.White;
         *  } else {
         *      var item = e.Item as GKListItem;
         *      if (item != null) {
         *          if (item.BackColor != Colors.Transparent) {
         *              e.BackgroundColor = item.BackColor;
         *              e.ForegroundColor = Colors.Black;
         *          } else {
         *              e.BackgroundColor = Colors.White;
         *              e.ForegroundColor = Colors.Black;
         *          }
         *      }
         *  }
         *
         *  base.OnCellFormatting(e);
         * }*/

        private void SortContents()
        {
            if (fSorting)
            {
                if (fListMan != null)
                {
                    fListMan.SortContents(fSortColumn, fSortOrder == SortOrder.Ascending);
                }
                else
                {
                    SysUtils.MergeSort(fItems, CompareItems);
                }
            }
        }
Beispiel #3
0
        public void Sort_Tests()
        {
            Assert.Throws(typeof(ArgumentNullException), () => { SysUtils.QuickSort <ValItem>(null, null); });
            Assert.Throws(typeof(ArgumentNullException), () => { SysUtils.MergeSort <ValItem>(null, null); });
            Assert.Throws(typeof(ArgumentNullException), () => { ListTimSort <int> .Sort(null, null); });

            Random rnd = new Random();

            List <ValItem> listQS = new List <ValItem>();
            List <ValItem> listMS = new List <ValItem>();
            List <ValItem> listTS = new List <ValItem>();
            List <ValItem> listCS = new List <ValItem>();

            //const int MaxCount = 1000000; // for performance test
            const int MaxCount = 1000; // for common test

            for (int i = 0; i < MaxCount; i++)
            {
                double val = rnd.NextDouble();

                listTS.Add(new ValItem(val));
                listQS.Add(new ValItem(val));
                listMS.Add(new ValItem(val));
                listCS.Add(new ValItem(val));
            }

            listCS.Sort(CompareItems);

            SysUtils.QuickSort(listQS, CompareItems);

            SysUtils.MergeSort(listMS, CompareItems);

            ListTimSort <ValItem> .Sort(listTS, CompareItems);

            // test for sort valid
            //(only for numbers, because some methods is with the permutations, and part - no)
            for (int i = 0; i < MaxCount; i++)
            {
                Assert.AreEqual(listTS[i].Value, listQS[i].Value);
                Assert.AreEqual(listQS[i].Value, listMS[i].Value);
                Assert.AreEqual(listMS[i].Value, listCS[i].Value);
            }
        }