Hi Mohammed, hi Matthias,

I've done some more work on Mohammed's code (attached), but have still some questions before comitting

I18N : done for english and french and prepared for other languages
Display : I have reworked the layout a bit, and hopefully solved the problem showed in Matthias's screenshot
Extent : I'm not sure why it should be aligned on top
Lines 197, 444, 457, 541 : I did not notice changes. Maybe Mohammed already changed it

As matthias, I could not use Mohammed's patch (plain file is OK, or maybe you have an option for more standard patch)

My main concern is that : xmin, ymin, xmax, ymax displayed in the properties window are not the one I can get from layerViewPanel (jpeg with jgw file) :
- displayed : 0.5, -0.5
- layerViewPanel : 0, 0

Michaël

Le 12/02/2011 18:34, Matthias Scholz a écrit :
Hi Rashad,

thanks for your work, but there are some things to do for you.

- I18N in LayerPropertiesPlugIn and the keys in the english default lang files (Extent, xmin, xmax, ymin, ymax...) - The display of the dialog is now a little bit wrong, because not all informations are visible. Please see the attachment. I know that this is not caused by you, because the problem is the dialog itself. The content isn't scale with the window size. This should be fixed generally.
- the word "Extend:" should be aligned on top
- can you please explain your changes in line 197, 444, 457, 541 (linenumbers of the original source). I do not really understand why you have changed some conditions?

And finally it's ok if you mail the plain java source file. Your diff seems to be wrong, because in the patch file are the whole source included as a difference.

Regards

Matthias
please apply this patch for showing layer extent on layerproperties contextmenu

--
Thanks && Regards
Rashad
------------------------------------------------------------------------

------------------------------------------------------------------------------ The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
------------------------------------------------------------------------

_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel


------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb


_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

/*
 * The Unified Mapping Platform (JUMP) is an extensible, interactive GUI 
 * for visualizing and manipulating spatial features with geometry and 
attributes.
 *
 * JUMP is Copyright (C) 2003 Vivid Solutions
 *
 * This program implements extensions to JUMP and is
 * Copyright (C) 2005 Integrated Systems Analysts, Inc.
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program 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 General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 * 
 * For more information, contact:
 *
 * Integrated Systems Analysts, Inc.
 * 630C Anchors St., Suite 101
 * Fort Walton Beach, Florida
 * USA
 *
 * (850)862-7321
 */
package org.openjump.core.ui.plugin.layer;

import com.vividsolutions.jts.util.Assert;

import com.vividsolutions.jump.I18N;
import com.vividsolutions.jump.workbench.WorkbenchContext;
import com.vividsolutions.jump.workbench.model.Layer;
import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn;
import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
import com.vividsolutions.jump.workbench.plugin.PlugInContext;
import com.vividsolutions.jump.workbench.ui.MultiInputDialog;
import com.vividsolutions.jump.workbench.ui.plugin.FeatureInstaller;
import com.vividsolutions.jump.workbench.ui.renderer.style.ColorThemingStyle;
import com.vividsolutions.jump.feature.FeatureCollectionWrapper;
import com.vividsolutions.jump.feature.Feature;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jump.io.datasource.*;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Hashtable;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JSlider;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import java.text.*;
import java.util.Map;

public class LayerPropertiesPlugIn extends AbstractPlugIn 
{
    private final static String LAST_TAB_KEY = 
LayerPropertiesPlugIn.class.getName() +
        " - LAST TAB";
    private final static String LAYER_PROPERTIES = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Layer-Properties");
    private final static String INFO = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Info");  
//information
    private final static String LAYER_NAME = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Layer-Name");
    private final static String NUMBER_OF_LAYERS = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Number-of-Layers");
    private final static String NUMBER_OF_FEATURES = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Number-of-Features");
    private final static String NUMBER_OF_POINTS = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Number-of-Points");
 
