Package org.geotools.swt

Source Code of org.geotools.swt.SwtMapFrame

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    Lesser General Public License for more details.
*/
package org.geotools.swt;

import java.util.EnumSet;
import java.util.HashSet;

import org.eclipse.jface.action.ControlContribution;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.StatusLineLayoutData;
import org.eclipse.jface.action.StatusLineManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.geotools.map.MapContent;
import org.geotools.renderer.GTRenderer;
import org.geotools.renderer.lite.StreamingRenderer;
import org.geotools.swt.action.InfoAction;
import org.geotools.swt.action.OpenGeotiffAction;
import org.geotools.swt.action.OpenShapefileAction;
import org.geotools.swt.action.PanAction;
import org.geotools.swt.action.ResetAction;
import org.geotools.swt.action.ZoomInAction;
import org.geotools.swt.action.ZoomOutAction;
import org.geotools.swt.utils.CrsStatusBarButton;
import org.geotools.swt.utils.StatusBarNotifier;

/**
* An SWT frame containing a map display pane and a toolbar,
* status bar and map layer table.
*
* @author Michael Bedward
* @author Andrea Antonello (www.hydrologis.com)
*
* @source $URL$
*/
public class SwtMapFrame extends ApplicationWindow {

    /**
     * Constants for available toolbar buttons used with the
     * {@linkplain #enableTool} method.
     */
    public enum Tool {
        /**
         * Used to request that an empty toolbar be created
         */
        NONE,

        /**
         * Requests the feature info cursor tool
         */
        INFO,

        /**
         * Requests the pan cursor tool
         */
        PAN,

        /**
         * Requests the reset map extent cursor tool
         */
        RESET,

        /**
         * Requests the zoom in and out cursor tools
         */
        ZOOM;
    }

    /*
     * UI elements
     */
    private SwtMapPane mapPane;

    private HashSet<Tool> toolSet;
    private final boolean showLayerTable;
    private final MapContent content;
    private final GTRenderer renderer;
    private InfoAction infoAction;
    private PanAction panAction;
    private ResetAction resetAction;
    private ZoomInAction zoominAction;
    private ZoomOutAction zoomoutAction;

    private OpenShapefileAction openShapeAction;
    private OpenGeotiffAction openCoverageAction;

    /*
     * to see how overlay of shapes works, uncomment all the lines that
     * contain drawAction
     */
    // private DrawShapeAction drawAction;

    /**
     * Creates a new {@code JMapFrame} object with a toolbar, map pane and status
     * bar; sets the supplied {@code MapContent}; and displays the frame on the
     * AWT event dispatching thread. The context's title is used as the frame's
     * title.
     *
     * @param content the map context containing the layers to display
     */
    public static void showMap( MapContent content ) {
        final SwtMapFrame frame = new SwtMapFrame(true, true, true, true, content);
        // frame.getShell().setSize(500, 500);
        frame.setBlockOnOpen(true);
        frame.open();
    }

    /**
     * Default constructor. Creates a {@code JMapFrame} with
     * no context or renderer set
     */
    public SwtMapFrame( boolean showMenu, boolean showToolBar, boolean showStatusBar, boolean showLayerTable ) {
        this(showMenu, showToolBar, showStatusBar, showLayerTable, null);
    }

    /**
     * Constructs a new {@code JMapFrame} object with specified context
     * and a default renderer (an instance of {@link StreamingRenderer}).
     *
     * @param showLayerTable
     * @param showStatusBar
     * @param content the map context with layers to be displayed
     */
    public SwtMapFrame( boolean showMenu, boolean showToolBar, boolean showStatusBar, boolean showLayerTable, MapContent content ) {
        this(showMenu, showToolBar, showStatusBar, showLayerTable, content, new StreamingRenderer());
    }

    /**
     * Constructs a new {@code JMapFrame} object with specified context and renderer
     * @param showLayerTable
     * @param showStatusBar
     *
     * @param context the map context with layers to be displayed
     * @param renderer the renderer to be used
     */
    public SwtMapFrame( boolean showMenu, boolean showToolBar, boolean showStatusBar, boolean showLayerTable, MapContent content,
            GTRenderer renderer ) {
        super(null);
        this.showLayerTable = showLayerTable;
        this.content = content;
        this.renderer = renderer;

        // drawAction = new DrawShapeAction();
        infoAction = new InfoAction();
        panAction = new PanAction();
        resetAction = new ResetAction();
        zoominAction = new ZoomInAction();
        zoomoutAction = new ZoomOutAction();
        openShapeAction = new OpenShapefileAction();
        openCoverageAction = new OpenGeotiffAction();

        toolSet = new HashSet<Tool>();
        toolSet.addAll(EnumSet.allOf(Tool.class));
        if (showToolBar) {
            addToolBar(SWT.FLAT | SWT.WRAP);
        }
        if (showStatusBar) {
            addStatusLine();
        }
        if (showMenu) {
            addMenuBar();
        }

    }

