blob: 55e9c8a8847d6e977ef2e73135fe13bae741628a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2015 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.help.internal.browser;
import org.eclipse.help.browser.*;
/**
* Wrapper for individual browsers contributed through extension point.
*/
public class CurrentBrowser implements IBrowser {
private IBrowser browserAdapter;
private String browserAdapterId;
/**
* new adapter selected in preferences but not yet shown
*/
private IBrowser newBrowserAdapter = null;
private String newBrowserAdapterId = null;
private boolean locationSet = false;
private boolean sizeSet = false;
private int x;
private int y;
private int width;
private int height;
boolean external;
public CurrentBrowser(IBrowser browserImpl, String browserAdapterId,
boolean externalBrowser) {
this.browserAdapter = browserImpl;
this.browserAdapterId = browserAdapterId;
this.external = externalBrowser;
}
/**
* @see org.eclipse.help.browser.IBrowser#close()
*/
@Override
public void close() {
browserAdapter.close();
}
/**
* @see org.eclipse.help.browser.IBrowser#isCloseSupported()
*/
@Override
public boolean isCloseSupported() {
return browserAdapter.isCloseSupported();
}
/**
* @see org.eclipse.help.browser.IBrowser#displayURL(java.lang.String)
*/
@Override
public void displayURL(String url) throws Exception {
checkDefaultAdapter();
if (newBrowserAdapter != null) {
browserAdapter.close();
browserAdapter = newBrowserAdapter;
newBrowserAdapter = null;
browserAdapterId = newBrowserAdapterId;
newBrowserAdapterId = null;
if (locationSet) {
browserAdapter.setLocation(x, y);
}
if (sizeSet) {
browserAdapter.setSize(width, height);
}
}
browserAdapter.displayURL(url);
}
/**
* @see org.eclipse.help.browser.IBrowser#isSetLocationSupported()
*/
@Override
public boolean isSetLocationSupported() {
checkDefaultAdapter();
if (newBrowserAdapterId == null) {
return browserAdapter.isSetLocationSupported();
}
return browserAdapter.isSetLocationSupported()
|| newBrowserAdapter.isSetLocationSupported();
}
/**
* @see org.eclipse.help.browser.IBrowser#isSetSizeSupported()
*/
@Override
public boolean isSetSizeSupported() {
checkDefaultAdapter();
if (newBrowserAdapterId == null) {
return browserAdapter.isSetSizeSupported();
}
return browserAdapter.isSetSizeSupported()
|| newBrowserAdapter.isSetSizeSupported();
}
/**
* @see org.eclipse.help.browser.IBrowser#setLocation(int, int)
*/
@Override
public void setLocation(int x, int y) {
checkDefaultAdapter();
browserAdapter.setLocation(x, y);
locationSet = true;
this.x = x;
this.y = y;
}
/**
* @see org.eclipse.help.browser.IBrowser#setSize(int, int)
*/
@Override
public void setSize(int width, int height) {
checkDefaultAdapter();
browserAdapter.setSize(width, height);
sizeSet = true;
this.width = width;
this.height = height;
}
/*
* Checks wheter default adapter has changed. If yes, sets the
* newBrowserAdapterId field
*/
private void checkDefaultAdapter() {
if (external) {
if (browserAdapterId != BrowserManager.getInstance()
.getCurrentBrowserID()) {
newBrowserAdapter = BrowserManager.getInstance().createBrowser(
true);
newBrowserAdapterId = BrowserManager.getInstance()
.getCurrentBrowserID();
}
} else {
if (browserAdapterId != BrowserManager.getInstance()
.getCurrentInternalBrowserID()) {
newBrowserAdapter = BrowserManager.getInstance().createBrowser(
false);
newBrowserAdapterId = BrowserManager.getInstance()
.getCurrentInternalBrowserID();
}
}
}
}