2004-01-11 Andreas Nahr <ClassDevelopment@A-SoftTech.com>
[mono.git] / mcs / class / System.Web / System.Web.UI / UserControl.cs
1 //
2 // System.Web.UI.UserControl.cs
3 //
4 // Authors:
5 //   Gonzalo Paniagua Javier (gonzalo@ximian.com)
6 //   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
7 //
8 // (C) 2002 Ximian, Inc (http://www.ximian.com)
9 //
10 using System;
11 using System.ComponentModel;
12 using System.ComponentModel.Design;
13 using System.ComponentModel.Design.Serialization;
14 using System.Web.Caching;
15 using System.Web.SessionState;
16
17 namespace System.Web.UI
18 {
19         [ControlBuilder (typeof (UserControlControlBuilder))]
20         [DefaultEvent ("Load"), DesignerCategory ("ASPXCodeBehind")]
21         [ToolboxItem (false), ParseChildren (true)]
22         [Designer ("System.Web.UI.Design.UserControlDesigner, " + Consts.AssemblySystem_Design, typeof (IDesigner))]
23         [Designer ("Microsoft.VSDesigner.WebForms.WebFormDesigner, " + Consts.AssemblyMicrosoft_VSDesigner, typeof (IRootDesigner))]
24         [RootDesignerSerializer ("Microsoft.VSDesigner.WebForms.RootCodeDomSerializer, " + Consts.AssemblyMicrosoft_VSDesigner, "System.ComponentModel.Design.Serialization.CodeDomSerializer, " + Consts.AssemblySystem_Design, true)]
25         public class UserControl : TemplateControl, IAttributeAccessor, IUserControlDesignerAccessor
26         {
27                 private bool initialized;
28                 private AttributeCollection attributes;
29                 private StateBag attrBag;
30
31                 public UserControl ()
32                 {
33                         //??
34                 }
35
36                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
37                 [Browsable (false)]
38                 public HttpApplicationState Application
39                 {
40                         get {
41                                 Page p = Page;
42                                 if (p == null)
43                                         return null;
44                                 return p.Application;
45                         }
46                 }
47
48                 private void EnsureAttributes ()
49                 {
50                         if (attributes == null) {
51                                 attrBag = new StateBag (true);
52                                 if (IsTrackingViewState)
53                                         attrBag.TrackViewState ();
54                                 attributes = new AttributeCollection (attrBag);
55                         }
56                 }
57
58                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
59                 [Browsable (false)]
60                 public AttributeCollection Attributes
61                 {
62                         get {
63                                 return attributes;
64                         }
65                 }
66
67                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
68                 [Browsable (false)]
69                 public Cache Cache
70                 {
71                         get {
72                                 Page p = Page;
73                                 if (p == null)
74                                         return null;
75                                 return p.Cache;
76                         }
77                 }
78
79                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
80                 [Browsable (false)]
81                 public bool IsPostBack
82                 {
83                         get {
84                                 Page p = Page;
85                                 if (p == null)
86                                         return false;
87                                 return p.IsPostBack;
88                         }
89                 }
90
91                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
92                 [Browsable (false)]
93                 public HttpRequest Request
94                 {
95                         get {
96                                 Page p = Page;
97                                 if (p == null)
98                                         return null;
99                                 return p.Request;
100                         }
101                 }
102
103                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
104                 [Browsable (false)]
105                 public HttpResponse Response
106                 {
107                         get {
108                                 Page p = Page;
109                                 if (p == null)
110                                         return null;
111                                 return p.Response;
112                         }
113                 }
114
115                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
116                 [Browsable (false)]
117                 public HttpServerUtility Server
118                 {
119                         get {
120                                 Page p = Page;
121                                 if (p == null)
122                                         return null;
123                                 return p.Server;
124                         }
125                 }
126
127                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
128                 [Browsable (false)]
129                 public HttpSessionState Session
130                 {
131                         get {
132                                 Page p = Page;
133                                 if (p == null)
134                                         return null;
135                                 return p.Session;
136                         }
137                 }
138
139                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
140                 [Browsable (false)]
141                 public TraceContext Trace
142                 {
143                         get {
144                                 Page p = Page;
145                                 if (p == null)
146                                         return null;
147                                 return p.Trace;
148                         }
149                 }
150
151                 [EditorBrowsable (EditorBrowsableState.Never)]
152                 public void DesignerInitialize ()
153                 {
154                         InitRecursive (null);
155                 }
156
157                 [EditorBrowsable (EditorBrowsableState.Never)]
158                 public void InitializeAsUserControl (Page page)
159                 {
160                         if (initialized)
161                                 return;
162                         initialized = true;
163                         this.Page = page;
164                         WireupAutomaticEvents ();
165                         FrameworkInitialize ();
166                 }
167
168                 public string MapPath (string virtualPath)
169                 {
170                         return Request.MapPath (virtualPath, TemplateSourceDirectory, true);
171                 }
172
173                 protected override void LoadViewState (object savedState)
174                 {
175                         if (savedState != null) {
176                                 Pair p = (Pair) savedState;
177                                 base.LoadViewState (p.First);
178                                 if (p.Second != null) {
179                                         EnsureAttributes ();
180                                         attrBag.LoadViewState (p.Second);
181                                 }
182                         }
183
184                 }
185
186                 protected override void OnInit (EventArgs e)
187                 {
188                         InitializeAsUserControl (Page);
189
190                         base.OnInit(e);
191                 }
192
193                 protected override object SaveViewState ()
194                 {
195                         object baseState = base.SaveViewState();
196                         object attrState = null;
197                         if (attributes != null)
198                                 attrState = attrBag.SaveViewState ();
199                         if (baseState == null && attrState == null)
200                                 return null;
201                         return new Pair (baseState, attrState);
202                 }
203
204                 string IAttributeAccessor.GetAttribute (string name)
205                 {
206                         if (attributes == null)
207                                 return null;
208                         return attributes [name];
209                 }
210                 
211                 void IAttributeAccessor.SetAttribute (string name, string value)
212                 {
213                         EnsureAttributes ();
214                         Attributes [name] = value;
215                 }
216
217                 string IUserControlDesignerAccessor.InnerText
218                 {
219                         get {
220                                 string innerText = ((string) ViewState["!DesignTimeInnerText"]);
221                                 if (innerText == null)
222                                         return string.Empty; 
223                                 return innerText;
224                         }
225                         set { ViewState["!DesignTimeInnerText"] = value; }
226                 }
227
228                 string IUserControlDesignerAccessor.TagName
229                 {
230                         get {
231                                 string innerTag = ((string) ViewState["!DesignTimeTagName"]);
232                                 if (innerTag == null)
233                                         return string.Empty; 
234                                 return innerTag;
235                         }
236                         set { ViewState["!DesignTimeTagName"] = value; }
237                 }
238         }
239 }
240