-
+//
+// System.Web.UI.WebControls.TableItemStyle.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
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-/**\r
- * Namespace: System.Web.UI.WebControls\r
- * Class: TableItemStyle\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.ComponentModel;\r
-using System.Web;\r
-using System.Web.UI;\r
-\r
-namespace System.Web.UI.WebControls\r
-{\r
- public class TableItemStyle: Style\r
- {\r
- private static int H_ALIGN = (0x01 << 16);\r
- private static int V_ALIGN = (0x01 << 17);\r
- private static int WRAP = (0x01 << 18);\r
-\r
- public TableItemStyle(): base()\r
- {\r
- }\r
-\r
- public TableItemStyle(StateBag bag): base(bag)\r
- {\r
- }\r
-\r
-#if !NET_2_0\r
- [Bindable (true)]\r
-#endif\r
- [DefaultValue(HorizontalAlign.NotSet)]\r
- [NotifyParentProperty(true)]\r
- [WebCategory("Layout")]\r
- [WebSysDescription("TableItemStyle_HorizontalAlign")]\r
- public virtual HorizontalAlign HorizontalAlign\r
- {\r
- get\r
- {\r
- if(IsSet(H_ALIGN))\r
- return (HorizontalAlign)ViewState["HorizontalAlign"];\r
- return HorizontalAlign.NotSet;\r
- }\r
- set\r
- {\r
- if(!Enum.IsDefined(typeof(HorizontalAlign), value))\r
- {\r
- throw new ArgumentException();\r
- }\r
- ViewState["HorizontalAlign"] = value;\r
- Set(H_ALIGN);\r
- }\r
- }\r
-\r
-#if !NET_2_0\r
- [Bindable (true)]\r
-#endif\r
- [DefaultValue(VerticalAlign.NotSet)]\r
- [NotifyParentProperty(true)]\r
- [WebCategory("Layout")]\r
- [WebSysDescription("TableItemStyle_VerticalAlign")]\r
- public virtual VerticalAlign VerticalAlign\r
- {\r
- get\r
- {\r
- if(IsSet(V_ALIGN))\r
- return (VerticalAlign)ViewState["VerticalAlign"];\r
- return VerticalAlign.NotSet;\r
- }\r
- set\r
- {\r
- if(!Enum.IsDefined(typeof(VerticalAlign), value))\r
- {\r
- throw new ArgumentException();\r
- }\r
- ViewState["VerticalAlign"] = value;\r
- Set(V_ALIGN);\r
- }\r
- }\r
-\r
-#if !NET_2_0\r
- [Bindable (true)]\r
-#endif\r
- [DefaultValue(VerticalAlign.NotSet)]\r
- [NotifyParentProperty(true)]\r
- [WebCategory("Layout")]\r
- [WebSysDescription("TableItemStyle_Wrap")]\r
- public virtual bool Wrap\r
- {\r
- get\r
- {\r
- if(IsSet(WRAP))\r
- return (bool)ViewState["Wrap"];\r
- return true;\r
- }\r
- set\r
- {\r
- ViewState["Wrap"] = value;\r
- Set(WRAP);\r
- }\r
- }\r
-\r
- public override void CopyFrom(Style s)\r
- {\r
- if(s!=null && !s.IsEmpty)\r
- {\r
- base.CopyFrom(s);\r
-\r
- if (!(s is TableItemStyle))\r
- return;\r
- \r
- TableItemStyle from = (TableItemStyle)s;\r
- if(from.IsSet(H_ALIGN))\r
- {\r
- HorizontalAlign = from.HorizontalAlign;\r
- }\r
- if(from.IsSet(V_ALIGN))\r
- {\r
- VerticalAlign = from.VerticalAlign;\r
- }\r
- if(from.IsSet(WRAP))\r
- {\r
- Wrap = from.Wrap;\r
- }\r
- }\r
- }\r
-\r
- public override void MergeWith(Style s)\r
- {\r
- if(s!=null && !s.IsEmpty)\r
- {\r
- if (IsEmpty) {\r
- CopyFrom (s);\r
- return;\r
- }\r
- base.MergeWith(s);\r
-\r
- if (!(s is TableItemStyle))\r
- return;\r
- \r
- TableItemStyle with = (TableItemStyle)s;\r
- if(with.IsSet(H_ALIGN) && !IsSet(H_ALIGN))\r
- {\r
- HorizontalAlign = with.HorizontalAlign;\r
- }\r
- if(with.IsSet(V_ALIGN) && !IsSet(V_ALIGN))\r
- {\r
- VerticalAlign = with.VerticalAlign;\r
- }\r
- if(with.IsSet(WRAP) && !IsSet(WRAP))\r
- {\r
- Wrap = with.Wrap;\r
- }\r
- }\r
- }\r
-\r
- public override void Reset()\r
- {\r
- if(IsSet(H_ALIGN))\r
- ViewState.Remove("HorizontalAlign");\r
- if(IsSet(V_ALIGN))\r
- ViewState.Remove("VerticalAlign");\r
- if(IsSet(WRAP))\r
- ViewState.Remove("Wrap");\r
- base.Reset();\r
- }\r
-\r
- public override void AddAttributesToRender(HtmlTextWriter writer, WebControl owner)\r
- {\r
- base.AddAttributesToRender(writer, owner);\r
- if(!Wrap)\r
- {\r
- writer.AddAttribute(HtmlTextWriterAttribute.Nowrap, "nowrap");\r
- }\r
- if(HorizontalAlign != HorizontalAlign.NotSet)\r
- {\r
- // Temporarily commented out. I'm having problems in cygwin.\r
- //writer.AddAttribute(HtmlTextWriterAttribute.Align, TypeDescriptor.GetConverter(typeof(HorizontalAlign)).ConvertToString(HorizontalAlign));\r
- writer.AddAttribute(HtmlTextWriterAttribute.Align, HorizontalAlign.ToString ());\r
- }\r
- if(VerticalAlign != VerticalAlign.NotSet)\r
- {\r
- // Temporarily commented out. I'm having problems in cygwin.\r
- //writer.AddAttribute(HtmlTextWriterAttribute.Valign, TypeDescriptor.GetConverter(typeof(VerticalAlign)).ConvertToString(VerticalAlign));\r
- writer.AddAttribute(HtmlTextWriterAttribute.Valign, VerticalAlign.ToString ());\r
- }\r
- }\r
- }\r
-}\r
+
+using System.ComponentModel;
+using System.Globalization;
+using System.Security.Permissions;
+using System.Web.UI;
+
+namespace System.Web.UI.WebControls {
+
+ [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+ [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+ public class TableItemStyle : Style {
+
+ [Flags]
+ enum TableItemStyles
+ {
+ HorizontalAlign = 0x00010000,
+ VerticalAlign = 0x00020000,
+ Wrap = 0x00040000,
+ }
+
+ public TableItemStyle ()
+ {
+ }
+
+ public TableItemStyle (StateBag bag)
+ : base (bag)
+ {
+ }
+
+#if ONLY_1_1
+ [Bindable (true)]
+#endif
+ [DefaultValue (HorizontalAlign.NotSet)]
+ [NotifyParentProperty (true)]
+ [WebSysDescription ("")]
+ [WebCategory("Layout")]
+ public virtual HorizontalAlign HorizontalAlign {
+ get {
+ if (!CheckBit ((int) TableItemStyles.HorizontalAlign))
+ return HorizontalAlign.NotSet;
+ return (HorizontalAlign) ViewState ["HorizontalAlign"];
+ }
+ set {
+ // avoid reflection
+ if ((value < HorizontalAlign.NotSet) || (value > HorizontalAlign.Justify)) {
+ // LAMESPEC: documented as ArgumentException
+ throw new ArgumentOutOfRangeException (Locale.GetText ("Invalid HorizontalAlign value."));
+ }
+ ViewState ["HorizontalAlign"] = value;
+ SetBit ((int) TableItemStyles.HorizontalAlign);
+ }
+ }
+
+#if ONLY_1_1
+ [Bindable (true)]
+#endif
+ [DefaultValue (VerticalAlign.NotSet)]
+ [NotifyParentProperty (true)]
+ [WebSysDescription ("")]
+ [WebCategory("Layout")]
+ public virtual VerticalAlign VerticalAlign {
+ get {
+ if (!CheckBit ((int) TableItemStyles.VerticalAlign))
+ return VerticalAlign.NotSet;
+ return (VerticalAlign) ViewState ["VerticalAlign"];
+ }
+ set {
+ // avoid reflection
+ if ((value < VerticalAlign.NotSet) || (value > VerticalAlign.Bottom)) {
+ // LAMESPEC: documented as ArgumentException
+ throw new ArgumentOutOfRangeException (Locale.GetText ("Invalid VerticalAlign value."));
+ }
+ ViewState ["VerticalAlign"] = value;
+ SetBit ((int) TableItemStyles.VerticalAlign);
+ }
+ }
+
+#if ONLY_1_1
+ [Bindable (true)]
+#endif
+ [DefaultValue (true)]
+ [NotifyParentProperty (true)]
+ [WebSysDescription ("")]
+ [WebCategory("Layout")]
+ public virtual bool Wrap {
+ get {
+ if (!CheckBit ((int) TableItemStyles.Wrap))
+ return true;
+ return (bool) ViewState ["Wrap"];
+ }
+ set {
+ ViewState ["Wrap"] = value;
+ SetBit ((int) TableItemStyles.Wrap);
+ }
+ }
+
+
+ public override void AddAttributesToRender (HtmlTextWriter writer, WebControl owner)
+ {
+ base.AddAttributesToRender (writer, owner);
+ if (writer == null)
+ return;
+
+ // note: avoid ToString on the enum
+ switch (HorizontalAlign) {
+ case HorizontalAlign.Left:
+ writer.AddAttribute (HtmlTextWriterAttribute.Align, "left");
+ break;
+ case HorizontalAlign.Center:
+ writer.AddAttribute (HtmlTextWriterAttribute.Align, "center");
+ break;
+ case HorizontalAlign.Right:
+ writer.AddAttribute (HtmlTextWriterAttribute.Align, "right");
+ break;
+ case HorizontalAlign.Justify:
+ writer.AddAttribute (HtmlTextWriterAttribute.Align, "justify");
+ break;
+ }
+
+ // note: avoid ToString on the enum
+ switch (VerticalAlign) {
+ case VerticalAlign.Top:
+ writer.AddAttribute (HtmlTextWriterAttribute.Valign, "top");
+ break;
+ case VerticalAlign.Middle:
+ writer.AddAttribute (HtmlTextWriterAttribute.Valign, "middle");
+ break;
+ case VerticalAlign.Bottom:
+ writer.AddAttribute (HtmlTextWriterAttribute.Valign, "bottom");
+ break;
+ }
+
+ if (!Wrap) {
+#if NET_2_0
+ writer.AddStyleAttribute (HtmlTextWriterStyle.WhiteSpace, "nowrap");
+#else
+ writer.AddAttribute (HtmlTextWriterAttribute.Nowrap, "nowrap");
+#endif
+ }
+ }
+
+ private void Copy (string name, TableItemStyles s, Style source)
+ {
+ if (source.CheckBit((int) s)) {
+ object o = source.ViewState [name];
+ if (o != null) {
+ ViewState [name] = o;
+ SetBit ((int) s);
+ }
+ }
+ }
+
+ public override void CopyFrom (Style s)
+ {
+ base.CopyFrom (s);
+ if (s != null && !s.IsEmpty) {
+ Copy ("HorizontalAlign", TableItemStyles.HorizontalAlign, s);
+ Copy ("VerticalAlign", TableItemStyles.VerticalAlign, s);
+ Copy ("Wrap", TableItemStyles.Wrap, s);
+ }
+ }
+
+ private void Merge (string name, TableItemStyles s, Style source)
+ {
+ if ((!CheckBit ((int) s)) && (source.CheckBit ((int) s))) {
+ object o = source.ViewState [name];
+ if (o != null) {
+ ViewState [name] = o;
+ SetBit ((int) s);
+ }
+ }
+ }
+
+ public override void MergeWith (Style s)
+ {
+ // if we're empty then it's like a copy
+ if (IsEmpty) {
+ CopyFrom (s);
+ } else {
+ base.MergeWith (s);
+ if (s != null) {
+ Merge ("HorizontalAlign", TableItemStyles.HorizontalAlign, s);
+ Merge ("VerticalAlign", TableItemStyles.VerticalAlign, s);
+ Merge ("Wrap", TableItemStyles.Wrap, s);
+ }
+ }
+ }
+
+ public override void Reset ()
+ {
+ if (CheckBit ((int) TableItemStyles.HorizontalAlign))
+ ViewState.Remove ("HorizontalAlign");
+ if (CheckBit ((int) TableItemStyles.VerticalAlign))
+ ViewState.Remove ("VerticalAlign");
+ if (CheckBit ((int) TableItemStyles.Wrap))
+ ViewState.Remove ("Wrap");
+ // call base at the end because "styles" will reset there
+ base.Reset ();
+ }
+ }
+}