MuchinfoNumericElementsViewModel.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using System;
  2. using System.Collections.ObjectModel;
  3. using System.Windows;
  4. namespace Muchinfo.DataPager.Base
  5. {
  6. public class MuchinfoNumericElementsViewModel
  7. {
  8. private ObservableCollection<MuchinfoNumericElementViewModel> _elements;
  9. private string _groupName;
  10. public ObservableCollection<MuchinfoNumericElementViewModel> Elements
  11. {
  12. get
  13. {
  14. return this._elements ?? (this._elements = new ObservableCollection<MuchinfoNumericElementViewModel>());
  15. }
  16. }
  17. private string GroupName
  18. {
  19. get { return this._groupName ?? (this._groupName = Guid.NewGuid().ToString()); }
  20. }
  21. public MuchinfoNumericElementsViewModel(int numericButtonCount, int pageIndex, int pageCount, Style numericButtonStyle)
  22. {
  23. this.PopulatePages(numericButtonCount, pageIndex, pageCount, numericButtonStyle);
  24. }
  25. public MuchinfoNumericElementsViewModel(int numericButtonCount, int pageIndex, int pageCount)
  26. : this(numericButtonCount, pageIndex, pageCount, null)
  27. {
  28. }
  29. internal void PopulatePages(int numericButtonCount, int pageIndex, int pageCount, Style numericButtonStyle)
  30. {
  31. int buttonStartIndex = MuchinfoNumericElementsViewModel.GetButtonStartIndex(numericButtonCount, pageIndex, pageCount);
  32. int numericElementsCountWithoutEllipsis = MuchinfoNumericElementsViewModel.GetNumericElementsCountWithoutEllipsis(numericButtonCount, buttonStartIndex, pageCount);
  33. int num = 0;
  34. //if (MuchinfoNumericElementsViewModel.ShouldDisplayLeftEllipsis(autoEllipsisMode, buttonStartIndex))
  35. //{
  36. // num = 1;
  37. //}
  38. this.Elements.Clear();
  39. this.AddNumericPageElements(pageIndex, numericElementsCountWithoutEllipsis, buttonStartIndex + num, pageCount, numericButtonStyle);
  40. this.AddEllipsisElements(numericElementsCountWithoutEllipsis, pageCount, buttonStartIndex + num, numericButtonStyle);
  41. }
  42. internal void PopulatePages(int numericButtonCount, int pageIndex, int pageCount)
  43. {
  44. this.PopulatePages(numericButtonCount, pageIndex, pageCount, null);
  45. }
  46. private static int GetNumericElementsCountWithoutEllipsis(int numericButtonCount, int startIndex, int pageCount)
  47. {
  48. int num = 0;
  49. int num2 = 0;
  50. //if (MuchinfoNumericElementsViewModel.ShouldDisplayLeftEllipsis(autoEllipsisMode, startIndex))
  51. //{
  52. // num = 1;
  53. //}
  54. //if (MuchinfoNumericElementsViewModel.ShouldDisplayRightEllipsis(autoEllipsisMode, numericButtonCount, pageCount, startIndex))
  55. //{
  56. // num2 = 1;
  57. //}
  58. return numericButtonCount - num - num2;
  59. }
  60. private void AddNumericPageElements(int pageIndex, int numericButtonCountWithoutEllipsis, int startIndex, int pageCount, Style numericButtonStyle)
  61. {
  62. int num = startIndex;
  63. while (num < startIndex + numericButtonCountWithoutEllipsis && num <= pageCount)
  64. {
  65. this.Elements.Add(new MuchinfoNumericElementViewModel(num, num - 1, num == pageIndex + 1, this.GroupName, numericButtonStyle));
  66. num++;
  67. }
  68. }
  69. private void AddEllipsisElements(int numericElementsCountWithoutEllipsis, int pageCount, int startIndex, Style numericButtonStyle)
  70. {
  71. string @string = "...";// LocalizationManager.GetString("RadDataPagerEllipsisString");
  72. int num = this.AddLeftEllipsisIfNeeded(startIndex, @string, numericButtonStyle);
  73. this.AddRightEllipsisIfNeeded(numericElementsCountWithoutEllipsis, pageCount, startIndex + num, @string, numericButtonStyle);
  74. }
  75. private void AddRightEllipsisIfNeeded(int numericButtonCount, int pageCount, int startIndex, string ellipsisString, Style numericButtonStyle)
  76. {
  77. //if (MuchinfoNumericElementsViewModel.ShouldDisplayRightEllipsis(autoEllipsisMode, numericButtonCount, pageCount, startIndex))
  78. //{
  79. // this.Elements.Add(new MuchinfoNumericElementViewModel(ellipsisString, startIndex + numericButtonCount - 1, false, this.GroupName, numericButtonStyle));
  80. //}
  81. }
  82. private int AddLeftEllipsisIfNeeded(int startIndex, string ellipsisString, Style numericButtonStyle)
  83. {
  84. int result = 0;
  85. //if (MuchinfoNumericElementsViewModel.ShouldDisplayLeftEllipsis(autoEllipsisMode, startIndex))
  86. //{
  87. // this.Elements.Insert(0, new MuchinfoNumericElementViewModel(ellipsisString, startIndex - 2, false, this.GroupName, numericButtonStyle));
  88. // result = 1;
  89. //}
  90. return result;
  91. }
  92. internal static int GetButtonStartIndex(int numericButtonCount, int pageIndex, int pageCount)
  93. {
  94. return Math.Min(Math.Max(pageIndex + 1 - numericButtonCount / 2, 1), Math.Max(pageCount - numericButtonCount + 1, 1));
  95. }
  96. }
  97. }