package com.mobilesorcery.sdk.update.internal; import java.net.URL; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; // Just because IWebBrowserSupport is useless for our purposes. public class RegistrationWebBrowserView extends ViewPart { static final String VIEW_ID = "com.mobilesorcery.ui.registration.view"; private Browser browser; private URL initialURL; private RegistrationPartListener currentListener; private boolean active; public void init(IEditorSite site) throws PartInitException { super.setSite(site); setPartName("Registration"); active = true; } public void createPartControl(Composite parent) { browser = new Browser(parent, SWT.NONE); // If the user opens manually; we'd like to have // a reasonable default browser.setUrl(DefaultUpdater2.getInitialURL()); } public Object getAdapter(Class adapter) { if (Browser.class.equals(adapter)) { return browser; } return null; } public void setFocus() { } public void dispose() { active = false; super.dispose(); } /** * Opens the registration view with a set initial URL; if * a view is already open, this method will have no effect. * @param whereToGo * @param reopenIntro2 */ public static RegistrationWebBrowserView open(URL whereToGo, boolean reopenIntroHint) throws PartInitException { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IViewPart view = page.showView(VIEW_ID); if (!(view instanceof RegistrationWebBrowserView)) { throw new PartInitException("Excepted view to be mosync registration view"); } RegistrationWebBrowserView registrationView = (RegistrationWebBrowserView) view; registrationView.registerListener(reopenIntroHint); if (registrationView.initialURL == null && !registrationView.active) { setInitialURL(view, whereToGo); } return registrationView; } private void registerListener(boolean reopenIntro) { RegistrationPartListener listener = new RegistrationPartListener(this, reopenIntro); if (currentListener == null) { currentListener = listener; getSite().getPage().addPartListener(listener); getSite().getWorkbenchWindow().addPerspectiveListener(listener); } currentListener.setReopenIntro(reopenIntro); } public static Browser getBrowser(IViewPart view) { return (Browser) view.getAdapter(Browser.class); } static void setInitialURL(IWorkbenchPart part, URL initialURL) { if (initialURL != null && part instanceof RegistrationWebBrowserView) { RegistrationWebBrowserView registrationView = (RegistrationWebBrowserView) part; registrationView.initialURL = initialURL; registrationView.browser.setUrl(initialURL.toExternalForm()); } } public static URL getInitialURL(IWorkbenchPart part) { if (part instanceof RegistrationWebBrowserView) { return ((RegistrationWebBrowserView) part).initialURL; } return null; } public boolean isActive() { return active; } }