From 059a1e90b92c3c1ca027c0ec59f3628d87a954a6 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 23 May 2012 03:19:25 +0100
Subject: Add ConsoleDisplayList for more consistent formatting of console
output in list form.
Convert "show region" to use this structure rather than hand-constructing
---
OpenSim/Framework/Console/ConsoleDisplayList.cs | 112 ++++++++++++++++++++++++
1 file changed, 112 insertions(+)
create mode 100644 OpenSim/Framework/Console/ConsoleDisplayList.cs
(limited to 'OpenSim/Framework/Console/ConsoleDisplayList.cs')
diff --git a/OpenSim/Framework/Console/ConsoleDisplayList.cs b/OpenSim/Framework/Console/ConsoleDisplayList.cs
new file mode 100644
index 0000000..6885509
--- /dev/null
+++ b/OpenSim/Framework/Console/ConsoleDisplayList.cs
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace OpenSim.Framework.Console
+{
+ ///
+ /// Used to generated a formatted table for the console.
+ ///
+ ///
+ /// Currently subject to change. If you use this, be prepared to change your code when this class changes.
+ ///
+ public class ConsoleDisplayList
+ {
+ ///
+ /// The default divider between key and value for a list item.
+ ///
+ public const string DefaultKeyValueDivider = " : ";
+
+ ///
+ /// The divider used between key and value for a list item.
+ ///
+ public string KeyValueDivider { get; set; }
+
+ ///
+ /// Table rows
+ ///
+ public List> Rows { get; private set; }
+
+ ///
+ /// Number of spaces to indent the list.
+ ///
+ public int Indent { get; set; }
+
+ public ConsoleDisplayList()
+ {
+ Rows = new List>();
+ KeyValueDivider = DefaultKeyValueDivider;
+ }
+
+ public override string ToString()
+ {
+ StringBuilder sb = new StringBuilder();
+ AddToStringBuilder(sb);
+ return sb.ToString();
+ }
+
+ public void AddToStringBuilder(StringBuilder sb)
+ {
+ string formatString = GetFormatString();
+// System.Console.WriteLine("FORMAT STRING [{0}]", formatString);
+
+ // rows
+ foreach (KeyValuePair row in Rows)
+ sb.AppendFormat(formatString, row.Key, row.Value);
+ }
+
+ ///
+ /// Gets the format string for the table.
+ ///
+ private string GetFormatString()
+ {
+ StringBuilder formatSb = new StringBuilder();
+
+ int longestKey = -1;
+
+ foreach (KeyValuePair row in Rows)
+ if (row.Key.Length > longestKey)
+ longestKey = row.Key.Length;
+
+ formatSb.Append(' ', Indent);
+
+ // Can only do left formatting for now
+ formatSb.AppendFormat("{{0,-{0}}}{1}{{1}}\n", longestKey, KeyValueDivider);
+
+ return formatSb.ToString();
+ }
+
+ public void AddRow(object key, object value)
+ {
+ Rows.Add(new KeyValuePair(key.ToString(), value.ToString()));
+ }
+ }
+}
\ No newline at end of file
--
cgit v1.1