com.nokia.carbide.internal.updater.ui.ProjectUpdateDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.carbide.internal.updater.ui.ProjectUpdateDialog.java

Source

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/
package com.nokia.carbide.internal.updater.ui;

import com.nokia.carbide.internal.updater.Messages;
import com.nokia.carbide.updater.CarbideUpdaterPlugin;
import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;

import org.eclipse.core.resources.IProject;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.model.WorkbenchLabelProvider;

import java.util.ArrayList;
import java.util.List;

public class ProjectUpdateDialog extends TitleAreaDialog {

    private static final String TITLE = Messages.getString("ProjectUpdateDialog.Title"); //$NON-NLS-1$
    private static final String HTML_DOC_HEADER = "<HEAD><TITLE></TITLE>" + //$NON-NLS-1$
            "<style type=\"text/css\">\r\n" + //$NON-NLS-1$
            "body {margin-top: 3; margin-left: 3}\r\n" + //$NON-NLS-1$
            "p {font-family: arial;font-size: x-small;}" + //$NON-NLS-1$
            "</style></HEAD>" + //$NON-NLS-1$
            "<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\" LINK=\"#0000FF\" VLINK=\"#800080\" ALINK=\"#FF0000\">"; //$NON-NLS-1$
    private static final String HTML_DOC_FOOTER = "<p>" + //$NON-NLS-1$
            Messages.getString("ProjectUpdateDialog.Footer1") + //$NON-NLS-1$
            Messages.getString("ProjectUpdateDialog.Footer2") + //$NON-NLS-1$
            "<p>" + //$NON-NLS-1$
            Messages.getString("ProjectUpdateDialog.Footer3") + //$NON-NLS-1$
            "</p></BODY></HTML>"; //$NON-NLS-1$

    private static final String HELP_CONTEXT_ID = CarbideUpdaterPlugin.PLUGIN_ID + ".projectUpdateDialog"; //$NON-NLS-1$

    private CheckboxTableViewer tableViewer;
    private List<IProject> checkedProjects;
    private IProject[] projects;
    private String documentation;

    /**
     * Create the dialog
     * @param parentShell
     */
    public ProjectUpdateDialog(Shell parentShell, List<IProject> projectList, String documentation) {
        super(parentShell);
        this.projects = (IProject[]) projectList.toArray(new IProject[projectList.size()]);
        this.documentation = documentation;
        setShellStyle(getShellStyle() | SWT.RESIZE);
    }

    /**
     * Create contents of the dialog
     * @param parent
     */
    @Override
    protected Control createDialogArea(Composite parent) {
        Composite area = (Composite) super.createDialogArea(parent);
        Composite container = new Composite(area, SWT.NONE);
        container.setLayout(new FormLayout());
        container.setLayoutData(new GridData(GridData.FILL_BOTH));

        Browser browser;

        tableViewer = CheckboxTableViewer.newCheckList(container, SWT.BORDER);
        final FormData formData = new FormData();
        formData.right = new FormAttachment(0, 255);
        formData.top = new FormAttachment(0, 3);
        formData.bottom = new FormAttachment(100, -5);
        formData.left = new FormAttachment(0, 5);
        tableViewer.getTable().setLayoutData(formData);
        tableViewer.addCheckStateListener(new ICheckStateListener() {
            public void checkStateChanged(CheckStateChangedEvent event) {
                updateEnabled();
            }
        });
        tableViewer.setSorter(new ViewerSorter());

        tableViewer.setContentProvider(new ArrayContentProvider());
        tableViewer.setInput(projects);
        tableViewer.setLabelProvider(new WorkbenchLabelProvider());
        browser = new Browser(container, SWT.BORDER);
        final FormData formData_1 = new FormData();
        formData_1.left = new FormAttachment(tableViewer.getTable(), 0, SWT.DEFAULT);
        formData_1.bottom = new FormAttachment(100, -5);
        formData_1.right = new FormAttachment(100, -5);
        formData_1.top = new FormAttachment(0, 3);
        browser.setLayoutData(formData_1);
        browser.setText(getProjectUIText());
        setTitle(getProjectUpdaterTitle());
        setMessage(getProjectUpdaterMessage());

        WorkbenchUtils.setHelpContextId(area, HELP_CONTEXT_ID);

        return area;
    }

    private String getProjectUIText() {
        return HTML_DOC_HEADER + documentation + HTML_DOC_FOOTER;
    }

    private String getProjectUpdaterMessage() {
        return Messages.getString("ProjectUpdateDialog.UpdaterMessage"); //$NON-NLS-1$
    }

    private String getProjectUpdaterTitle() {
        return Messages.getString("ProjectUpdateDialog.UpdaterTitle"); //$NON-NLS-1$
    }

    /**
     * Create contents of the button bar (change OK to Update)
     * @param parent
     */
    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        Button ok = createButton(parent, IDialogConstants.OK_ID,
                Messages.getString("ProjectUpdateDialog.UpdateButtonTitle"), true); //$NON-NLS-1$
        ok.setToolTipText(Messages.getString("ProjectUpdateDialog.OkButtonTooltip")); //$NON-NLS-1$
        Button skip = createButton(parent, IDialogConstants.NEXT_ID,
                Messages.getString("ProjectUpdateDialog.SkipButtonTitle"), false); //$NON-NLS-1$
        skip.setToolTipText(Messages.getString("ProjectUpdateDialog.SkipButtonTooltip")); //$NON-NLS-1$
        Button cancel = createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
        cancel.setToolTipText(Messages.getString("ProjectUpdateDialog.CancelButtonTooltip")); //$NON-NLS-1$
        updateEnabled();
    }

    /**
     * Override the initial size of the dialog
     */
    @Override
    protected Point getInitialSize() {
        return new Point(650, 450);
    }

    /**
     * Update the title of the window
     */
    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText(TITLE);
    }

    private void updateEnabled() {
        boolean enabled = tableViewer.getCheckedElements().length > 0;
        getButton(IDialogConstants.OK_ID).setEnabled(enabled);
    }

    @Override
    protected void okPressed() {
        Object[] checkedElements = tableViewer.getCheckedElements();
        for (int i = 0; i < checkedElements.length; i++) {
            if (checkedProjects == null)
                checkedProjects = new ArrayList();
            IProject project = (IProject) checkedElements[i];
            checkedProjects.add(project);
        }
        super.okPressed();
    }

    @Override
    protected void buttonPressed(int buttonId) {
        if (buttonId == IDialogConstants.NEXT_ID) {
            setReturnCode(buttonId);
            close();
        }

        super.buttonPressed(buttonId);
    }

    public List<IProject> getCheckedProjects() {
        return checkedProjects;
    }

}