Package org.locationtech.udig.mapgraphic

Source Code of org.locationtech.udig.mapgraphic.MapGraphicChooserDialog$MapGraphicTreeContentProvider

/*
*    uDig - User Friendly Desktop Internet GIS client
*    http://udig.refractions.net
*    (C) 2012, Refractions Research Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* (http://www.eclipse.org/legal/epl-v10.html), and the Refractions BSD
* License v1.0 (http://udig.refractions.net/files/bsd3-v10.html).
*/
package org.locationtech.udig.mapgraphic;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;

import org.locationtech.udig.catalog.CatalogPlugin;
import org.locationtech.udig.catalog.IGeoResource;
import org.locationtech.udig.catalog.IService;
import org.locationtech.udig.catalog.ui.ResolveLabelProviderSimple;
import org.locationtech.udig.catalog.ui.ResolveTitlesDecorator;
import org.locationtech.udig.mapgraphic.internal.MapGraphicResource;
import org.locationtech.udig.mapgraphic.internal.MapGraphicService;
import org.locationtech.udig.mapgraphic.internal.Messages;
import org.locationtech.udig.ui.ProgressManager;

import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
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.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;

/**
* A dialog for selecting Map Graphic IGeoResources.
*
* @author jesse
* @since 1.1.0
*/
public final class MapGraphicChooserDialog extends TitleAreaDialog {
    public static class MapGraphicTreeContentProvider implements ITreeContentProvider {

        public Object[] getElements( Object inputElement ) {
            if (inputElement instanceof IService) {
                try {
                    return ((IService) inputElement).members(ProgressManager.instance().get())
                            .toArray();
                } catch (IOException e) {
                    throw (RuntimeException) new RuntimeException().initCause(e);
                }
            }
            return null;
        }

        public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) {
        }

        public Object[] getChildren( Object parentElement ) {
            return getElements(parentElement);
        }

        public Object getParent( Object element ) {
            return null;
        }

        public boolean hasChildren( Object element ) {

            if (element instanceof IService) {
                return true;
            }
            return false;
        }

        public void dispose() {
        }
    }
    private TreeViewer viewer;
    private final ArrayList<MapGraphicResource> resourceList = new ArrayList<MapGraphicResource>();
    private final boolean permitMultipleSelection;

    /**
     * Create instance
     *
     * @param permitMultipleSelection if true then multiple resources can be selected
     */
    public MapGraphicChooserDialog( Shell parentShell, boolean permitMultipleSelection ) {
        super(parentShell);
        this.permitMultipleSelection = permitMultipleSelection;
    }
    @Override
    protected int getShellStyle() {
        return SWT.RESIZE | SWT.MAX | SWT.CLOSE | SWT.MIN | SWT.APPLICATION_MODAL;
    }
    @Override
    protected void configureShell( Shell newShell ) {
        newShell.setText(Messages.OtherAction_shellText);
        super.configureShell(newShell);
    }
    @Override
    protected Point getInitialSize() {
        return new Point(400, 400);
    }
    @Override
    protected Control createContents( Composite parent ) {
        Control control = super.createContents(parent);
        setTitle(Messages.OtherAction_wizardTitle);
        setMessage(Messages.OtherAction_message1);
        return control;
    }
    @Override
    protected Control createDialogArea( Composite parent ) {
        Composite composite = (Composite) super.createDialogArea(parent);
        int style = SWT.V_SCROLL;
        if (permitMultipleSelection) {
            style |= SWT.MULTI;
        }

        org.eclipse.swt.widgets.Tree tree = new org.eclipse.swt.widgets.Tree(composite, style);
        viewer = new TreeViewer(tree);

        GridData gridData = new GridData(GridData.FILL_BOTH);
        gridData.heightHint = SWT.DEFAULT;
        gridData.widthHint = SWT.DEFAULT;
        gridData.verticalSpan = 4;
        tree.setLayoutData(gridData);
        viewer.setContentProvider(new MapGraphicTreeContentProvider());
        ResolveLabelProviderSimple resolveLabelProviderSimple = new ResolveLabelProviderSimple();
        ResolveTitlesDecorator resolveTitlesDecorator = new ResolveTitlesDecorator(
                resolveLabelProviderSimple, true);
        viewer.setLabelProvider(new DecoratingLabelProvider(resolveLabelProviderSimple,
                resolveTitlesDecorator));
        viewer.setInput(getMapGraphicService());
        viewer.addPostSelectionChangedListener(new ISelectionChangedListener(){

            public void selectionChanged( SelectionChangedEvent event ) {
                IStructuredSelection s = (IStructuredSelection) event.getSelection();
                if (s.isEmpty())
                    return;

                String title = null;
                try {
                    IGeoResource resource = (IGeoResource) s.getFirstElement();
                    title = resource.getTitle();
                    if( title == null ){
                        title = resource.getInfo(null).getTitle();
                    }
                } catch (IOException e) {
                    MapGraphicPlugin.log("", e); //$NON-NLS-1$
                }
                if (s.size() == 1 && title != null) {
                    setMessage(Messages.OtherAction_p1 + title + Messages.OtherAction_p2);
                } else {
                    setMessage(Messages.OtherAction_addAll);
                }
            }

        });
        viewer.addDoubleClickListener(new IDoubleClickListener(){

            public void doubleClick( DoubleClickEvent event ) {
                buttonPressed(IDialogConstants.OK_ID);
            }

        });
        return composite;
    }
    @Override
    protected void createButtonsForButtonBar( Composite parent ) {
        createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
        createButton(parent, IDialogConstants.OK_ID, Messages.OtherAction_addButton, true);
    }
    @Override
    protected void buttonPressed( int buttonId ) {
        if (buttonId == IDialogConstants.OK_ID) {
            IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
            Iterator< ? > iter = selection.iterator();
            resourceList.clear();
            while( iter.hasNext() )
                resourceList.add((MapGraphicResource) iter.next());
        }
        super.buttonPressed(buttonId);
    }

    public List<MapGraphicResource> getSelectedResources() {
        return resourceList;
    }

    /**
     * Returns the IGeoResource for the provided graphic class
     *
     * @param graphic the MapGraphic to use as a search parameter
     * @return the IGeoResource for the provided graphic class
     */
    public static MapGraphicResource findResource( Class< ? extends MapGraphic> graphic ) {
        MapGraphicService service = getMapGraphicService();
        try {
            List<MapGraphicResource> resources = service.resources(new NullProgressMonitor());
            for( MapGraphicResource mapGraphicResource : resources ) {
                if (graphic.isAssignableFrom(mapGraphicResource.getGraphic().getClass())) {
                    return mapGraphicResource;
                }
            }
            throw new NoSuchElementException(graphic
                    + " does is not registered.  Check that it is in the plugin.xml"); //$NON-NLS-1$
        } catch (IOException e) {
            // Won't happen but hey lets log anyhow
            MapGraphicPlugin.log("Unexpected exception", e); //$NON-NLS-1$
            throw new RuntimeException(e);
        }
    }
    /**
     * Returns the MapGraphic IService
     *
     * @return the MapGraphic IService
     */
    public static MapGraphicService getMapGraphicService() {
        return CatalogPlugin.getDefault().getLocalCatalog().getById(MapGraphicService.class,
                MapGraphicService.SERVICE_ID, ProgressManager.instance().get());
    }

}
TOP

Related Classes of org.locationtech.udig.mapgraphic.MapGraphicChooserDialog$MapGraphicTreeContentProvider

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.