com.microsoft.tfs.client.common.ui.teambuild.dialogs.DeleteOptionsDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.tfs.client.common.ui.teambuild.dialogs.DeleteOptionsDialog.java

Source

// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See License.txt in the repository root.

package com.microsoft.tfs.client.common.ui.teambuild.dialogs;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

import com.microsoft.tfs.client.common.ui.framework.dialog.BaseDialog;
import com.microsoft.tfs.client.common.ui.framework.helper.SWTUtil;
import com.microsoft.tfs.client.common.ui.framework.layout.GridDataBuilder;
import com.microsoft.tfs.client.common.ui.teambuild.Messages;
import com.microsoft.tfs.core.clients.build.flags.DeleteOptions;

public abstract class DeleteOptionsDialog extends BaseDialog {

    private Button detailsCheckbox;
    private Button dropCheckbox;
    private Button testResultsCheckbox;
    private Button labelCheckbox;
    private Button symbolsCheckbox;
    private final boolean isV3OrGreater;
    private DeleteOptions deleteOption = DeleteOptions.ALL;

    public DeleteOptionsDialog(final Shell parentShell) {
        super(parentShell);
        this.isV3OrGreater = true;
    }

    public DeleteOptionsDialog(final Shell parentShell, final boolean isV3OrGreater) {
        super(parentShell);
        this.deleteOption = DeleteOptions.ALL;
        this.isV3OrGreater = isV3OrGreater;
    }

    public DeleteOptionsDialog(final Shell parentShell, final DeleteOptions deleteOption) {
        super(parentShell);
        this.isV3OrGreater = true;
        this.deleteOption = deleteOption;
    }

