using System; using System.Collections.ObjectModel; using System.Windows; namespace Muchinfo.DataPager.Base { public class MuchinfoNumericElementsViewModel { private ObservableCollection _elements; private string _groupName; public ObservableCollection Elements { get { return this._elements ?? (this._elements = new ObservableCollection()); } } private string GroupName { get { return this._groupName ?? (this._groupName = Guid.NewGuid().ToString()); } } public MuchinfoNumericElementsViewModel(int numericButtonCount, int pageIndex, int pageCount, Style numericButtonStyle) { this.PopulatePages(numericButtonCount, pageIndex, pageCount, numericButtonStyle); } public MuchinfoNumericElementsViewModel(int numericButtonCount, int pageIndex, int pageCount) : this(numericButtonCount, pageIndex, pageCount, null) { } internal void PopulatePages(int numericButtonCount, int pageIndex, int pageCount, Style numericButtonStyle) { int buttonStartIndex = MuchinfoNumericElementsViewModel.GetButtonStartIndex(numericButtonCount, pageIndex, pageCount); int numericElementsCountWithoutEllipsis = MuchinfoNumericElementsViewModel.GetNumericElementsCountWithoutEllipsis(numericButtonCount, buttonStartIndex, pageCount); int num = 0; //if (MuchinfoNumericElementsViewModel.ShouldDisplayLeftEllipsis(autoEllipsisMode, buttonStartIndex)) //{ // num = 1; //} this.Elements.Clear(); this.AddNumericPageElements(pageIndex, numericElementsCountWithoutEllipsis, buttonStartIndex + num, pageCount, numericButtonStyle); this.AddEllipsisElements(numericElementsCountWithoutEllipsis, pageCount, buttonStartIndex + num, numericButtonStyle); } internal void PopulatePages(int numericButtonCount, int pageIndex, int pageCount) { this.PopulatePages(numericButtonCount, pageIndex, pageCount, null); } private static int GetNumericElementsCountWithoutEllipsis(int numericButtonCount, int startIndex, int pageCount) { int num = 0; int num2 = 0; //if (MuchinfoNumericElementsViewModel.ShouldDisplayLeftEllipsis(autoEllipsisMode, startIndex)) //{ // num = 1; //} //if (MuchinfoNumericElementsViewModel.ShouldDisplayRightEllipsis(autoEllipsisMode, numericButtonCount, pageCount, startIndex)) //{ // num2 = 1; //} return numericButtonCount - num - num2; } private void AddNumericPageElements(int pageIndex, int numericButtonCountWithoutEllipsis, int startIndex, int pageCount, Style numericButtonStyle) { int num = startIndex; while (num < startIndex + numericButtonCountWithoutEllipsis && num <= pageCount) { this.Elements.Add(new MuchinfoNumericElementViewModel(num, num - 1, num == pageIndex + 1, this.GroupName, numericButtonStyle)); num++; } } private void AddEllipsisElements(int numericElementsCountWithoutEllipsis, int pageCount, int startIndex, Style numericButtonStyle) { string @string = "...";// LocalizationManager.GetString("RadDataPagerEllipsisString"); int num = this.AddLeftEllipsisIfNeeded(startIndex, @string, numericButtonStyle); this.AddRightEllipsisIfNeeded(numericElementsCountWithoutEllipsis, pageCount, startIndex + num, @string, numericButtonStyle); } private void AddRightEllipsisIfNeeded(int numericButtonCount, int pageCount, int startIndex, string ellipsisString, Style numericButtonStyle) { //if (MuchinfoNumericElementsViewModel.ShouldDisplayRightEllipsis(autoEllipsisMode, numericButtonCount, pageCount, startIndex)) //{ // this.Elements.Add(new MuchinfoNumericElementViewModel(ellipsisString, startIndex + numericButtonCount - 1, false, this.GroupName, numericButtonStyle)); //} } private int AddLeftEllipsisIfNeeded(int startIndex, string ellipsisString, Style numericButtonStyle) { int result = 0; //if (MuchinfoNumericElementsViewModel.ShouldDisplayLeftEllipsis(autoEllipsisMode, startIndex)) //{ // this.Elements.Insert(0, new MuchinfoNumericElementViewModel(ellipsisString, startIndex - 2, false, this.GroupName, numericButtonStyle)); // result = 1; //} return result; } internal static int GetButtonStartIndex(int numericButtonCount, int pageIndex, int pageCount) { return Math.Min(Math.Max(pageIndex + 1 - numericButtonCount / 2, 1), Math.Max(pageCount - numericButtonCount + 1, 1)); } } }