2003-01-07 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / HyperLink.cs
1 /**\r
2  * Namespace: System.Web.UI.WebControls\r
3  * Class:     HyperLink\r
4  *\r
5  * Author:  Gaurav Vaish\r
6  * Maintainer: gvaish@iitk.ac.in\r
7  * Contact: gvaish@iitk.ac.in, myscripts_2001@yahoo.com\r
8  * Implementation: yes\r
9  * Status:  100%\r
10  *\r
11  * (C) Gaurav Vaish (2001)\r
12  */\r
13 \r
14 using System;\r
15 using System.Web;\r
16 using System.Web.UI;\r
17 using System.ComponentModel;\r
18 \r
19 namespace System.Web.UI.WebControls\r
20 {\r
21         [DefaultProperty("Text")]\r
22         //[Designer(??)]\r
23         [ControlBuilder(typeof(HyperLinkControlBuilder))]\r
24         //[DataBindingHandler("??")]\r
25         [ParseChildren(false)]\r
26         [ToolboxData("<{0}:HyperLink runat=\"server\">HyperLink</{0}:HyperLink>")]\r
27         public class HyperLink: WebControl\r
28         {\r
29                 bool textSet;\r
30 \r
31                 public HyperLink(): base(HtmlTextWriterTag.A)\r
32                 {\r
33                 }\r
34 \r
35                 public virtual string ImageUrl\r
36                 {\r
37                         get\r
38                         {\r
39                                 object o = ViewState["ImageUrl"];\r
40                                 if(o!=null)\r
41                                         return (string)o;\r
42                                 return String.Empty;\r
43                         }\r
44                         set\r
45                         {\r
46                                 ViewState["ImageUrl"] = value;\r
47                         }\r
48                 }\r
49 \r
50                 public string NavigateUrl\r
51                 {\r
52                         get\r
53                         {\r
54                                 object o = ViewState["NavigateUrl"];\r
55                                 if(o!=null)\r
56                                         return (string)o;\r
57                                 return String.Empty;\r
58                         }\r
59                         set\r
60                         {\r
61                                 ViewState["NavigateUrl"] = value;\r
62                         }\r
63                 }\r
64 \r
65                 public string Target\r
66                 {\r
67                         get\r
68                         {\r
69                                 object o = ViewState["Target"];\r
70                                 if(o!=null)\r
71                                         return (string)o;\r
72                                 return String.Empty;\r
73                         }\r
74                         set\r
75                         {\r
76                                 ViewState["Target"] = value;\r
77                         }\r
78                 }\r
79 \r
80                 public virtual string Text\r
81                 {\r
82                         get {\r
83                                 object o = ViewState ["Text"];\r
84                                 if (o != null)\r
85                                         return (string) o;\r
86 \r
87                                 return String.Empty;\r
88                         }\r
89                         set {\r
90                                 ViewState["Text"] = value;\r
91                                 textSet = true;\r
92                         }\r
93                 }\r
94 \r
95                 string InternalText\r
96                 {\r
97                         get { return Text; }\r
98                         set { ViewState["Text"] = value; }\r
99                 }\r
100 \r
101                 protected override void AddAttributesToRender(HtmlTextWriter writer)\r
102                 {\r
103                         base.AddAttributesToRender(writer);\r
104                         if(NavigateUrl.Length > 0)\r
105                         {\r
106                                 writer.AddAttribute(HtmlTextWriterAttribute.Href, NavigateUrl);\r
107                         }\r
108                         if(Target.Length > 0)\r
109                         {\r
110                                 writer.AddAttribute(HtmlTextWriterAttribute.Target, Target);\r
111                         }\r
112                 }\r
113 \r
114                 protected override void AddParsedSubObject(object obj)\r
115                 {\r
116                         if(HasControls())\r
117                         {\r
118                                 base.AddParsedSubObject(obj);\r
119                                 return;\r
120                         }\r
121                         if(obj is LiteralControl)\r
122                         {\r
123                                 // This is a hack to workaround the behaviour of the code generator, which\r
124                                 // may split a text in several LiteralControls if there's a special character\r
125                                 // such as '<' in it.\r
126                                 if (textSet) {\r
127                                         Text = ((LiteralControl)obj).Text;\r
128                                         textSet = false;\r
129                                 } else {\r
130                                         InternalText += ((LiteralControl)obj).Text;\r
131                                 }\r
132                                 //\r
133 \r
134                                 return;\r
135                         }\r
136                         if(Text.Length > 0)\r
137                         {\r
138                                 base.AddParsedSubObject(new LiteralControl (Text));\r
139                                 Text = String.Empty;\r
140                         }\r
141                         base.AddParsedSubObject (obj);\r
142                 }\r
143 \r
144                 protected override void LoadViewState(object savedState)\r
145                 {\r
146                         if(savedState != null)\r
147                         {\r
148                                 base.LoadViewState(savedState);\r
149                                 object o = ViewState["Text"];\r
150                                 if(o!=null)\r
151                                         Text = (string)o;\r
152                         }\r
153                 }\r
154 \r
155                 protected override void RenderContents(HtmlTextWriter writer)\r
156                 {\r
157                         if(ImageUrl.Length > 0)\r
158                         {\r
159                                 Image img = new Image();\r
160                                 img.ImageUrl = ResolveUrl(ImageUrl);\r
161                                 if(ToolTip.Length > 0)\r
162                                         img.ToolTip = ToolTip;\r
163                                 if(Text.Length > 0)\r
164                                         img.AlternateText = Text;\r
165                                 img.RenderControl(writer);\r
166                                 return;\r
167                         }\r
168                         if(HasControls())\r
169                         {\r
170                                 base.RenderContents(writer);\r
171                                 return;\r
172                         }\r
173                         writer.Write(Text);\r
174                 }\r
175         }\r
176 }\r