blob: 6b6b500c978ebf3ccdb08d19c43651de613fa341 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2008 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
*******************************************************************************/
package org.eclipse.swt.browser;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
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 final int [][] KeyTable = {
/* Keyboard and Mouse Masks */
{18, SWT.ALT},
{16, SWT.SHIFT},
{17, SWT.CONTROL},
{224, SWT.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, SWT.ARROW_LEFT},
{39, SWT.ARROW_RIGHT},
{38, SWT.ARROW_UP},
{40, SWT.ARROW_DOWN},
{45, SWT.INSERT},
{36, SWT.HOME},
{35, SWT.END},
{46, SWT.DEL},
{33, SWT.PAGE_UP},
{34, SWT.PAGE_DOWN},
/* Virtual and Ascii Keys */
{8, SWT.BS},
{13, SWT.CR},
{9, SWT.TAB},
{27, SWT.ESC},
{12, SWT.DEL},
/* Functions Keys */
{112, SWT.F1},
{113, SWT.F2},
{114, SWT.F3},
{115, SWT.F4},
{116, SWT.F5},
{117, SWT.F6},
{118, SWT.F7},
{119, SWT.F8},
{120, SWT.F9},
{121, SWT.F10},
{122, SWT.F11},
{123, SWT.F12},
{124, SWT.F13},
{125, SWT.F14},
{126, SWT.F15},
{127, 0},
{128, 0},
{129, 0},
{130, 0},
{131, 0},
{132, 0},
{133, 0},
{134, 0},
{135, 0},
/* Numeric Keypad Keys */
{96, SWT.KEYPAD_0},
{97, SWT.KEYPAD_1},
{98, SWT.KEYPAD_2},
{99, SWT.KEYPAD_3},
{100, SWT.KEYPAD_4},
{101, SWT.KEYPAD_5},
{102, SWT.KEYPAD_6},
{103, SWT.KEYPAD_7},
{104, SWT.KEYPAD_8},
{105, SWT.KEYPAD_9},
{14, SWT.KEYPAD_CR},
{107, SWT.KEYPAD_ADD},
{109, SWT.KEYPAD_SUBTRACT},
{106, SWT.KEYPAD_MULTIPLY},
{111, SWT.KEYPAD_DIVIDE},
{110, SWT.KEYPAD_DECIMAL},
/* Other keys */
{20, SWT.CAPS_LOCK},
{144, SWT.NUM_LOCK},
{145, SWT.SCROLL_LOCK},
{44, SWT.PRINT_SCREEN},
{6, SWT.HELP},
{19, SWT.PAUSE},
{3, SWT.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 boolean back ();
public static void clearSessions () {
if (NativeClearSessions != null) NativeClearSessions.run ();
if (MozillaClearSessions != null) MozillaClearSessions.run ();
}
public abstract void create (Composite parent, int style);
public abstract boolean execute (String script);
public abstract boolean forward ();
public abstract String getText ();
public abstract String getUrl ();
public Object getWebBrowser () {
return null;
}
public abstract boolean isBackEnabled ();
public boolean isFocusControl () {
return false;
}
public abstract boolean isForwardEnabled ();
public abstract void refresh ();
public void removeCloseWindowListener (CloseWindowListener listener) {
if (closeWindowListeners.length == 0) return;
int index = -1;
for (int i = 0; i < closeWindowListeners.length; i++) {
if (listener == closeWindowListeners[i]){
index = i;
break;
}
}
if (index == -1) return;
if (closeWindowListeners.length == 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 == 0) return;
int index = -1;
for (int i = 0; i < locationListeners.length; i++) {
if (listener == locationListeners[i]){
index = i;
break;
}
}
if (index == -1) return;
if (locationListeners.length == 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 == 0) return;
int index = -1;
for (int i = 0; i < openWindowListeners.length; i++) {
if (listener == openWindowListeners[i]){
index = i;
break;
}
}
if (index == -1) return;
if (openWindowListeners.length == 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 == 0) return;
int index = -1;
for (int i = 0; i < progressListeners.length; i++) {
if (listener == progressListeners[i]){
index = i;
break;
}
}
if (index == -1) return;
if (progressListeners.length == 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 == 0) return;
int index = -1;
for (int i = 0; i < statusTextListeners.length; i++) {
if (listener == statusTextListeners[i]){
index = i;
break;
}
}
if (index == -1) return;
if (statusTextListeners.length == 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 == 0) return;
int index = -1;
for (int i = 0; i < titleListeners.length; i++) {
if (listener == titleListeners[i]){
index = i;
break;
}
}
if (index == -1) return;
if (titleListeners.length == 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 == 0) return;
int index = -1;
for (int i = 0; i < visibilityWindowListeners.length; i++) {
if (listener == visibilityWindowListeners[i]){
index = i;
break;
}
}
if (index == -1) return;
if (visibilityWindowListeners.length == 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 boolean setText (String html);
public abstract boolean setUrl (String url, String postData, String[] headers);
public abstract void stop ();
int translateKey (int key) {
for (int i = 0; i < KeyTable.length; i++) {
if (KeyTable[i][0] == key) return KeyTable[i][1];
}
return 0;
}
}