diff --git a/TShockAPI/PaginationTools.cs b/TShockAPI/PaginationTools.cs
index 47ac654d..0b342951 100644
--- a/TShockAPI/PaginationTools.cs
+++ b/TShockAPI/PaginationTools.cs
@@ -14,258 +14,303 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
-*/
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace TShockAPI {
- public static class PaginationTools {
- public delegate Tuple LineFormatterDelegate(object lineData, int lineIndex, int pageNumber);
-
- #region [Nested: Settings Class]
- public class Settings {
- public bool IncludeHeader { get; set; }
-
- private string headerFormat;
- public string HeaderFormat
- {
- get { return this.headerFormat; }
- set
- {
- if (value == null)
- throw new ArgumentNullException();
-
- this.headerFormat = value;
- }
- }
-
- public Color HeaderTextColor { get; set; }
- public bool IncludeFooter { get; set; }
-
- private string footerFormat;
- public string FooterFormat
- {
- get { return this.footerFormat; }
- set
- {
- if (value == null)
- throw new ArgumentNullException();
-
- this.footerFormat = value;
- }
- }
-
- public Color FooterTextColor { get; set; }
- public string NothingToDisplayString { get; set; }
- public LineFormatterDelegate LineFormatter { get; set; }
- public Color LineTextColor { get; set; }
-
- private int maxLinesPerPage;
-
- public int MaxLinesPerPage
- {
- get { return this.maxLinesPerPage; }
- set
- {
- if (value <= 0)
- throw new ArgumentException("The value has to be greater than zero.");
-
- this.maxLinesPerPage = value;
- }
- }
-
- private int pageLimit;
-
- public int PageLimit
- {
- get { return this.pageLimit; }
- set
- {
- if (value < 0)
- throw new ArgumentException("The value has to be greater than or equal to zero.");
-
- this.pageLimit = value;
- }
- }
-
-
- public Settings()
- {
- this.IncludeHeader = true;
- this.headerFormat = "Page {0} of {1}";
- this.HeaderTextColor = Color.Green;
- this.IncludeFooter = true;
- this.footerFormat = "Type / {0} for more.";
- this.FooterTextColor = Color.Yellow;
- this.NothingToDisplayString = null;
- this.LineFormatter = null;
- this.LineTextColor = Color.White;
- this.maxLinesPerPage = 4;
- this.pageLimit = 0;
- }
- }
- #endregion
-
- public static void SendPage(
- TSPlayer player, int pageNumber, IEnumerable dataToPaginate, int dataToPaginateCount, Settings settings = null)
- {
- if (settings == null)
- settings = new Settings();
-
- if (dataToPaginateCount == 0)
- {
- if (settings.NothingToDisplayString != null)
- player.SendMessage(settings.NothingToDisplayString, settings.HeaderTextColor);
-
- return;
- }
-
- int pageCount = ((dataToPaginateCount - 1) / settings.MaxLinesPerPage) + 1;
- if (settings.PageLimit > 0 && pageCount > settings.PageLimit)
- pageCount = settings.PageLimit;
- if (pageNumber > pageCount)
- pageNumber = pageCount;
-
- if (settings.IncludeHeader)
- player.SendMessage(string.Format(settings.HeaderFormat, pageNumber, pageCount), settings.HeaderTextColor);
-
- int listOffset = (pageNumber - 1) * settings.MaxLinesPerPage;
- int offsetCounter = 0;
- int lineCounter = 0;
- foreach (object lineData in dataToPaginate)
- {
- if (lineData == null)
- continue;
- if (offsetCounter++ < listOffset)
- continue;
- if (lineCounter++ == settings.MaxLinesPerPage)
- break;
-
- string lineMessage;
- Color lineColor = settings.LineTextColor;
- if (lineData is Tuple)
- {
- var lineFormat = (Tuple)lineData;
- lineMessage = lineFormat.Item1;
- lineColor = lineFormat.Item2;
- }
- else if (settings.LineFormatter != null)
- {
- try
- {
- Tuple lineFormat = settings.LineFormatter(lineData, offsetCounter, pageNumber);
- if (lineFormat == null)
- continue;
-
- lineMessage = lineFormat.Item1;
- lineColor = lineFormat.Item2;
- }
- catch (Exception ex)
- {
- throw new InvalidOperationException(
- "The method referenced by LineFormatter has thrown an exception. See inner exception for details.", ex);
- }
- }
- else
- {
- lineMessage = lineData.ToString();
- }
-
- if (lineMessage != null)
- player.SendMessage(lineMessage, lineColor);
- }
-
- if (lineCounter == 0)
- {
- if (settings.NothingToDisplayString != null)
- player.SendMessage(settings.NothingToDisplayString, settings.HeaderTextColor);
- }
- else if (settings.IncludeFooter && pageNumber + 1 <= pageCount)
- {
- player.SendMessage(string.Format(settings.FooterFormat, pageNumber + 1, pageNumber, pageCount), settings.FooterTextColor);
- }
- }
-
- public static void SendPage(TSPlayer player, int pageNumber, IList dataToPaginate, Settings settings = null)
- {
- PaginationTools.SendPage(player, pageNumber, dataToPaginate, dataToPaginate.Count, settings);
- }
-
- public static List BuildLinesFromTerms(
- IEnumerable terms, Func