    /**
     * This method is an alternative to {@linkplain #enableToolBar(boolean)}.
     * It requests that a tool bar be created with specific tools, identified
     * by {@linkplain SwtMapFrame.Tool} constants.
     * <code><pre>
     * myMapFrame.enableTool(Tool.PAN, Tool.ZOOM);
     * </pre></code>
     *
     * @param tool one or more {@linkplain SwtMapFrame.Tool} constants
     */
    public void enableTool( Tool... tool ) {
        for( Tool t : tool ) {
            toolSet.add(t);
        }
    }

    protected Control createContents( Composite parent ) {
        String title = content.getTitle();
        content.layers();
        if (title != null) {
            getShell().setText(title);
        }

        Composite mainComposite = null;
        if (showLayerTable) {
            SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL | SWT.NULL);
            mainComposite = sashForm;
            MapLayerComposite mapLayerTable = new MapLayerComposite(mainComposite, SWT.BORDER);
            mapPane = new SwtMapPane(mainComposite, SWT.BORDER | SWT.NO_BACKGROUND);
            mapPane.setMapContent(content);
            mapLayerTable.setMapPane(mapPane);
            sashForm.setWeights(new int[]{1, 3});
        } else {
            mainComposite = parent;
            mapPane = new SwtMapPane(mainComposite, SWT.BORDER | SWT.NO_BACKGROUND);
            mapPane.setMapContent(content);
        }

        // the map pane is the one element that is always displayed
        mapPane.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
        mapPane.setRenderer(renderer);

        // drawAction.setMapPane(mapPane);
        infoAction.setMapPane(mapPane);
        panAction.setMapPane(mapPane);
        resetAction.setMapPane(mapPane);
        zoominAction.setMapPane(mapPane);
        zoomoutAction.setMapPane(mapPane);
        openShapeAction.setMapPane(mapPane);
        openCoverageAction.setMapPane(mapPane);

        StatusLineManager statusLineManager = getStatusLineManager();
        if (statusLineManager != null) {
            IContributionItem filler = new ControlContribution("org.geotools.swt.SwtMapFrame.ID"){
                protected Control createControl( Composite parent ) {
                    Label almostParent = new Label(parent, SWT.NONE);
                    StatusLineLayoutData statusLineLayoutData = new StatusLineLayoutData();
                    statusLineLayoutData.widthHint = 1;
                    statusLineLayoutData.heightHint = 45;
                    almostParent.setLayoutData(statusLineLayoutData);
                    return almostParent;
                }
            };
            CrsStatusBarButton crsButton = new CrsStatusBarButton(mapPane);
            statusLineManager.add(filler);
            statusLineManager.add(crsButton);
            statusLineManager.update(true);
            new StatusBarNotifier(this, mapPane);
        }

        return mainComposite;
    }

    protected ToolBarManager createToolBarManager( int style ) {
        ToolBarManager tool_bar_manager = new ToolBarManager(style);
        // tool_bar_manager.add(drawAction);
        tool_bar_manager.add(infoAction);
        tool_bar_manager.add(panAction);
        tool_bar_manager.add(resetAction);
        tool_bar_manager.add(zoominAction);
        tool_bar_manager.add(zoomoutAction);

        return tool_bar_manager;
    }

    protected MenuManager createMenuManager() {
        MenuManager bar_menu = new MenuManager("");

        MenuManager file_menu = new MenuManager("&File");
        file_menu.add(openShapeAction);
        file_menu.add(openCoverageAction);

        MenuManager navigation_menu = new MenuManager("&Navigation");
        bar_menu.add(file_menu);
        bar_menu.add(navigation_menu);

        navigation_menu.add(infoAction);
        navigation_menu.add(panAction);
        navigation_menu.add(resetAction);
        navigation_menu.add(zoominAction);
        navigation_menu.add(zoomoutAction);
        return bar_menu;
    }

    /**
     * Get the map context associated with this frame.
     * Returns {@code null} if no map context has been set explicitly with the
     * constructor or {@linkplain #setMapContent}.
     *
     * @return the current {@code MapContent} object
     */
    public MapContent getMapContent() {
        return mapPane.getMapContent();
    }

    /**
     * Set the MapContent object used by this frame.
     *
     * @param content a MapContent instance
     * @throws IllegalArgumentException if context is null
     */
    public void setMapContent( MapContent content ) {
        if (content == null) {
            throw new IllegalArgumentException("content must not be null");
        }

        mapPane.setMapContent(content);
    }

    /**
     * Get the renderer being used by this frame.
     * Returns {@code null} if no renderer was set via the constructor
     * or {@linkplain #setRenderer}.
     *
     * @return the current {@code GTRenderer} object
     */
    public GTRenderer getRenderer() {
        return mapPane.getRenderer();
    }

    /**
     * Set the renderer to be used by this frame.
     *
     * @param renderer a GTRenderer instance
     * @throws IllegalArgumentException if renderer is null
     */
    public void setRenderer( GTRenderer renderer ) {
        if (renderer == null) {
            throw new IllegalArgumentException("renderer must not be null");
        }
        mapPane.setRenderer(renderer);
    }

    /**
     * Provides access to the instance of {@code JMapPane} being used
     * by this frame.
     *
     * @return the {@code JMapPane} object
     */
    public SwtMapPane getMapPane() {
        return mapPane;
    }

}
TOP

Related Classes of org.geotools.swt.SwtMapFrame

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.