* Maintainer: gvaish@iitk.ac.in\r
* Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>\r
* Implementation: yes\r
- * Status: 80%\r
+ * Status: 100%\r
* \r
* (C) Gaurav Vaish (2001)\r
*/\r
{\r
public sealed class FontInfo\r
{\r
- private bool bold;\r
- private bool italic;\r
- private bool overline;\r
- private bool strikeout;\r
- private bool underline;\r
- private string name; //TODO: This will have the value of names[0] by default\r
- private string[] names; //TODO: How do get the list of fonts available?\r
- private FontUnit size = FontUnit.Empty;\r
+ private Style infoOwner; \r
\r
- internal FontInfo()\r
+ internal FontInfo(Style owner)\r
{\r
- bold = false;\r
- italic = false;\r
- overline = false;\r
- strikeout = false;\r
- underline = false;\r
- name = string.Empty;\r
+ infoOwner = owner;\r
}\r
\r
public bool Bold\r
{\r
get\r
{\r
- return bold;\r
+ if(infoOwner.IsSet(Style.FONT_BOLD))\r
+ return (bool)(infoOwner.ViewState["FontInfoBold"]);\r
+ return false;\r
}\r
set\r
{\r
- bold = value;\r
+ infoOwner.ViewState["FontInfoBold"] = value;\r
+ infoOwner.Set(Style.FONT_BOLD);\r
}\r
}\r
\r
{\r
get\r
{\r
- return italic;\r
+ if(infoOwner.IsSet(Style.FONT_ITALIC))\r
+ return (bool)(infoOwner.ViewState["FontInfoItalic"]);\r
+ return false;\r
}\r
set\r
{\r
- italic = value;\r
+ infoOwner.ViewState["FontInfoItalic"] = value;\r
+ infoOwner.Set(Style.FONT_ITALIC);\r
}\r
}\r
\r
{\r
get\r
{\r
- return overline;\r
+ if(infoOwner.IsSet(Style.FONT_OLINE))\r
+ return (bool)(infoOwner.ViewState["FontInfoOverline"]);\r
+ return false;\r
}\r
set\r
{\r
- overline = value;\r
+ infoOwner.ViewState["FontInfoOverline"] = value;\r
+ infoOwner.Set(Style.FONT_OLINE);\r
}\r
}\r
\r
{\r
get\r
{\r
- return strikeout;\r
+ if(infoOwner.IsSet(Style.FONT_STRIKE))\r
+ return (bool)(infoOwner.ViewState["FontInfoStrikeout"]);\r
+ return false;\r
}\r
set\r
{\r
- strikeout = value;\r
+ infoOwner.ViewState["FontInfoStrikeout"] = value;\r
+ infoOwner.Set(Style.FONT_STRIKE);\r
}\r
}\r
\r
{\r
get\r
{\r
- return underline;\r
+ if(infoOwner.IsSet(Style.FONT_ULINE))\r
+ return (bool)(infoOwner.ViewState["FontInfoUnderline"]);\r
+ return false;\r
}\r
set\r
{\r
- underline = value;\r
+ infoOwner.ViewState["FontInfoUnderline"] = value;\r
+ infoOwner.Set(Style.FONT_ULINE);\r
}\r
}\r
\r
- public string Name\r
+ public FontUnit Size\r
{\r
get\r
{\r
- return name;\r
+ if(infoOwner.IsSet(Style.FONT_SIZE))\r
+ return (FontUnit)(infoOwner.ViewState["FontInfoSize"]);\r
+ return FontUnit.Empty;\r
}\r
set\r
{\r
- name = value;\r
+ infoOwner.ViewState["FontInfoSize"] = value;\r
+ infoOwner.Set(Style.FONT_SIZE);\r
}\r
}\r
\r
- public string[] Names\r
+ public string Name\r
{\r
get\r
{\r
- return names;\r
+ if(Names!=null)\r
+ return Names[0];\r
+ return String.Empty;\r
}\r
set\r
{\r
- names = value;\r
- name = names[0];\r
+ if(value == null)\r
+ throw new ArgumentException();\r
+ string[] strArray = null;\r
+ if(value.Length > 0)\r
+ {\r
+ strArray = new string[1];\r
+ strArray[0] = value;\r
+ }\r
+ Names = strArray;\r
}\r
}\r
-\r
- //TODO: To throw exception if the index is negative\r
- public FontUnit Size\r
+ \r
+ public string[] Names\r
{\r
get\r
{\r
- return size;\r
+ if(infoOwner.IsSet(Style.FONT_NAMES))\r
+ return (string[])(infoOwner.ViewState["FontInfoNames"]);\r
+ return (new string[0]);\r
}\r
set\r
{\r
- size = value;\r
+ infoOwner.ViewState["FontInfoNames"] = value;\r
+ infoOwner.Set(Style.FONT_NAMES);\r
}\r
}\r
\r
- public void CopyFrom(FontInfo from)\r
+ internal void Reset()\r
{\r
- //TODO: What a rubbish way to accomplish the task\r
- /*this.bold = from.Bold;\r
- this.italic = from.Italic;\r
- this.name = from.Name;\r
- this.names = from.Names;\r
- this.overline = from.Overline;\r
- this.size = from.Size;*/\r
- //TODO: Let me try Relflection\r
- Type t = from.GetType();\r
- MethodInfo[] fi = t.GetMethods();\r
- foreach(MethodInfo f in fi)\r
- {\r
- //System.Console.WriteLine("Field: {0}", f.Name);\r
- if(f.Name.StartsWith("get_"))\r
- {\r
- System.Console.WriteLine("\tStarts with get_");\r
- }\r
- }\r
+ if(infoOwner.IsSet(Style.FONT_NAMES))\r
+ infoOwner.ViewState.Remove("FontInfoNames");\r
+ if(infoOwner.IsSet(Style.FONT_BOLD))\r
+ infoOwner.ViewState.Remove("FontInfoBold");\r
+ if(infoOwner.IsSet(Style.FONT_ITALIC))\r
+ infoOwner.ViewState.Remove("FontInfoItalic");\r
+ if(infoOwner.IsSet(Style.FONT_STRIKE))\r
+ infoOwner.ViewState.Remove("FontInfoStrikeout");\r
+ if(infoOwner.IsSet(Style.FONT_OLINE))\r
+ infoOwner.ViewState.Remove("FontInfoOverline");\r
+ if(infoOwner.IsSet(Style.FONT_ULINE))\r
+ infoOwner.ViewState.Remove("FontInfoUnderline");\r
+ if(infoOwner.IsSet(Style.FONT_SIZE) && infoOwner.Size != FontUnit.Empty)\r
+ infoOwner.ViewState.Remove("FontInfoSize");\r
}\r
\r
- private void ListFields(FontInfo from)\r
+ internal Style Owner\r
{\r
- Type t = from.GetType();\r
- MethodInfo[] fi = t.GetMethods();\r
- foreach(MethodInfo f in fi)\r
+ get\r
{\r
- System.Console.WriteLine("Field: {0}", f.Name);\r
- if(f.Name.StartsWith("get_"))\r
- {\r
- System.Console.WriteLine("\tStarts with get_");\r
- }\r
+ return infoOwner;\r
}\r
}\r
-\r
- //TODO: after CopyFrom is implemented\r
- public void MergeWith(FontInfo with)\r
+ \r
+ public void CopyFrom(FontInfo source)\r
{\r
+ if(source!=null)\r
+ {\r
+ if(source.IsSet(Style.FONT_NAMES))\r
+ Names = source.Names;\r
+ if(source.IsSet(Style.FONT_BOLD))\r
+ Bold = source.Bold;\r
+ if(source.IsSet(Style.FONT_ITALIC))\r
+ Italic = source.Italic;\r
+ if(source.IsSet(Style.FONT_STRIKE))\r
+ Strikeout = source.Strikeout;\r
+ if(source.IsSet(Style.FONT_OLINE))\r
+ Overline = source.Overline;\r
+ if(source.IsSet(Style.FONT_ULINE))\r
+ Underline = source.Underline;\r
+ if(source.IsSet(Style.FONT_SIZE) && source.Size != FontUnit.Empty)\r
+ Size = source.Size;\r
+ }\r
}\r
-\r
- public override string ToString()\r
+ \r
+ public void MergeWith(FontInfo with)\r
{\r
- string retVal = this.name;\r
- if(this.size != FontUnit.Empty)\r
- {\r
- this.name += ("," + this.size);\r
+ if(with!=null)\r
+ {\r
+ if(source.IsSet(Style.FONT_NAMES) && !infoOwner.IsSet(Style.FONT_NAMES))\r
+ Names = source.Names;\r
+ if(source.IsSet(Style.FONT_BOLD && !infoOwner.IsSet(Style.FONT_BOLD)))\r
+ Bold = source.Bold;\r
+ if(source.IsSet(Style.FONT_ITALIC && !infoOwner.IsSet(Style.FONT_ITALIC)))\r
+ Italic = source.Italic;\r
+ if(source.IsSet(Style.FONT_STRIKE && !infoOwner.IsSet(Style.FONT_STRIKE)))\r
+ Strikeout = source.Strikeout;\r
+ if(source.IsSet(Style.FONT_OLINE && !infoOwner.IsSet(Style.FONT_OLINE)))\r
+ Overline = source.Overline;\r
+ if(source.IsSet(Style.FONT_ULINE && !infoOwner.IsSet(Style.FONT_ULINE)))\r
+ Underline = source.Underline;\r
+ if(source.IsSet(Style.FONT_SIZE) && source.Size != FontUnit.Empty && !infoOwner.IsSet(Style.FONT_SIZE))\r
+ Size = source.Size;\r
}\r
- return retVal;\r
}\r
-\r
- /*\r
- protected object MemberwiseClone()\r
+ \r
+ public bool ShouldSerializeNames()\r
{\r
+ return (Names.Length > 0);\r
+ }\r
+ \r
+ protected override ToString()\r
+ {\r
+ return ( (Name.Length > 0) ? (Name.ToString() + ", " + Size.ToString()) : Size.ToString() );\r
}\r
-//*/\r
-\r
}\r
}\r
\r
using System;\r
using System.Collections;\r
+using System.Drawing;\r
+using System.ComponentModel;\r
using System.Web;\r
using System.Web.UI;\r
\r
{\r
public class Style : Component, IStateManager\r
{\r
- internal static MARKED = 0x01;\r
- internal static BACKCOLOR = (0x01 < 1);\r
+ internal static int MARKED = (0x01 << 0);\r
+ internal static int BACKCOLOR = (0x01 << 1);\r
+ internal static int BORDERCOLOR = (0x01 << 2);\r
+ internal static int BORDERSTYLE = (0x01 << 3);\r
+ internal static int BORDERWIDTH = (0x01 << 4);\r
+ internal static int CSSCLASS = (0x01 << 5);\r
+ internal static int FORECOLOR = (0x01 << 6);\r
+ internal static int HEIGHT = (0x01 << 7);\r
+ internal static int WIDTH = (0x01 << 8);\r
+ internal static int FONT_BOLD = (0x01 << 9);\r
+ internal static int FONT_ITALIC = (0x01 << 10);\r
+ internal static int FONT_NAMES = (0x01 << 11);\r
+ internal static int FONT_SIZE = (0x01 << 12);\r
+ internal static int FONT_STRIKE = (0x01 << 13);\r
+ internal static int FONT_OLINE = (0x01 << 14);\r
+ internal static int FONT_ULINE = (0x01 << 15);\r
\r
+ internal static string selectionBitString = "_!SBS";\r
+\r
private StateBag viewState;\r
private bool marked;\r
private int selectionBits;\r
- private bool selfStateBag;\r
- \r
+ private bool selfStateBag; \r
+\r
+ private FontInfo font;\r
+\r
public Style()\r
{\r
Initialize(null);\r
{\r
viewState = bag;\r
marked = false;\r
- selectionBits = 0x00;\r
+ selectionBits = 0x00; \r
}\r
\r
StateBag ViewState\r
return stateBag;\r
}\r
}\r
+\r
+ internal bool IsSet(int bit)\r
+ {\r
+ return ( (selectionBits & bitIndex) != 0x00);\r
+ }\r
+ \r
+ virtual void Set(int bit)\r
+ {\r
+ selectionBits |= bit;\r
+ if(IsTrackingViewState)\r
+ selectionBits |= MARKED;\r
+ }\r
+ \r
+ public Color BackColor\r
+ {\r
+ get\r
+ {\r
+ if(IsSet(BACKCOLOR))\r
+ return (Color)ViewState["BackColor"];\r
+ return Color.Empty;\r
+ }\r
+ set\r
+ {\r
+ ViewState["BackColor"] = value;\r
+ Set(BACKCOLOR);\r
+ }\r
+ }\r
+ \r
+ public Color BorderColor\r
+ {\r
+ get\r
+ {\r
+ if(IsSet(BORDERCOLOR))\r
+ return (Color)ViewState["BorderColor"];\r
+ return Color.Empty;\r
+ }\r
+ set\r
+ {\r
+ ViewState["BorderColor"] = value;\r
+ Set(BORERCOLOR);\r
+ }\r
+ }\r
+ \r
+ public BorderStyle BorderStyle\r
+ {\r
+ get\r
+ {\r
+ if(IsSet(BORDERSTYLE))\r
+ return (Color)ViewState["BorderStyle"];\r
+ return BorderStyle.NotSet;\r
+ }\r
+ set\r
+ {\r
+ ViewState["BorderStyle"] = value;\r
+ Set(BORDERSTYLE);\r
+ }\r
+ }\r
+ \r
+ public Unit BorderWidth\r
+ {\r
+ get\r
+ {\r
+ if(IsSet(BORDERWIDTH))\r
+ return (Unit)ViewState["BorderWidth"];\r
+ return Unit.Empty;\r
+ }\r
+ set\r
+ {\r
+ ViewState["BorderWidth"] = value;\r
+ Set(BORDERWIDTH);\r
+ }\r
+ }\r
+ \r
+ public string CssClass\r
+ {\r
+ get\r
+ {\r
+ if(Set(CSSCLASS))\r
+ return (string)ViewState["CssClass"];\r
+ return string.Empty;\r
+ }\r
+ set\r
+ {\r
+ ViewState["CssClass"] = value;\r
+ Set(CSSCLASS);\r
+ }\r
+ }\r
+ \r
+ public Color ForeColor\r
+ {\r
+ get\r
+ {\r
+ if(IsSet(FORECOLOR))\r
+ return (Color)ViewState["ForeColor"];\r
+ return Color.Empty;\r
+ }\r
+ set\r
+ {\r
+ ViewState["ForeColor"] = value;\r
+ Set(FORECOLOR);\r
+ }\r
+ }\r
\r
+ public Unit Height\r
+ {\r
+ get\r
+ {\r
+ if(IsSet(HEIGHT))\r
+ return (Unit)ViewState["Height"];\r
+ return Unit.Empty;\r
+ }\r
+ set\r
+ {\r
+ ViewState["Height"] = value;\r
+ Set(HEIGHT);\r
+ }\r
+ }\r
\r
+ public Unit Width\r
+ {\r
+ get\r
+ {\r
+ if(IsSet(WIDTH))\r
+ return (Unit)ViewState["Width"];\r
+ return Unit.Empty;\r
+ }\r
+ set\r
+ {\r
+ ViewState["Width"] = value;\r
+ Set(HEIGHT);\r
+ }\r
+ }\r
+ \r
+ public FontInfo Font\r
+ {\r
+ get\r
+ {\r
+ if(font==null)\r
+ font = new FontInfo(this);\r
+ return font;\r
+ }\r
+ }\r
+ \r
+ public void AddAttributesToRender(HtmlTextWriter writer)\r
+ {\r
+ AddAttributesToRender(writer, null);\r
+ }\r
+ \r
+ public void AddAttributesToRender(HtmlTextWriter writer, WebControl owner)\r
+ {\r
+ if(Set(CSSCLASS))\r
+ {\r
+ string cssClass = (string)ViewState["CssClass"];\r
+ //if(cssClass.Length > 0)\r
+ // writer.Add(HtmlTextWriterAttribute.\r
+ }\r
+ }\r
}\r
}\r
\r