Package org.locationtech.udig.project.ui.wizard.export.image

Source Code of org.locationtech.udig.project.ui.wizard.export.image.MapSelectorPageWithScaleColumn$TableLabelProvider

/**
*
*/
package org.locationtech.udig.project.ui.wizard.export.image;

import java.util.Collection;

import org.locationtech.udig.project.IMap;
import org.locationtech.udig.project.ui.AdapterFactoryLabelProviderDecorator;
import org.locationtech.udig.project.ui.internal.Messages;
import org.locationtech.udig.project.ui.internal.ProjectExplorer;
import org.locationtech.udig.project.ui.wizard.export.MapSelectorPage;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnViewerEditor;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.ICellEditorValidator;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerEditor;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

/**
* Adds a column where the user can set the scale at which to export the map
*
* @author Jesse
*/
public class MapSelectorPageWithScaleColumn extends MapSelectorPage {
   
    private static final String SCALE = "EXPORT_SCALE"; //$NON-NLS-1$

    public MapSelectorPageWithScaleColumn( String page, String title, ImageDescriptor banner ) {
        super( page, title, banner );
        setDescription(Messages.MapSelectorPageWithScaleColumn_Description );
    }
    @Override
    public void createControl( Composite parent ) {
        super.createControl(parent);
        Composite comp = (Composite) getControl();
        Button scale = new Button(comp, SWT.PUSH);
        scale.setText(Messages.MapSelectorPageWithScaleColumn_scale);
        GridData gridData = new GridData();
        gridData.verticalAlignment = SWT.BOTTOM;
        gridData.horizontalAlignment = SWT.FILL;
        scale.setLayoutData(gridData);
       
        scale.addListener(SWT.Selection, new Listener(){
            public void handleEvent( Event event ) {
                Collection<IMap> maps = getMaps();
                for( IMap map : maps ) {
                    map.getBlackboard().put(SCALE, null);
                }
                viewer.update(maps.toArray(), new String[]{SCALE});               
            }           
        });
    }
   
    @Override
    protected void createColumns( Table table, TableLayout tableLayout ) {
        super.createColumns(table, tableLayout);
        table.setHeaderVisible(true);
        createScaleColumn(table, tableLayout);
    }

    private void createScaleColumn( Table table, TableLayout tableLayout ) {
        TableColumn column = new TableColumn(table, SWT.DEFAULT);
        column.setText(Messages.MapSelectorPageWithScaleColumn_scaleColumnText);
        column.setResizable(true);
        column.setAlignment(SWT.LEFT);
        tableLayout.addColumnData(new ColumnWeightData(1, true));
    }

    @Override
    protected void configureEditors( final TableViewer viewer2 ) {
        final String message = Messages.MapSelectorPageWithScaleColumn_invalidScaleError;

        TextCellEditor textCellEditor = new TextCellEditor(viewer2.getTable());
        ICellEditorValidator validator = new ICellEditorValidator(){

            public String isValid( Object value ) {
                setErrorMessage(null);

            try{
                int parseInt = Integer.parseInt((String) value);
                if( parseInt<-1 ){
                    return message;
                }
            }catch(Exception e){
                return message;
            }
                return null;
            }
           
        };
        textCellEditor.setValidator(validator );
        viewer2.setCellEditors(new CellEditor[] { null, textCellEditor });
        final String scaleColumn = "scaleColumn"; //$NON-NLS-1$
       
        viewer2.setCellModifier(new ICellModifier() {

            public boolean canModify(Object element, String property) {
                return property.equals(scaleColumn);
            }

            public Object getValue(Object element, String property) {
                int scale2 = getScaleDenom((IMap) element);
                return Integer.toString(scale2);
            }

            public void modify(Object element, String property, Object value) {
                TableItem item = (TableItem) element;
                IMap map = (IMap) item.getData();
                try{
                    int parseInt = Integer.parseInt((String) value);
                    if( parseInt<-1 ){
                        setErrorMessage(message);
                    }
                    map.getBlackboard().putInteger(SCALE, parseInt);
                    viewer2.update(map, new String[]{SCALE});               
                    setErrorMessage(null);
                }catch (NumberFormatException e) {
                    setErrorMessage(message);
                    return ;
                }
            }
           
        });
       
        viewer2.setColumnProperties(new String[] {"1",scaleColumn}); //$NON-NLS-1$
        ColumnViewerEditorActivationStrategy editorActivationStrategy = new ColumnViewerEditorActivationStrategy(viewer2);
        TableViewerEditor.create(viewer2, editorActivationStrategy, ColumnViewerEditor.TABBING_VERTICAL);
    }
   
    @Override
    protected IBaseLabelProvider createLabelProvider(StructuredViewer viewer) {
        return new TableLabelProvider(new AdapterFactoryLabelProviderDecorator(ProjectExplorer.getProjectExplorer()
                .getAdapterFactory(), viewer));
    }
   
    public static int getScaleDenom( IMap map ) {
        Object scaleObject = map.getBlackboard().get(SCALE);
        int scale;
        if( scaleObject == null ){
            scale = (int) map.getViewportModel().getScaleDenominator();
        } else {
            scale = (Integer) scaleObject;
        }
        return scale;
    }
   
   
    private static class TableLabelProvider extends LabelProvider implements ITableLabelProvider{

        private final AdapterFactoryLabelProviderDecorator wrapped;
       
       
        public TableLabelProvider( AdapterFactoryLabelProviderDecorator wrapped ) {
            this.wrapped = wrapped;
        }

        public Image getColumnImage( Object element, int columnIndex ) {
            if( columnIndex==0 ){
                return wrapped.getImage(element);
            }
            return null;
        }

        public String getColumnText( Object element, int columnIndex ) {
            if( columnIndex==0 ){
                return wrapped.getText(element);
            }
            IMap map = (IMap) element;
            int scale = getScaleDenom(map);
            if( scale==-1 ){
                return Messages.MapSelectorPageWithScaleColumn_defaultScale;
            }
            return "1:"+scale; //$NON-NLS-1$
        }
       
        @Override
        public boolean isLabelProperty( Object element, String property ) {
            return property.equals(SCALE);
        }

        @Override
        public void dispose() {
            wrapped.dispose();
        }
       
    }
}
TOP

Related Classes of org.locationtech.udig.project.ui.wizard.export.image.MapSelectorPageWithScaleColumn$TableLabelProvider

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.