    private final static String GEOMETRY_TYPE = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Geometry-Type");
  //Polygon, Polyline, etc.
    private final static String NUMBER_OF_ATTRIBUTES = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Number-of-Attributes");
    private final static String DATASOURCE_CLASS = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.DataSource-Class");
  //class name
    private final static String SOURCE_PATH = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Source-Path");
  //directory path of source layer
    private final static String NO_FEATURES = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.No-Features");
 //no features were found
    private final static String MULTIPLE_GEOMETRY_TYPES = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Multiple-geometry-types");
  //mixed
    private final static String MULTIPLE_SOURCE_TYPES = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Multiple-Source-Types");
    private final static String NULL_GEOMETRIES = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Null-Geometries");
    private final static String NOT_SAVED = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Not-Saved"); 
//the layer is unsaved
    private final static String AVERAGE_PER_LAYER =  
        " (" + 
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.average-per-layer")
 +")";
    private final static String MULTIPLE_SOURCES = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Multiple-Sources");
    private final static String STYLES = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Styles");
    private final static String PROPORTIONAL_TRANSPARENCY_ADJUSTER = 
        
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.Proportional-Transparency-Adjustment");
        private final static String CHARSET =
                
I18N.get("org.openjump.core.ui.io.file.DataSourceFileLayerLoader.charset");
        private final static String EXTENT =
            
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.extent");
    private final static String XMIN =
            
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.xmin");
        private final static String YMIN =
            
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.ymin");
        private final static String XMAX =
            
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.xmax");
        private final static String YMAX =
            
I18N.get("org.openjump.core.ui.plugin.layer.LayerPropertiesPlugIn.ymax");
    private WorkbenchContext workbenchContext;
    private InfoPanel infoPanel;
    private StylePanel stylePanel;
    private Layer[] layers;
    private Envelope extent;
    private int[] currTransArray;
    private boolean styleChanged = false;
    
    public interface PropertyPanel {
        public String getTitle();
        public void updateStyles();
        /**
         * @return an error message, or null if the input is valid
         */
        public String validateInput();
    }
    
    public LayerPropertiesPlugIn() 
    {
    }
    
    public void initialize(PlugInContext context) throws Exception
    {
        this.workbenchContext = context.getWorkbenchContext();
        FeatureInstaller featureInstaller = new 
FeatureInstaller(workbenchContext);
        JPopupMenu layerNamePopupMenu = workbenchContext.getWorkbench()
                                                        .getFrame()
                                                        
.getLayerNamePopupMenu();
        featureInstaller.addPopupMenuItem(layerNamePopupMenu,
            this, LAYER_PROPERTIES + "..." + "{pos:4}",
            false, null, 
            createEnableCheck(workbenchContext));        
    }
    
    public boolean execute(PlugInContext context) throws Exception 
    {
        styleChanged = false;
        layers = context.getSelectedLayers();
        extent = context.getSelectedLayerEnvelope();
        currTransArray = new int[layers.length];
        
        for (int i = 0; i < layers.length; i++)
                currTransArray[i] = 255 - getAlpha(layers[i]);
        
                ArrayList oldStyleList = new ArrayList(layers.length);  //save 
to restore if cancel
                for (int i = 0; i < layers.length; i++) {
                        Object layerable = layers[i];
                        if (layerable instanceof Layer) {
                                oldStyleList.add( ((Layer) 
layerable).cloneStyles()); // copy
                        }
                }
        
        infoPanel = new InfoPanel();
        stylePanel = new StylePanel();
        MultiInputDialog dialog = new 
MultiInputDialog(context.getWorkbenchFrame(),
                        LAYER_PROPERTIES, true);
        //dialog.setInset(0);
        final ArrayList propertyPanels = new ArrayList();
        propertyPanels.add(infoPanel);
        propertyPanels.add(stylePanel);
        //infoPanel.setPreferredSize(new Dimension(350, 200));
        //stylePanel.setPreferredSize(new Dimension(350, 200));
        JTabbedPane tabbedPane = new JTabbedPane();

        for (Iterator i = propertyPanels.iterator(); i.hasNext();) 
        {
            final PropertyPanel propertyPanel = (PropertyPanel) i.next();
            tabbedPane.add((Component) propertyPanel, propertyPanel.getTitle());
        }

        dialog.addRow(tabbedPane);
        tabbedPane.setSelectedComponent(find(propertyPanels,
                (String) context.getWorkbenchContext().getWorkbench()
                                .getBlackboard().get(LAST_TAB_KEY,
                    ((PropertyPanel) 
propertyPanels.iterator().next()).getTitle())));

        dialog.setVisible(true);
        
context.getWorkbenchContext().getWorkbench().getBlackboard().put(LAST_TAB_KEY,
            ((PropertyPanel) tabbedPane.getSelectedComponent()).getTitle());

        
        if ((! dialog.wasOKPressed()) && styleChanged) {
                if (oldStyleList != null) {  // restore the original styles
                        int j = 0;
                        for (int i = 0; i < layers.length; i++) {
                                Object layerable = layers[i];
                                if (layerable instanceof Layer) {
                                        Layer layer = (Layer) layerable;
                                        layer.setStyles( (Collection) 
oldStyleList.get(j++));
                                }
                        }
                }               
        }
        if ( !styleChanged /*existing variable of this class*/){
            reportNothingToUndoYet(context);
        }
        return true;
    }

