Package org.apache.felix.sigil.eclipse.runtime.config

Source Code of org.apache.felix.sigil.eclipse.runtime.config.FilteredModelView

package org.apache.felix.sigil.eclipse.runtime.config;

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

import org.apache.felix.sigil.eclipse.ui.SigilUI;
import org.apache.felix.sigil.eclipse.ui.util.DefaultLabelProvider;
import org.apache.felix.sigil.eclipse.ui.util.IElementDescriptor;
import org.apache.felix.sigil.eclipse.ui.util.IFilter;
import org.apache.felix.sigil.eclipse.ui.util.UIHelper;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.graphics.Image;
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.Table;
import org.eclipse.swt.widgets.Text;

public class FilteredModelView<T> extends Composite
{
    private ArrayList<T> selected = new ArrayList<T>();
    private ArrayList<T> elements = new ArrayList<T>();
    private IElementDescriptor<T> elementDescriptor = UIHelper.getDefaultElementDescriptor();
    private IFilter<T> filter = UIHelper.getDefaultFilter();
    private StructuredViewer viewer;
    private String txt = "";

    public FilteredModelView(Composite parent, int style)
    {
        super(parent, style);
        initLayout();
    }

    public List<T> getSelectedElements()
    {
        return selected;
    }

    public List<T> getElements()
    {
        return elements;
    }

    public void addElement(T element)
    {
        elements.add(element);
        refresh();
    }

    public void addElements(Collection<T> elements)
    {
        this.elements.addAll(elements);
        refresh();
    }

    public void removeElement(T element)
    {
        elements.remove(element);
        refresh();
    }

    public void removeElements(Collection<T> elements)
    {
        this.elements.removeAll(elements);
        refresh();
    }

    public void refresh()
    {
        SigilUI.runInUI(new Runnable()
        {

            public void run()
            {
                viewer.refresh();
            }
        });
    }

    private void initLayout()
    {
        Text bundleTxt = createSelectionBox(this);

        Control view = createViewBox(this);

        // layout
        bundleTxt.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        view.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        setLayout(new GridLayout(1, false));
    }

    private Control createViewBox(Composite parent)
    {
        Table table = new Table(this, SWT.MULTI);

        viewer = createViewer(table);

        viewer.setContentProvider(new ArrayContentProvider());

        viewer.addSelectionChangedListener(new ISelectionChangedListener()
        {
            @SuppressWarnings("unchecked")
            public void selectionChanged(SelectionChangedEvent event)
            {
                if (event.getSelection().isEmpty())
                {
                    selected.clear();
                }
                else
                {
                    IStructuredSelection sel = (IStructuredSelection) event.getSelection();
                    selected.addAll(sel.toList());
                }
            }
        });

        viewer.setInput(elements);

        viewer.setFilters(new ViewerFilter[] { new ViewerFilter()
        {
            @SuppressWarnings("unchecked")
            @Override
            public boolean select(Viewer viewer, Object parentElement, Object element)
            {
                if (filter.select((T) element))
                {
                    String name = elementDescriptor.getName((T) element);
                    return name.startsWith(txt);
                }
                else
                {
                    return false;
                }
            }
        } });

        return table;
    }

    protected StructuredViewer createViewer(Table table)
    {
        TableViewer tableViewer = new TableViewer(table);

        tableViewer.setLabelProvider(new DefaultLabelProvider()
        {

            public Image getImage(Object arg0)
            {
                return null;
            }

            @SuppressWarnings("unchecked")
            public String getText(Object element)
            {
                return elementDescriptor.getLabel((T) element);
            }

        });

        return tableViewer;
    }

    private Text createSelectionBox(Composite parent)
    {
        final Text txtSelection = new Text(parent, SWT.SEARCH);

        txtSelection.addKeyListener(new KeyAdapter()
        {
            @Override
            public void keyReleased(KeyEvent e)
            {
                txt = txtSelection.getText();
                refresh();
            }
        });
        return txtSelection;
    }

    /*
     *         ControlDecoration selectionDecor = new ControlDecoration( txtSelection, SWT.LEFT | SWT.TOP );
        FieldDecoration proposalDecor = FieldDecorationRegistry.getDefault().getFieldDecoration(
            FieldDecorationRegistry.DEC_CONTENT_PROPOSAL );
        selectionDecor.setImage( proposalDecor.getImage() );
        selectionDecor.setDescriptionText( proposalDecor.getDescription() );

        ExclusionContentProposalProvider<T> proposalProvider = new ExclusionContentProposalProvider<T>(
            elements, filter, elementDescriptor );

        ContentProposalAdapter proposalAdapter = new ContentProposalAdapter( txtSelection, new TextContentAdapter(),
            proposalProvider, null, null );
       
        proposalAdapter.addContentProposalListener( new IContentProposalListener() {
            public void proposalAccepted( IContentProposal proposal )
            {
                WrappedContentProposal<T> valueProposal = (org.apache.felix.sigil.ui.eclipse.ui.util.WrappedContentProposal<T> ) proposal;
                T selected = valueProposal.getElement();
                selection = new ArrayList<E>( 1 );
                selection.add( selected );
            }           
        });
       
        proposalAdapter.setProposalAcceptanceStyle( ContentProposalAdapter.PROPOSAL_REPLACE );

     */

    public void setElementDescriptor(IElementDescriptor<T> elementDescriptor)
    {
        if (elementDescriptor == null)
        {
            elementDescriptor = UIHelper.getDefaultElementDescriptor();
        }
        this.elementDescriptor = elementDescriptor;
    }

    public IElementDescriptor<T> getElementDescriptor()
    {
        return elementDescriptor;
    }

    public void setFilter(IFilter<T> filter)
    {
        if (filter == null)
        {
            filter = UIHelper.getDefaultFilter();
        }
        this.filter = filter;
    }

}
TOP

Related Classes of org.apache.felix.sigil.eclipse.runtime.config.FilteredModelView

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.