diff dwt/browser/WindowEvent.d @ 0:380af2bdd8e5

Upload of whole dwt tree
author Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
date Sat, 09 Aug 2008 17:00:02 +0200
parents
children e831403a80a9 f565d3a95c0a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dwt/browser/WindowEvent.d	Sat Aug 09 17:00:02 2008 +0200
@@ -0,0 +1,206 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     
+ * Port to the D Programming language:
+ *     Jacob Carlborg <jacob.carlborg@gmail.com>
+ *******************************************************************************/
+module dwt.browser.WindowEvent;
+
+import dwt.browser.Browser;
+import dwt.dwthelper.utils;
+import dwt.events.TypedEvent;
+import dwt.graphics.Point;
+import dwt.widgets.Widget;
+
+/**
+ * A <code>WindowEvent</code> is sent by a {@link Browser} when
+ * a new window needs to be created or when an existing window needs to be
+ * closed. This notification occurs when a javascript command such as
+ * <code>window.open</code> or <code>window.close</code> gets executed by
+ * a <code>Browser</code>.
+ *
+ * <p>
+ * The following example shows how <code>WindowEvent</code>'s are typically
+ * handled.
+ * 
+ * <code><pre>
+ *  public static void main(String[] args) {
+ *      Display display = new Display();
+ *      Shell shell = new Shell(display);
+ *      shell.setText("Main Window");
+ *      shell.setLayout(new FillLayout());
+ *      Browser browser = new Browser(shell, DWT.NONE);
+ *      initialize(display, browser);
+ *      shell.open();
+ *      browser.setUrl("http://www.eclipse.org");
+ *      while (!shell.isDisposed()) {
+ *          if (!display.readAndDispatch())
+ *              display.sleep();
+ *      }
+ *      display.dispose();
+ *  }
+ *
+ *  static void initialize(final Display display, Browser browser) {
+ *      browser.addOpenWindowListener(new OpenWindowListener() {
+ *          public void open(WindowEvent event) {
+ *              // Certain platforms can provide a default full browser.
+ *              // simply return in that case if the application prefers
+ *              // the default full browser to the embedded one set below.
+ *              if (!event.required) return;
+ *
+ *              // Embed the new window
+ *              Shell shell = new Shell(display);
+ *              shell.setText("New Window");
+ *              shell.setLayout(new FillLayout());
+ *              Browser browser = new Browser(shell, DWT.NONE);
+ *              initialize(display, browser);
+ *              event.browser = browser;
+ *          }
+ *      });
+ *      browser.addVisibilityWindowListener(new VisibilityWindowListener() {
+ *          public void hide(WindowEvent event) {
+ *              Browser browser = (Browser)event.widget;
+ *              Shell shell = browser.getShell();
+ *              shell.setVisible(false);
+ *          }
+ *          public void show(WindowEvent event) {
+ *              Browser browser = (Browser)event.widget;
+ *              Shell shell = browser.getShell();
+ *              if (event.location !is null) shell.setLocation(event.location);
+ *              if (event.size !is null) {
+ *                  Point size = event.size;
+ *                  shell.setSize(shell.computeSize(size.x, size.y));
+ *              }
+ *              if (event.addressBar || event.menuBar || event.statusBar || event.toolBar) {
+ *                  // Create widgets for the address bar, menu bar, status bar and/or tool bar
+ *                  // leave enough space in the Shell to accommodate a Browser of the size
+ *                  // given by event.size
+ *              }
+ *              shell.open();
+ *          }
+ *      });
+ *      browser.addCloseWindowListener(new CloseWindowListener() {
+ *          public void close(WindowEvent event) {
+ *              Browser browser = (Browser)event.widget;
+ *              Shell shell = browser.getShell();
+ *              shell.close();
+ *          }
+ *      });
+ *  }
+ * </pre></code>
+ * 
+ * The following notifications are emitted when the user selects a hyperlink that targets a new window
+ * or as the result of a javascript that executes window.open. 
+ * 
+ * <p>Main Browser
+ * <ul>
+ *    <li>User selects a link that opens in a new window or javascript requests a new window</li>
+ *    <li>OpenWindowListener.open() notified</li>
+ *    <ul>
+ *          <li>Application creates a new Shell and a second Browser inside that Shell</li>
+ *          <li>Application registers WindowListener's on that second Browser, such as VisibilityWindowListener</li>
+ *          <li>Application returns the second Browser as the host for the new window content</li>
+ *    </ul>
+ * </ul>
+ * 
+ * <p>Second Browser
+ * <ul>
+ *    <li>VisibilityWindowListener.show() notified</li>
+ *    <ul>
+ *          <li>Application sets navigation tool bar, status bar, menu bar and Shell size
+ *          <li>Application makes the Shell hosting the second Browser visible
+ *          <li>User now sees the new window
+ *    </ul> 
+ * </ul>
+ * 
+ * @see CloseWindowListener
+ * @see OpenWindowListener
+ * @see VisibilityWindowListener
+ * 
+ * @since 3.0
+ */
+public class WindowEvent : TypedEvent {
+
+    /** 
+     * Specifies whether the platform requires the user to provide a
+     * <code>Browser</code> to handle the new window.
+     * 
+     * @since 3.1
+     */
+    public bool required;
+
+    /** 
+     * <code>Browser</code> provided by the application.
+     */
+    public Browser browser;
+
+    /** 
+     * Requested location for the <code>Shell</code> hosting the <code>Browser</code>.
+     * It is <code>null</code> if no location has been requested.
+     */
+    public Point location;
+
+    /** 
+     * Requested <code>Browser</code> size. The client area of the <code>Shell</code> 
+     * hosting the <code>Browser</code> should be large enough to accommodate that size. 
+     * It is <code>null</code> if no size has been requested.
+     */
+    public Point size;
+
+    /**
+     * Specifies whether the <code>Shell</code> hosting the <code>Browser</code> should
+     * display an address bar.
+     * 
+     * @since 3.1
+     */
+    public bool addressBar;
+
+    /**
+     * Specifies whether the <code>Shell</code> hosting the <code>Browser</code> should
+     * display a menu bar.
+     * 
+     * @since 3.1
+     */
+    public bool menuBar;
+
+    /**
+     * Specifies whether the <code>Shell</code> hosting the <code>Browser</code> should
+     * display a status bar.
+     * 
+     * @since 3.1
+     */
+    public bool statusBar;
+
+    /**
+     * Specifies whether the <code>Shell</code> hosting the <code>Browser</code> should
+     * display a tool bar.
+     * 
+     * @since 3.1
+     */
+    public bool toolBar;
+
+    static final long serialVersionUID = 3617851997387174969L;
+
+    this (Widget w) {
+        super(w);
+    }
+
+    /**
+     * Returns a String containing a concise, human-readable
+     * description of the receiver.
+     *
+     * @return a String representation of the event
+     */
+    public String toString () {
+        String str = super.toString();
+        return str.substring(0, str.length() - 1) // remove trailing '}'
+        + " required=" + required + " browser=" + browser + " location=" + location + " size=" + size + " addressBar=" + addressBar + " menuBar=" + menuBar + " statusBar=" + statusBar + " toolBar=" + toolBar + "}";
+    }
+}