org.eclipse.pde.emfforms.editor.PDEFormToolkit.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.pde.emfforms.editor.PDEFormToolkit.java

Source

/**
 * Copyright (c) 2009 Anyware Technologies 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:
 *     Anyware Technologies - initial API and implementation
 *
 * $Id: PDEFormToolkit.java,v 1.6 2009/09/23 08:33:29 bcabe Exp $
 */
package org.eclipse.pde.emfforms.editor;

import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.forms.ManagedForm;
import org.eclipse.ui.forms.widgets.*;

/**
 * TODO remove crap in this class (static widget factories is definitely not a good idea) 
 */
public class PDEFormToolkit extends FormToolkit {
    public static class Pair<U, V> {
        public U left;

        public V right;

        public Pair(U u, V v) {
            left = u;
            right = v;
        }
    }

    private static final String KEEP_CONTROL_FOREGROUND = "KEEPFOREGROUND"; //$NON-NLS-1$

    private static final String KEEP_CONTROL_BACKGROUND = "KEEPBACKGROUND"; //$NON-NLS-1$

    public PDEFormToolkit(Display display) {
        super(display);
    }

    private void super$adapt(Composite composite) {
        composite.setBackground(getColors().getBackground());
        composite.addMouseListener(new MouseAdapter() {
            public void mouseDown(MouseEvent e) {
                ((Control) e.widget).setFocus();
            }
        });
        // composite.setMenu(composite.getParent().getMenu());
    }

    public void adapt(Composite composite) {
        // adapt every subcomposite & subcontrol
        if (composite == null)
            return;

        super$adapt(composite);

        // Recursively set the enabled state of all children
        Control[] children = composite.getChildren();
        for (int i = 0; i < children.length; i++) {
            if (children[i] instanceof Composite) {
                adapt((Composite) children[i]);
            } else if (!(composite instanceof Section)) {
                Boolean keepForeground = (Boolean) children[i].getData(KEEP_CONTROL_FOREGROUND);
                Boolean keepBackground = (Boolean) children[i].getData(KEEP_CONTROL_BACKGROUND);

                Color c = null;
                if (keepForeground != null && keepForeground.booleanValue()) {
                    c = children[i].getForeground();
                }

                Color c2 = null;
                if (keepBackground != null && keepBackground.booleanValue()) {
                    c2 = children[i].getBackground();
                }

                super.adapt(children[i], true, true);

                if (c != null)
                    children[i].setForeground(c);

                if (c2 != null)
                    children[i].setBackground(c2);
            }
        }
    }

    public Combo createCombo(Composite parent, int style) {
        Combo combo = new Combo(parent, style | SWT.FLAT);
        adapt(combo, false, false);
        // hookDeleteListener(table);
        return combo;
    }

    public List createList(Composite parent, int style) {
        List list = new List(parent, style | SWT.FLAT);
        adapt(list, false, false);
        // hookDeleteListener(table);
        return list;
    }

    public ManagedForm createManagedForm(FormToolkit toolkit, ScrolledForm sForm) {
        return new ManagedForm(toolkit, sForm);
    }

    public ManagedForm createManagedForm(Composite parent) {
        return new ManagedForm(parent);
    }

    public StyledText createStyledText(Composite parent, int style) {
        StyledText styledText = new StyledText(parent, style);
        adapt(styledText, false, false);
        return styledText;
    }

    public Group createGroup(Composite parent, String text) {
        Group group = new Group(parent, SWT.NONE);
        group.setText(text);
        adapt(group, false, false);
        return group;
    }

    public ComboViewer createComboViewer(Composite parent, int style) {
        ComboViewer cviewer = new ComboViewer(parent, style);
        adapt(cviewer.getCombo(), false, false);

        return cviewer;
    }

    public TableViewer createTableViewer(Composite parent, int style) {
        TableViewer tviewer = new TableViewer(parent, style);
        adapt(tviewer.getTable(), false, false);

        return tviewer;
    }

