2003-07-17 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)]
22         [Designer ("System.Web.UI.Design.UserControlDesigner, " + Consts.AssemblySystem_Design, typeof (IDesigner))]
23         [RootDesignerSerializer ("Microsoft.VSDesigner.WebForms.RootCodeDomSerializer, " + Consts.AssemblyMicrosoft_VSDesigner, "System.ComponentModel.Design.Serialization.CodeDomSerializer, " + Consts.AssemblySystem_Design, true)]
24         public class UserControl : TemplateControl, IAttributeAccessor, IUserControlDesignerAccessor
25         {
26                 private bool initialized;
27                 private AttributeCollection attributes;
28                 private StateBag attrBag;
29
30                 public UserControl ()
31                 {
32                         //??
33                 }
34
35                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
36                 [Browsable (false)]
37                 public HttpApplicationState Application
38                 {
39                         get {
40                                 Page p = Page;
41                                 if (p == null)
42                                         return null;
43                                 return p.Application;
44                         }
45                 }
46
47                 private void EnsureAttributes ()
48                 {
49                         if (attributes == null) {
50                                 attrBag = new StateBag (true);
51                                 if (IsTrackingViewState)
52                                         attrBag.TrackViewState ();
53                                 attributes = new AttributeCollection (attrBag);
54                         }
55                 }
56
57                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
58                 [Browsable (false)]
59                 public AttributeCollection Attributes
60                 {
61                         get {
62                                 return attributes;
63                         }
64                 }
65
66                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
67                 [Browsable (false)]
68                 public Cache Cache
69                 {
70                         get {
71                                 Page p = Page;
72                                 if (p == null)
73                                         return null;
74                                 return p.Cache;
75                         }
76                 }
77
78                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
79                 [Browsable (false)]
80                 public bool IsPostBack
81                 {
82                         get {
83                                 Page p = Page;
84                                 if (p == null)
85                                         return false;
86                                 return p.IsPostBack;
87                         }
88                 }
89
90                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
91                 [Browsable (false)]
92                 public HttpRequest Request
93                 {
94                         get {
95                                 Page p = Page;
96                                 if (p == null)
97                                         return null;
98                                 return p.Request;
99                         }
100                 }
101
102                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
103                 [Browsable (false)]
104                 public HttpResponse Response
105                 {
106                         get {
107                                 Page p = Page;
108                                 if (p == null)
109                                         return null;
110                                 return p.Response;
111                         }
112                 }
113
114                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
115                 [Browsable (false)]
116                 public HttpServerUtility Server
117                 {
118                         get {
119                                 Page p = Page;
120                                 if (p == null)
121                                         return null;
122                                 return p.Server;
123                         }
124                 }
125
126                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
127                 [Browsable (false)]
128                 public HttpSessionState Session
129                 {
130                         get {
131                                 Page p = Page;
132                                 if (p == null)
133                                         return null;
134                                 return p.Session;
135                         }
136                 }
137
138                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
139                 [Browsable (false)]
140                 public TraceContext Trace
141                 {
142                         get {
143                                 Page p = Page;
144                                 if (p == null)
145                                         return null;
146                                 return p.Trace;
147                         }
148                 }
149
150                 [MonoTODO]
151                 [EditorBrowsable (EditorBrowsableState.Never)]
152                 public void DesignerInitialize ()
153                 {
154                         throw new NotImplementedException ();
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