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
9 // The above copyright notice and this permission notice shall be
\r
10 // included in all copies or substantial portions of the Software.
\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
20 // Copyright (c) 2007, 2008 Novell, Inc.
\r
23 // Andreia Gaita (avidigal@novell.com)
\r
30 using System.ComponentModel;
\r
31 using Mono.WebBrowser.DOM;
33 namespace System.Windows.Forms
35 public sealed class HtmlWindow
37 private EventHandlerList event_handlers;
38 private IWindow window;
39 private Mono.WebBrowser.IWebBrowser webHost;
41 internal HtmlWindow (Mono.WebBrowser.IWebBrowser webHost, IWindow iWindow)
\r
43 this.window = iWindow;
44 this.webHost = webHost;
45 event_handlers = null;
46 this.window.Load += new EventHandler (OnLoad);
\r
47 this.window.Unload += new EventHandler (OnUnload);
\r
50 private EventHandlerList Events {
52 // Note: space vs. time tradeoff
53 // We create the object here if it's never be accessed before. This potentially
54 // saves space. However, we must check each time the propery is accessed to
55 // determine whether we need to create the object, which increases overhead.
56 // We could put the creation in the contructor, but that would waste space
57 // if it were never used. However, accessing this property would be faster.
58 if (null == event_handlers)
59 event_handlers = new EventHandlerList();
61 return event_handlers;
66 public HtmlDocument Document {
67 get { return new HtmlDocument (webHost, this.window.Document); }
70 public object DomWindow {
71 get { throw new NotImplementedException (); }
74 public HtmlWindowCollection Frames {
75 get { return new HtmlWindowCollection (webHost, this.window.Frames); }
78 public HtmlHistory History {
79 get { throw new NotImplementedException (); }
82 [MonoTODO ("Windows are always open")]
83 public bool IsClosed {
88 get { return this.window.Name; }
89 set { this.window.Name = value; }
92 [MonoTODO ("Separate windows are not supported yet")]
93 public HtmlWindow Opener {
97 public HtmlWindow Parent {
98 get { return new HtmlWindow (webHost, this.window.Parent); }
101 public Point Position {
102 get { throw new NotImplementedException (); }
106 get { throw new NotImplementedException (); }
107 set { throw new NotImplementedException (); }
110 public string StatusBarText {
111 get { return this.window.StatusText; }
112 set { throw new NotImplementedException (); }
115 public HtmlElement WindowFrameElement {
116 get { throw new NotImplementedException (); }
120 get { return this.Document.Url; }
125 public void Alert (string message)
127 MessageBox.Show ("Alert", message);
130 public bool Confirm (string message)
132 DialogResult ret = MessageBox.Show (message, "Confirm", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
\r
133 return ret == DialogResult.OK;
\r
136 public string Prompt (string message, string defaultValue)
138 WebBrowserDialogs.Prompt prompt = new WebBrowserDialogs.Prompt ("Prompt", message, defaultValue);
\r
139 DialogResult ret = prompt.Show ();
\r
140 return prompt.Text;
\r
143 public void Navigate (string urlString)
\r
145 webHost.Navigation.Go (urlString);
\r
148 public void Navigate (Uri url)
\r
150 webHost.Navigation.Go (url.ToString ());
\r
153 public void ScrollTo (Point point)
155 ScrollTo (point.X, point.Y);
158 public void ScrollTo (int x, int y)
160 this.window.ScrollTo (x, y);
163 [MonoTODO("Blank opens in current window at the moment. Missing media and search implementations. No options implemented")]
164 public HtmlWindow Open (Uri url, string target, string options, bool replace)
166 return Open (url.ToString(), target, options, replace);
169 [MonoTODO("Blank opens in current window at the moment. Missing media and search implementations. No options implemented")]
170 public HtmlWindow Open (string url, string target, string options, bool replace)
174 this.window.Open (url);
179 this.window.Parent.Open (url);
184 this.window.Open (url);
187 this.window.Top.Open (url);
193 [MonoTODO("Opens in current window at the moment.")]
194 public HtmlWindow OpenNew (string url, string options)
196 return Open (url, "_blank", options, false);
199 [MonoTODO("Opens in current window at the moment.")]
200 public HtmlWindow OpenNew (Uri url, string options)
202 return OpenNew (url.ToString (), options);
205 public void AttachEventHandler (string name, EventHandler e)
207 throw new NotImplementedException ();
212 throw new NotImplementedException ();
215 public void DetachEventHandler (string name, EventHandler e)
217 throw new NotImplementedException ();
222 throw new NotImplementedException ();
225 public void MoveTo (Point position)
227 throw new NotImplementedException ();
230 public void MoveTo (int x, int y)
232 throw new NotImplementedException ();
235 public void RemoveFocus ()
237 throw new NotImplementedException ();
240 public void ResizeTo (Size size)
242 throw new NotImplementedException ();
245 public void ResizeTo (int width, int height)
247 throw new NotImplementedException ();
253 static object ErrorEvent = new object ();
\r
254 public event HtmlElementErrorEventHandler Error
\r
256 add { Events.AddHandler (ErrorEvent, value); }
\r
257 remove { Events.RemoveHandler (ErrorEvent, value); }
\r
260 internal void OnError (object sender, EventArgs ev)
262 HtmlElementErrorEventHandler eh = (HtmlElementErrorEventHandler) (Events[ErrorEvent]);
\r
264 HtmlElementErrorEventArgs e = new HtmlElementErrorEventArgs (String.Empty, 0, null);
\r
269 static object GotFocusEvent = new object ();
\r
270 public event HtmlElementEventHandler GotFocus
\r
272 add { Events.AddHandler (GotFocusEvent, value); }
\r
273 remove { Events.RemoveHandler (GotFocusEvent, value); }
\r
276 internal void OnGotFocus (object sender, EventArgs ev)
278 HtmlElementEventHandler eh = (HtmlElementEventHandler) (Events[GotFocusEvent]);
\r
280 HtmlElementEventArgs e = new HtmlElementEventArgs ();
\r
285 static object LostFocusEvent = new object ();
\r
286 public event HtmlElementEventHandler LostFocus
\r
288 add { Events.AddHandler (LostFocusEvent, value); }
\r
289 remove { Events.RemoveHandler (LostFocusEvent, value); }
\r
292 internal void OnLostFocus (object sender, EventArgs ev)
294 HtmlElementEventHandler eh = (HtmlElementEventHandler) (Events[LostFocusEvent]);
\r
296 HtmlElementEventArgs e = new HtmlElementEventArgs ();
\r
301 static object LoadEvent = new object ();
\r
302 public event HtmlElementEventHandler Load
\r
304 add { Events.AddHandler (LoadEvent, value); }
\r
305 remove { Events.RemoveHandler (LoadEvent, value); }
\r
308 internal void OnLoad (object sender, EventArgs ev)
310 HtmlElementEventHandler eh = (HtmlElementEventHandler) (Events[LoadEvent]);
\r
312 HtmlElementEventArgs e = new HtmlElementEventArgs ();
\r
317 static object UnloadEvent = new object ();
\r
318 public event HtmlElementEventHandler Unload
\r
320 add { Events.AddHandler (UnloadEvent, value); }
\r
321 remove { Events.RemoveHandler (UnloadEvent, value); }
\r
324 internal void OnUnload (object sender, EventArgs ev)
326 HtmlElementEventHandler eh = (HtmlElementEventHandler) (Events[UnloadEvent]);
\r
328 HtmlElementEventArgs e = new HtmlElementEventArgs ();
\r
333 static object ScrollEvent = new object ();
\r
334 public event HtmlElementEventHandler Scroll
\r
336 add { Events.AddHandler (ScrollEvent, value); }
\r
337 remove { Events.RemoveHandler (ScrollEvent, value); }
\r
340 internal void OnScroll (object sender, EventArgs ev)
342 HtmlElementEventHandler eh = (HtmlElementEventHandler) (Events[ScrollEvent]);
\r
344 HtmlElementEventArgs e = new HtmlElementEventArgs ();
\r
349 static object ResizeEvent = new object ();
\r
350 public event HtmlElementEventHandler Resize
\r
352 add { Events.AddHandler (ResizeEvent, value); }
\r
353 remove { Events.RemoveHandler (ResizeEvent, value); }
\r
356 internal void OnResize (object sender, EventArgs ev)
358 HtmlElementEventHandler eh = (HtmlElementEventHandler) (Events[ResizeEvent]);
\r
360 HtmlElementEventArgs e = new HtmlElementEventArgs ();
\r
368 #region Standard stuff
369 public override int GetHashCode ()
\r
371 return window.GetHashCode ();
\r
374 public override bool Equals (object obj) {
375 return this == (HtmlWindow) obj;
378 public static bool operator ==(HtmlWindow left, HtmlWindow right) {
379 if ((object)left == (object)right) {
383 if ((object)left == null || (object)right == null) {
387 return left.Equals (right);
390 public static bool operator !=(HtmlWindow left, HtmlWindow right) {
391 return !(left == right);