* TabControl.cs: Show the tooltip depending on the value
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / HtmlElement.cs
1 // Permission is hereby granted, free of charge, to any person obtaining\r
2 // a copy of this software and associated documentation files (the\r
3 // "Software"), to deal in the Software without restriction, including\r
4 // without limitation the rights to use, copy, modify, merge, publish,\r
5 // distribute, sublicense, and/or sell copies of the Software, and to\r
6 // permit persons to whom the Software is furnished to do so, subject to\r
7 // the following conditions:\r
8 // \r
9 // The above copyright notice and this permission notice shall be\r
10 // included in all copies or substantial portions of the Software.\r
11 // \r
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
19 //\r
20 // Copyright (c) 2007, 2008 Novell, Inc.\r
21 //\r
22 // Authors:\r
23 //      Andreia Gaita   <avidigal@novell.com>\r
24 \r
25 #if NET_2_0\r
26 \r
27 using System;\r
28 using System.Drawing;\r
29 using System.ComponentModel;\r
30 using Mono.WebBrowser.DOM;\r
31 \r
32 namespace System.Windows.Forms\r
33 {\r
34         public sealed class HtmlElement\r
35         {\r
36                 private EventHandlerList events;\r
37                 private Mono.WebBrowser.IWebBrowser webHost;\r
38                 internal IElement element;\r
39                 private WebBrowser owner;\r
40                 \r
41                 internal HtmlElement (WebBrowser owner, Mono.WebBrowser.IWebBrowser webHost, IElement element)\r
42                 {\r
43                         this.webHost = webHost;\r
44                         this.element = element;\r
45                         this.owner = owner;\r
46                 }\r
47 \r
48                 internal EventHandlerList Events {\r
49                         get {\r
50                                 if (events == null)\r
51                                         events = new EventHandlerList();\r
52 \r
53                                 return events;\r
54                         }\r
55                 }\r
56 \r
57                 #region Properties\r
58                 public HtmlElementCollection All {\r
59                         get {\r
60                                 return new HtmlElementCollection (owner, webHost, this.element.All);\r
61                         }\r
62                 }\r
63 \r
64                 // from http://www.w3.org/TR/html401/index/elements.html\r
65                 public bool CanHaveChildren {\r
66                         get {\r
67                                 string tag = this.TagName;\r
68                                 switch (tag.ToLowerInvariant ()) {\r
69                                         case "area":\r
70                                         case "base":\r
71                                         case "basefont":\r
72                                         case "br":\r
73                                         case "col":\r
74                                         case "frame":\r
75                                         case "hr":\r
76                                         case "img":\r
77                                         case "input":\r
78                                         case "isindex":\r
79                                         case "link":\r
80                                         case "meta":\r
81                                         case "param":\r
82                                                 return false;\r
83                                         default:\r
84                                                 return true;\r
85                                 }\r
86                         }\r
87                 }\r
88 \r
89                 public HtmlElementCollection Children {\r
90                         get {\r
91                                 return new HtmlElementCollection (owner, webHost, this.element.Children);\r
92                         }\r
93                 }\r
94 \r
95                 public Rectangle ClientRectangle {\r
96                         get { return new Rectangle (0, 0, this.element.ClientWidth, this.element.ClientHeight); }\r
97                 }\r
98                 \r
99                 public Rectangle OffsetRectangle {\r
100                         get { return new Rectangle (this.element.OffsetLeft, this.element.OffsetTop, this.element.OffsetWidth, this.element.OffsetHeight); }\r
101                 }\r
102 \r
103                 public Rectangle ScrollRectangle {\r
104                         get { return new Rectangle (this.element.ScrollLeft, this.element.ScrollTop, this.element.ScrollWidth, this.element.ScrollHeight); }\r
105                 }\r
106 \r
107                 public int ScrollLeft {\r
108                         get { return this.element.ScrollLeft; }\r
109                         set { this.element.ScrollLeft = value; }\r
110                 }\r
111 \r
112                 public int ScrollTop {\r
113                         get { return this.element.ScrollTop; }\r
114                         set { this.element.ScrollTop = value; }\r
115                 }\r
116 \r
117                 public HtmlElement OffsetParent {\r
118                         get { return new HtmlElement (owner, this.webHost, this.element.OffsetParent); }\r
119                 }\r
120 \r
121                 public HtmlDocument Document {\r
122                         get {\r
123                                 return new HtmlDocument (owner, webHost, element.Owner);\r
124                         }\r
125                 }\r
126 \r
127                 public bool Enabled     {\r
128                         get { return !this.element.Disabled; }\r
129                         set { this.element.Disabled = !value; }\r
130                 }\r
131 \r
132                 public string InnerHtml {\r
133                         get { return this.element.InnerHTML; }\r
134                         set { this.element.InnerHTML = value; }\r
135                 }\r
136 \r
137                 public string InnerText {\r
138                         get { return this.element.InnerText; }\r
139                         set { this.element.InnerText = value; }\r
140                 }\r
141 \r
142                 public string Id {\r
143                         get { return GetAttribute("id"); }\r
144                         set { SetAttribute ("id", value); }\r
145                 }\r
146 \r
147                 public string Name {\r
148                         get { return GetAttribute ("name"); }\r
149                         set { SetAttribute ("name", value); }\r
150                 }\r
151 \r
152                 public HtmlElement FirstChild {\r
153                         get {\r
154                                 return new HtmlElement (owner, webHost, (IElement)element.FirstChild); \r
155                         }\r
156                 }\r
157 \r
158                 public HtmlElement NextSibling {\r
159                         get { return new HtmlElement (owner, webHost, (IElement)element.Next); }\r
160                 }\r
161                 \r
162                 public HtmlElement Parent {\r
163                         get { return new HtmlElement (owner, webHost, (IElement)element.Parent); }\r
164                 }\r
165 \r
166                 public string TagName {\r
167                         get { return element.TagName; }\r
168                 }\r
169 \r
170                 public short TabIndex {\r
171                         get { return (short)element.TabIndex; }\r
172                         set { element.TabIndex = value; }\r
173                 }\r
174 \r
175                 public object DomElement {\r
176                         get { throw new NotSupportedException ("Retrieving a reference to an mshtml interface is not supported. Sorry."); } \r
177                 }\r
178 \r
179                 public string OuterHtml {\r
180                         get { return this.element.OuterHTML; }\r
181                         set { this.element.OuterHTML = value; }\r
182                 }\r
183 \r
184                 public string OuterText {\r
185                         get { return this.element.OuterText; }\r
186                         set { this.element.OuterText = value; }\r
187                 }\r
188 \r
189                 public string Style {\r
190                         get { return this.element.Style; }\r
191                         set { this.element.Style = value; }\r
192                 }\r
193 \r
194                 #endregion\r
195                 \r
196                 #region Methods\r
197                 public HtmlElement AppendChild (HtmlElement newElement)\r
198                 {\r
199                         IElement newChild = this.element.AppendChild (newElement.element);\r
200                         newElement.element = newChild;\r
201                         return newElement;\r
202                 }\r
203                 \r
204                 public void AttachEventHandler (string eventName, EventHandler eventHandler)\r
205                 {\r
206                         element.AttachEventHandler (eventName, eventHandler);\r
207                 }\r
208 \r
209                 public void DetachEventHandler (string eventName, EventHandler eventHandler)\r
210                 {\r
211                         element.DetachEventHandler (eventName, eventHandler);\r
212                 }\r
213                 \r
214                 public void Focus ()\r
215                 {\r
216                         throw new NotImplementedException ();\r
217                 }\r
218 \r
219                 public string GetAttribute (string attributeName)\r
220                 {\r
221                         return element.GetAttribute (attributeName);\r
222                 }\r
223 \r
224                 public HtmlElementCollection GetElementsByTagName (string tagName)\r
225                 {\r
226                         Mono.WebBrowser.DOM.IElementCollection col = element.GetElementsByTagName (tagName);\r
227                         return new HtmlElementCollection (owner, webHost, col);\r
228                 }\r
229                 \r
230                 public override int GetHashCode ()\r
231                 {\r
232                         if (element == null)\r
233                                 return 0;\r
234                         return element.GetHashCode ();\r
235                 }\r
236 \r
237                 internal bool HasAttribute (string name)\r
238                 {\r
239                         return element.HasAttribute (name);\r
240                 }\r
241 \r
242                 public HtmlElement InsertAdjacentElement (HtmlElementInsertionOrientation orient, HtmlElement newElement)\r
243                 {\r
244                         switch (orient) {\r
245                                 case HtmlElementInsertionOrientation.BeforeBegin:\r
246                                         element.Parent.InsertBefore (newElement.element, element);\r
247                                         return newElement;\r
248                                 case HtmlElementInsertionOrientation.AfterBegin:\r
249                                         element.InsertBefore (newElement.element, element.FirstChild);\r
250                                         return newElement;\r
251                                 case HtmlElementInsertionOrientation.BeforeEnd:\r
252                                         return this.AppendChild (newElement);\r
253                                 case HtmlElementInsertionOrientation.AfterEnd:\r
254                                         return this.AppendChild (newElement);\r
255                         }\r
256                         return null;\r
257                 }\r
258                 \r
259                 public object InvokeMember (string methodName)\r
260                 {\r
261                         return this.element.Owner.InvokeScript ("eval ('" + methodName + "()');");\r
262                 }\r
263 \r
264                 public object InvokeMember (string methodName, params object[] parameter)\r
265                 {\r
266                         string[] strArgs = new string[parameter.Length];\r
267                         for (int i = 0; i < parameter.Length; i++) {\r
268                                 strArgs[i] = parameter.ToString();\r
269                         }\r
270                         return this.element.Owner.InvokeScript ("eval ('" + methodName + "(" + String.Join (",", strArgs) + ")');");\r
271                 }\r
272                 \r
273                 public void RaiseEvent (string eventName) \r
274                 {\r
275                         this.element.FireEvent (eventName);\r
276                 }\r
277 \r
278                 public void RemoveFocus () \r
279                 {\r
280                         this.element.Blur ();\r
281                 }\r
282 \r
283                 public void ScrollIntoView (bool alignWithTop) \r
284                 {\r
285                         this.element.ScrollIntoView (alignWithTop);\r
286                 }\r
287                 \r
288                 public void SetAttribute (string attributeName, string value)\r
289                 {\r
290                         this.element.SetAttribute (attributeName, value);\r
291                 }\r
292 \r
293                 public override bool Equals (object obj)\r
294                 {\r
295                         return this == (HtmlElement) obj;\r
296                 }\r
297                 \r
298                 public static bool operator == (HtmlElement left, HtmlElement right)\r
299                 {\r
300                         if ((object)left == (object)right)\r
301                                 return true;\r
302                         if ((object)left == null || (object)right == null)\r
303                                 return false;\r
304                         return left.element.Equals (right.element); \r
305                 }\r
306 \r
307                 public static bool operator != (HtmlElement left, HtmlElement right)\r
308                 {\r
309                         return !(left == right);\r
310                 }\r
311                 #endregion\r
312 \r
313                 #region Events\r
314                 private void OnClick (object sender, EventArgs e)\r
315                 {\r
316                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[ClickEvent];\r
317                         if (eh != null) {\r
318                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
319                                 eh (this, ev);\r
320                         }\r
321                 }\r
322 \r
323                 private static object ClickEvent = new object ();\r
324                 public event HtmlElementEventHandler Click {\r
325                         add { \r
326                                 Events.AddHandler (ClickEvent, value);\r
327                                 element.Click += new NodeEventHandler (OnClick);\r
328                         }\r
329                         remove { \r
330                                 Events.RemoveHandler (ClickEvent, value);\r
331                                 element.Click -= new NodeEventHandler (OnClick);\r
332                         }\r
333                 }\r
334 \r
335                 private void OnDoubleClick (object sender, EventArgs e)\r
336                 {\r
337                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[DoubleClickEvent];\r
338                         if (eh != null) {\r
339                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
340                                 eh (this, ev);\r
341                         }\r
342                 }\r
343 \r
344                 private static object DoubleClickEvent = new object ();\r
345                 public event HtmlElementEventHandler DoubleClick {\r
346                         add {\r
347                                 Events.AddHandler (DoubleClickEvent, value);\r
348                                 element.DoubleClick += new NodeEventHandler (OnDoubleClick);\r
349                         }\r
350                         remove {\r
351                                 Events.RemoveHandler (DoubleClickEvent, value);\r
352                                 element.DoubleClick -= new NodeEventHandler (OnDoubleClick);\r
353                         }\r
354                 }\r
355 \r
356                 private void OnMouseDown (object sender, EventArgs e)\r
357                 {\r
358                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseDownEvent];\r
359                         if (eh != null) {\r
360                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
361                                 eh (this, ev);\r
362                         }\r
363                 }\r
364 \r
365                 private static object MouseDownEvent = new object ();\r
366                 public event HtmlElementEventHandler MouseDown {\r
367                         add {\r
368                                 Events.AddHandler (MouseDownEvent, value);\r
369                                 element.MouseDown += new NodeEventHandler (OnMouseDown);\r
370                         }\r
371                         remove {\r
372                                 Events.RemoveHandler (MouseDownEvent, value);\r
373                                 element.MouseDown -= new NodeEventHandler (OnMouseDown);\r
374                         }\r
375                 }\r
376 \r
377                 private void OnMouseUp (object sender, EventArgs e)\r
378                 {\r
379                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseUpEvent];\r
380                         if (eh != null) {\r
381                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
382                                 eh (this, ev);\r
383                         }\r
384                 }\r
385 \r
386                 private static object MouseUpEvent = new object ();\r
387                 public event HtmlElementEventHandler MouseUp {\r
388                         add {\r
389                                 Events.AddHandler (MouseUpEvent, value);\r
390                                 element.MouseUp += new NodeEventHandler (OnMouseUp);\r
391                         }\r
392                         remove {\r
393                                 Events.RemoveHandler (MouseUpEvent, value);\r
394                                 element.MouseUp -= new NodeEventHandler (OnMouseUp);\r
395                         }\r
396                 }\r
397 \r
398                 private void OnMouseMove (object sender, EventArgs e)\r
399                 {\r
400                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseMoveEvent];\r
401                         if (eh != null) {\r
402                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
403                                 eh (this, ev);\r
404                         }\r
405                 }\r
406 \r
407                 private static object MouseMoveEvent = new object ();\r
408                 public event HtmlElementEventHandler MouseMove {\r
409                         add {\r
410                                 Events.AddHandler (MouseMoveEvent, value);\r
411                                 element.MouseMove += new NodeEventHandler (OnMouseMove);\r
412                         }\r
413                         remove {\r
414                                 Events.RemoveHandler (MouseMoveEvent, value);\r
415                                 element.MouseMove -= new NodeEventHandler (OnMouseMove);\r
416                         }\r
417                 }\r
418 \r
419                 private void OnMouseOver (object sender, EventArgs e)\r
420                 {\r
421                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseOverEvent];\r
422                         if (eh != null) {\r
423                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
424                                 eh (this, ev);\r
425                         }\r
426                 }\r
427 \r
428                 private static object MouseOverEvent = new object ();\r
429                 public event HtmlElementEventHandler MouseOver {\r
430                         add { \r
431                                 Events.AddHandler (MouseOverEvent, value);\r
432                                 element.MouseOver += new NodeEventHandler (OnMouseOver);\r
433                         }\r
434                         remove { \r
435                                 Events.RemoveHandler (MouseOverEvent, value);\r
436                                 element.MouseOver -= new NodeEventHandler (OnMouseOver);\r
437                         }\r
438                 }\r
439                 \r
440                 private void OnMouseEnter (object sender, EventArgs e)\r
441                 {\r
442                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseEnterEvent];\r
443                         if (eh != null) {\r
444                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
445                                 eh (this, ev);\r
446                         }\r
447                 }\r
448                 \r
449                 private static object MouseEnterEvent = new object ();\r
450                 public event HtmlElementEventHandler MouseEnter {\r
451                         add {\r
452                                 Events.AddHandler (MouseEnterEvent, value);\r
453                                 element.MouseEnter += new NodeEventHandler (OnMouseEnter);\r
454                         }\r
455                         remove {\r
456                                 Events.RemoveHandler (MouseEnterEvent, value);\r
457                                 element.MouseEnter -= new NodeEventHandler (OnMouseEnter);\r
458                         }\r
459                 }\r
460                 \r
461                 private void OnMouseLeave (object sender, EventArgs e)\r
462                 {\r
463                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseLeaveEvent];\r
464                         if (eh != null) {\r
465                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
466                                 eh (this, ev);\r
467                         }\r
468                 }\r
469                 \r
470                 private static object MouseLeaveEvent = new object ();\r
471                 public event HtmlElementEventHandler MouseLeave {\r
472                         add {\r
473                                 Events.AddHandler (MouseLeaveEvent, value);\r
474                                 element.MouseLeave += new NodeEventHandler (OnMouseLeave);\r
475                         }\r
476                         remove {\r
477                                 Events.RemoveHandler (MouseLeaveEvent, value);\r
478                                 element.MouseLeave -= new NodeEventHandler (OnMouseLeave);\r
479                         }\r
480                 }\r
481 \r
482                 private void OnKeyDown (object sender, EventArgs e)\r
483                 {\r
484                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[KeyDownEvent];\r
485                         if (eh != null) {\r
486                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
487                                 eh (this, ev);\r
488                         }\r
489                 }\r
490                 \r
491                 private static object KeyDownEvent = new object ();\r
492                 public event HtmlElementEventHandler KeyDown {\r
493                         add {\r
494                                 Events.AddHandler (KeyDownEvent, value);\r
495                                 element.KeyDown += new NodeEventHandler (OnKeyDown);\r
496                         }\r
497                         remove {\r
498                                 Events.RemoveHandler (KeyDownEvent, value);\r
499                                 element.KeyDown -= new NodeEventHandler (OnKeyDown);\r
500                         }\r
501                 }\r
502 \r
503                 private void OnKeyPress (object sender, EventArgs e)\r
504                 {\r
505                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[KeyPressEvent];\r
506                         if (eh != null) {\r
507                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
508                                 eh (this, ev);\r
509                         }\r
510                 }\r
511                 \r
512                 private static object KeyPressEvent = new object ();\r
513                 public event HtmlElementEventHandler KeyPress {\r
514                         add {\r
515                                 Events.AddHandler (KeyPressEvent, value);\r
516                                 element.KeyPress += new NodeEventHandler (OnKeyPress);\r
517                         }\r
518                         remove {\r
519                                 Events.RemoveHandler (KeyPressEvent, value);\r
520                                 element.KeyPress -= new NodeEventHandler (OnKeyPress);\r
521                         }\r
522                 }\r
523 \r
524                 private void OnKeyUp (object sender, EventArgs e)\r
525                 {\r
526                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[KeyUpEvent];\r
527                         if (eh != null) {\r
528                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
529                                 eh (this, ev);\r
530                         }\r
531                 }\r
532                 \r
533                 private static object KeyUpEvent = new object ();\r
534                 public event HtmlElementEventHandler KeyUp {\r
535                         add {\r
536                                 Events.AddHandler (KeyUpEvent, value);\r
537                                 element.KeyUp += new NodeEventHandler (OnKeyUp);\r
538                         }\r
539                         remove {\r
540                                 Events.RemoveHandler (KeyUpEvent, value);\r
541                                 element.KeyUp -= new NodeEventHandler (OnKeyUp);\r
542                         }\r
543                 }\r
544 \r
545                 private static object DragEvent = new object ();\r
546                 public event HtmlElementEventHandler Drag {\r
547                         add {\r
548                                 Events.AddHandler (DragEvent, value);\r
549                         }\r
550                         remove {\r
551                                 Events.RemoveHandler (DragEvent, value);\r
552                         }\r
553                 }\r
554 \r
555                 private void OnDrag (object sender, EventArgs e)\r
556                 {\r
557                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[DragEvent];\r
558                         if (eh != null) {\r
559                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
560                                 eh (this, ev);\r
561                         }\r
562                 }\r
563 \r
564 \r
565                 private static object DragEndEvent = new object ();\r
566                 public event HtmlElementEventHandler DragEnd {\r
567                         add     {\r
568                                 Events.AddHandler (DragEndEvent, value);\r
569                         }\r
570                         remove {\r
571                                 Events.RemoveHandler (DragEndEvent, value);\r
572                         }\r
573                 }\r
574 \r
575                 private void OnDragEnd (object sender, EventArgs e)\r
576                 {\r
577                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[DragEndEvent];\r
578                         if (eh != null) {\r
579                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
580                                 eh (this, ev);\r
581                         }\r
582                 }\r
583                 private static object DragLeaveEvent = new object ();\r
584                 public event HtmlElementEventHandler DragLeave {\r
585                         add {\r
586                                 Events.AddHandler (DragLeaveEvent, value);\r
587                         }\r
588                         remove {\r
589                                 Events.RemoveHandler (DragLeaveEvent, value);\r
590                         }\r
591                 }\r
592 \r
593                 private void OnDragLeave (object sender, EventArgs e)\r
594                 {\r
595                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[DragLeaveEvent];\r
596                         if (eh != null) {\r
597                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
598                                 eh (this, ev);\r
599                         }\r
600                 }\r
601                 private static object DragOverEvent = new object ();\r
602                 public event HtmlElementEventHandler DragOver {\r
603                         add {\r
604                                 Events.AddHandler (DragOverEvent, value);\r
605                         }\r
606                         remove {\r
607                                 Events.RemoveHandler (DragOverEvent, value);\r
608                         }\r
609                 }\r
610 \r
611                 private void OnDragOver (object sender, EventArgs e)\r
612                 {\r
613                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[DragOverEvent];\r
614                         if (eh != null) {\r
615                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
616                                 eh (this, ev);\r
617                         }\r
618                 }\r
619                 private static object FocusingEvent = new object ();\r
620                 public event HtmlElementEventHandler Focusing {\r
621                         add {\r
622                                 Events.AddHandler (FocusingEvent, value);\r
623                                 ((INode)element).OnFocus += new NodeEventHandler (OnFocusing);\r
624                         }\r
625                         remove {\r
626                                 Events.RemoveHandler (FocusingEvent, value);\r
627                                 ((INode)element).OnFocus -= new NodeEventHandler (OnFocusing);\r
628                         }\r
629                 }\r
630 \r
631                 private void OnFocusing (object sender, EventArgs e)\r
632                 {\r
633                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[FocusingEvent];\r
634                         if (eh != null) {\r
635                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
636                                 eh (this, ev);\r
637                         }\r
638                 }\r
639 \r
640                 private static object GotFocusEvent = new object ();\r
641                 public event HtmlElementEventHandler GotFocus {\r
642                         add {\r
643                                 Events.AddHandler (GotFocusEvent, value);\r
644                                 ((INode)element).OnFocus += new NodeEventHandler (OnGotFocus);\r
645                         }\r
646                         remove {\r
647                                 Events.RemoveHandler (GotFocusEvent, value);\r
648                                 ((INode)element).OnFocus -= new NodeEventHandler (OnGotFocus);\r
649                         }\r
650                 }\r
651 \r
652                 private void OnGotFocus (object sender, EventArgs e)\r
653                 {\r
654                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[GotFocusEvent];\r
655                         if (eh != null) {\r
656                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
657                                 eh (this, ev);\r
658                         }\r
659                 }\r
660                 private static object LosingFocusEvent = new object ();\r
661                 public event HtmlElementEventHandler LosingFocus {\r
662                         add {\r
663                                 Events.AddHandler (LosingFocusEvent, value);\r
664                                 ((INode)element).OnBlur += new NodeEventHandler (OnLosingFocus);\r
665                         }\r
666                         remove {\r
667                                 Events.RemoveHandler (LosingFocusEvent, value);\r
668                                 ((INode)element).OnBlur -= new NodeEventHandler (OnLosingFocus);\r
669                         }\r
670                 }\r
671 \r
672                 private void OnLosingFocus (object sender, EventArgs e)\r
673                 {\r
674                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[LosingFocusEvent];\r
675                         if (eh != null) {\r
676                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
677                                 eh (this, ev);\r
678                         }\r
679                 }\r
680                 private static object LostFocusEvent = new object ();\r
681                 public event HtmlElementEventHandler LostFocus {\r
682                         add {\r
683                                 Events.AddHandler (LostFocusEvent, value);\r
684                                 ((INode)element).OnBlur += new NodeEventHandler (OnLostFocus);\r
685                         }\r
686                         remove {\r
687                                 Events.RemoveHandler (LostFocusEvent, value);\r
688                                 ((INode)element).OnBlur -= new NodeEventHandler (OnLostFocus);\r
689                         }\r
690                 }\r
691 \r
692                 private void OnLostFocus (object sender, EventArgs e)\r
693                 {\r
694                         HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[LostFocusEvent];\r
695                         if (eh != null) {\r
696                                 HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
697                                 eh (this, ev);\r
698                         }\r
699                 }\r
700 \r
701                 #endregion\r
702         }\r
703 }\r
704 \r
705 #endif\r