    @Override
    protected void hookAddToDialogArea(final Composite dialogArea) {
        this.getShell().setMinimumSize(600, 200);
        final GridLayout layout = SWTUtil.gridLayout(dialogArea);
        layout.marginWidth = getHorizontalMargin();
        layout.marginHeight = getVerticalMargin();
        layout.verticalSpacing = 10;

        Label label = new Label(dialogArea, SWT.NONE);
        label.setText(getDescriptionText());
        GridDataBuilder.newInstance().applyTo(label);

        final FontData[] fontData = label.getFont().getFontData();
        fontData[0].setStyle(SWT.BOLD);
        final Font boldFont = new Font(label.getFont().getDevice(), fontData[0]);
        detailsCheckbox = new Button(dialogArea, SWT.CHECK);
        detailsCheckbox.setText(detailsButtonLabel());
        detailsCheckbox.setFont(boldFont);
        GridDataBuilder.newInstance().applyTo(detailsCheckbox);

        final GridDataBuilder labelGridDataBuilder = GridDataBuilder.newInstance().hIndent(24).hFill().hGrab()
                .wHint(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
        label = new Label(dialogArea, SWT.WRAP);
        label.setText(Messages.getString("DeleteOptionsDialog.DetailsButtonTooltipText")); //$NON-NLS-1$
        labelGridDataBuilder.applyTo(label);

        if (isDetailsDefault()) {
            detailsCheckbox.setEnabled(false);
            label.setEnabled(false);
        }

        dropCheckbox = new Button(dialogArea, SWT.CHECK);
        dropCheckbox.setText(Messages.getString("DeleteOptionsDialog.DropButtonLabel")); //$NON-NLS-1$
        dropCheckbox.setFont(boldFont);
        GridDataBuilder.newInstance().applyTo(dropCheckbox);

        label = new Label(dialogArea, SWT.WRAP);
        label.setText(Messages.getString("DeleteOptionsDialog.DropButtonTooltipText")); //$NON-NLS-1$
        labelGridDataBuilder.applyTo(label);

        testResultsCheckbox = new Button(dialogArea, SWT.CHECK);
        testResultsCheckbox.setText(Messages.getString("DeleteOptionsDialog.TestResultsButtonLabel")); //$NON-NLS-1$
        testResultsCheckbox.setFont(boldFont);
        GridDataBuilder.newInstance().applyTo(detailsCheckbox);

        label = new Label(dialogArea, SWT.WRAP);
        label.setText(Messages.getString("DeleteOptionsDialog.TestResultsButtonTooltipText")); //$NON-NLS-1$
        labelGridDataBuilder.applyTo(label);

        labelCheckbox = new Button(dialogArea, SWT.CHECK);
        labelCheckbox.setText(Messages.getString("DeleteOptionsDialog.LabelButtonLabel")); //$NON-NLS-1$
        labelCheckbox.setFont(boldFont);
        GridDataBuilder.newInstance().applyTo(detailsCheckbox);

        label = new Label(dialogArea, SWT.WRAP);
        label.setText(Messages.getString("DeleteOptionsDialog.LabelButtonTooltipText")); //$NON-NLS-1$
        labelGridDataBuilder.applyTo(label);

        symbolsCheckbox = new Button(dialogArea, SWT.CHECK);
        symbolsCheckbox.setText(Messages.getString("DeleteOptionsDialog.SymbolsButtonLabel")); //$NON-NLS-1$
        symbolsCheckbox.setFont(boldFont);
        GridDataBuilder.newInstance().applyTo(detailsCheckbox);

        label = new Label(dialogArea, SWT.WRAP);
        label.setText(Messages.getString("DeleteOptionsDialog.SymbolsButtonTooltipText")); //$NON-NLS-1$
        labelGridDataBuilder.applyTo(label);

        attachSelectionListener(detailsCheckbox);
        attachSelectionListener(dropCheckbox);
        attachSelectionListener(testResultsCheckbox);
        attachSelectionListener(labelCheckbox);
        attachSelectionListener(symbolsCheckbox);

        dialogArea.addDisposeListener(new DisposeListener() {
            @Override
            public void widgetDisposed(final DisposeEvent arg0) {
                boldFont.dispose();
            }
        });

        if (!isV3OrGreater) {
            detailsCheckbox.setSelection(true);
            dropCheckbox.setSelection(true);
            testResultsCheckbox.setSelection(true);
            labelCheckbox.setSelection(true);
            symbolsCheckbox.setSelection(true);
            disableComposite(dialogArea);
        } else {
            setSelections();
        }
    }

    private void setSelections() {
        if (deleteOption.contains(DeleteOptions.DETAILS)) {
            detailsCheckbox.setSelection(true);
        }
        if (deleteOption.contains(DeleteOptions.DROP_LOCATION)) {
            dropCheckbox.setSelection(true);
        }
        if (deleteOption.contains(DeleteOptions.TEST_RESULTS)) {
            testResultsCheckbox.setSelection(true);
        }
        if (deleteOption.contains(DeleteOptions.LABEL)) {
            labelCheckbox.setSelection(true);
        }
        if (deleteOption.contains(DeleteOptions.SYMBOLS)) {
            symbolsCheckbox.setSelection(true);
        }
    }

    private void disableComposite(final Composite composite) {
        final Control[] children = composite.getChildren();

        for (final Control control : children) {
            if (control instanceof Label) {
                if (((Label) control).getText().equals(getDescriptionText())) {
                    continue;
                }
            }
            control.setEnabled(false);
        }
    }

    private void attachSelectionListener(final Button button) {
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                validate();
            }
        });
    }

    private void validate() {
        DeleteOptions option = DeleteOptions.NONE;
        if (detailsCheckbox.getSelection()) {
            option = option.combine(DeleteOptions.DETAILS);
        }
        if (dropCheckbox.getSelection()) {
            option = option.combine(DeleteOptions.DROP_LOCATION);
        }
        if (testResultsCheckbox.getSelection()) {
            option = option.combine(DeleteOptions.TEST_RESULTS);
        }
        if (labelCheckbox.getSelection()) {
            option = option.combine(DeleteOptions.LABEL);
        }
        if (symbolsCheckbox.getSelection()) {
            option = option.combine(DeleteOptions.SYMBOLS);
        }
        if (option.equals(DeleteOptions.NONE)) {
            getButton(IDialogConstants.OK_ID).setEnabled(false);
        } else {
            getButton(IDialogConstants.OK_ID).setEnabled(true);
        }
        deleteOption = option;
    }

    public DeleteOptions getDeleteOption() {
        return deleteOption;
    }

    protected abstract String detailsButtonLabel();

    protected abstract String getDescriptionText();

    protected abstract boolean isDetailsDefault();
}