Package org.jbpm.ui.dialog

Source Code of org.jbpm.ui.dialog.TreeViewSelectionDialog$ColoredLabelProvider

package org.jbpm.ui.dialog;

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

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class TreeViewSelectionDialog extends Dialog {
    private TreeViewer viewer;
    private TreeItem items;
    private TreeItem selectedItem;

    private final String dialogText;

    public TreeViewSelectionDialog(String dialogText) {
        super(Display.getCurrent().getActiveShell());
        this.dialogText = dialogText;
    }
   
    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        setShellStyle(getShellStyle() | SWT.RESIZE);
        newShell.setSize(500, 500);
        newShell.setText(dialogText);
    }

  @Override
    protected Control createDialogArea(Composite parent) {
        Composite area = (Composite) super.createDialogArea(parent);
        GridLayout layout = new GridLayout(1, false);
        area.setLayout(layout);

        viewer = new TreeViewer(area, SWT.BORDER);
        viewer.getControl().setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        viewer.setLabelProvider(new ColoredLabelProvider());
        viewer.setContentProvider(new ITreeContentProvider() {

            public Object[] getChildren(Object parentElement) {
                return ((TreeItem) parentElement).children.toArray();
            }

            public Object getParent(Object element) {
                return ((TreeItem) element).parent;
            }

            public boolean hasChildren(Object element) {
                return ((TreeItem) element).children.size() > 0;
            }

            public Object[] getElements(Object inputElement) {
                return ((TreeItem) inputElement).children.toArray();
            }

            public void dispose() {
            }

            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }
           
        });
        GridData listData = new GridData(GridData.FILL_BOTH);
        listData.minimumHeight = 200;
        listData.minimumWidth = 100;
        viewer.getControl().setLayoutData(listData);
        viewer.setInput(items);
        viewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                selectedItem = (TreeItem) ((IStructuredSelection) viewer.getSelection()).getFirstElement();
                getButton(IDialogConstants.OK_ID).setEnabled(selectedItem.allowSelection);
            }
        });
        viewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                selectedItem = (TreeItem) ((IStructuredSelection) viewer.getSelection()).getFirstElement();
                if (selectedItem.allowSelection) {
                    okPressed();
                } else {
                    boolean includeSelection = true;
                    for(Object expanded : viewer.getExpandedElements()) {
                        if (selectedItem.equals(expanded)) {
                            includeSelection = false;
                            break;
                        }
                    }
                    viewer.setExpandedElements(getExpandedItems(includeSelection));
                }
            }
        });

        return area;
    }
 
    private TreeItem[] getExpandedItems(boolean includeSelection) {
        List<TreeItem> expandedItems = new ArrayList<TreeItem>();
        TreeItem item = selectedItem;
        while (item != null) {
            expandedItems.add(item);
            item = item.parent;
        }
        if (!includeSelection) {
            expandedItems.remove(selectedItem);
        }
        return expandedItems.toArray(new TreeItem[expandedItems.size()]);
    }

    public TreeItem getSelectedItem() {
        return selectedItem;
    }

    public void setSelectedItem(TreeItem selectedItem) {
        this.selectedItem = selectedItem;
    }

    public void setItems(TreeItem types) {
        this.items = types;
    }
   
    public static class ColoredLabelProvider extends LabelProvider implements IColorProvider {

    @Override
    public String getText(Object element) {
      return ((TreeItem) element).label;
    }

    public Color getBackground(Object element) {
      return null;
    }

    public Color getForeground(Object element) {
      return ((TreeItem) element).color;
    }
     
    }
}
TOP

Related Classes of org.jbpm.ui.dialog.TreeViewSelectionDialog$ColoredLabelProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.