[Schmitzm-commits] r401 - branches/1.0-gt2-2.6/src/schmitzm/geotools/gui

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Mon Sep 14 15:15:52 CEST 2009


Author: mojays
Date: 2009-09-14 15:15:51 +0200 (Mon, 14 Sep 2009)
New Revision: 401

Modified:
   branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/JMapPane.java
Log:
Reference to AttributeMetaData replaces by general is/setMapLayerSelectable(.)

Modified: branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/JMapPane.java
===================================================================
--- branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/JMapPane.java	2009-09-14 12:24:50 UTC (rev 400)
+++ branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/JMapPane.java	2009-09-14 13:15:51 UTC (rev 401)
@@ -75,6 +75,7 @@
 import org.geotools.map.DefaultMapContext;
 import org.geotools.map.MapContext;
 import org.geotools.map.MapLayer;
+import org.geotools.map.event.MapLayerListEvent;
 import org.geotools.parameter.Parameter;
 import org.geotools.referencing.CRS;
 import org.geotools.renderer.GTRenderer;
@@ -109,11 +110,10 @@
 import schmitzm.geotools.map.event.JMapPaneEvent;
 import schmitzm.geotools.map.event.JMapPaneListener;
 import schmitzm.geotools.map.event.MapAreaChangedEvent;
+import schmitzm.geotools.map.event.MapLayerListAdapter;
 import schmitzm.geotools.map.event.ScaleChangedEvent;
 import schmitzm.geotools.styling.StylingUtil;
 import schmitzm.swing.SwingUtil;
-import skrueger.AttributeMetaData;
-import skrueger.geotools.StyledLayerUtil;
 
 import com.vividsolutions.jts.geom.Coordinate;
 import com.vividsolutions.jts.geom.Envelope;