    private Component find(Collection propertyPanels, String title) {
        for (Iterator i = propertyPanels.iterator(); i.hasNext();) {
                PropertyPanel propertyPanel = (PropertyPanel) i.next();

            if (propertyPanel.getTitle().equals(title)) {
                return (Component) propertyPanel;
            }
        }

        Assert.shouldNeverReachHere();

        return null;
    }

    public static MultiEnableCheck createEnableCheck(WorkbenchContext 
workbenchContext)
    {
        EnableCheckFactory checkFactory = new 
EnableCheckFactory(workbenchContext);        
        return new MultiEnableCheck()
           
.add(checkFactory.createWindowWithSelectionManagerMustBeActiveCheck())
           .add(checkFactory.createAtLeastNLayersMustBeSelectedCheck(1));
    }
    
    public static ColorThemingStyle getColorThemingStyleIfEnabled(Layer layer){
        ColorThemingStyle someStyle = null;
        final Collection currentStyles = layer.getStyles();
        for (Iterator j = currentStyles.iterator(); j.hasNext();) {
                Object style = j.next();
                if (style instanceof ColorThemingStyle) {
                        if (((ColorThemingStyle) style).isEnabled())
                                someStyle = (ColorThemingStyle) style;
                }
        }
        return someStyle;       
    }
    
    public static int getAlpha(Layer layer) {
        ColorThemingStyle cts = getColorThemingStyleIfEnabled(layer);
        int alpha = 0;
        if (cts == null)
                alpha = layer.getBasicStyle().getAlpha();                       
                                        
        else 
                alpha = cts.getDefaultStyle().getAlpha();
        return alpha;
    }
    
    public static void setAlpha(Layer layer, int alpha) {
        layer.getBasicStyle().setAlpha(alpha);                                  
                        
        ColorThemingStyle cts = getColorThemingStyleIfEnabled(layer);
        if (cts != null) cts.setAlpha(alpha);
    }

    private class InfoPanel extends JPanel implements PropertyPanel 
    {
        //private BorderLayout borderLayout = new BorderLayout();
        private JLabel label_Name_L = new JLabel();
        private JLabel label_NumItems_L = new JLabel();
        private JLabel label_NumPts_L = new JLabel();
        private JLabel label_GeoType_L = new JLabel();
        private JLabel label_NumAtts_L = new JLabel();
        private JLabel label_DSClass_L = new JLabel();
                private JLabel label_Charset_L = new JLabel();
        private JLabel label_Path_L = new JLabel();
        private JLabel label_Extent_L = new JLabel();
        
