* HtmlDocument.cs, HtmlElement.cs, HtmlHistory.cs, WebBrowser.cs:
authorAndreia Gaita <avidigal@novell.com>
Mon, 14 Apr 2008 18:39:41 +0000 (18:39 -0000)
committerAndreia Gaita <avidigal@novell.com>
Mon, 14 Apr 2008 18:39:41 +0000 (18:39 -0000)
Implement OuterHtml, OuterText, Enabled, Scroll*, *Rectangle properties,
add missing properties and event handlers.

* ChangeLog: fix dates

2008-04-12  Andreia Gaita <avidigal@novell.com>

svn path=/trunk/mcs/; revision=100663

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/HtmlDocument.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/HtmlElement.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/HtmlHistory.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/WebBrowser.cs

index d51e0469ab851b553573d049a60c407bdf183557..0bf0d20d08d9b722840100b8294c1801f178e661 100644 (file)
@@ -1,9 +1,15 @@
+2008-04-12  Andreia Gaita <avidigal@novell.com> 
+
+       * HtmlDocument.cs, HtmlElement.cs, HtmlHistory.cs, WebBrowser.cs:
+       Implement OuterHtml, OuterText, Enabled, Scroll*, *Rectangle properties,
+       add missing properties and event handlers.
+       
 2008-04-14  Jonathan Pobst  <monkey@jpobst.com>
 
        * ListBox.cs: Make sure the LargeChange we are setting is at least
        zero, to prevent an IOORE.  [Fixes bug #379531]
 
-2009-04-13  Andy Hume <andyhume32@yahoo.co.uk>
+2008-04-13  Andy Hume <andyhume32@yahoo.co.uk>
 
        * ComboBox.cs: Support item navigation by entering text.  Firstly, 
        in DropDownList mode, for each key-press select the next item 
@@ -16,7 +22,7 @@
        * X11Keyboard.cs : Control.FromHandle() could return null
          in MoveCurrentCaretPos().
 
-2009-04-12  Carlos Alberto Cortez <calberto.cortez@gmail.com>
+2008-04-12  Carlos Alberto Cortez <calberto.cortez@gmail.com>
 
        * ListView.cs: When changing the size in VirtualMode, also Reset the
        selection.
        changing selection info for VirtualMode.
        Fixes #372618.
 
-2009-04-12  Carlos Alberto Cortez <calberto.cortez@gmail.com>
+2008-04-12  Carlos Alberto Cortez <calberto.cortez@gmail.com>
 
        * ThemeWin32Classic.cs: When drawing ListViewItem instancesin Details
        view, don't use LineLimit for the first item - use NoWrap *always*
        instead, since ListView.LabelWrap is not used for this view.
        Fixes #378054.
 
-2009-04-12  Carlos Alberto Cortez <calberto.cortez@gmail.com>
+2008-04-12  Carlos Alberto Cortez <calberto.cortez@gmail.com>
 
        * Binding.cs: Call UpdateIsBinding when setting control - probably
        Binding is already usable and we don't need to wait to check the
@@ -39,7 +45,7 @@
        Created, just like 2.0 does.
        * CurrencyManager.cs: I'm so lame - the previous check was wrong.
 
-2009-04-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
+2008-04-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
 
        * Binding.cs: Just realized we don't need to have a handler for
        BindingContextChanged, since this info should be now consumed directly
@@ -49,7 +55,7 @@
        * CurrencyManager.cs: IsSuspended should return always false if Count
        == 0.
 
-2009-04-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
+2008-04-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
 
        * Binding.cs: When calling PushData, return if manager.Count == 0,
        since we just don't have data to be read. Also, when setting the
index af691a427e904b5065560dc1bcf080c4343adf0e..9729d19d3621dd2d5fdb39e46b6320e432d81ca2 100644 (file)
@@ -35,8 +35,9 @@ namespace System.Windows.Forms
        [MonoTODO ("Needs Implementation")]
        public sealed class HtmlDocument
        {
-               Mono.WebBrowser.IWebBrowser webHost;
-               IDocument document;
+               private EventHandlerList events;
+               private Mono.WebBrowser.IWebBrowser webHost;
+               private IDocument document;
 
                internal HtmlDocument (Mono.WebBrowser.IWebBrowser webHost) : this (webHost, webHost.Document)
                {
@@ -48,6 +49,16 @@ namespace System.Windows.Forms
                        this.document = doc;
                }
 
+
+               internal EventHandlerList Events {
+                       get {
+                               if (events == null)
+                                       events = new EventHandlerList ();
+
+                               return events;
+                       }
+               }
+
                #region Methods
 
 
@@ -252,7 +263,222 @@ namespace System.Windows.Forms
 
 
                #endregion
-               
+
+               #region Events
+               private static object ClickEvent = new object ();
+               public event HtmlElementEventHandler Click {
+                       add { 
+                               Events.AddHandler (ClickEvent, value);
+                               document.Click += new NodeEventHandler (OnClick);
+                       }
+                       remove { 
+                               Events.RemoveHandler (ClickEvent, value);
+                               document.Click -= new NodeEventHandler (OnClick);
+                       }
+               }
+               private void OnClick (object sender, EventArgs e)
+               {
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[ClickEvent];
+                       if (eh != null) {
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();
+                               eh (this, ev);
+                       }
+               }
+
+               private static object ContextMenuShowingEvent = new object ();
+               public event HtmlElementEventHandler ContextMenuShowing
+               {
+                       add
+                       {
+                               Events.AddHandler (ContextMenuShowingEvent, value);
+                       }
+                       remove
+                       {
+                               Events.RemoveHandler (ContextMenuShowingEvent, value);
+                       }
+               }
+               private void OnContextMenuShowing (object sender, EventArgs e)
+               {
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[ContextMenuShowingEvent];
+                       if (eh != null) {
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();
+                               eh (this, ev);
+                       }
+               }
+
+               private static object FocusingEvent = new object ();
+               public event HtmlElementEventHandler Focusing
+               {
+                       add
+                       {
+                               Events.AddHandler (FocusingEvent, value);
+               }
+                       remove
+                       {
+                               Events.RemoveHandler (FocusingEvent, value);
+                       }
+               }
+               private void OnFocusing (object sender, EventArgs e)
+               {
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[FocusingEvent];
+                       if (eh != null) {
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();
+                               eh (this, ev);
+                       }
+               }
+
+               private static object LosingFocusEvent = new object ();
+               public event HtmlElementEventHandler LosingFocus
+               {
+                       add
+                       {
+                               Events.AddHandler (LosingFocusEvent, value);
+                       }
+                       remove
+                       {
+                               Events.RemoveHandler (LosingFocusEvent, value);
+                       }
+               }
+               private void OnLosingFocus (object sender, EventArgs e)
+               {
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[LosingFocusEvent];
+                       if (eh != null) {
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();
+                               eh (this, ev);
+                       }
+               }
+
+
+               private static object MouseDownEvent = new object ();
+               public event HtmlElementEventHandler MouseDown
+               {
+                       add
+                       {
+                               Events.AddHandler (MouseDownEvent, value);
+                       }
+                       remove
+                       {
+                               Events.RemoveHandler (MouseDownEvent, value);
+                       }
+               }
+               private void OnMouseDown (object sender, EventArgs e)
+               {
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseDownEvent];
+                       if (eh != null) {
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();
+                               eh (this, ev);
+                       }
+               }
+
+
+               private static object MouseLeaveEvent = new object ();
+               public event HtmlElementEventHandler MouseLeave
+               {
+                       add
+                       {
+                               Events.AddHandler (MouseLeaveEvent, value);
+                       }
+                       remove
+                       {
+                               Events.RemoveHandler (MouseLeaveEvent, value);
+                       }
+               }
+               private void OnMouseLeave (object sender, EventArgs e)
+               {
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseLeaveEvent];
+                       if (eh != null) {
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();
+                               eh (this, ev);
+                       }
+               }
+
+               private static object MouseMoveEvent = new object ();
+               public event HtmlElementEventHandler MouseMove
+               {
+                       add
+                       {
+                               Events.AddHandler (MouseMoveEvent, value);
+                       }
+                       remove
+                       {
+                               Events.RemoveHandler (MouseMoveEvent, value);
+                       }
+               }
+               private void OnMouseMove (object sender, EventArgs e)
+               {
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseMoveEvent];
+                       if (eh != null) {
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();
+                               eh (this, ev);
+                       }
+               }
+
+               private static object MouseOverEvent = new object ();
+               public event HtmlElementEventHandler MouseOver
+               {
+                       add
+                       {
+                               Events.AddHandler (MouseOverEvent, value);
+                       }
+                       remove
+                       {
+                               Events.RemoveHandler (MouseOverEvent, value);
+                       }
+               }
+               private void OnMouseOver (object sender, EventArgs e)
+               {
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseOverEvent];
+                       if (eh != null) {
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();
+                               eh (this, ev);
+                       }
+               }
+
+               private static object MouseUpEvent = new object ();
+               public event HtmlElementEventHandler MouseUp
+               {
+                       add
+                       {
+                               Events.AddHandler (MouseUpEvent, value);
+                       }
+                       remove
+                       {
+                               Events.RemoveHandler (MouseUpEvent, value);
+                       }
+               }
+               private void OnMouseUp (object sender, EventArgs e)
+               {
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseUpEvent];
+                       if (eh != null) {
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();
+                               eh (this, ev);
+                       }
+               }
+
+               private static object StopEvent = new object ();
+               public event HtmlElementEventHandler Stop
+               {
+                       add
+                       {
+                               Events.AddHandler (StopEvent, value);
+                       }
+                       remove
+                       {
+                               Events.RemoveHandler (StopEvent, value);
+                       }
+               }
+               private void OnStop (object sender, EventArgs e)
+               {
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[StopEvent];
+                       if (eh != null) {
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();
+                               eh (this, ev);
+                       }
+               }
+
+               #endregion
+
+
                private Color ParseColor (string color) {
                        if (color.IndexOf ("#") >= 0) {
                                return Color.FromArgb (int.Parse (color.Substring (color.IndexOf ("#") + 1), NumberStyles.HexNumber));
index 67cd108a89668ec3824df7aaa79cd5c49a060d04..daef775d84e6d18fcf3a432172952a974d199dd5 100644 (file)
@@ -25,6 +25,7 @@
 #if NET_2_0\r
 \r
 using System;\r
+using System.Drawing;\r
 using System.ComponentModel;\r
 using Mono.WebBrowser.DOM;\r
 \r
@@ -62,7 +63,7 @@ namespace System.Windows.Forms
                public bool CanHaveChildren {\r
                        get {\r
                                string tag = this.TagName;\r
-                               switch (tag.ToLower ()) {\r
+                               switch (tag.ToLowerInvariant ()) {\r
                                        case "area":\r
                                        case "base":\r
                                        case "basefont":\r
@@ -88,14 +89,48 @@ namespace System.Windows.Forms
                                return new HtmlElementCollection (webHost, this.element.Children);\r
                        }\r
                }\r
+\r
+               public Rectangle ClientRectangle {\r
+                       get { return new Rectangle (0, 0, this.element.ClientWidth, this.element.ClientHeight); }\r
+               }\r
                \r
+               public Rectangle OffsetRectangle {\r
+                       get { return new Rectangle (this.element.OffsetLeft, this.element.OffsetTop, this.element.OffsetWidth, this.element.OffsetHeight); }\r
+               }\r
+\r
+               public Rectangle ScrollRectangle {\r
+                       get { return new Rectangle (this.element.ScrollLeft, this.element.ScrollTop, this.element.ScrollWidth, this.element.ScrollHeight); }\r
+               }\r
+\r
+               public int ScrollLeft {\r
+                       get { return this.element.ScrollLeft; }\r
+                       set { this.element.ScrollLeft = value; }\r
+               }\r
+\r
+               public int ScrollTop\r
+               {\r
+                       get { return this.element.ScrollTop; }\r
+                       set { this.element.ScrollTop = value; }\r
+               }\r
+\r
+               public HtmlElement OffsetParent {\r
+                       get { return new HtmlElement (this.webHost, this.element.OffsetParent); }\r
+               }\r
+\r
                public HtmlDocument Document {\r
                        get {\r
                                return new HtmlDocument (webHost, element.Owner);\r
                        }\r
                }\r
 \r
-               public string InnerHtml {\r
+               public bool Enabled\r
+               {\r
+                       get { return !this.element.Disabled; }\r
+                       set { this.element.Disabled = !value; }\r
+               }\r
+\r
+               public string InnerHtml\r
+               {\r
                        get { return this.element.InnerHTML; }\r
                        set { throw new NotImplementedException (); }\r
                }\r
@@ -130,6 +165,30 @@ namespace System.Windows.Forms
                public string TagName {\r
                        get { return element.TagName; }\r
                }\r
+\r
+               [MonoTODO ("Needs implementation")]\r
+               public short TabIndex {\r
+                       get { return 0; }\r
+               }\r
+\r
+               [MonoTODO ("Needs implementation")]\r
+               public object DomElement {\r
+                       get { return null; }\r
+               }\r
+\r
+               public string OuterHtml {\r
+                       get { return this.element.OuterHTML; }\r
+               }\r
+\r
+               public string OuterText {\r
+                       get { return this.element.OuterText; }\r
+               }\r
+\r
+               [MonoTODO ("Needs implementation")]\r
+               public string Style {\r
+                       get { return String.Empty; }\r
+               }\r
+\r
                #endregion\r
                \r
                #region Methods\r
@@ -476,6 +535,155 @@ namespace System.Windows.Forms
                                element.KeyUp -= new NodeEventHandler (OnKeyUp);\r
                        }\r
                }\r
+\r
+               private static object DragEvent = new object ();\r
+               public event HtmlElementEventHandler Drag {\r
+                       add {\r
+                               Events.AddHandler (DragEvent, value);\r
+                       }\r
+                       remove {\r
+                               Events.RemoveHandler (DragEvent, value);\r
+                       }\r
+               }\r
+\r
+               private void OnDrag (object sender, EventArgs e)\r
+               {\r
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[DragEvent];\r
+                       if (eh != null) {\r
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
+                               eh (this, ev);\r
+                       }\r
+               }\r
+\r
+\r
+               private static object DragEndEvent = new object ();\r
+               public event HtmlElementEventHandler DragEnd {\r
+                       add     {\r
+                               Events.AddHandler (DragEndEvent, value);\r
+                       }\r
+                       remove {\r
+                               Events.RemoveHandler (DragEndEvent, value);\r
+                       }\r
+               }\r
+\r
+               private void OnDragEnd (object sender, EventArgs e)\r
+               {\r
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[DragEndEvent];\r
+                       if (eh != null) {\r
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
+                               eh (this, ev);\r
+                       }\r
+               }\r
+               private static object DragLeaveEvent = new object ();\r
+               public event HtmlElementEventHandler DragLeave {\r
+                       add {\r
+                               Events.AddHandler (DragLeaveEvent, value);\r
+                       }\r
+                       remove {\r
+                               Events.RemoveHandler (DragLeaveEvent, value);\r
+                       }\r
+               }\r
+\r
+               private void OnDragLeave (object sender, EventArgs e)\r
+               {\r
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[DragLeaveEvent];\r
+                       if (eh != null) {\r
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
+                               eh (this, ev);\r
+                       }\r
+               }\r
+               private static object DragOverEvent = new object ();\r
+               public event HtmlElementEventHandler DragOver {\r
+                       add {\r
+                               Events.AddHandler (DragOverEvent, value);\r
+                       }\r
+                       remove {\r
+                               Events.RemoveHandler (DragOverEvent, value);\r
+                       }\r
+               }\r
+\r
+               private void OnDragOver (object sender, EventArgs e)\r
+               {\r
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[DragOverEvent];\r
+                       if (eh != null) {\r
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
+                               eh (this, ev);\r
+                       }\r
+               }\r
+               private static object FocusingEvent = new object ();\r
+               public event HtmlElementEventHandler Focusing {\r
+                       add {\r
+                               Events.AddHandler (FocusingEvent, value);\r
+                       }\r
+                       remove {\r
+                               Events.RemoveHandler (FocusingEvent, value);\r
+                       }\r
+               }\r
+\r
+               private void OnFocusing (object sender, EventArgs e)\r
+               {\r
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[FocusingEvent];\r
+                       if (eh != null) {\r
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
+                               eh (this, ev);\r
+                       }\r
+               }\r
+\r
+               private static object GotFocusEvent = new object ();\r
+               public event HtmlElementEventHandler GotFocus {\r
+                       add {\r
+                               Events.AddHandler (GotFocusEvent, value);\r
+                       }\r
+                       remove {\r
+                               Events.RemoveHandler (GotFocusEvent, value);\r
+                       }\r
+               }\r
+\r
+               private void OnGotFocus (object sender, EventArgs e)\r
+               {\r
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[GotFocusEvent];\r
+                       if (eh != null) {\r
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
+                               eh (this, ev);\r
+                       }\r
+               }\r
+               private static object LosingFocusEvent = new object ();\r
+               public event HtmlElementEventHandler LosingFocus {\r
+                       add {\r
+                               Events.AddHandler (LosingFocusEvent, value);\r
+                       }\r
+                       remove {\r
+                               Events.RemoveHandler (LosingFocusEvent, value);\r
+                       }\r
+               }\r
+\r
+               private void OnLosingFocus (object sender, EventArgs e)\r
+               {\r
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[LosingFocusEvent];\r
+                       if (eh != null) {\r
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
+                               eh (this, ev);\r
+                       }\r
+               }\r
+               private static object LostFocusEvent = new object ();\r
+               public event HtmlElementEventHandler LostFocus {\r
+                       add {\r
+                               Events.AddHandler (LostFocusEvent, value);\r
+                       }\r
+                       remove {\r
+                               Events.RemoveHandler (LostFocusEvent, value);\r
+                       }\r
+               }\r
+\r
+               private void OnLostFocus (object sender, EventArgs e)\r
+               {\r
+                       HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[LostFocusEvent];\r
+                       if (eh != null) {\r
+                               HtmlElementEventArgs ev = new HtmlElementEventArgs ();\r
+                               eh (this, ev);\r
+                       }\r
+               }\r
+\r
                #endregion\r
        }\r
 }\r
index 795ef443759ba17495417e2334eefd2991f51039..09a58619dacca90cffeaea405aacdaddfe578d69 100644 (file)
@@ -57,6 +57,19 @@ namespace System.Windows.Forms
 
                #endregion
 
+               #region Properties
+               [MonoTODO ("Needs implementation")]
+               public int Length {
+                       get { return 0; }
+               }
+
+               [MonoTODO ("Needs implementation")]
+               public object DomHistory {
+                       get { return null; }
+               }
+               #endregion
+
+
                public void Back (int numberBack)
                {
                        this.webHost.Navigation.Go (numberBack * -1, true);
index a7f9fc8ec8b5af868f5d2b7d2057c8e37b549337..a5b35716af87cd4b3f85f367ae51af29ce5d650c 100644 (file)
@@ -513,6 +513,7 @@ namespace System.Windows.Forms
                static object NewWindowEvent = new object ();\r
                static object ProgressChangedEvent = new object ();\r
                static object StatusTextChangedEvent = new object ();\r
+               static object PaddingChangedEvent = new object ();\r
                \r
                [BrowsableAttribute(false)]\r
                public event EventHandler CanGoBackChanged {\r
@@ -574,6 +575,11 @@ namespace System.Windows.Forms
                        remove { Events.RemoveHandler (StatusTextChangedEvent, value); }\r
                }\r
 \r
+               public event EventHandler PaddingChanged\r
+               {\r
+                       add { Events.AddHandler (PaddingChangedEvent, value); }\r
+                       remove { Events.RemoveHandler (PaddingChangedEvent, value); }\r
+               }\r
                #endregion\r
 \r
                #region Internal\r