-/**\r
- * Namespace: System.Web.UI.WebControls\r
- * Class: RepeatInfo\r
- *\r
- * Author: Gaurav Vaish\r
- * Maintainer: gvaish@iitk.ac.in\r
- * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>\r
- * Implementation: yes\r
- * Status: 100%\r
- *\r
- * (C) Gaurav Vaish (2002)\r
- */\r
-\r
-using System;\r
-using System.Globalization;\r
-using System.Web;\r
-using System.Web.UI;\r
-\r
-namespace System.Web.UI.WebControls\r
-{\r
- public sealed class RepeatInfo\r
- {\r
- private bool outerTableImp;\r
- private int repeatColumns;\r
- private RepeatDirection repeatDirection;\r
- private RepeatLayout repeatLayout;\r
-\r
- public RepeatInfo()\r
- {\r
- outerTableImp = false;\r
- repeatColumns = 0;\r
- repeatDirection = RepeatDirection.Vertical;\r
- repeatLayout = RepeatLayout.Table;\r
- }\r
-\r
- public bool OuterTableImplied\r
- {\r
- get\r
- {\r
- return outerTableImp;\r
- }\r
- set\r
- {\r
- outerTableImp = value;\r
- }\r
- }\r
-\r
- public int RepeatColumns\r
- {\r
- get\r
- {\r
- return repeatColumns;\r
- }\r
- set\r
- {\r
- repeatColumns = value;\r
- }\r
- }\r
-\r
- public RepeatDirection RepeatDirection\r
- {\r
- get\r
- {\r
- return repeatDirection;\r
- }\r
- set\r
- {\r
- if(!Enum.IsDefined(typeof(RepeatDirection), value))\r
- throw new ArgumentException();\r
- repeatDirection = value;\r
- }\r
- }\r
-\r
- public RepeatLayout RepeatLayout\r
- {\r
- get\r
- {\r
- return repeatLayout;\r
- }\r
- set\r
- {\r
- if(!Enum.IsDefined(typeof(RepeatLayout), value))\r
- throw new ArgumentException();\r
- repeatLayout = value;\r
- }\r
- }\r
-\r
- public void RenderRepeater(HtmlTextWriter writer, IRepeatInfoUser user, Style controlStyle, WebControl baseControl)\r
- {\r
- if(RepeatDirection == RepeatDirection.Vertical)\r
- {\r
- DoVerticalRendering(writer, user, controlStyle, baseControl);\r
- } else\r
- {\r
- DoHorizontalRendering(writer, user, controlStyle, baseControl);\r
- }\r
- }\r
-\r
- private void DoVerticalRendering(HtmlTextWriter writer, IRepeatInfoUser user, Style controlStyle, WebControl baseControl)\r
- {\r
- int total = user.RepeatedItemCount;\r
- int colsCount;\r
- int rowsCount;\r
- if(repeatColumns == 0 || repeatColumns==1)\r
- {\r
- colsCount = 1;\r
- rowsCount = total;\r
- } else\r
- {\r
- colsCount = repeatColumns;\r
- rowsCount = (total + repeatColumns - 1) / repeatColumns;\r
- if(rowsCount ==0 && total != 0)\r
- {\r
- rowsCount = 1;\r
- colsCount = total;\r
- }\r
- }\r
- WebControl ctrl = null;\r
- bool isTable = true;\r
- bool hasSeps = user.HasSeparators;\r
- if(!outerTableImp)\r
- {\r
- if(RepeatLayout == RepeatLayout.Table)\r
- {\r
- ctrl = new Table();\r
- } else\r
- {\r
- ctrl = new WebControl(HtmlTextWriterTag.Span);\r
- isTable = false;\r
- }\r
- }\r
-\r
- if(ctrl != null)\r
- {\r
- ctrl.ID = baseControl.ClientID;\r
- ctrl.CopyBaseAttributes(baseControl);\r
- ctrl.ApplyStyle(controlStyle);\r
- ctrl.RenderBeginTag(writer);\r
- }\r
-\r
- Style itemStyle;\r
- int colSpan = 0;\r
- if(user.HasHeader)\r
- {\r
- if(isTable)\r
- {\r
- writer.RenderBeginTag(HtmlTextWriterTag.Tr);\r
- if(rowsCount != 1)\r
- {\r
- colSpan = rowsCount;\r
- if(hasSeps)\r
- colSpan += rowsCount;\r
- writer.AddAttribute(HtmlTextWriterAttribute.Colspan, colSpan.ToString(NumberFormatInfo.InvariantInfo));\r
- }\r
- itemStyle = user.GetItemStyle(ListItemType.Header, -1);\r
- if(itemStyle != null)\r
- {\r
- itemStyle.AddAttributesToRender(writer);\r
- }\r
- writer.RenderBeginTag(HtmlTextWriterTag.Td);\r
- }\r
- user.RenderItem(ListItemType.Header, -1, this, writer);\r
- if(isTable)\r
- {\r
- writer.RenderEndTag();\r
- writer.RenderEndTag();\r
- } else\r
- {\r
- if(!outerTableImp)\r
- {\r
- writer.WriteFullBeginTag("br");\r
- }\r
- }\r
- }\r
-\r
- int rowIndex = 0;\r
- int colIndex = 0;\r
- int index = 0;\r
- while(rowIndex < rowsCount)\r
- {\r
- if(isTable)\r
- writer.RenderBeginTag(HtmlTextWriterTag.Tr);\r
- colIndex = 0;\r
- while(colIndex < colsCount)\r
- {\r
- index = rowIndex + colIndex * rowsCount;\r
- if(index < total)\r
- {\r
- if(isTable)\r
- {\r
- itemStyle = user.GetItemStyle(ListItemType.Item, index);\r
- if(itemStyle != null)\r
- {\r
- itemStyle.AddAttributesToRender(writer);\r
- }\r
- writer.RenderBeginTag(HtmlTextWriterTag.Td);\r
- }\r
- user.RenderItem(ListItemType.Item, index, this, writer);\r
- if(isTable)\r
- writer.RenderEndTag();\r
- if(hasSeps && index != (total - 1))\r
- {\r
- if(colsCount == 1)\r
- {\r
- writer.RenderEndTag();\r
- writer.RenderBeginTag(HtmlTextWriterTag.Tr);\r
- } else\r
- {\r
- writer.WriteFullBeginTag("br");\r
- }\r
- if(isTable)\r
- {\r
- itemStyle = user.GetItemStyle(ListItemType.Separator, index);\r
- if(itemStyle != null)\r
- itemStyle.AddAttributesToRender(writer);\r
- writer.RenderBeginTag(HtmlTextWriterTag.Td);\r
- }\r
- if(index < total)\r
- user.RenderItem(ListItemType.Separator, index, this, writer);\r
- if(isTable)\r
- writer.RenderEndTag();\r
- }\r
- }\r
- colIndex++;\r
- }\r
- if(isTable)\r
- writer.RenderEndTag();\r
- else\r
- if(rowIndex != (rowsCount - 1) || (user.HasFooter && !outerTableImp))\r
- writer.WriteFullBeginTag("br");\r
- rowIndex++;\r
- }\r
- if(user.HasFooter)\r
- {\r
- if(isTable)\r
- {\r
- writer.RenderBeginTag(HtmlTextWriterTag.Tr);\r
- if(colsCount != 1)\r
- {\r
- writer.AddAttribute(HtmlTextWriterAttribute.Colspan, colSpan.ToString(NumberFormatInfo.InvariantInfo));\r
- }\r
- itemStyle = user.GetItemStyle(ListItemType.Footer, -1);\r
- if(itemStyle != null)\r
- {\r
- itemStyle.AddAttributesToRender(writer);\r
- }\r
- writer.RenderBeginTag(HtmlTextWriterTag.Td);\r
- }\r
- user.RenderItem(ListItemType.Footer, -1, this, writer);\r
- if(isTable)\r
- {\r
- writer.RenderEndTag();\r
- writer.RenderEndTag();\r
- }\r
- }\r
- if(ctrl != null)\r
- {\r
- ctrl.RenderEndTag(writer);\r
- }\r
- }\r
-\r
- private void DoHorizontalRendering (HtmlTextWriter writer,\r
- IRepeatInfoUser user,\r
- Style controlStyle,\r
- WebControl baseControl)\r
- {\r
- /* Based on DoVerticalRendering */\r
- int total = user.RepeatedItemCount;\r
- int colsCount = 0;\r
- int rowsCount = 0;\r
- WebControl ctrl = null;\r
- bool isTable = true;\r
- bool hasSeps = user.HasSeparators;\r
- if (!outerTableImp){\r
- isTable = (RepeatLayout == RepeatLayout.Table);\r
- ctrl = (isTable) ? new Table () : new WebControl (HtmlTextWriterTag.Span);\r
- ctrl.ID = baseControl.ClientID;\r
- ctrl.CopyBaseAttributes (baseControl);\r
- ctrl.ApplyStyle (controlStyle);\r
- ctrl.RenderBeginTag (writer);\r
- }\r
-\r
- Style itemStyle;\r
- int colSpan = 0;\r
- if (user.HasHeader){\r
- if (isTable){\r
- writer.RenderBeginTag (HtmlTextWriterTag.Tr);\r
- if (rowsCount != 1){\r
- colSpan = rowsCount;\r
- if (hasSeps)\r
- colSpan += rowsCount;\r
- writer.AddAttribute (HtmlTextWriterAttribute.Colspan,\r
- colSpan.ToString (NumberFormatInfo.InvariantInfo));\r
- }\r
- itemStyle = user.GetItemStyle (ListItemType.Header, -1);\r
- if (itemStyle != null)\r
- itemStyle.AddAttributesToRender (writer);\r
- writer.RenderBeginTag (HtmlTextWriterTag.Td);\r
- }\r
-\r
- user.RenderItem (ListItemType.Header, -1, this, writer);\r
- \r
- if (isTable){\r
- writer.RenderEndTag();\r
- writer.RenderEndTag();\r
- } else if (!outerTableImp)\r
- writer.WriteFullBeginTag ("br");\r
- }\r
-\r
- for (int index = 0; index < total; index++){\r
- if (isTable && index == 0)\r
- writer.RenderBeginTag (HtmlTextWriterTag.Tr);\r
-\r
- if (isTable){\r
- itemStyle = user.GetItemStyle (ListItemType.Item, index);\r
- if (itemStyle != null)\r
- itemStyle.AddAttributesToRender(writer);\r
- writer.RenderBeginTag(HtmlTextWriterTag.Td);\r
- }\r
-\r
- user.RenderItem(ListItemType.Item, index, this, writer);\r
- if (isTable)\r
- writer.RenderEndTag ();\r
-\r
- if (hasSeps && index != (total - 1)){\r
- if (isTable){\r
- itemStyle = user.GetItemStyle (ListItemType.Separator, index);\r
- if (itemStyle != null)\r
- itemStyle.AddAttributesToRender (writer);\r
- writer.RenderBeginTag (HtmlTextWriterTag.Td);\r
- }\r
- user.RenderItem (ListItemType.Separator, index, this, writer);\r
- if (isTable)\r
- writer.RenderEndTag ();\r
- }\r
-\r
- colsCount++;\r
- if (colsCount == repeatColumns) {\r
- if (isTable) {\r
- writer.RenderEndTag ();\r
- writer.RenderBeginTag (HtmlTextWriterTag.Tr);\r
- }\r
- else if (rowsCount < total)\r
- writer.WriteFullBeginTag ("br");\r
- colsCount = 0;\r
- }\r
-\r
- if (index == (total - 1)) {\r
- if (isTable)\r
- writer.RenderEndTag ();\r
- else if (rowsCount < total)\r
- writer.WriteFullBeginTag ("br");\r
- }\r
- }\r
-\r
- if (user.HasFooter){\r
- if (isTable){\r
- writer.RenderBeginTag (HtmlTextWriterTag.Tr);\r
- if (colsCount != 1)\r
- writer.AddAttribute (HtmlTextWriterAttribute.Colspan,\r
- colSpan.ToString(NumberFormatInfo.InvariantInfo));\r
-\r
- itemStyle = user.GetItemStyle (ListItemType.Footer, -1);\r
- if(itemStyle != null)\r
- itemStyle.AddAttributesToRender (writer);\r
- writer.RenderBeginTag (HtmlTextWriterTag.Td);\r
- }\r
- user.RenderItem (ListItemType.Footer, -1, this, writer);\r
- if (isTable){\r
- writer.RenderEndTag ();\r
- writer.RenderEndTag ();\r
- }\r
- }\r
-\r
- if (ctrl != null)\r
- ctrl.RenderEndTag(writer);\r
- }\r
- }\r
-}\r
+//
+// System.Web.UI.WebControls.RepeatInfo.cs
+//
+// Authors:
+// Ben Maurer (bmaurer@novell.com)
+//
+// (C) 2005 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+//#define DEBUG_REPEAT_INFO
+
+using System.Diagnostics;
+using System.ComponentModel;
+using System.Security.Permissions;
+
+namespace System.Web.UI.WebControls {
+
+ // CAS - no inheritance demand required because the class is sealed
+ [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+ public sealed class RepeatInfo {
+
+ // What is baseControl for ?
+ public void RenderRepeater (HtmlTextWriter w, IRepeatInfoUser user, Style controlStyle, WebControl baseControl)
+ {
+ PrintValues (user);
+
+ if (RepeatDirection == RepeatDirection.Vertical)
+ RenderVert (w, user, controlStyle, baseControl);
+ else
+ RenderHoriz (w, user, controlStyle, baseControl);
+ }
+
+ void RenderBr (HtmlTextWriter w)
+ {
+#if NET_2_0
+ w.Write ("<br />");
+#else
+ // grrr, not xhtml...
+ w.Write ("<br>");
+#endif
+
+ }
+
+ void RenderVert (HtmlTextWriter w, IRepeatInfoUser user, Style controlStyle, WebControl baseControl)
+ {
+ int itms = user.RepeatedItemCount;
+ // total number of rows/columns in our table
+ int cols = RepeatColumns == 0 ? 1 : RepeatColumns;
+ // this gets ceil (itms / cols)
+ int rows = (itms + cols - 1) / cols;
+ bool sep = user.HasSeparators;
+ bool oti = OuterTableImplied;
+ int hdr_span = cols * ((sep && cols != 1) ? 2 : 1);
+
+ bool table = RepeatLayout == RepeatLayout.Table && !oti;
+
+#if NET_2_0
+ bool show_empty_trailing_items = true;
+ bool show_empty_trailing_sep = true;
+#else
+ bool show_empty_trailing_items = false;
+ bool show_empty_trailing_sep = false;
+#endif
+
+ if (! oti)
+ RenderBeginTag (w, controlStyle, baseControl);
+
+ if (UseAccessibleHeader) {
+ if (CaptionAlign != TableCaptionAlign.NotSet)
+ w.AddAttribute (HtmlTextWriterAttribute.Align, CaptionAlign.ToString());
+
+ w.RenderBeginTag (HtmlTextWriterTag.Caption);
+ w.Write (Caption);
+ w.RenderEndTag ();
+
+ }
+
+ // Render the header
+ if (user.HasHeader) {
+ if (oti)
+ user.RenderItem (ListItemType.Header, -1, this, w);
+ else if (table) {
+ w.RenderBeginTag (HtmlTextWriterTag.Tr);
+ // Make sure the header takes up the full width. We have two
+ // columns per item if we are using separators, otherwise
+ // one per item.
+ if (hdr_span != 1)
+ w.AddAttribute (HtmlTextWriterAttribute.Colspan, hdr_span.ToString ());
+
+ Style s = user.GetItemStyle (ListItemType.Header, -1);
+ if (s != null)
+ s.AddAttributesToRender (w);
+
+ w.RenderBeginTag (HtmlTextWriterTag.Td);
+ user.RenderItem (ListItemType.Header, -1, this, w);
+ w.RenderEndTag (); // td
+ w.RenderEndTag (); // tr
+ } else {
+ user.RenderItem (ListItemType.Header, -1, this, w);
+ RenderBr (w);
+ }
+ }
+
+ for (int r = 0; r < rows; r ++) {
+ if (table)
+ w.RenderBeginTag (HtmlTextWriterTag.Tr);
+
+ for (int c = 0; c < cols; c ++) {
+ // Find the item number we are in according to the repeat
+ // direction.
+ int item = index_vert (rows, cols, r, c, itms);
+
+ // This item is blank because there there not enough items
+ // to make a full row.
+ if (!show_empty_trailing_items && item >= itms)
+ continue;
+
+ if (table) {
+ Style s = null;
+ if (item < itms)
+ s = user.GetItemStyle (ListItemType.Item, item);
+ if (s != null)
+ s.AddAttributesToRender (w);
+ w.RenderBeginTag (HtmlTextWriterTag.Td);
+ }
+
+ if (item < itms)
+ user.RenderItem (ListItemType.Item, item, this, w);
+
+ if (table)
+ w.RenderEndTag (); // td
+
+ if (sep && cols != 1) {
+ if (table) {
+ if (item < itms - 1) {
+ Style s = user.GetItemStyle (ListItemType.Separator, item);
+ if (s != null)
+ s.AddAttributesToRender (w);
+ }
+ if (item < itms - 1 || show_empty_trailing_sep)
+ w.RenderBeginTag (HtmlTextWriterTag.Td);
+ }
+
+ if (item < itms - 1)
+ user.RenderItem (ListItemType.Separator, item, this, w);
+
+ if (table && (item < itms - 1 || show_empty_trailing_sep))
+ w.RenderEndTag (); // td
+ }
+ }
+ if (oti) {
+ } else if (table) {
+ w.RenderEndTag (); // tr
+ } else if (r != rows - 1) {
+ RenderBr(w);
+ }
+
+ if (sep && r != rows - 1 /* no sep on last item */ && cols == 1) {
+ if (table) {
+ w.RenderBeginTag (HtmlTextWriterTag.Tr);
+ Style s = user.GetItemStyle (ListItemType.Separator, r);
+ if (s != null)
+ s.AddAttributesToRender (w);
+
+ w.RenderBeginTag (HtmlTextWriterTag.Td);
+ } else if (oti) {
+#if !NET_2_0
+ /* 2.0 doesn't render this <br /> */
+ RenderBr (w);
+#endif
+ }
+
+ user.RenderItem (ListItemType.Separator, r, this, w);
+
+ if (table) {
+ w.RenderEndTag (); // td
+ w.RenderEndTag (); // tr
+ } else if (!oti) {
+ RenderBr (w);
+ }
+ }
+ }
+
+ // Render the footer
+ if (user.HasFooter) {
+ if (oti)
+ user.RenderItem (ListItemType.Footer, -1, this, w);
+ else if (table) {
+ w.RenderBeginTag (HtmlTextWriterTag.Tr);
+ if (hdr_span != 1)
+ w.AddAttribute (HtmlTextWriterAttribute.Colspan, hdr_span.ToString ());
+
+ Style s = user.GetItemStyle (ListItemType.Footer, -1);
+ if (s != null)
+ s.AddAttributesToRender (w);
+
+ w.RenderBeginTag (HtmlTextWriterTag.Td);
+ user.RenderItem (ListItemType.Footer, -1, this, w);
+ w.RenderEndTag (); // td
+ w.RenderEndTag (); // tr
+ } else {
+ // avoid dups on 0 items
+ if (itms != 0)
+ RenderBr (w);
+ user.RenderItem (ListItemType.Footer, -1, this, w);
+ }
+ }
+ if (! oti)
+ w.RenderEndTag (); // table/span
+
+ }
+
+ void RenderHoriz (HtmlTextWriter w, IRepeatInfoUser user, Style controlStyle, WebControl baseControl)
+ {
+ int itms = user.RepeatedItemCount;
+ // total number of rows/columns in our table
+ int cols = RepeatColumns == 0 ? itms : RepeatColumns;
+ // this gets ceil (itms / cols)
+ int rows = cols == 0 ? 0 : (itms + cols - 1) / cols;
+ bool sep = user.HasSeparators;
+ //bool oti = OuterTableImplied;
+ int hdr_span = cols * (sep ? 2 : 1);
+
+ bool table = RepeatLayout == RepeatLayout.Table;
+
+#if NET_2_0
+ bool show_empty_trailing_items = true;
+ bool show_empty_trailing_sep = true;
+#else
+ bool show_empty_trailing_items = false;
+ bool show_empty_trailing_sep = false;
+#endif
+
+ RenderBeginTag (w, controlStyle, baseControl);
+
+ if (UseAccessibleHeader) {
+ if (CaptionAlign != TableCaptionAlign.NotSet)
+ w.AddAttribute (HtmlTextWriterAttribute.Align, CaptionAlign.ToString());
+
+ w.RenderBeginTag (HtmlTextWriterTag.Caption);
+ w.Write (Caption);
+ w.RenderEndTag ();
+
+ }
+
+ // Render the header
+ if (user.HasHeader) {
+ if (table) {
+ w.RenderBeginTag (HtmlTextWriterTag.Tr);
+ // Make sure the header takes up the full width. We have two
+ // columns per item if we are using separators, otherwise
+ // one per item.
+ if (hdr_span != 1)
+ w.AddAttribute (HtmlTextWriterAttribute.Colspan, hdr_span.ToString ());
+
+ Style s = user.GetItemStyle (ListItemType.Header, -1);
+ if (s != null)
+ s.AddAttributesToRender (w);
+
+ w.RenderBeginTag (HtmlTextWriterTag.Td);
+ user.RenderItem (ListItemType.Header, -1, this, w);
+ w.RenderEndTag (); // td
+ w.RenderEndTag (); // tr
+ } else {
+ user.RenderItem (ListItemType.Header, -1, this, w);
+ if (!table && RepeatColumns != 0 && itms != 0)
+ RenderBr (w);
+ }
+ }
+
+ for (int r = 0; r < rows; r ++) {
+ if (table)
+ w.RenderBeginTag (HtmlTextWriterTag.Tr);
+
+ for (int c = 0; c < cols; c ++) {
+ // Find the item number we are in according to the repeat
+ // direction.
+ int item = r * cols + c;
+
+ // This item is blank because there there not enough items
+ // to make a full row.
+ if (!show_empty_trailing_items && item >= itms)
+ continue;
+
+ if (table) {
+ Style s = null;
+ if (item < itms)
+ s = user.GetItemStyle (ListItemType.Item, item);
+
+ if (s != null)
+ s.AddAttributesToRender (w);
+ w.RenderBeginTag (HtmlTextWriterTag.Td);
+ }
+
+ if (item < itms)
+ user.RenderItem (ListItemType.Item, item, this, w);
+
+ if (table)
+ w.RenderEndTag (); // td
+
+ if (sep) {
+ if (table) {
+ if (item < itms - 1) {
+ Style s = user.GetItemStyle (ListItemType.Separator, item);
+ if (s != null)
+ s.AddAttributesToRender (w);
+ }
+ if (item < itms - 1 || show_empty_trailing_sep)
+ w.RenderBeginTag (HtmlTextWriterTag.Td);
+ }
+
+ if (item < itms - 1)
+ user.RenderItem (ListItemType.Separator, item, this, w);
+
+ if (table && (item < itms - 1 || show_empty_trailing_sep))
+ w.RenderEndTag (); // td
+ }
+ }
+
+ if (table) {
+ // if (!oti)
+ w.RenderEndTag (); // tr
+ } else if (!(r == rows -1 && RepeatColumns == 0))
+ RenderBr (w);
+
+ }
+
+ // Render the footer
+ if (user.HasFooter) {
+ if (table) {
+ w.RenderBeginTag (HtmlTextWriterTag.Tr);
+ if (hdr_span != 1)
+ w.AddAttribute (HtmlTextWriterAttribute.Colspan, hdr_span.ToString ());
+
+ Style s = user.GetItemStyle (ListItemType.Footer, -1);
+ if (s != null)
+ s.AddAttributesToRender (w);
+
+ w.RenderBeginTag (HtmlTextWriterTag.Td);
+ user.RenderItem (ListItemType.Footer, -1, this, w);
+ w.RenderEndTag (); // td
+ w.RenderEndTag (); // tr
+ } else {
+ user.RenderItem (ListItemType.Footer, -1, this, w);
+ }
+ }
+ if (true)
+ w.RenderEndTag (); // table/span
+
+ }
+
+ int index_vert (int rows, int cols, int r, int c, int items)
+ {
+ int last = items % cols;
+
+ if (last == 0)
+ last = cols;
+ if (r == rows - 1 && c >= last)
+ return items;
+
+
+ int add;
+ int v;
+ if (c > last){
+ add = last * rows + (c-last) * (rows-1);
+ v = add + r;
+ } else
+ v = rows * c + r;
+
+ return v;
+ }
+
+ void RenderBeginTag (HtmlTextWriter w, Style s, WebControl wc)
+ {
+ WebControl c;
+ if (RepeatLayout == RepeatLayout.Table)
+ c = new Table ();
+ else
+ c = new Label ();
+
+ c.ID = wc.ClientID;
+ c.CopyBaseAttributes (wc);
+ c.ApplyStyle (s);
+ c.Enabled = wc.Enabled;
+ c.RenderBeginTag (w);
+ }
+
+
+ bool outer_table_implied;
+ public bool OuterTableImplied {
+ get {
+ return outer_table_implied;
+ }
+ set {
+ outer_table_implied = value;
+ }
+ }
+
+ int repeat_cols;
+ public int RepeatColumns {
+ get {
+ return repeat_cols;
+ }
+ set {
+ repeat_cols = value;
+ }
+ }
+
+ RepeatDirection dir = RepeatDirection.Vertical;
+ public RepeatDirection RepeatDirection {
+ get {
+ return dir;
+ }
+ set {
+ if (value != RepeatDirection.Horizontal &&
+ value != RepeatDirection.Vertical)
+ throw new ArgumentOutOfRangeException ();
+
+ dir = value;
+ }
+ }
+
+ RepeatLayout layout;
+ public RepeatLayout RepeatLayout {
+ get {
+ return layout;
+ }
+ set {
+ if (value != RepeatLayout.Flow &&
+ value != RepeatLayout.Table)
+ throw new ArgumentOutOfRangeException ();
+ layout = value;
+ }
+ }
+
+ [Conditional ("DEBUG_REPEAT_INFO")]
+ internal void PrintValues (IRepeatInfoUser riu)
+ {
+ string s = String.Format ("Layout {0}; Direction {1}; Cols {2}; OuterTableImplied {3}\n" +
+ "User: itms {4}, hdr {5}; ftr {6}; sep {7}", RepeatLayout, RepeatDirection,
+ RepeatColumns, OuterTableImplied, riu.RepeatedItemCount, riu.HasSeparators, riu.HasHeader,
+ riu.HasFooter, riu.HasSeparators
+ );
+ Console.WriteLine (s);
+ if (HttpContext.Current != null)
+ HttpContext.Current.Trace.Write (s);
+ }
+
+ private string caption = "";
+ private TableCaptionAlign captionAlign = TableCaptionAlign.NotSet;
+ private bool useAccessibleHeader = false;
+
+ [WebSysDescription ("")]
+ [WebCategory ("Accessibility")]
+ public string Caption {
+ get {return caption;}
+ set { caption = value; }
+ }
+
+ [WebSysDescription ("")]
+ [DefaultValue (TableCaptionAlign.NotSet)]
+ [WebCategory ("Accessibility")]
+ public TableCaptionAlign CaptionAlign {
+ get {return captionAlign;}
+ set { captionAlign = value; }
+ }
+
+ [WebSysDescription ("")]
+ [DefaultValue (false)]
+ [WebCategory ("Accessibility")]
+ public bool UseAccessibleHeader {
+ get {return useAccessibleHeader;}
+ set { useAccessibleHeader = value; }
+ }
+
+ }
+}