org.eclipse.team.ui.SaveablePartDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.team.ui.SaveablePartDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2007 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.team.ui;

import org.eclipse.compare.CompareEditorInput;
import org.eclipse.compare.CompareUI;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.dialogs.*;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.*;
import org.eclipse.team.internal.ui.TeamUIMessages;
import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.ui.PlatformUI;

/**
 * A dialog that displays a {@link org.eclipse.team.ui.ISaveableWorkbenchPart} and
 * ensures that changes made to the input are saved when the dialog is closed.
 * 
 * @see ISaveableWorkbenchPart
 * @see SaveablePartAdapter
 * @since 3.0
 * @deprecated Clients should use a subclass of {@link CompareEditorInput}
 *      and {@link CompareUI#openCompareDialog(org.eclipse.compare.CompareEditorInput)}
 */
public class SaveablePartDialog extends TrayDialog {

    private ISaveableWorkbenchPart input;
    private String fContextId;
    private boolean hasSettings = true;

    /**
     * Creates a dialog with the given title and input. The input is not created until the dialog
     * is opened.
     * 
     * @param shell the parent shell or <code>null</code> to create a top level shell. 
     * @param input the part to show in the dialog.
     */
    public SaveablePartDialog(Shell shell, ISaveableWorkbenchPart input) {
        super(shell);
        setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX);
        this.input = input;
    }

    /* (non-Javadoc)
     * Method declared on Dialog.
     */
    protected void createButtonsForButtonBar(Composite parent) {
        createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
    }

    /* (non-Javadoc)
     * Method declared on Dialog.
     */
    protected Control createDialogArea(Composite parent2) {
        Composite parent = (Composite) super.createDialogArea(parent2);
        input.createPartControl(parent);
        Shell shell = getShell();
        shell.setText(input.getTitle());
        shell.setImage(input.getTitleImage());
        Dialog.applyDialogFont(parent2);
        return parent;
    }

    /* (non-Javadoc)
     * @see org.eclipse.compare.internal.ResizableDialog#close()
     */
    public boolean close() {
        saveChanges();
        return super.close();
    }

    /**
     * Save any changes to the compare editor.
     */
    private void saveChanges() {
        MessageDialog dialog = new MessageDialog(getShell(), TeamUIMessages.ParticipantCompareDialog_2, null,
                TeamUIMessages.ParticipantCompareDialog_3, MessageDialog.QUESTION,
                new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL }, 0); // YES is the default

        if (input.isDirty() && dialog.open() == IDialogConstants.OK_ID) {
            BusyIndicator.showWhile(null, new Runnable() {
                public void run() {
                    input.doSave(new NullProgressMonitor());
                }
            });
        }
    }

    /**
     * Return the input to the dialog.
     * @return the input to the dialog
     * @since 3.2
     */
    protected ISaveableWorkbenchPart getInput() {
        return input;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.Dialog#getDialogBoundsSettings()
     */
    protected IDialogSettings getDialogBoundsSettings() {
        IDialogSettings compareSettings = TeamUIPlugin.getPlugin().getDialogSettings();
        String sectionName = this.getClass().getName();
        IDialogSettings dialogSettings = compareSettings.getSection(sectionName);
        if (dialogSettings == null) {
            hasSettings = false;
            dialogSettings = compareSettings.addNewSection(sectionName);
        }
        return dialogSettings;
    }

    /**
     * Set the help content id of this dialog.
     * @param contextId the help context id
     */
    public void setHelpContextId(String contextId) {
        fContextId = contextId;
    }

    /*
     * @see org.eclipse.jface.window.Window#configureShell(Shell)
     */
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        if (fContextId != null)
            PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, fContextId);
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.Dialog#getInitialSize()
     */
    protected Point getInitialSize() {
        Point initialSize = super.getInitialSize();
        if (hasSettings) {
            return initialSize;
        }
        // If we don't have settings we need to come up with a reasonable default
        // since we can't depend on the compare editor input layout returning a good default size
        int width = 0;
        int height = 0;
        Shell shell = getParentShell();
        if (shell != null) {
            Point parentSize = shell.getSize();
            width = parentSize.x - 100;
            height = parentSize.y - 100;
        }
        if (width < 700)
            width = 700;
        if (height < 500)
            height = 500;
        return new Point(width, height);
    }
}