* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / Table.cs
index 8de3484518bd22f5ea0de65d87be990f71010085..852177ab9b6bf27ec71f210b326aa55ac84d8721 100644 (file)
-/**\r
- * Namespace: System.Web.UI.WebControls\r
- * Class:     Table\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.Drawing;\r
-using System.Globalization;\r
-using System.Web;\r
-using System.Web.UI;\r
-using System.ComponentModel;\r
-\r
-namespace System.Web.UI.WebControls\r
-{\r
-       [DefaultProperty("Rows")]\r
-       //[Designer("??")]\r
-       [ParseChildren(true, "Rows")]\r
-       public class Table: WebControl\r
-       {\r
-               private TableRowCollection rows;\r
-\r
-               private class TableRowControlCollection : ControlCollection\r
-               {\r
-                       public TableRowControlCollection(Control owner): base(owner)\r
-                       {\r
-                       }\r
-\r
-                       public override void Add(Control child)\r
-                       {\r
-                               if(child is TableRow)\r
-                               {\r
-                                       Add(child);\r
-                                       return;\r
-                               }\r
-                               throw new ArgumentException(HttpRuntime.FormatResourceString("Cannot_Have_Children_Of_Type", "Table", child.GetType().Name.ToString()));\r
-                       }\r
-\r
-                       public override void AddAt(int index, Control child)\r
-                       {\r
-                               if(child is TableRow)\r
-                               {\r
-                                       Add(child);\r
-                                       return;\r
-                               }\r
-                               throw new ArgumentException(HttpRuntime.FormatResourceString("Cannot_Have_Children_Of_Type", "Table", child.GetType().Name.ToString()));\r
-                       }\r
-               }\r
-\r
-               public Table(): base(HtmlTextWriterTag.Table)\r
-               {\r
-               }\r
-\r
-               public virtual string BackImageUrl\r
-               {\r
-                       get\r
-                       {\r
-                               if(ControlStyleCreated)\r
-                               {\r
-                                       return ((TableStyle)ControlStyle).BackImageUrl;\r
-                               }\r
-                               return String.Empty;\r
-                       }\r
-                       set\r
-                       {\r
-                               ((TableStyle)ControlStyle).BackImageUrl = value;\r
-                       }\r
-               }\r
-\r
-               public virtual int CellPadding\r
-               {\r
-                       get\r
-                       {\r
-                               if(ControlStyleCreated)\r
-                               {\r
-                                       return ((TableStyle)ControlStyle).CellPadding;\r
-                               }\r
-                               return -1;\r
-                       }\r
-                       set\r
-                       {\r
-                               ((TableStyle)ControlStyle).CellPadding = value;\r
-                       }\r
-               }\r
-\r
-               public virtual int CellSpacing\r
-               {\r
-                       get\r
-                       {\r
-                               if(ControlStyleCreated)\r
-                               {\r
-                                       return ((TableStyle)ControlStyle).CellSpacing;\r
-                               }\r
-                               return -1;\r
-                       }\r
-                       set\r
-                       {\r
-                               ((TableStyle)ControlStyle).CellSpacing = value;\r
-                       }\r
-               }\r
-\r
-               public virtual GridLines GridLines\r
-               {\r
-                       get\r
-                       {\r
-                               if(ControlStyleCreated)\r
-                               {\r
-                                       return ((TableStyle)ControlStyle).GridLines;\r
-                               }\r
-                               return GridLines.None;\r
-                       }\r
-                       set\r
-                       {\r
-                               ((TableStyle)ControlStyle).GridLines = value;\r
-                       }\r
-               }\r
-\r
-               public virtual HorizontalAlign HorizontalAlign\r
-               {\r
-                       get\r
-                       {\r
-                               if(ControlStyleCreated)\r
-                               {\r
-                                       return ((TableStyle)ControlStyle).HorizontalAlign;\r
-                               }\r
-                               return HorizontalAlign.NotSet;\r
-                       }\r
-                       set\r
-                       {\r
-                               ((TableStyle)ControlStyle).HorizontalAlign = value;\r
-                       }\r
-               }\r
-\r
-               public virtual TableRowCollection Rows\r
-               {\r
-                       get\r
-                       {\r
-                               if(rows == null)\r
-                               {\r
-                                       rows = new TableRowCollection(this);\r
-                               }\r
-                               return rows;\r
-                       }\r
-               }\r
-\r
-               protected override void AddAttributesToRender(HtmlTextWriter writer)\r
-               {\r
-                       AddAttributesToRender(writer);\r
-                       if(!BorderColor.IsEmpty)\r
-                       {\r
-                               writer.AddAttribute(HtmlTextWriterAttribute.Bordercolor, ColorTranslator.ToHtml(BorderColor));\r
-                       }\r
-\r
-                       Unit bw = BorderWidth;\r
-                       if(GridLines == GridLines.None)\r
-                       {\r
-                               bw = Unit.Pixel(0);\r
-                       } else if(!bw.IsEmpty && bw.Type == UnitType.Pixel)\r
-                       {\r
-                               bw = Unit.Pixel(1);\r
-                       }\r
-                       writer.AddAttribute(HtmlTextWriterAttribute.Border, ((int)bw.Value).ToString(NumberFormatInfo.InvariantInfo));\r
-               }\r
-\r
-               protected override ControlCollection CreateControlCollection()\r
-               {\r
-                       return new TableRowControlCollection(this);\r
-               }\r
-\r
-               protected override Style CreateControlStyle()\r
-               {\r
-                       return new TableStyle(ViewState);\r
-               }\r
-\r
-               protected override void RenderContents(HtmlTextWriter writer)\r
-               {\r
-                       foreach(object current in Rows)\r
-                       {\r
-                               ((TableRow)current).RenderControl(writer);\r
-                       }\r
-               }\r
-       }\r
-}
\ No newline at end of file
+//
+// System.Web.UI.WebControls.Table.cs
+//
+// Author:
+//     Sebastien Pouliot  <sebastien@ximian.com>
+//
+// Copyright (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.
+//
+
+using System.ComponentModel;
+using System.Security.Permissions;
+
+namespace System.Web.UI.WebControls {
+
+       // CAS
+       [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       // attributes
+       [DefaultProperty ("Rows")]
+       [Designer ("System.Web.UI.Design.WebControls.TableDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
+       [ParseChildren (true, "Rows")]
+#if NET_2_0
+       [SupportsEventValidation]
+       public class Table : WebControl, IPostBackEventHandler {
+#else
+       public class Table : WebControl {
+#endif
+               private TableRowCollection rows;
+
+
+               public Table ()
+                       : base (HtmlTextWriterTag.Table)
+               {
+               }
+
+
+#if NET_2_0
+               [Editor ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
+               [UrlProperty]
+#else
+               [Bindable (true)]
+               [Editor ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, typeof (System.Drawing.Design.UITypeEditor))]
+#endif
+               [DefaultValue ("")]
+               [WebSysDescription ("")]
+               [WebCategory ("Appearance")]
+               public virtual string BackImageUrl {
+                       get {
+                               if (!ControlStyleCreated)
+                                       return String.Empty; // default value
+                               return TableStyle.BackImageUrl;
+                       }
+                       set { TableStyle.BackImageUrl = value; }
+               }
+
+               // note: it seems that Caption and CaptionAlign appeared in 1.1 SP1
+
+               [DefaultValue ("")]
+#if NET_2_0
+               [Localizable (true)]
+#endif
+               [WebSysDescription ("")]
+               [WebCategory ("Accessibility")]
+               public virtual string Caption {
+                       get {
+                               object o = ViewState ["Caption"];
+                               return (o == null) ? String.Empty : (string) o;
+                       }
+                       set {
+                               if (value == null)
+                                       ViewState.Remove ("Caption");
+                               else
+                                       ViewState ["Caption"] = value;
+                       }
+               }
+
+               [DefaultValue (TableCaptionAlign.NotSet)]
+               [WebCategory ("Accessibility")]
+               public virtual TableCaptionAlign CaptionAlign {
+                       get {
+                               object o = ViewState ["CaptionAlign"];
+                               return (o == null) ? TableCaptionAlign.NotSet : (TableCaptionAlign) o;
+                       }
+                       set {
+                               if ((value < TableCaptionAlign.NotSet) || (value > TableCaptionAlign.Right)) {
+                                       throw new ArgumentOutOfRangeException (Locale.GetText ("Invalid TableCaptionAlign value."));
+                               }
+                               ViewState ["CaptionAlign"] = value;
+                       }
+               }
+
+#if ONLY_1_1
+               [Bindable (true)]
+#endif
+               [DefaultValue (-1)]
+               [WebSysDescription ("")]
+               [WebCategory ("Appearance")]
+               public virtual int CellPadding {
+                       get {
+                               if (!ControlStyleCreated)
+                                       return -1; // default value
+                               return TableStyle.CellPadding;
+                       }
+                       set { TableStyle.CellPadding = value; }
+               }
+
+#if ONLY_1_1
+               [Bindable (true)]
+#endif
+               [DefaultValue (-1)]
+               [WebSysDescription ("")]
+               [WebCategory ("Appearance")]
+               public virtual int CellSpacing {
+                       get {
+                               if (!ControlStyleCreated)
+                                       return -1; // default value
+                               return TableStyle.CellSpacing;
+                       }
+                       set { TableStyle.CellSpacing = value; }
+               }
+
+#if ONLY_1_1
+               [Bindable (true)]
+#endif
+               [DefaultValue (GridLines.None)]
+               [WebSysDescription ("")]
+               [WebCategory ("Appearance")]
+               public virtual GridLines GridLines {
+                       get {
+                               if (!ControlStyleCreated)
+                                       return GridLines.None; // default value
+                               return TableStyle.GridLines;
+                       }
+                       set { TableStyle.GridLines = value; }
+               }
+
+#if ONLY_1_1
+               [Bindable (true)]
+#endif
+               [DefaultValue (HorizontalAlign.NotSet)]
+               [WebSysDescription ("")]
+               [WebCategory ("Layout")]
+               public virtual HorizontalAlign HorizontalAlign {
+                       get {
+                               if (!ControlStyleCreated)
+                                       return HorizontalAlign.NotSet; // default value
+                               return TableStyle.HorizontalAlign;
+                       }
+                       set { TableStyle.HorizontalAlign = value; }
+               }
+
+               [MergableProperty (false)]
+               [PersistenceMode (PersistenceMode.InnerDefaultProperty)]
+               [WebSysDescription ("")]
+               public virtual TableRowCollection Rows {
+                       get {
+                               if (rows == null)
+                                       rows = new TableRowCollection (this);
+                               return rows;
+                       }
+               }
+
+               private TableStyle TableStyle {
+                       get { return (ControlStyle as TableStyle); }
+               }
+
+
+               protected override void AddAttributesToRender (HtmlTextWriter writer)
+               {
+                       base.AddAttributesToRender (writer);
+                       if (!ControlStyleCreated || TableStyle.IsEmpty) {
+                               // for some reason border=X seems to be always present
+                               // and isn't rendered as a style attribute
+                               writer.AddAttribute (HtmlTextWriterAttribute.Border, "0");
+                       }
+               }
+
+               protected override ControlCollection CreateControlCollection ()
+               {
+                       return new RowControlCollection (this);
+               }
+
+               protected override Style CreateControlStyle ()
+               {
+                       return new TableStyle (ViewState);
+               }
+
+#if NET_2_0
+               protected internal
+#else          
+               protected
+#endif         
+               override void RenderContents (HtmlTextWriter writer)
+               {
+                       if (HasControls ()) {
+                               writer.Indent++;
+                               foreach (Control c in Controls) {
+                                       c.RenderControl (writer);
+                               }
+
+                               writer.Indent--;
+                       }
+               }
+
+
+               // new in Fx 1.1 SP1 (to support Caption and CaptionAlign)
+
+               public override void RenderBeginTag (HtmlTextWriter writer)
+               {
+                       base.RenderBeginTag (writer);
+
+                       string s = Caption;
+                       if (s.Length > 0) {
+                               writer.WriteBeginTag ("caption");
+
+                               TableCaptionAlign tca = CaptionAlign;
+                               if (tca != TableCaptionAlign.NotSet) {
+                                       writer.WriteAttribute ("align", tca.ToString ());
+                               }
+
+                               writer.Write (HtmlTextWriter.TagRightChar);
+                               writer.Indent++;
+                               writer.WriteLine ();
+                               writer.Write (s);
+                               writer.Indent--;
+                               writer.WriteLine ();
+                               writer.WriteEndTag ("caption");
+                       } else if (HasControls ()) {
+                               writer.Indent++;
+                       }
+               }
+
+#if NET_2_0
+               void IPostBackEventHandler.RaisePostBackEvent (string argument)
+               {
+                       RaisePostBackEvent (argument);
+               }
+
+               [MonoTODO]
+               protected virtual void RaisePostBackEvent (string argument)
+               {
+               }
+#endif
+
+               // inner class
+               protected class RowControlCollection : ControlCollection {
+
+                       internal RowControlCollection (Table owner)
+                               : base (owner)
+                       {
+                       }
+
+
+                       public override void Add (Control child)
+                       {
+                               if (child == null)
+                                       throw new NullReferenceException ("null");
+                               if (!(child is TableRow))
+                                       throw new ArgumentException ("child", Locale.GetText ("Must be an TableRow instance."));
+
+                               base.Add (child);
+                       }
+
+                       public override void AddAt (int index, Control child)
+                       {
+                               if (child == null)
+                                       throw new NullReferenceException ("null");
+                               if (!(child is TableRow))
+                                       throw new ArgumentException ("child", Locale.GetText ("Must be an TableRow instance."));
+
+                               base.AddAt (index, child);
+                       }
+               }
+       }
+}