blob: 879abd6311f6fd45896c4cddde0273857b276643 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2019 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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;
}
@Override
public void close() {
browserAdapter.close();
}
@Override
public boolean isCloseSupported() {
return browserAdapter.isCloseSupported();
}
@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);
}
@Override
public boolean isSetLocationSupported() {
checkDefaultAdapter();
if (newBrowserAdapterId == null) {
return browserAdapter.isSetLocationSupported();
}
return browserAdapter.isSetLocationSupported()
|| newBrowserAdapter.isSetLocationSupported();
}
@Override
public boolean isSetSizeSupported() {
checkDefaultAdapter();
if (newBrowserAdapterId == null) {
return browserAdapter.isSetSizeSupported();
}
return browserAdapter.isSetSizeSupported()
|| newBrowserAdapter.isSetSizeSupported();
}
@Override
public void setLocation(int x, int y) {
checkDefaultAdapter();
browserAdapter.setLocation(x, y);
locationSet = true;
this.x = x;
this.y = y;
}
@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();
}
}
}
}