        private JTextArea label_Name_R = new JTextArea();
        private JLabel label_NumItems_R = new JLabel();
        private JLabel label_NumPts_R = new JLabel();
        private JLabel label_GeoType_R = new JLabel();
        private JLabel label_NumAtts_R = new JLabel();
        private JLabel label_DSClass_R = new JLabel();
                private JLabel label_Charset_R = new JLabel();
        private JTextArea label_Path_R = new JTextArea();
                private JTextArea label_Extent_R = new JTextArea();

        private InfoPanel() 
        {
            super(new GridBagLayout());
            
            label_Name_R.setFont(this.getFont());
            label_Name_R.setLineWrap(true);
            label_Name_R.setBackground(this.getBackground());
            label_Name_R.setSize(200,30);
            
            label_Path_R.setFont(this.getFont());
                label_Path_R.setLineWrap(true);
                label_Path_R.setBackground(this.getBackground());
                label_Path_R.setSize(200,50);
                
            label_Extent_R.setFont(this.getFont());
            label_Extent_R.setLineWrap(true);
            label_Extent_R.setBackground(this.getBackground());
            label_Extent_R.setSize(200,50);
            
            if (layers.length == 1) {
                label_Name_L.setText(LAYER_NAME + ": ");
                label_Extent_L.setText(EXTENT + ": ");  
            }
            else
                label_Name_L.setText(NUMBER_OF_LAYERS + ": ");
            
            label_NumItems_L.setText(NUMBER_OF_FEATURES + ": ");
            label_NumPts_L.setText(NUMBER_OF_POINTS + ": ");
            label_GeoType_L.setText(GEOMETRY_TYPE + ": ");
            label_NumAtts_L.setText(NUMBER_OF_ATTRIBUTES + ": ");
            label_DSClass_L.setText(DATASOURCE_CLASS + ": ");
                        label_Charset_L.setText(CHARSET + ": ");
            label_Path_L.setText(SOURCE_PATH + ": ");
 
            
                setInfo(layers);
                
            //column one labels
            int row = 0;
            
            add(label_Name_L, new GridBagConstraints(0, row++, 1, 1, 0.0, 0.0,
                    GridBagConstraints.NORTHEAST, GridBagConstraints.NONE,
                    new Insets(0, 0, 0, 5), 0, 0));
                
            add(label_NumItems_L, new GridBagConstraints(0, row++, 1, 1, 0.0, 
0.0,
                GridBagConstraints.EAST, GridBagConstraints.NONE,
                new Insets(0, 0, 0, 5), 0, 0));
            
            add(label_NumPts_L, new GridBagConstraints(0, row++, 1, 1, 0.0, 0.0,
                    GridBagConstraints.EAST, GridBagConstraints.NONE,
                    new Insets(0, 0, 0, 5), 0, 0));
                
            add(label_GeoType_L, new GridBagConstraints(0, row++, 1, 1, 0.0, 
0.0,
                    GridBagConstraints.EAST, GridBagConstraints.NONE,
                    new Insets(0, 0, 0, 5), 0, 0));
                
            add(label_NumAtts_L, new GridBagConstraints(0, row++, 1, 1, 0.0, 
0.0,
                    GridBagConstraints.EAST, GridBagConstraints.NONE,
                    new Insets(0, 0, 0, 5), 0, 0));
                
            add(label_DSClass_L, new GridBagConstraints(0, row++, 1, 1, 0.0, 
0.0,
                    GridBagConstraints.EAST, GridBagConstraints.NONE,
                    new Insets(0, 0, 0, 5), 0, 0));

                        // [Matthias Scholz 5.Sept.2010] Charset is only viewed 
if we have a Shapefile
          
                        if (layers.length == 1 &&
                            layers[0].getDataSourceQuery() != null &&
                            
layers[0].getDataSourceQuery().getDataSource().getClass().getName().equals("com.vividsolutions.jump.io.datasource.StandardReaderWriterFileDataSource$Shapefile"))
 {
                                add(label_Charset_L, new GridBagConstraints(0, 
row++, 1, 1, 0.0, 0.0,
                                                GridBagConstraints.EAST, 
GridBagConstraints.NONE,
                                                new Insets(0, 0, 0, 5), 0, 0));
                        }
                        

                
            add(label_Path_L, new GridBagConstraints(0, row++, 1, 1, 0.0, 0.0,
                    GridBagConstraints.NORTHEAST, GridBagConstraints.NONE,
                    new Insets(10, 0, 0, 5), 0, 0));
            
                        if (layers.length == 1){
                                add(label_Extent_L, new GridBagConstraints(0, 
row++, 1, 1, 0.0, 0.0,
                                                GridBagConstraints.EAST, 
GridBagConstraints.NONE,
                                                new Insets(0, 0, 0, 5), 0, 0));
                        }
                
            //column two info
            row = 0;
            add(label_Name_R, new GridBagConstraints(1, row++, 1, 1, 0.0, 0.0,
                    GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
                    new Insets(0, 0, 0, 0), 0, 0));
                
            add(label_NumItems_R, new GridBagConstraints(1, row++, 1, 1, 0.0, 
0.0,
                    GridBagConstraints.WEST, GridBagConstraints.NONE,
                    new Insets(0, 0, 0, 0), 0, 0));
                
            add(label_NumPts_R, new GridBagConstraints(1, row++, 1, 1, 0.0, 0.0,
                    GridBagConstraints.WEST, GridBagConstraints.NONE,
                    new Insets(0, 0, 0, 0), 0, 0));
            
            add(label_GeoType_R, new GridBagConstraints(1, row++, 1, 1, 0.0, 
0.0,
                    GridBagConstraints.WEST, GridBagConstraints.NONE,
                    new Insets(0, 0, 0, 0), 0, 0));
                
            add(label_NumAtts_R, new GridBagConstraints(1, row++, 1, 1, 0.0, 
0.0,
                    GridBagConstraints.WEST, GridBagConstraints.NONE,
                    new Insets(0, 0, 0, 0), 0, 0));
                
            add(label_DSClass_R, new GridBagConstraints(1, row++, 1, 1, 0.0, 
0.0,
                    GridBagConstraints.WEST, GridBagConstraints.NONE,
                    new Insets(0, 0, 0, 0), 0, 0));

                        // [Matthias Scholz 5.Sept.2010] Charset is only viewed 
if we have a Shapefile
                        if (layers.length == 1 && 
                            layers[0].getDataSourceQuery() != null &&
                            
layers[0].getDataSourceQuery().getDataSource().getClass().getName().equals("com.vividsolutions.jump.io.datasource.StandardReaderWriterFileDataSource$Shapefile"))
 {
                                add(label_Charset_R, new GridBagConstraints(1, 
row++, 1, 1, 0.0, 0.0,
                                                GridBagConstraints.WEST, 
GridBagConstraints.NONE,
                                                new Insets(0, 0, 0, 0), 0, 0));
                                }
                
            add(label_Path_R, new GridBagConstraints(1, row++, 1, 1, 0.0, 0.0,
                    GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
                    new Insets(10, 0, 0, 0), 0, 0));
            
                        if (layers.length == 1){
                    add(label_Extent_R, new GridBagConstraints(1, row++, 1, 1, 
0.0, 0.0,
                            GridBagConstraints.NORTHWEST, 
GridBagConstraints.NONE,
                            new Insets(10, 0, 0, 0), 0, 0));
                        }
        }

