/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.ui.internal.browser; import org.eclipse.core.runtime.SafeRunner; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.util.SafeRunnable; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.ViewPart; import org.xmind.ui.browser.BrowserSupport; import org.xmind.ui.browser.IBrowser; import org.xmind.ui.browser.IBrowserSupport; import org.xmind.ui.browser.IBrowserViewer; import org.xmind.ui.browser.IBrowserViewerContainer; public class InternalBrowserView extends ViewPart implements IBrowserViewerContainer { private class OpenInExternalAction extends Action { /** * */ public OpenInExternalAction() { super(BrowserMessages.BrowserView_OpenInExternalBrowser_text, BrowserImages.getImageDescriptor(BrowserImages.BROWSER)); setToolTipText(BrowserMessages.BrowserView_OpenInExternalBrowser_toolTip); } /* * (non-Javadoc) * * @see org.eclipse.jface.action.Action#run() */ @Override public void run() { if (viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed()) return; IBrowser browser = BrowserSupport.getInstance().createBrowser( IBrowserSupport.AS_EXTERNAL); try { browser.openURL(viewer.getURL()); } catch (PartInitException e) { BrowserPlugin.log(e); } } } public static final String BROWSER_VIEW_ID = "org.xmind.ui.BrowserView"; //$NON-NLS-1$ //private static Map<String, Integer> numbers = new HashMap<String, Integer>(); private BrowserViewer viewer; private String clientId; public void setClientId(String clientId) { this.clientId = clientId; } public void createPartControl(Composite parent) { initActions(); viewer = new BrowserViewer(parent, SWT.NONE, this); } /** * */ private void initActions() { IActionBars actionBars = getViewSite().getActionBars(); OpenInExternalAction openInExternalAction = new OpenInExternalAction(); IMenuManager menu = actionBars.getMenuManager(); menu.add(openInExternalAction); menu.add(new Separator()); menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); IToolBarManager toolBar = actionBars.getToolBarManager(); toolBar.add(openInExternalAction); toolBar.add(new Separator()); toolBar.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } public void setFocus() { viewer.setFocus(); } public void openURL(String url) { if (viewer != null && !viewer.getControl().isDisposed()) { viewer.setURL(url); } } public BrowserViewer getViewer() { return viewer; } public Object getAdapter(Class adapter) { if (adapter == IBrowserViewer.class) return viewer; if (adapter == IBrowserViewerContainer.class) return this; return super.getAdapter(adapter); } public boolean close() { try { getSite().getPage().hideView(this); return true; } catch (Exception e) { return false; } } public IActionBars getActionBars() { return getViewSite().getActionBars(); } public String getClientId() { return clientId; } public void openInExternalBrowser(String url) { BrowserUtil.gotoUrl(url); } /* * (non-Javadoc) * * @see org.xmind.ui.browser.IBrowserViewerContainer#openNewBrowser() */ public Browser openNewBrowser() { final Browser[] ret = new Browser[1]; SafeRunner.run(new SafeRunnable() { public void run() throws Exception { IBrowser browser = BrowserSupport.getInstance().createBrowser( IBrowserSupport.AS_EDITOR, getClientId()); browser.openURL(""); //$NON-NLS-1$ if (browser instanceof InternalBrowser) { IWorkbenchPart part = ((InternalBrowser) browser).getPart(); if (part instanceof InternalBrowserEditor) { ret[0] = ((InternalBrowserEditor) part).getViewer() .getBrowser(); } } } }); return ret[0]; } // private String getNewSecondaryId() { // Integer num = numbers.get(getClientId()); // if (num == null) { // num = Integer.valueOf(1); // } else { // num = Integer.valueOf(num.intValue() + 1); // } // numbers.put(getClientId(), num); // return getClientId() + "-" + num.toString(); //$NON-NLS-1$ // } }