Package org.locationtech.udig.project.ui.preferences

Source Code of org.locationtech.udig.project.ui.preferences.PaletteSelectionFieldEditor

/*
*    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.project.ui.preferences;

import org.locationtech.udig.ui.PlatformGIS;
import org.locationtech.udig.ui.graphics.Glyph;

import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.geotools.brewer.color.BrewerPalette;
import org.geotools.brewer.color.ColorBrewer;

/**
* Used to allow the MapPreferencePage to select a palette to draw on when assigning colours to
* new layers.
*/
public class PaletteSelectionFieldEditor extends FieldEditor {

    TableViewer palettes;
   
    public PaletteSelectionFieldEditor(String name, String string, Composite parent) {
        super(name, string, parent);
    }

    @Override
    protected void adjustForNumColumns( int numColumns ) {
        Control control = getLabelControl();
        ((GridData) control.getLayoutData()).horizontalSpan = numColumns;
        ((GridData) palettes.getControl().getLayoutData()).horizontalSpan = numColumns;
    }

    @Override
    protected void doFillIntoGrid( Composite parent, int numColumns ) {
        Control control = getLabelControl(parent);
        GridData gd = new GridData();
        gd.horizontalSpan = numColumns;
        control.setLayoutData(gd);

        palettes = getTableControl(parent);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.verticalAlignment = GridData.FILL;
        gd.horizontalSpan = numColumns;
        gd.grabExcessHorizontalSpace = true;
        gd.heightHint = 95;
        palettes.getControl().setLayoutData(gd);

//        buttonBox = getButtonBoxControl(parent);
//        gd = new GridData();
//        gd.verticalAlignment = GridData.BEGINNING;
//        buttonBox.setLayoutData(gd);
    }

    private TableViewer getTableControl(Composite parent) {
        TableViewer paletteTable = new TableViewer(new Table(parent, SWT.BORDER | SWT.V_SCROLL
                | SWT.H_SCROLL | SWT.FULL_SELECTION));
        TableLayout tableLayout = new TableLayout();
        tableLayout.addColumnData(new ColumnWeightData(1, 20, false));
        TableColumn firstColumn = new TableColumn(paletteTable.getTable(), SWT.LEFT);
        firstColumn.setAlignment(SWT.LEFT);
        paletteTable.getTable().setLayout(tableLayout);
//        gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
//        gridData.horizontalSpan = 2;
//        gridData.heightHint = 150;
//        gridData.widthHint = 175;

        paletteTable.setLabelProvider(new LabelProvider() {
            public Image getImage(Object element) {
                if (element instanceof BrewerPalette) {
                    BrewerPalette palette = (BrewerPalette) element;
                    return Glyph.palette(palette.getColors(palette.getMaxColors())).createImage();
                }
                return null;
            }

            public String getText(Object element) {
                if (element instanceof BrewerPalette) {
                    BrewerPalette palette = (BrewerPalette) element;
                    String text = null;
                    text = palette.getName() + ": " + palette.getDescription(); //$NON-NLS-1$
                    if (text == null) text = palette.getName();
                    return text;
                }
                return null;
            }
        });

        paletteTable.setContentProvider(new IStructuredContentProvider() {
           
            public Object[] getElements(Object inputElement) {
                if (inputElement instanceof ColorBrewer) {
                    ColorBrewer brewer = (ColorBrewer) inputElement;
                    return brewer.getPalettes();
                } else {
                    return new Object[0];
                }
            }

            public void dispose() {
            }

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

        paletteTable.setSorter(new ViewerSorter() {

            @Override
            public int compare( Viewer viewer, Object e1, Object e2 ) {
                if (e1 instanceof BrewerPalette && e2 instanceof BrewerPalette) {
                    BrewerPalette p1 = (BrewerPalette) e1;
                    BrewerPalette p2 = (BrewerPalette) e2;
                    //alphabetical by name
                    return p1.getName().compareTo(p2.getName());
                } else return super.compare(viewer, e1, e2);
            }
           
        });
       
        paletteTable.setInput(PlatformGIS.getColorBrewer());
        return paletteTable;
    }
   
    @Override
    protected void doLoad() {
        if (palettes != null) {
            select(getPreferenceStore().getString(getPreferenceName()));
        }
    }

    @Override
    protected void doLoadDefault() {
        if (palettes != null) {
            select(getPreferenceStore().getDefaultString(getPreferenceName()));
        }
    }

    private void select(String paletteName) {
        ColorBrewer brewer = PlatformGIS.getColorBrewer();
        if (paletteName == null || !brewer.hasPalette(paletteName))
            return;
        BrewerPalette palette = brewer.getPalette(paletteName);
        palettes.setSelection(new StructuredSelection(palette));
    }
   
    @Override
    protected void doStore() {
        ISelection select = palettes.getSelection();
        if (select == null) {
            getPreferenceStore().setToDefault(getPreferenceName());
            return;
        }
        BrewerPalette palette = (BrewerPalette) ((StructuredSelection) select).getFirstElement();
        getPreferenceStore().setValue(getPreferenceName(), palette.getName());
    }

    @Override
    public int getNumberOfControls() {
        return 2;
    }

}
TOP

Related Classes of org.locationtech.udig.project.ui.preferences.PaletteSelectionFieldEditor

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.