        public String getTitle() 
        {
            return INFO;
        }

        public void updateStyles() 
        {
        }

        public String validateInput() 
        {
            return null;
        }
        
        private void setInfo(Layer[] layers)
        {
                if (layers.length == 1)
                        label_Name_R.setText(layers[0].getName());
                else
                        label_Name_R.setText("" + layers.length);
                
                String sourcePath = NOT_SAVED;
                String geoClass = "";
                String sourceClass = "";
                int numFeatures = 0;
                int numPts = 0;
                int numAtts = 0;
                Geometry geo = null;
                boolean multipleGeoTypes = false;
                boolean multipleSourceTypes = false;
                
                for (int l = 0; l < layers.length; l++)
                {
                        
                        FeatureCollectionWrapper fcw = 
layers[l].getFeatureCollectionWrapper();
                        numFeatures += fcw.size();
                        numAtts += fcw.getFeatureSchema().getAttributeCount() - 
1;
                        
                        for (Iterator i = fcw.getFeatures().iterator(); 
i.hasNext();)
                        {
                                geo = ((Feature)i.next()).getGeometry();
                                
                                if (geo != null)
                                {
                                        numPts += geo.getNumPoints();
                                        
                                        if (geoClass.equals(""))
                                                geoClass = 
geo.getClass().getName();
                                        else if (! 
geo.getClass().getName().equals(geoClass))
                                                multipleGeoTypes = true;
                                }
                        }
                                
                        DataSourceQuery dsq = layers[l].getDataSourceQuery();
                        
                        if (dsq != null)
                        {
                                String dsqSourceClass = 
dsq.getDataSource().getClass().getName();
                                
                                if (sourceClass.equals(""))
                                        sourceClass = dsqSourceClass;
                                else if (! sourceClass.equals(dsqSourceClass))
                                        multipleSourceTypes = true;
                                
                                Object fnameObj = 
dsq.getDataSource().getProperties().get("File");
                                
                                if (fnameObj != null)
                                        sourcePath = fnameObj.toString();
                        }
                } //end of looping through all the layers
                
        //determine the geoClass
                if (numFeatures == 0)
                        geoClass = NO_FEATURES;
                else if (multipleGeoTypes)
                        geoClass = MULTIPLE_GEOMETRY_TYPES;
                else if (geoClass.equals(""))
                        geoClass = NULL_GEOMETRIES;
                else
                {
                        int dotPos = geoClass.lastIndexOf(".");
                        
                        if (dotPos > 0)
                                geoClass = geoClass.substring(dotPos + 1);
                }
                
                //determine the sourceClass
                if (sourceClass.equals(""))
                        sourceClass = NOT_SAVED;
                else if (multipleSourceTypes)
                        sourceClass = MULTIPLE_SOURCE_TYPES;
                else
                {
                        int dotPos = sourceClass.lastIndexOf(".");
                        
                        if (dotPos > 0)
                                sourceClass = sourceClass.substring(dotPos + 1);
                        
                        dotPos = sourceClass.lastIndexOf("$");
                        
                        if (dotPos > 0)
                                sourceClass = sourceClass.substring(dotPos + 1);
                }
                
                label_GeoType_R.setText(geoClass);
                
                if (layers.length == 1)
                {
                        label_NumItems_R.setText("" + numFeatures);
                        label_NumPts_R.setText("" + numPts);
                        label_NumAtts_R.setText("" + numAtts);
                }
                else
                {
                        DecimalFormat df = new DecimalFormat("0.0");
                        double numLayers = layers.length;
                        double avgNumFeatures = numFeatures / numLayers;
                        double avgNumPts = numPts / numLayers;
                        double avgNumAtts = numAtts / numLayers;
                        label_NumItems_R.setText(numFeatures + "  " + 
df.format(avgNumFeatures) + AVERAGE_PER_LAYER);
                        label_NumPts_R.setText(numPts + "  " + 
df.format(avgNumPts) + AVERAGE_PER_LAYER);
                        label_NumAtts_R.setText(df.format(avgNumAtts) + 
AVERAGE_PER_LAYER);
                }
                
                label_DSClass_R.setText(sourceClass);
                        // fetch the charset from the layer properties
                        String charsetName = null;
                        DataSourceQuery dsq = layers[0].getDataSourceQuery();
                        if (dsq != null) {
                            Map properties = 
dsq.getDataSource().getProperties();
                            charsetName = (String) properties.get("charset");
                            // if the layer do not have the charset property, 
set with default charset
                            if (charsetName == null) {
                                    charsetName = 
Charset.defaultCharset().displayName();
                                    properties.put("charset", charsetName);
                            }
                        }
                        else {
                            // if the layer does not come from a datasource
                            charsetName = 
Charset.defaultCharset().displayName();
                        }
                        // and finaly set the text of the label
                        label_Charset_R.setText(charsetName);
                label_Path_R.setText(sourcePath);
                
                if ((layers.length > 1) && (! 
sourcePath.equalsIgnoreCase(NOT_SAVED)))
                        label_Path_R.setText(MULTIPLE_SOURCES);
                
                if ((layers.length == 1)) {
                        String ext = " " + XMIN + ":" + extent.getMinX() +
                                   "\n " + YMIN + ":" + extent.getMinY() +
                                   "\n " + XMAX + ":" + extent.getMaxX() +
                                   "\n " + YMAX + ":" + extent.getMaxY();
                        label_Extent_R.setText(ext);
                        
                }
                
        }
    }
    
