org.jboss.tools.common.model.ui.dialog.MessageAndCheckboxDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.common.model.ui.dialog.MessageAndCheckboxDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is 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:
 *     Exadel, Inc. and Red Hat, Inc. - initial API and implementation
 ******************************************************************************/
package org.jboss.tools.common.model.ui.dialog;

import java.util.*;
import org.eclipse.swt.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.jface.dialogs.*;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.Assert;

import org.jboss.tools.common.model.ServiceDialog;

public class MessageAndCheckboxDialog extends MessageDialog {
    public static String MESSAGE = ServiceDialog.DIALOG_MESSAGE;
    public static String CHECKBOX_MESSAGE = ServiceDialog.CHECKBOX_MESSAGE;
    public static String CHECKED = ServiceDialog.CHECKED;
    public static String BUTTONS = ServiceDialog.BUTTONS;
    public static String SEPARATOR = ServiceDialog.SEPARATOR;
    public static String TITLE = "title"; //$NON-NLS-1$
    public static String RETURN_CODE = ServiceDialog.RETURN_CODE;
    Button button;
    Button[] buttons = new Button[0];
    Properties properties;
    int lastButton = -1;

    public MessageAndCheckboxDialog(Shell parentShell, String dialogTitle, int dialogImageType, Properties p) {
        super(parentShell, dialogTitle, null, p.getProperty(MESSAGE), dialogImageType, createButtonLabels(p), 0);
        properties = p;
    }

    static String[] createButtonLabels(Properties p) {
        String[] buttons = (String[]) p.get(BUTTONS);
        if (buttons == null)
            return new String[] { IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL };
        String[] bs = new String[buttons.length];
        for (int i = 0; i < bs.length; i++) {
            bs[i] = JFaceResources.getString(buttons[i]);
            if (bs[i] == null)
                bs[i] = buttons[i];
        }
        return bs;
    }

    public static boolean openConfirm(Shell parent, Properties p) {
        Assert.isNotNull(p);
        Assert.isNotNull(p.getProperty(MESSAGE), "Property " + MESSAGE + " is null"); //$NON-NLS-1$ //$NON-NLS-2$
        Assert.isNotNull(p.getProperty(CHECKBOX_MESSAGE), "Property " + CHECKBOX_MESSAGE + " is null"); //$NON-NLS-1$ //$NON-NLS-2$
        Assert.isTrue(p.get(CHECKED) instanceof Boolean, "Property " + CHECKED + " must have type Boolean"); //$NON-NLS-1$ //$NON-NLS-2$
        String title = p.getProperty("title", "Confirmation"); //$NON-NLS-1$
        MessageAndCheckboxDialog dialog = new MessageAndCheckboxDialog(parent, title, QUESTION, p);
        int result = dialog.open();
        p.put(RETURN_CODE, Integer.valueOf(result));
        return result == 0;
    }

    protected Control createCustomArea(Composite parent) {
        String b1 = properties.getProperty(CHECKBOX_MESSAGE + "_1"); //$NON-NLS-1$
        if (b1 == null)
            return button = createCheckBox(parent, ""); //$NON-NLS-1$
        return createMultiCheckBox(parent);
    }

    protected Button createCheckBox(Composite parent, String suffix) {
        Button b = new Button(parent, SWT.CHECK);
        GridData data = new GridData(GridData.FILL_HORIZONTAL);
        if (getImage() != null)
            data.horizontalIndent = getImage().getImageData().width + 8;
        b.setLayoutData(data);
        b.setText(properties.getProperty(CHECKBOX_MESSAGE + suffix));
        b.setSelection(((Boolean) properties.get(CHECKED + suffix)).booleanValue());
        return b;
    }

    protected Control createMultiCheckBox(Composite parent) {
        Composite c = new Composite(parent, SWT.NONE);
        c.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        GridLayout l = new GridLayout();
        l.marginWidth = 0;
        l.marginHeight = 11;
        c.setLayout(l);
        button = createCheckBox(c, ""); //$NON-NLS-1$
        ArrayList<Button> list = new ArrayList<Button>();
        int i = 1;
        while (true) {
            String suffix = "_" + i; //$NON-NLS-1$
            if (properties.getProperty(CHECKBOX_MESSAGE + suffix) == null)
                break;
            if (properties.getProperty(SEPARATOR + suffix) != null) {
                // actually here we should only call
                // createSeparator(parent, true);
                // breaking would be performed 
                // on another property LAST + suffix
                // it is not implemented while we have 
                // the only case for this dialog.
                lastButton = i;
                break;
            }
            Button b = createCheckBox(c, suffix);
            list.add(b);
            ++i;
        }
        buttons = list.toArray(new Button[0]);
        return c;
    }

    private void createSeparator(Composite parent, boolean indent) {
        Label lb = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
        GridData data = new GridData(GridData.FILL_HORIZONTAL);
        if (indent && getImage() != null)
            data.horizontalIndent = getImage().getImageData().width + 8;
        lb.setLayoutData(data);
    }

    private void createSpace(Composite parent, int height) {
        Label lb = new Label(parent, SWT.HORIZONTAL);
        GridData data = new GridData(GridData.FILL_HORIZONTAL);
        data.heightHint = height;
        lb.setLayoutData(data);
    }

    protected void buttonPressed(int buttonId) {
        properties.put(CHECKED, Boolean.valueOf(button.getSelection()));
        for (int i = 0; i < buttons.length; i++) {
            properties.put(CHECKED + "_" + (i + 1), Boolean.valueOf(buttons[i].getSelection())); //$NON-NLS-1$
        }
        super.buttonPressed(buttonId);
    }

    protected Control createButtonBar(Composite parent) {
        if (lastButton < 0)
            return super.createButtonBar(parent);
        Composite vcomposite = new Composite(parent, SWT.NONE);
        GridLayout vl = new GridLayout(1, false);
        vl.marginHeight = 0;
        vl.marginWidth = 0;
        vl.verticalSpacing = 0;
        vcomposite.setLayout(vl);
        GridData d = new GridData(GridData.FILL_HORIZONTAL);
        d.horizontalSpan = 2;
        vcomposite.setLayoutData(d);
        ///      createSpace(vcomposite, 6);
        createSeparator(vcomposite, false);
        createSpace(vcomposite, 10);
        Composite composite = new Composite(vcomposite, SWT.NONE);
        GridLayout l = new GridLayout(2, false);
        l.marginHeight = 0;
        l.marginWidth = 0;
        l.verticalSpacing = 0;
        composite.setLayout(l);
        GridData data = new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.FILL_HORIZONTAL);
        composite.setLayoutData(data);
        Button b = createCheckBox(composite, "_" + lastButton); //$NON-NLS-1$
        b.setLayoutData(new GridData());
        Button[] bs = new Button[buttons.length + 1];
        System.arraycopy(buttons, 0, bs, 0, buttons.length);
        bs[buttons.length] = b;
        buttons = bs;
        Composite w = new Composite(composite, SWT.NONE);
        GridLayout wl = new GridLayout(2, false);
        wl.marginHeight = 0;
        wl.marginWidth = 0;
        wl.horizontalSpacing = 0;
        wl.verticalSpacing = 0;
        w.setLayout(wl);
        w.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        Control c = super.createButtonBar(w);
        c.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_HORIZONTAL));
        return vcomposite;
    }

}