@@ -286,44 +286,12 @@
 
 	protected gtmig.org.geotools.swing.MouseSelectionTracker selTracker = new gtmig.org.geotools.swing.MouseSelectionTracker() {
 		public void mouseDragged(final MouseEvent event) {
-			// Wenn
-			// Fenster
-			// -
-			// Selektions
-			// -
-			// Modus
-			// auf
-			// NICHTS
-			// steht
-			// (
-			// z
-			// .
-			// B
-			// .
-			// Info
-			// -
-			// Tool
-			// )
-			// ,
-			// keinen
-			// Rahmen
-			// beim
-			// Draggen
-			// zeichnen
+			// Wenn Fenster-Selektions-Modus auf NICHTS steht (z.B. Info-Tool),
+			// keinen Rahmen beim Draggen zeichnen
 			if (selState == NONE)
 				return;
-			// Wenn
-			// Zoom
-			// bereits
-			// durch
-			// Oberklasse
-			// aktiviert
-			// wird
-			// ,
-			// malt
-			// diese
-			// das
-			// Rectangle
+			// Wenn Zoom bereits durch Oberklasse aktiviert wird,
+			// malt diese das Rectangle
 			if (getState() == ZOOM_IN || getState() == ZOOM_OUT)
 				return;
 
@@ -331,70 +299,14 @@
 		}
 
 		protected void selectionPerformed(int ox, int oy, int px, int py) {
-			// MS
-			// ,
-			// 20.05
-			// .2008
-			// :
-			// In
-			// performSelectionEvent
-			// (
-			// .
-			// .
-			// )
-			// wurde
-			// das
-			// Zoomen
-			// wieder
-			// reingenommen
-			// ,
-			// damit
-			// bei
-			// Fenster
-			// -
-			// Auswahl
-			// auch
-			// gezoomt
-			// wird
-			// ,
-			// wenn
-			// der
-			// Klick
-			// -
-			// Zoom
-			// (
-			// setState
-			// (
-			// .
-			// )
-			// )
-			// deaktiviert
-			// ist
-			// .
-			// Wenn
-			// dieser
-			// jedoch
-			// ebenfalls
-			// aktiviert
-			// ist
-			// ,
-			// darf
-			// an
-			// dieser
-			// Stelle
-			// nicht
-			// nochmal
-			// gezoomt
-			// werden
-			// ,
-			// da
-			// sonst
-			// 2
-			// x
-			// gezoomt
-			// wird
-			// !
-			// !
+			// MS, 20.05.2008:
+		    // In performSelectionEvent(.) wurde das Zoomen wieder
+			// reingenommen, damit bei Fenster-Auswahl auch gezoomt
+			// wird, wenn der Klick-Zoom (setState(.)) deaktiviert
+			// ist.
+			// Wenn dieser jedoch ebenfalls aktiviert ist, darf an
+			// dieser Stelle nicht nochmal gezoomt werden, da sonst
+			// 2x gezoomt wird!!
 			if (getState() != ZOOM_IN)
 				performSelectionEvent(ox, oy, px, py);
 		}
@@ -429,8 +341,7 @@
 	private Component mouseWaitCursorComponent;
 
 	/** Cursor wenn kein Mausbutton gedrueckt wird. default oder SwingUtil.PAN **/
-	private Cursor normalCursor = Cursor
-			.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
+	private Cursor normalCursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
 
 	/**
 	 * Manuell gesetzter statischer Cursor, unabhaengig von der aktuellen
@@ -443,8 +354,10 @@
 	/** An (transparent) image to paint over the map in the lower right corner **/
 	private BufferedImage mapImage = null;
 
-	/** A cache to optionally supply AttributeMetaData to the {@link JMapPane}. */
-	final protected HashMap<String, Map<Integer, AttributeMetaData>> attributeMetaDataMapCache = new HashMap<String, Map<Integer, AttributeMetaData>>();
+	/** Holds a flag for each layer, whether it is regarded or ignored on 
+	 *  {@link #SELECT_TOP}, {@link #SELECT_ALL} and {@link #SELECT_ONE_FROM_TOP}
+	 *  actions. */
+	protected HashMap<MapLayer, Boolean> mapLayerSelectable = new HashMap<MapLayer, Boolean>();
 
 	/**
 	 * Erzeugt ein neues MapPane.
@@ -454,11 +367,7 @@
 	 *            {@link BorderLayout})
 	 * @param isDoubleBuffered
 	 *            siehe Konstruktor der
-<<<<<<< .mine
 	 *            {@linkplain org.gtmig.org.geotools.swing.JMapPane#JMapPane(LayoutManager,boolean,GTRenderer,MapContext)
-=======
-	 *            {@linkplain org.geotools.swing.JMapPane#JMapPane(LayoutManager,boolean,GTRenderer,MapContext)
->>>>>>> .r387
 	 *            Oberklasse}
 	 * @param renderer
 	 *            Renderer fuer die graphische Darestellung (z.B.
@@ -480,11 +389,7 @@
 	 *            {@link BorderLayout})
 	 * @param isDoubleBuffered
 	 *            siehe Konstruktor der
-<<<<<<< .mine
 	 *            {@linkplain org.gtmig.org.geotools.swing.JMapPane#JMapPane(LayoutManager,boolean,GTRenderer,MapContext)
-=======
-	 *            {@linkplain org.geotools.swing.JMapPane#JMapPane(LayoutManager,boolean,GTRenderer,MapContext)
->>>>>>> .r387
 	 *            Oberklasse}. Bei <code>null</code> wird <code>true</code>
 	 *            andgenommen.
 	 * @param renderer
@@ -601,9 +506,8 @@
 		// Wenn noch keine MapArea gesetzt wurde, wird diese vom Layer
 		// uebernommen
 		getContext().addMapLayerListListener(
-				new schmitzm.geotools.map.event.MapLayerListAdapter() {
-					public void layerAdded(
-							org.geotools.map.event.MapLayerListEvent e) {
+				new MapLayerListAdapter() {
+					public void layerAdded(MapLayerListEvent e) {
 						if (getContext().getLayerCount() == 1) {
 							CoordinateReferenceSystem crs = null;
 							// CRS aus Layer ermitteln
@@ -657,6 +561,21 @@
 						}
 					}
 				});
+
+		// The default is to regard a layer on selection
+		// actions
+        getContext().addMapLayerListListener(
+            new MapLayerListAdapter() {
+              @Override
+              public void layerAdded(MapLayerListEvent e) {
+                setMapLayerSelectable(e.getLayer(),true);
+              }
+              @Override
+              public void layerRemoved(MapLayerListEvent e) {
+                // remove reference to layer
+                mapLayerSelectable.remove(e.getLayer());
+              }
+        });
 	}
 
 	public JMapPane(LayoutManager layout, boolean isDoubleBuffered,
@@ -1464,11 +1383,7 @@
 	 * angepasst wird, muss diese Methode ueberschrieben werden.
 	 * <p>
 	 * Neu von SK: Ich habe in der Geotools
-<<<<<<< .mine
 	 * {@link org.gtmig.org.geotools.swing.JMapPane} die noetigen variablen protected
-=======
-	 * {@link org.geotools.swing.JMapPane} die noetigen variablen protected
->>>>>>> .r387
 	 * gemacht, um hier schon festzustellen, ob der aufruf von
 	 * super.paintComponent das eigentliche aussehen der Karte veraendern wird.
 	 * Die Methode paintComponent wird naemlich bei jeder Bewegung der Maus
@@ -1650,27 +1565,13 @@
 			MapLayer layer = layerList[i];
 			if (!layer.isVisible())
 				continue;
-
-			if (attributeMetaDataMapCache.containsKey(layer.getTitle())) {
-				/* AttributeMetaData is available... */
-				Map<Integer, AttributeMetaData> amdMap = attributeMetaDataMapCache
-						.get(layer.getTitle());
-
-				if (StyledLayerUtil.getVisibleAttributeMetaData(amdMap, true)
-						.size() == 0) {
-					LOGGER.debug("Ignoring layer " + layer.getTitle()
-							+ " because it has no visible attributes");
-					continue;
-				}
+			if ( !isMapLayerSelectable(layer) ) {
+              LOGGER.debug("Ignoring layer " + layer.getTitle() + " because it is not declared as selectable!");
+			  continue;
 			}
 
 			LOGGER.debug("mode = " + mode);
 
-			/*
-			 * SK: Change! If AttributeMetadata is provided, we check whether
-			 * any attribute is
-			 */
-
 			// Bei einem Raster-Layer, das die BB schneidet, abbrechen, wenn nur
 			// im obersten (sichtbaren) Layer gesucht wird.
 			// Ansonsten Raster-Layer einfach uebergehen.
@@ -2822,15 +2723,25 @@
 	}
 
 	/**
-	 * Allows to optionally supply the {@link JMapPane} with meta information
-	 * about layers. This is used (when supplied) for the algorithm that selects
-	 * features with a mouse click.
-	 * 
-	 * @param layerID
-	 * @param atm
+	 * Sets whether a layer is regarded or ignored on 
+     * {@link #SELECT_TOP}, {@link #SELECT_ALL} and {@link #SELECT_ONE_FROM_TOP}
+     * actions. 
+	 * @param layer a layer
+	 * @param selectable if {@code false} the layer is ignored during the
+	 *        upper mentioned actions
 	 */
-	public void setAttributeMetaDataFor(String layerID,
-			Map<Integer, AttributeMetaData> aMDMap) {
-		attributeMetaDataMapCache.put(layerID, aMDMap);
+	public void setMapLayerSelectable(MapLayer layer, boolean selectable) {
+	  mapLayerSelectable.put(layer, selectable);
 	}
+
+    /**
+     * Returns whether a layer is regarded or ignored on 
+     * {@link #SELECT_TOP}, {@link #SELECT_ALL} and {@link #SELECT_ONE_FROM_TOP}
+     * actions. 
+     * @param layer a layer
+     */
+    public boolean isMapLayerSelectable(MapLayer layer) {
+      Boolean selectable = mapLayerSelectable.get(layer);
+      return selectable != null && selectable;
+    }
 }



More information about the Schmitzm-commits mailing list