Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2000, 2011 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.ui.internal.views;
 
 import java.net.URL;
 
 import  org.eclipse.swt.SWT;
 import  org.eclipse.swt.browser.Browser;
 import  org.eclipse.swt.browser.LocationEvent;
 import  org.eclipse.swt.browser.LocationListener;
 import  org.eclipse.swt.browser.OpenWindowListener;
 import  org.eclipse.swt.browser.ProgressEvent;
 import  org.eclipse.swt.browser.ProgressListener;
 import  org.eclipse.swt.browser.StatusTextEvent;
 import  org.eclipse.swt.browser.StatusTextListener;
 import  org.eclipse.swt.browser.WindowEvent;
 import  org.eclipse.swt.custom.BusyIndicator;
 import  org.eclipse.swt.widgets.Composite;
 import  org.eclipse.swt.widgets.Control;
 
 public class BrowserPart extends AbstractFormPart implements IHelpPart {
 	private final static String QUERY = "BrowserPartQuery:"//$NON-NLS-1$
 	private final static String HIGHLIGHT_ON = "highlight-on"//$NON-NLS-1$
 	private final static String HELP_VIEW_SCALE = "help_view_scale"//$NON-NLS-1$
     private final static String EMPTY_PAGE = "<html><head></head><body></body></html>"//$NON-NLS-1$
     
 
 	private Browser browser;
 
 	private String id;
 
 	private int lastProgress = -1;
 
 	private static final int SCALE_MAX = 250;
 	
 	private static final int SCALE_MIN = 50;
 	
 	private static final int SCALE_INCREMENT = 10;
 	
 	private int fontScalePercentage = 100;
 
 	private String url;
 
 
 	private Action syncTocAction;
 	
 
 	private Action bookmarkAction;
 
 	private Action printAction;
 	
 	private Action magnifyAction;
 	
 	private Action reduceAction;
 
 	private String statusURL;
 
 	private String title;
 
 	public BrowserPart(final Composite parentFormToolkit toolkit,
 			final IToolBarManager tbmIMenuManager menuManager) {
		 = new Browser(parent, SWT.NULL);
		.addLocationListener(new LocationListener() {
			public void changing(LocationEvent event) {
				if (redirectLink(event.location))
					event.doit = false;
				if (!event.doit && event.location != null
						&& event.location.startsWith("https://")) { //$NON-NLS-1$
					try {
						BaseHelpSystem.getHelpBrowser(true).displayURL(
								event.location);
catch (Exception exc) {
					}
				}
			}
			public void changed(LocationEvent event) {
				String url = event.location;
				boolean isResult = url.indexOf("resultof")!=-1; //$NON-NLS-1$
				BrowserPart.this. = url;
			}
		});
		.addProgressListener(new ProgressListener() {
			public void changed(ProgressEvent e) {
				if (e.current == e.total)
					return;
				IProgressMonitor monitor = slm != null ? slm
						.getProgressMonitor() : null;
				if ( == -1) {
					if (monitor != null) {
						monitor.beginTask(""e.total); //$NON-NLS-1$
					}
else if (monitor != null && monitor.isCanceled()) {
					.stop();
					return;
				}
				if (monitor != null)
					monitor.worked(e.current - );
				 = e.current;
			}
			public void completed(ProgressEvent e) {
				IProgressMonitor monitor = slm != null ? slm
						.getProgressMonitor() : null;
				if (monitor != null) {
					slm.setCancelEnabled(false);
					monitor.done();
				}
				if ( != 100) {
				    rescale();
				}
				String value = executeQuery("document.title"); //$NON-NLS-1$
				BrowserPart.this. = value != null ? value : "N/A"//$NON-NLS-1$
			}
		});
		.addStatusTextListener(new StatusTextListener() {
			public void changed(StatusTextEvent event) {
				if (processQuery(event.text))
					return;
				if (statusLine != null)
					statusLine.setMessage(event.text);
				if (event.text.indexOf("://") != -1) //$NON-NLS-1$
					 = event.text;
			}
		});
		.addOpenWindowListener(new OpenWindowListener() {
			public void open(WindowEvent event) {
				if ( != null) {
					try {
						String relativeURL = BaseHelpSystem.unresolve(new URL(
						if (BrowserPart.this..isHelpResource(relativeURL)) {
									.showExternalURL(relativeURL);
							event.required = true;
						}
catch (MalformedURLException e) {
						HelpUIPlugin.logError("Malformed URL: " + e); //$NON-NLS-1$
					}
				}
			}
		});
		contributeToMenu(menuManager);
	}
	private String executeQuery(String domValue) {
		return (String).evaluate("return " + domValue + ';'); //$NON-NLS-1$
	}
	private boolean processQuery(String text) {
		if (text.startsWith()) {
			.setData("query"text.substring(.length())); //$NON-NLS-1$
			return true;
		}
		return false;
	}
	private void contributeToToolBar(IToolBarManager tbm) {
		boolean highlight = Platform.getPreferencesService().getBoolean(.truenull);
			public void run() {
				BusyIndicator.showWhile(.getDisplay(), new Runnable() {
					public void run() {
						try {
							.showExternalURL(BaseHelpSystem
									.unresolve(new URL()));
catch (MalformedURLException e) {
							HelpUIPlugin.logError("Malformed URL: " + e); //$NON-NLS-1$
						}
					}
				});
			}
		};
		 = new Action() {
			public void run() {
			}
		};
		 = new Action() {
			public void run() {
				String href = LinkUtil.stripParams(BaseHelpSystem.unresolve());
				BaseHelpSystem.getBookmarkManager().addBookmark(href);
			}
		};
		 = new Action() {
			public void run() {
				IScopeContext instanceScope = .
				if (.getUrl().indexOf("resultof")!=-1) .execute("setHighlight(" +.isChecked()+");"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
			}
		};
			public void run() {
			}
		};
		tbm.insertBefore("back"); //$NON-NLS-1$
		tbm.insertBefore("back"); //$NON-NLS-1$
		tbm.insertBefore("back"); //$NON-NLS-1$
		tbm.insertBefore("back"); //$NON-NLS-1$
		tbm.insertBefore("back"); //$NON-NLS-1$
		tbm.insertBefore("back"new Separator()); //$NON-NLS-1$
	}
	private void contributeToMenu(IMenuManager menuManager) {
		if (FontUtils.canRescaleHelpView()) {
					, 100, null);
			if (menuManager != null) {
			    addMenuActions(menuManager); 
			}
		}
	}
	private void addMenuActions(IMenuManager menuManager) {
		 = new Action() {
			public void run() {
			}
		};
		 = new Action() {
			public void run() {
			}
		};
		menuManager.add(new Separator());
		menuManager.add();
		menuManager.add();
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.help.ui.internal.views.IHelpPart#init(org.eclipse.help.ui.internal.views.NewReusableHelpPart)
	 */
	public void init(ReusableHelpPart parentString idIMemento memento) {
		this. = parent;
		this. = id;
		if (memento != null) {
			String href = memento.getString("BrowserPart.url"); //$NON-NLS-1$
			if (href != null)
				showURL(BaseHelpSystem.resolve(href"/help/ntopic").toString()); //$NON-NLS-1$
		}
	}
	public String getId() {
		return ;
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.help.ui.internal.views.IHelpPart#getControl()
	 */
	public Control getControl() {
		return ;
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.help.ui.internal.views.IHelpPart#setVisible(boolean)
	 */
	public void setVisible(boolean visible) {
		if ( != null) {
			.setVisible(visible);
		}
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.ui.forms.IFormPart#setFocus()
	 */
	public void setFocus() {
		if ( != null)
			.setFocus();
	}
	public void showURL(String url) {
		if ( != null && url != null) {
			.setUrl(url);
		}
	}
	public void clearBrowser() {
		if ( != null) {
		}
	}
	public void stop() {
		if ( != null && !.isDisposed()) {
			.stop();
		}
	}
	private void doPrint() {
		.execute("window.print();"); //$NON-NLS-1$
	}
	private void doSyncToc() {
		String href = BaseHelpSystem.unresolve(this.);
		int ix = href.indexOf("?resultof="); //$NON-NLS-1$
		if (ix >= 0) {
			href = href.substring(0, ix);
		}
		if (part != null) {
			part.selectReveal(href);
		}
	}
	private void updateSyncTocAction() {
		String href = BaseHelpSystem.unresolve(this.);
	}
	private boolean redirectLink(final String url) {
		if (url.indexOf("/topic/") != -1) { //$NON-NLS-1$
			if (url.indexOf("noframes") == -1) { //$NON-NLS-1$
				return true;
			}
else if (url.indexOf("livehelp/?pluginID=")>0) { //$NON-NLS-1$
			return true;
else if (url.indexOf("helpview:") == 0) { //$NON-NLS-1$
			HelpviewProtocol.handleProtocolCall(url);
			return true;
		}
		return false;
	}
	private void processLiveAction(String url) {
		if (!Platform.getPreferencesService().getBoolean(."activeHelp"falsenull)) { //$NON-NLS-1$
			return;
		}
		String query = null;
		try {
			URL u = new URL(url);
			query = u.getQuery();
catch (MalformedURLException mue) {
		}
		if (query == null)
			return;
		StringTokenizer st = new StringTokenizer(query"=&"); //$NON-NLS-1$
		if (st.countTokens() < 6) {
			return;
		}
		String pluginId = URLCoder.decode(st.nextToken());
		String className = URLCoder.decode(st.nextToken());
		String arg = URLCoder.decode(st.nextToken());
		if (pluginId == null || className == null || arg == null)
			return;
		BaseHelpSystem.runLiveHelp(pluginIdclassNamearg);
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.help.ui.internal.views.IHelpPart#fillContextMenu(org.eclipse.jface.action.IMenuManager)
	 */
	public boolean fillContextMenu(IMenuManager manager) {
		return false;
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.help.ui.internal.views.IHelpPart#hasFocusControl(org.eclipse.swt.widgets.Control)
	 */
	public boolean hasFocusControl(Control control) {
		return .equals(control);
	}
			return ;
		return null;
	}
	private void enableButtons() {
		if ( != null) {
		}
	}
	private void doMagnify(int percent) {
		 += percent;
		IScopeContext instanceScope = .
		try {
			prefs.flush();
catch (BackingStoreException e) {
		}
	}
	public void rescale() {
	}
	public void toggleRoleFilter() {
	}
	public void refilter() {
		showURL(this.);
	}
	public void saveState(IMemento memento) {
		if ( != null) {
			String href = BaseHelpSystem.unresolve();
			memento.putString("BrowserPart.url"href); //$NON-NLS-1$
		}
	}
New to GrepCode? Check out our FAQ X