com.windowtester.eclipse.ui.updater.UpdateDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.windowtester.eclipse.ui.updater.UpdateDialog.java

Source

/*******************************************************************************
 *  Copyright (c) 2012 Google, Inc.
 *  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:
 *  Google, Inc. - initial API and implementation
 *******************************************************************************/
package com.windowtester.eclipse.ui.updater;

import java.util.Map;

import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.FormColors;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.events.HyperlinkAdapter;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.widgets.FormText;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
import org.eclipse.ui.help.IWorkbenchHelpSystem;

/**
 * Displays product update details.
 * 
 * @author Phil Quitslund
 *
 */
public class UpdateDialog extends FormDialog {

    private Shell shell;
    private final String shellTitle;
    private final String updateDescription;
    private final Map<String, String> hrefToHelpResourceMap;

    private Point initialSize = null;

    /**
     * Create an update dialog.
     * @param shellTitle - the title 
     * @param updateDescription - a description of the update (NOTE: this should contain at least one hyperlink!)
     * @param contextId - the help context id identifying the help context to open when the hyperlink is clicked
     * @param hrefToHelpResourceMap - a mapping of hrefs to associated help resources
     */
    public UpdateDialog(String shellTitle, String updateDescription, Map<String, String> hrefToHelpResourceMap) {
        super(getParent());
        this.shellTitle = shellTitle;
        this.updateDescription = updateDescription;
        this.hrefToHelpResourceMap = hrefToHelpResourceMap;
    }

    public UpdateDialog setSize(Point initialSize) {
        this.initialSize = initialSize;
        return this;
    }

    private static Shell getParent() {
        Shell parent = getActiveWorkbenchShell();
        if (parent != null)
            return parent;
        return new Shell(Display.getDefault());
    }

    public static IWorkspace getWorkspace() {
        return ResourcesPlugin.getWorkspace();
    }

    public static IWorkbench getWorkbench() {
        return PlatformUI.getWorkbench();
    }

    public static IWorkbenchWindow getActiveWorkbenchWindow() {
        return getWorkbench().getActiveWorkbenchWindow();
    }

    public static Shell getActiveWorkbenchShell() {
        IWorkbenchWindow window = getActiveWorkbenchWindow();
        if (window != null) {
            return window.getShell();
        }
        return null;
    }

    @Override
    protected void configureShell(Shell shell) {
        this.shell = shell;
        super.configureShell(shell);
        shell.setText(shellTitle);
        //       PlatformUI.getWorkbench().getHelpSystem().setHelp(shell,contextId);
    }

    @Override
    public boolean isHelpAvailable() {
        return false; //don't draw a help button
    }

    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        // create OK 
        createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
    }

    @Override
    protected void initializeBounds() {
        super.initializeBounds();
        if (initialSize != null)
            shell.setSize(initialSize);
    }

    //   private void helpPressed() {
    //       if (getShell() != null) {
    ////          Control c = getShell().getDisplay().getFocusControl();
    ////          while (c != null) {
    ////             if (c.isListening(SWT.Help)) {
    ////                c.notifyListeners(SWT.Help, new Event());
    ////                break;
    ////             }
    ////             c = c.getParent();
    ////          }
    //          
    //          IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
    //          //works
    ////          helpSystem.displayHelp("com.windowtester.eclipse.help.api_migration");
    //          //pops up a separate info center (not desired)
    //          helpSystem.displayHelpResource("/com.windowtester.eclipse.help/html/reference/API%20Migration.html");
    //       }
    //   }

    @SuppressWarnings("deprecation")
    @Override
    protected void createFormContent(IManagedForm mform) {
        ScrolledForm form = mform.getForm();
        Composite body = form.getBody();

        FormToolkit toolkit = mform.getToolkit();
        TableWrapLayout layout = new TableWrapLayout();
        layout.numColumns = 2;
        layout.horizontalSpacing = 15;
        layout.topMargin = 10;

        Image image = getImage();
        Label imageLabel = new Label(body, SWT.NULL);
        imageLabel.setImage(image);
        imageLabel.setBackground(form.getBackground());

        FormText formText = toolkit.createFormText(body, true);

        body.setLayout(layout);
        formText.setText(getFormText(), true, true);
        formText.addHyperlinkListener(new HyperlinkAdapter() {
            public void linkActivated(HyperlinkEvent e) {
                hrefPressed(e.getHref());
                //            helpPressed();
            }
        });
        formText.setColor("header", toolkit.getColors().getColor(FormColors.TITLE));
        formText.setFont("header", JFaceResources.getHeaderFont());
    }

    protected void hrefPressed(Object href) {
        IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
        String res = mapHrefToHelpResource(href);
        if (res == null)
            return;
        helpSystem.displayHelpResource(res);
    }

    protected String mapHrefToHelpResource(Object href) {
        return hrefToHelpResourceMap.get(href);
    }

    @Override
    protected int getShellStyle() {
        return super.getShellStyle() | SWT.RESIZE;
    }

    public final String getFormText() {
        StringBuffer buffer = new StringBuffer();
        buffer.append("<form>"); //$NON-NLS-1$
        //header experiment      
        //      buffer.append("<p><span color=\"header\" font=\"header\">"+
        //         "API Migration</span></p>");      
        //      buffer.append("<p>");
        buffer.append(updateDescription);
        //      buffer.append("</p>");
        buffer.append("</form>"); //$NON-NLS-1$
        return buffer.toString();
    }

    protected Image getImage() {
        return getSWTImage(SWT.ICON_INFORMATION);
    }

    private Image getSWTImage(final int imageID) {
        Shell shell = getShell();
        final Display display;
        if (shell == null || shell.isDisposed()) {
            shell = getParentShell();
        }
        if (shell == null || shell.isDisposed()) {
            display = Display.getCurrent();
        } else {
            display = shell.getDisplay();
        }

        final Image[] image = new Image[1];
        display.syncExec(new Runnable() {
            public void run() {
                image[0] = display.getSystemImage(imageID);
            }
        });

        return image[0];
    }

}