diff dwt/browser/WebBrowser.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 f565d3a95c0a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dwt/browser/WebBrowser.d	Sat Aug 09 17:00:02 2008 +0200
@@ -0,0 +1,432 @@
+/*******************************************************************************
+ * 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.WebBrowser;
+
+import dwt.DWT;
+import dwt.browser.Browser;
+import dwt.browser.CloseWindowListener;
+import dwt.browser.LocationListener;
+import dwt.browser.OpenWindowListener;
+import dwt.browser.ProgressListener;
+import dwt.browser.StatusTextListener;
+import dwt.browser.TitleListener;
+import dwt.browser.VisibilityWindowListener;
+import dwt.dwthelper.utils;
+import dwt.dwthelper.Runnable;
+import dwt.dwthelper.System;
+import dwt.widgets.Composite;
+
+abstract class WebBrowser {
+    Browser browser;
+    CloseWindowListener[] closeWindowListeners = new CloseWindowListener[0];
+    LocationListener[] locationListeners = new LocationListener[0];
+    OpenWindowListener[] openWindowListeners = new OpenWindowListener[0];
+    ProgressListener[] progressListeners = new ProgressListener[0];
+    StatusTextListener[] statusTextListeners = new StatusTextListener[0];
+    TitleListener[] titleListeners = new TitleListener[0];
+    VisibilityWindowListener[] visibilityWindowListeners = new VisibilityWindowListener[0];
+
+    static Runnable MozillaClearSessions;
+    static Runnable NativeClearSessions;
+
+    /* Key Mappings */
+    static const int[][] KeyTable = [
+        /* Keyboard and Mouse Masks */
+        [18, DWT.ALT],
+        [16, DWT.SHIFT],
+        [17, DWT.CONTROL],
+        [224, DWT.COMMAND],
+
+        /* Literal Keys */
+        [65, 'a'],
+        [66, 'b'],
+        [67, 'c'],
+        [68, 'd'],
+        [69, 'e'],
+        [70, 'f'],
+        [71, 'g'],
+        [72, 'h'],
+        [73, 'i'],
+        [74, 'j'],
+        [75, 'k'],
+        [76, 'l'],
+        [77, 'm'],
+        [78, 'n'],
+        [79, 'o'],
+        [80, 'p'],
+        [81, 'q'],
+        [82, 'r'],
+        [83, 's'],
+        [84, 't'],
+        [85, 'u'],
+        [86, 'v'],
+        [87, 'w'],
+        [88, 'x'],
+        [89, 'y'],
+        [90, 'z'],
+        [48, '0'],
+        [49, '1'],
+        [50, '2'],
+        [51, '3'],
+        [52, '4'],
+        [53, '5'],
+        [54, '6'],
+        [55, '7'],
+        [56, '8'],
+        [57, '9'],
+        [32, ' '],
+        [59, ';'],
+        [61, '='],
+        [188, ','],
+        [190, '.'],
+        [191, '/'],
+        [219, '['],
+        [221, ']'],
+        [222, '\''],
+        [192, '`'],
+        [220, '\\'],
+        [108, '|'],
+
+        /* Non-Numeric Keypad Keys */
+        [37, DWT.ARROW_LEFT],
+        [39, DWT.ARROW_RIGHT],
+        [38, DWT.ARROW_UP],
+        [40, DWT.ARROW_DOWN],
+        [45, DWT.INSERT],
+        [36, DWT.HOME],
+        [35, DWT.END],
+        [46, DWT.DEL],
+        [33, DWT.PAGE_UP],
+        [34, DWT.PAGE_DOWN],
+
+        /* Virtual and Ascii Keys */
+        [8, DWT.BS],
+        [13, DWT.CR],
+        [9, DWT.TAB],
+        [27, DWT.ESC],
+        [12, DWT.DEL],
+
+        /* Functions Keys */
+        [112, DWT.F1],
+        [113, DWT.F2],
+        [114, DWT.F3],
+        [115, DWT.F4],
+        [116, DWT.F5],
+        [117, DWT.F6],
+        [118, DWT.F7],
+        [119, DWT.F8],
+        [120, DWT.F9],
+        [121, DWT.F10],
+        [122, DWT.F11],
+        [123, DWT.F12],
+        [124, DWT.F13],
+        [125, DWT.F14],
+        [126, DWT.F15],
+        [127, 0],
+        [128, 0],
+        [129, 0],
+        [130, 0],
+        [131, 0],
+        [132, 0],
+        [133, 0],
+        [134, 0],
+        [135, 0],
+
+        /* Numeric Keypad Keys */
+        [96, DWT.KEYPAD_0],
+        [97, DWT.KEYPAD_1],
+        [98, DWT.KEYPAD_2],
+        [99, DWT.KEYPAD_3],
+        [100, DWT.KEYPAD_4],
+        [101, DWT.KEYPAD_5],
+        [102, DWT.KEYPAD_6],
+        [103, DWT.KEYPAD_7],
+        [104, DWT.KEYPAD_8],
+        [105, DWT.KEYPAD_9],
+        [14, DWT.KEYPAD_CR],
+        [107, DWT.KEYPAD_ADD],
+        [109, DWT.KEYPAD_SUBTRACT],
+        [106, DWT.KEYPAD_MULTIPLY],
+        [111, DWT.KEYPAD_DIVIDE],
+        [110, DWT.KEYPAD_DECIMAL],
+
+        /* Other keys */
+        [20, DWT.CAPS_LOCK],
+        [144, DWT.NUM_LOCK],
+        [145, DWT.SCROLL_LOCK],
+        [44, DWT.PRINT_SCREEN],
+        [6, DWT.HELP],
+        [19, DWT.PAUSE],
+        [3, DWT.BREAK],
+
+        /* Safari-specific */
+        [186, ';'],
+        [187, '='],
+        [189, '-']
+    , ];
+
+    public void addCloseWindowListener (CloseWindowListener listener) {
+        CloseWindowListener[] newCloseWindowListeners = new CloseWindowListener[closeWindowListeners.length + 1];
+        System.arraycopy(closeWindowListeners, 0, newCloseWindowListeners, 0, closeWindowListeners.length);
+        closeWindowListeners = newCloseWindowListeners;
+        closeWindowListeners[closeWindowListeners.length - 1] = listener;
+    }
+
+    public void addLocationListener (LocationListener listener) {
+        LocationListener[] newLocationListeners = new LocationListener[locationListeners.length + 1];
+        System.arraycopy(locationListeners, 0, newLocationListeners, 0, locationListeners.length);
+        locationListeners = newLocationListeners;
+        locationListeners[locationListeners.length - 1] = listener;
+    }
+
+    public void addOpenWindowListener (OpenWindowListener listener) {
+        OpenWindowListener[] newOpenWindowListeners = new OpenWindowListener[openWindowListeners.length + 1];
+        System.arraycopy(openWindowListeners, 0, newOpenWindowListeners, 0, openWindowListeners.length);
+        openWindowListeners = newOpenWindowListeners;
+        openWindowListeners[openWindowListeners.length - 1] = listener;
+    }
+
+    public void addProgressListener (ProgressListener listener) {
+        ProgressListener[] newProgressListeners = new ProgressListener[progressListeners.length + 1];
+        System.arraycopy(progressListeners, 0, newProgressListeners, 0, progressListeners.length);
+        progressListeners = newProgressListeners;
+        progressListeners[progressListeners.length - 1] = listener;
+    }
+
+    public void addStatusTextListener (StatusTextListener listener) {
+        StatusTextListener[] newStatusTextListeners = new StatusTextListener[statusTextListeners.length + 1];
+        System.arraycopy(statusTextListeners, 0, newStatusTextListeners, 0, statusTextListeners.length);
+        statusTextListeners = newStatusTextListeners;
+        statusTextListeners[statusTextListeners.length - 1] = listener;
+    }
+
+    public void addTitleListener (TitleListener listener) {
+        TitleListener[] newTitleListeners = new TitleListener[titleListeners.length + 1];
+        System.arraycopy(titleListeners, 0, newTitleListeners, 0, titleListeners.length);
+        titleListeners = newTitleListeners;
+        titleListeners[titleListeners.length - 1] = listener;
+    }
+
+    public void addVisibilityWindowListener (VisibilityWindowListener listener) {
+        VisibilityWindowListener[] newVisibilityWindowListeners = new VisibilityWindowListener[visibilityWindowListeners.length + 1];
+        System.arraycopy(visibilityWindowListeners, 0, newVisibilityWindowListeners, 0, visibilityWindowListeners.length);
+        visibilityWindowListeners = newVisibilityWindowListeners;
+        visibilityWindowListeners[visibilityWindowListeners.length - 1] = listener;
+    }
+
+    public abstract bool back ();
+
+    public static void clearSessions () {
+        if (NativeClearSessions !is null)
+            NativeClearSessions.run();
+        if (MozillaClearSessions !is null)
+            MozillaClearSessions.run();
+    }
+
+    public abstract void create (Composite parent, int style);
+
+    public abstract bool execute (String script);
+
+    public abstract bool forward ();
+
+    public abstract String getText ();
+
+    public abstract String getUrl ();
+
+    public Object getWebBrowser () {
+        return null;
+    }
+
+    public abstract bool isBackEnabled ();
+
+    public bool isFocusControl () {
+        return false;
+    }
+
+    public abstract bool isForwardEnabled ();
+
+    public abstract void refresh ();
+
+    public void removeCloseWindowListener (CloseWindowListener listener) {
+        if (closeWindowListeners.length is 0)
+            return;
+        int index = -1;
+        for (int i = 0; i < closeWindowListeners.length; i++) {
+            if (listener is closeWindowListeners[i]) {
+                index = i;
+                break;
+            }
+        }
+        if (index is -1)
+            return;
+        if (closeWindowListeners.length is 1) {
+            closeWindowListeners = new CloseWindowListener[0];
+            return;
+        }
+        CloseWindowListener[] newCloseWindowListeners = new CloseWindowListener[closeWindowListeners.length - 1];
+        System.arraycopy(closeWindowListeners, 0, newCloseWindowListeners, 0, index);
+        System.arraycopy(closeWindowListeners, index + 1, newCloseWindowListeners, index, closeWindowListeners.length - index - 1);
+        closeWindowListeners = newCloseWindowListeners;
+    }
+
+    public void removeLocationListener (LocationListener listener) {
+        if (locationListeners.length is 0)
+            return;
+        int index = -1;
+        for (int i = 0; i < locationListeners.length; i++) {
+            if (listener is locationListeners[i]) {
+                index = i;
+                break;
+            }
+        }
+        if (index is -1)
+            return;
+        if (locationListeners.length is 1) {
+            locationListeners = new LocationListener[0];
+            return;
+        }
+        LocationListener[] newLocationListeners = new LocationListener[locationListeners.length - 1];
+        System.arraycopy(locationListeners, 0, newLocationListeners, 0, index);
+        System.arraycopy(locationListeners, index + 1, newLocationListeners, index, locationListeners.length - index - 1);
+        locationListeners = newLocationListeners;
+    }
+
+    public void removeOpenWindowListener (OpenWindowListener listener) {
+        if (openWindowListeners.length is 0)
+            return;
+        int index = -1;
+        for (int i = 0; i < openWindowListeners.length; i++) {
+            if (listener is openWindowListeners[i]) {
+                index = i;
+                break;
+            }
+        }
+        if (index is -1)
+            return;
+        if (openWindowListeners.length is 1) {
+            openWindowListeners = new OpenWindowListener[0];
+            return;
+        }
+        OpenWindowListener[] newOpenWindowListeners = new OpenWindowListener[openWindowListeners.length - 1];
+        System.arraycopy(openWindowListeners, 0, newOpenWindowListeners, 0, index);
+        System.arraycopy(openWindowListeners, index + 1, newOpenWindowListeners, index, openWindowListeners.length - index - 1);
+        openWindowListeners = newOpenWindowListeners;
+    }
+
+    public void removeProgressListener (ProgressListener listener) {
+        if (progressListeners.length is 0)
+            return;
+        int index = -1;
+        for (int i = 0; i < progressListeners.length; i++) {
+            if (listener is progressListeners[i]) {
+                index = i;
+                break;
+            }
+        }
+        if (index is -1)
+            return;
+        if (progressListeners.length is 1) {
+            progressListeners = new ProgressListener[0];
+            return;
+        }
+        ProgressListener[] newProgressListeners = new ProgressListener[progressListeners.length - 1];
+        System.arraycopy(progressListeners, 0, newProgressListeners, 0, index);
+        System.arraycopy(progressListeners, index + 1, newProgressListeners, index, progressListeners.length - index - 1);
+        progressListeners = newProgressListeners;
+    }
+
+    public void removeStatusTextListener (StatusTextListener listener) {
+        if (statusTextListeners.length is 0)
+            return;
+        int index = -1;
+        for (int i = 0; i < statusTextListeners.length; i++) {
+            if (listener is statusTextListeners[i]) {
+                index = i;
+                break;
+            }
+        }
+        if (index is -1)
+            return;
+        if (statusTextListeners.length is 1) {
+            statusTextListeners = new StatusTextListener[0];
+            return;
+        }
+        StatusTextListener[] newStatusTextListeners = new StatusTextListener[statusTextListeners.length - 1];
+        System.arraycopy(statusTextListeners, 0, newStatusTextListeners, 0, index);
+        System.arraycopy(statusTextListeners, index + 1, newStatusTextListeners, index, statusTextListeners.length - index - 1);
+        statusTextListeners = newStatusTextListeners;
+    }
+
+    public void removeTitleListener (TitleListener listener) {
+        if (titleListeners.length is 0)
+            return;
+        int index = -1;
+        for (int i = 0; i < titleListeners.length; i++) {
+            if (listener is titleListeners[i]) {
+                index = i;
+                break;
+            }
+        }
+        if (index is -1)
+            return;
+        if (titleListeners.length is 1) {
+            titleListeners = new TitleListener[0];
+            return;
+        }
+        TitleListener[] newTitleListeners = new TitleListener[titleListeners.length - 1];
+        System.arraycopy(titleListeners, 0, newTitleListeners, 0, index);
+        System.arraycopy(titleListeners, index + 1, newTitleListeners, index, titleListeners.length - index - 1);
+        titleListeners = newTitleListeners;
+    }
+
+    public void removeVisibilityWindowListener (VisibilityWindowListener listener) {
+        if (visibilityWindowListeners.length is 0)
+            return;
+        int index = -1;
+        for (int i = 0; i < visibilityWindowListeners.length; i++) {
+            if (listener is visibilityWindowListeners[i]) {
+                index = i;
+                break;
+            }
+        }
+        if (index is -1)
+            return;
+        if (visibilityWindowListeners.length is 1) {
+            visibilityWindowListeners = new VisibilityWindowListener[0];
+            return;
+        }
+        VisibilityWindowListener[] newVisibilityWindowListeners = new VisibilityWindowListener[visibilityWindowListeners.length - 1];
+        System.arraycopy(visibilityWindowListeners, 0, newVisibilityWindowListeners, 0, index);
+        System.arraycopy(visibilityWindowListeners, index + 1, newVisibilityWindowListeners, index, visibilityWindowListeners.length - index - 1);
+        visibilityWindowListeners = newVisibilityWindowListeners;
+    }
+
+    public void setBrowser (Browser browser) {
+        this.browser = browser;
+    }
+
+    public abstract bool setText (String html);
+
+    public abstract bool setUrl (String url);
+
+    public abstract void stop ();
+
+    int translateKey (int key) {
+        for (int i = 0; i < KeyTable.length; i++) {
+            if (KeyTable[i][0] is key)
+                return KeyTable[i][1];
+        }
+        return 0;
+    }
+}