    private class StylePanel extends JPanel implements PropertyPanel 
    {
        private JSlider transparencySlider = new JSlider();

        private StylePanel() 
            {
                Box box = new Box(BoxLayout.Y_AXIS);
                JLabel transparencySliderLabel =
                    new JLabel(PROPORTIONAL_TRANSPARENCY_ADJUSTER, 
SwingConstants.CENTER);
                transparencySliderLabel.setAlignmentX(CENTER_ALIGNMENT);
                box.add(transparencySliderLabel);
                Hashtable labelTable = new Hashtable();
                labelTable.put(new Integer(0), new JLabel("100"));
                labelTable.put(new Integer(10), new JLabel("80"));
                labelTable.put(new Integer(20), new JLabel("60"));
                labelTable.put(new Integer(30), new JLabel("40"));
                labelTable.put(new Integer(40), new JLabel("20"));
                labelTable.put(new Integer(50), new JLabel("0"));
                labelTable.put(new Integer(60), new JLabel("20"));
                labelTable.put(new Integer(70), new JLabel("40"));
                labelTable.put(new Integer(80), new JLabel("60"));
                labelTable.put(new Integer(90), new JLabel("80"));
                labelTable.put(new Integer(100), new JLabel("100"));
                transparencySlider.setPreferredSize(new Dimension(250, 50));
                transparencySlider.setPaintLabels(true);
                transparencySlider.setPaintTicks(true);
                transparencySlider.setLabelTable(labelTable);
                transparencySlider.setMajorTickSpacing(10);
                transparencySlider.setMinimum(0);
                transparencySlider.setMaximum(100);
                transparencySlider.setValue(50);
                box.add(transparencySlider);
            add(box);
                transparencySlider.addChangeListener(new ChangeListener()
                {
                    public void stateChanged(ChangeEvent e) 
                    {
                        JSlider source = (JSlider)e.getSource();
                        
                        if (!source.getValueIsAdjusting()) 
                        {
                            int sliderVal = (int)source.getValue();
                            double percentChg;
                            
                                for (int i = 0; i < layers.length; i++)
                                {
                                        Layer layer = layers[i];
                                        int currTrans = currTransArray[i];
                                    double newTrans = currTrans;
                                    
                                    if (sliderVal < 50)
                                    {
                                        percentChg = ((50 - sliderVal) / 50d);
                                        newTrans = currTrans - (currTrans * 
percentChg);
                                    }
                                    else if (sliderVal > 50)
                                    {
                                        percentChg = (sliderVal - 50) / 50d;
                                        newTrans = currTrans + ((255 - 
currTrans) * percentChg);
                                    }
                                    
                                        setAlpha(layer, 255 - (int)newTrans);
                                    layer.fireAppearanceChanged();
                                    styleChanged = true;
                                }
                        }    
                    }
                });
            }
            
            public String getTitle() 
            {
                return STYLES;
            }
        
            public void updateStyles() 
            {
            }
        
            public String validateInput() 
            {
                return null;
            }
    }
    
}
------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to