    public DateTime createDateTime(Composite parent, int style) {
        DateTime dateTime = new DateTime(parent, style);
        adapt(dateTime, false, false);
        return dateTime;
    }

    public static Pair<Text, Button> createLabelAndBrowseText(String label, Composite composite) {
        GridLayoutFactory.fillDefaults().margins(0, 5).numColumns(2).applyTo(composite);

        Label labelName = new Label(composite, SWT.NONE);
        labelName.setText(label);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(labelName);
        labelName.setAlignment(SWT.LEFT);

        Composite browseComposite = new Composite(composite, SWT.NONE);
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(browseComposite);
        Text text = new Text(browseComposite, SWT.BORDER | SWT.READ_ONLY);
        text.setEditable(false);
        text.setEnabled(false);
        GridDataFactory.fillDefaults().grab(true, false).applyTo(text);
        Button browseButton = new Button(browseComposite, SWT.FLAT | SWT.PUSH);
        browseButton.setText("..."); //$NON-NLS-1$
        GridDataFactory.fillDefaults().grab(true, false).applyTo(browseComposite);
        return new Pair<Text, Button>(text, browseButton);
    }

    public static Pair<ListViewer, Pair<Button, Button>> createLabelAndListAddRemove(String label,
            Composite composite) {
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);

        Label labelName = new Label(composite, SWT.NONE);
        labelName.setText(label);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BEGINNING).applyTo(labelName);
        labelName.setAlignment(SWT.LEFT);

        Composite browseComposite = new Composite(composite, SWT.NONE);
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(browseComposite);
        ListViewer listViewer = new ListViewer(browseComposite, SWT.BORDER);
        GridDataFactory.fillDefaults().grab(true, false).span(1, 2).hint(SWT.DEFAULT, 80)
                .applyTo(listViewer.getList());
        Button addButton = new Button(browseComposite, SWT.FLAT | SWT.PUSH);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BEGINNING).applyTo(addButton);
        addButton.setText("+"); //$NON-NLS-1$
        Button removeButton = new Button(browseComposite, SWT.FLAT | SWT.PUSH);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BEGINNING).applyTo(removeButton);
        removeButton.setText("-"); //$NON-NLS-1$
        GridDataFactory.fillDefaults().grab(true, false).applyTo(browseComposite);
        return new Pair<ListViewer, Pair<Button, Button>>(listViewer,
                new Pair<Button, Button>(addButton, removeButton));
    }

    public static ListViewer createLabelAndList(String label, Composite composite) {
        return createLabelAndList(label, composite, SWT.DEFAULT);
    }

    public static ListViewer createLabelAndList(String label, Composite composite, int labelHorizontalWidthHint) {
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);

        Label labelName = new Label(composite, SWT.NONE);
        labelName.setText(label);
        GridDataFactory.fillDefaults().span(2, 1).align(SWT.FILL, SWT.BEGINNING)
                .hint(labelHorizontalWidthHint, SWT.DEFAULT).applyTo(labelName);
        labelName.setAlignment(SWT.LEFT);

        ListViewer listViewer = new ListViewer(composite, SWT.BORDER);
        GridDataFactory.fillDefaults().grab(true, false).span(2, 1).hint(SWT.DEFAULT, 80)
                .applyTo(listViewer.getList());

        return listViewer;
    }

    /**
     * @param label
     * @param generalInfoComposite
     * @return
     */
    public static Text createLabelAndText(String label, Composite composite, int labelHorizontalWidthHint) {
        GridLayoutFactory.fillDefaults().margins(0, 5).numColumns(2).applyTo(composite);

        Label labelName = new Label(composite, SWT.NONE);
        labelName.setText(label);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).hint(labelHorizontalWidthHint, SWT.DEFAULT)
                .applyTo(labelName);
        labelName.redraw();

        labelName.setAlignment(SWT.LEFT);

        Text text = new Text(composite, SWT.BORDER);
        GridDataFactory.fillDefaults().grab(true, false).applyTo(text);
        return text;
    }

    /**
     * @param label
     * @param generalInfoComposite
     * @return
     */
    public static Text createLabelAndText(String label, Composite composite) {
        return createLabelAndText(label, composite, SWT.DEFAULT);
    }

    /**
     * @param label
     * @param generalInfoComposite
     * @return
     */
    public static Text createLabelAndTextArea(String label, Composite composite) {
        return createLabelAndTextArea(label, composite, false);
    }

    public static Text createLabelAndTextArea(String label, Composite composite, int labelHorizontalWidthHint) {
        return createLabelAndTextArea(label, composite, false, labelHorizontalWidthHint);
    }

    /**
     * @param label
     * @param generalInfoComposite
     * @return
     */
    public static Text createLabelAndTextArea(String label, Composite composite, boolean scrollable) {
        return createLabelAndTextArea(label, composite, scrollable, SWT.DEFAULT);
    }

    public static Text createLabelAndTextArea(String label, Composite composite, boolean scrollable,
            int labelHorizontalWidthHint) {
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);

        Label labelName = new Label(composite, SWT.NONE);
        labelName.setText(label);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).hint(labelHorizontalWidthHint, SWT.DEFAULT)
                .applyTo(labelName);
        labelName.setAlignment(SWT.LEFT);

        int sytle = SWT.BORDER | SWT.MULTI;
        if (scrollable) {
            sytle = sytle | SWT.WRAP | SWT.V_SCROLL;
        }
        Text text = new Text(composite, sytle);
        GridDataFactory.fillDefaults().grab(true, false).hint(SWT.DEFAULT, 120).applyTo(text);
        return text;
    }

    /**
     * @param label
     * @param generalInfoComposite
     * @return
     */
    public static ComboViewer createLabelAndComboViewer(String label, Composite composite) {
        return createLabelAndComboViewer(label, composite, SWT.DEFAULT);
    }

    public static ComboViewer createLabelAndComboViewer(String label, Composite composite,
            int labelHorizontalWidthHint) {
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);

        Label labelName = new Label(composite, SWT.NONE);
        labelName.setText(label);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).hint(labelHorizontalWidthHint, SWT.DEFAULT)
                .applyTo(labelName);
        labelName.setAlignment(SWT.LEFT);

        ComboViewer comboViewer = new ComboViewer(composite, SWT.READ_ONLY);
        comboViewer.setContentProvider(new ArrayContentProvider());
        comboViewer.setLabelProvider(new LabelProvider());
        // sort the viewer using labels
        comboViewer.setSorter(new ViewerSorter());
        GridDataFactory.fillDefaults().grab(true, false).applyTo(comboViewer.getControl());
        return comboViewer;
    }

    /**
     * @param label
     * @param composite
     * @param comboStyle
     * @return
     */
    public static ComboViewer createLabelAndNonReadOnlyComboViewer(String label, Composite composite) {
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);

        Label labelName = new Label(composite, SWT.NONE);
        labelName.setText(label);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(labelName);
        labelName.setAlignment(SWT.LEFT);
        ComboViewer comboViewer;
        comboViewer = new ComboViewer(composite, SWT.BORDER);
        comboViewer.setContentProvider(new ArrayContentProvider());
        comboViewer.setLabelProvider(new LabelProvider());
        // sort the viewer using labels
        comboViewer.setSorter(new ViewerSorter());
        GridDataFactory.fillDefaults().grab(true, false).applyTo(comboViewer.getControl());
        return comboViewer;
    }

    /**
     * @param label
     * @param generalInfoComposite
     * @return
     */
    public static DateTime createLabelAndCalendar(String label, Composite composite) {
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);

        Label labelName = new Label(composite, SWT.NONE);
        labelName.setText(label);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(labelName);
        labelName.setAlignment(SWT.LEFT);

        DateTime dateTime = new DateTime(composite, SWT.CALENDAR);
        GridDataFactory.fillDefaults().grab(true, false).applyTo(dateTime);
        return dateTime;
    }

    /**
     * @param string
     * @param composite
     * @return a checkBox
     */
    public static Button createLabelAndCheckBox(String label, Composite composite) {
        return createLabelAndButton(label, composite, SWT.CHECK, SWT.DEFAULT);
    }

    public static Button createLabelAndCheckBox(String label, Composite composite, int labelHorizontalWidthHint) {
        return createLabelAndButton(label, composite, SWT.CHECK, labelHorizontalWidthHint);
    }

    /**
     * @param string
     * @param composite
     * @return a checkBox
     */
    public static Button createCheckBoxAndLabel(String label, Composite composite) {
        return createButtonAndLabel(label, composite, SWT.CHECK);
    }

    /**
     * 
     * @param label
     * @param composite
     * @return a radio button
     */
    public static Button createRadioAndLabel(String label, Composite composite) {
        return createButtonAndLabel(label, composite, SWT.RADIO);
    }

    /**
     * @param label
     * @param composite
     * @param type
     * @return a button of type "type"
     */
    private static Button createButtonAndLabel(String label, Composite composite, int type) {
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);

        Button button = new Button(composite, type | SWT.FLAT);
        button.setText(label);
        GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).span(2, 1).applyTo(button);
        return button;
    }

    /**
     * @param label
     * @param composite
     * @param type
     * @return a button of type "type"
     */
    private static Button createLabelAndButton(String label, Composite parent, int type,
            int labelHorizontalWidthHint) {
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(parent);

        Label labelName = new Label(parent, SWT.NONE);
        labelName.setText(label);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).hint(labelHorizontalWidthHint, SWT.DEFAULT)
                .applyTo(labelName);
        labelName.setAlignment(SWT.LEFT);

        Button button = new Button(parent, type | SWT.FLAT);
        GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(button);
        return button;
    }

    /**
     * @param label
     * @param generalInfoComposite
     * @return
     */
    public static Spinner createLabelAndSpinner(String label, Composite parent) {
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(parent);

        Label labelName = new Label(parent, SWT.NONE);
        labelName.setText(label);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(labelName);
        labelName.setAlignment(SWT.LEFT);

        Spinner spinner = new Spinner(parent, SWT.WRAP);
        GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(spinner);
        return spinner;
    }

    /**
     * For readonly
     * 
     * @param label
     * @param generalInfoComposite
     * @return
     */
    public static Label createLabelAndLabel(String label, Composite parent) {
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(parent);

        Label labelName = new Label(parent, SWT.NONE);
        labelName.setText(label);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(labelName);
        labelName.setAlignment(SWT.LEFT);

        Label labelValue = new Label(parent, SWT.NONE);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(labelValue);
        return labelValue;
    }

    /**
     * @param section
     * @return a toolbar manager for a given {@link Section} with a sexy cursor
     */
    public static ToolBarManager createSectionToolBarManager(Composite section) {
        ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
        ToolBar toolbar = toolBarManager.createControl(section);
        final Cursor handCursor = new Cursor(Display.getCurrent(), SWT.CURSOR_HAND);
        toolbar.setCursor(handCursor);
        // Cursor needs to be explicitly disposed
        toolbar.addDisposeListener(new DisposeListener() {
            public void widgetDisposed(DisposeEvent e) {
                if ((handCursor != null) && (handCursor.isDisposed() == false)) {
                    handCursor.dispose();
                }
            }
        });
        return toolBarManager;
    }

    public static Link createLink(String label, Composite composite) {
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);

        Link link = new Link(composite, SWT.NONE);
        link.setText(label);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).span(2, 1).applyTo(link);

        return link;
    }
}