[Schmitzm-commits] r1355 - in branches/2.3.x/src: schmitzm/geotools/gui skrueger/geotools skrueger/geotools/labelsearch

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Sat Dec 18 23:36:55 CET 2010


Author: alfonx
Date: 2010-12-18 23:36:54 +0100 (Sat, 18 Dec 2010)
New Revision: 1355

Modified:
   branches/2.3.x/src/schmitzm/geotools/gui/GeoMapPane.java
   branches/2.3.x/src/schmitzm/geotools/gui/JMapEditorToolBar.java
   branches/2.3.x/src/schmitzm/geotools/gui/LayeredMapFrame.java
   branches/2.3.x/src/schmitzm/geotools/gui/XMapPane.java
   branches/2.3.x/src/skrueger/geotools/CrsLabel.java
   branches/2.3.x/src/skrueger/geotools/MapPaneToolBar.java
   branches/2.3.x/src/skrueger/geotools/labelsearch/SearchResultFeature.java
Log:
The last commit was ment for trunk, not 1.6! Un-did the last commit!

Modified: branches/2.3.x/src/schmitzm/geotools/gui/GeoMapPane.java
===================================================================
--- branches/2.3.x/src/schmitzm/geotools/gui/GeoMapPane.java	2010-12-18 21:58:10 UTC (rev 1354)
+++ branches/2.3.x/src/schmitzm/geotools/gui/GeoMapPane.java	2010-12-18 22:36:54 UTC (rev 1355)
@@ -107,7 +107,7 @@
 	 * werden koennen.
 	 */
 	protected JPanel mapPanePanel = null;
-
+	
 	/** Massstab-Balken */
 	private ScalePane scalePane = null;
 	/**
@@ -196,60 +196,6 @@
 	}
 
 	/**
-	 * MapListener that listens to Scale and MapArea changes. This reference is
-	 * needed, otherwise the listener would be removed automatically again.
-	 **/
-	final JMapPaneListener listenToScaleAndMapAreaChanges = new JMapPaneListener() {
-		public void performMapPaneEvent(XMapPaneEvent e) {
-			if (e instanceof ScaleChangedEvent) {
-				ScaleChangedEvent sce = (ScaleChangedEvent) e;
-
-				// If ScalePane expects the units in METERS always. In case
-				// the CRS is not in meters, we convert it to EPSG:3785,
-				// which is meter worldwide.
-
-				CoordinateReferenceSystem mapCrs = getMapPane().getMapContext()
-						.getCoordinateReferenceSystem();
-				CoordinateSystem cs = mapCrs.getCoordinateSystem();
-				if (!(CRSUtilities.getUnit(cs).toString().equals("m"))) {
-					// System.out.println("map cs is not m");
-
-					try {
-
-						// mapArea in "crs" of Map
-						ReferencedEnvelope mapArea = getMapPane().getMapArea();
-
-						// System.out.println("mapArea ° = " + mapArea);
-
-						ReferencedEnvelope transformedMeters = mapArea
-								.transform(GTUtil.WORLD_METER, true);
-
-						// System.out.println("mapArea m = "
-						// + transformedMeters);
-
-						double spanMeters = transformedMeters.getSpan(0);
-
-						getScalePane().setScale(spanMeters / getWidth());
-
-						// getScalePane().setVisible(true); // TODO to often?!
-
-					} catch (Exception transEx) {
-						getScalePane().setScale(0);
-					}
-				} else {
-					// System.out.println("map cs is m");
-					getScalePane().setScale(sce.getNewScale());
-				}
-
-			}
-			if (e instanceof MapAreaChangedEvent) {
-				getVertGrid().repaint();
-				getHorGrid().repaint();
-			}
-		}
-	};
-
-	/**
 	 * Wird vom Konstruktor aufgerufen und initialisiert die grafische
 	 * Darstellung/Anordnung der einzelnen GUI-Komponenten in einem
 	 * {@link GridBagLayout}. Die Constraints fuer die Anordnung der Komponenten
@@ -263,8 +209,60 @@
 		// this.mapPane.setBorder(BorderFactory.createLoweredBevelBorder());
 		SwingUtil.setPreferredWidth(this.mapPane, 200);
 
-		this.mapPane.addMapPaneListenerNew(listenToScaleAndMapAreaChanges);
+		// MapListener that listens to Scale and MapArea changes
+		this.mapPane.addMapPaneListener(new JMapPaneListener() {
+			public void performMapPaneEvent(XMapPaneEvent e) {
+				if (e instanceof ScaleChangedEvent) {
+					ScaleChangedEvent sce = (ScaleChangedEvent) e;
+					
+					
 
+					// If ScalePane expects the units in METERS always. In case
+					// the CRS is not in meters, we convert it to EPSG:3785,
+					// which is meter worldwide.
+					
+					CoordinateReferenceSystem mapCrs = getMapPane()
+							.getMapContext().getCoordinateReferenceSystem();
+					CoordinateSystem cs = mapCrs.getCoordinateSystem();
+					if (!(CRSUtilities.getUnit(cs).toString().equals("m"))) {
+//						System.out.println("map cs is not m");
+
+						try {
+							
+							// mapArea in "crs" of Map
+							ReferencedEnvelope mapArea = getMapPane()
+									.getMapArea();
+
+//							System.out.println("mapArea ° = " + mapArea);
+
+							ReferencedEnvelope transformedMeters = mapArea
+									.transform(GTUtil.WORLD_METER, true);
+
+//							System.out.println("mapArea m = "
+//									+ transformedMeters);
+
+							double spanMeters = transformedMeters.getSpan(0);
+
+							getScalePane().setScale(spanMeters / getWidth());
+							
+//							getScalePane().setVisible(true); // TODO to often?!
+
+						} catch (Exception transEx) {
+							getScalePane().setScale(0);
+						}
+					} else {
+//						System.out.println("map cs is m");
+						getScalePane().setScale(sce.getNewScale());
+					}
+
+				}
+				if (e instanceof MapAreaChangedEvent) {
+					getVertGrid().repaint();
+					getHorGrid().repaint();
+				}
+			}
+		});
+
 		// MapPane nochmal in ein Panel einfuegen, ueber das z.B.
 		// die Border gesteuert werden kann (aufgrund des optimierten
 		// Renderings des XMapPane koennen einige Eigenschaften nicht
@@ -317,20 +315,18 @@
 	}
 
 	// XMapPane ruft setScale jetzt früh genug auf. Nicht mehr nötig
-	// /**
-	// * Nach dem {@code super}-Aufruf, wird der Massstab neu gesetzt (und somit
-	// * neu angezeigt), falls sich der Massstab der Karte geaendert hat. Dies
-	// ist
-	// * ein Workaround, damit der Massstab auch beim allerersten anzeigen
-	// korrekt
-	// * angezeigt wird (ohne {@link ScaleChangedEvent}).
-	// */
-	// public void paint(Graphics g) {
-	// super.paint(g);
-	// if (getScalePane().getScaleInMeters() != mapPane.getScale()
-	// && mapPane.getScale() > 0)
-	// getScalePane().setScale(mapPane.getScale());
-	// }
+//	/**
+//	 * Nach dem {@code super}-Aufruf, wird der Massstab neu gesetzt (und somit
+//	 * neu angezeigt), falls sich der Massstab der Karte geaendert hat. Dies ist
+//	 * ein Workaround, damit der Massstab auch beim allerersten anzeigen korrekt
+//	 * angezeigt wird (ohne {@link ScaleChangedEvent}).
+//	 */
+//	public void paint(Graphics g) {
+//		super.paint(g);
+//		if (getScalePane().getScaleInMeters() != mapPane.getScale()
+//				&& mapPane.getScale() > 0)
+//			getScalePane().setScale(mapPane.getScale());
+//	}
 
 	/**
 	 * Liefert das {@link SelectableXMapPane}, in dem die Karten dargestellt
@@ -370,7 +366,8 @@
 	 * @return If dispose() has been called. If
 	 *         <code>true<(code>, further use of this {@link GeoMapPane} is undefined
 	 * 
-	 * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons Tzeggai</a>
+	 * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons
+	 *         Tzeggai</a>
 	 */
 	public boolean isDisposed() {
 		return disposed;
@@ -380,7 +377,8 @@
 	 * Should be called when the {@link GeoMapPane} is not needed no more to
 	 * help the GarbageCollector
 	 * 
-	 * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons Tzeggai</a>
+	 * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons
+	 *         Tzeggai</a>
 	 */
 	public void dispose() {
 
@@ -399,7 +397,8 @@
 	 * Nuetzlich wenn die Componente gedruckt (z.B. wenn ein Screenshot gemacht
 	 * wird) wird. Dann werden wird der Hintergrund auf WEISS gesetzt.
 	 * 
-	 * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons Tzeggai</a>
+	 * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons
+	 *         Tzeggai</a>
 	 */
 	@Override
 	public void print(Graphics g) {

Modified: branches/2.3.x/src/schmitzm/geotools/gui/JMapEditorToolBar.java
===================================================================
--- branches/2.3.x/src/schmitzm/geotools/gui/JMapEditorToolBar.java	2010-12-18 21:58:10 UTC (rev 1354)
+++ branches/2.3.x/src/schmitzm/geotools/gui/JMapEditorToolBar.java	2010-12-18 22:36:54 UTC (rev 1355)
@@ -55,536 +55,477 @@
 
 /**
  * A toolbar to control the operations of a {@link JMapEditorPane}.
- * 
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
- *         (University of Bonn/Germany)
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
  */
 public class JMapEditorToolBar extends JToolBar {
-	private static final Logger LOGGER = Logger
-			.getLogger(JMapEditorToolBar.class.getName());
+	private static final Logger LOGGER = Logger.getLogger(JMapEditorToolBar.class.getName());
 	/** Constant for the tool "New layer" (10). */
 	public static final int LAYER_NEW = 10;
-	/** Constant for the tool "Save layer" (20). */
-	public static final int LAYER_SAVE = 20;
-	/** Constant for the tool "Cancel layer" (30). */
-	public static final int LAYER_CANCEL = 30;
-	/** Constant for the tool "Undo all editor actions" (100). */
-	public static final int EDIT_CLEAR = 100;
+    /** Constant for the tool "Save layer" (20). */
+    public static final int LAYER_SAVE = 20;
+    /** Constant for the tool "Cancel layer" (30). */
+    public static final int LAYER_CANCEL = 30;
+    /** Constant for the tool "Undo all editor actions" (100). */
+    public static final int EDIT_CLEAR = 100;
 	/** Constant for the tool "Undo last editor action" (110). */
 	public static final int EDIT_UNDO = 110;
 	/** Constant for the tool "Redo last undone editor action" (120). */
 	public static final int EDIT_REDO = 120;
-	/** Constant for the tool "Finish current segment" (130). */
-	public static final int EDIT_FINISH = 130;
+    /** Constant for the tool "Finish current segment" (130). */
+    public static final int EDIT_FINISH = 130;
 
-	/** Holds the action buttons of the bar. */
-	protected SortedMap<Integer, JButton> actionButtons = null;
+    /** Holds the action buttons of the bar. */
+    protected SortedMap<Integer, JButton> actionButtons = null;
 
 	/** Holds the {@link JMapEditorPane} this tool bar controls. */
 	protected JMapEditorPane editorPane = null;
+	
+	/** Holds the listener, that reacts on editor actions. */
+	protected JMapPaneListener mapPaneListener = null;
 
-	/**
-	 * Holds the listener, that reacts on editor actions. A reference to this
-	 * listner is needed!
-	 */
-	protected final JMapPaneListener mapPaneListener;
-
-	/**
-	 * Creates a new toolbar. Notice: This toolbar does nothing until
-	 * {@link #setMapPane(JMapEditorPane)} is called!
-	 */
-	public JMapEditorToolBar() {
-		this(null);
-	}
-
-	/**
+    /**
+     * Creates a new toolbar. Notice: This toolbar does nothing
+     * until {@link #setMapPane(JMapEditorPane)} is called!
+     */
+    public JMapEditorToolBar() {
+      this(null);
+    }
+    
+    /**
 	 * Creates a new tool bar.
-	 * 
-	 * @param editorPane
-	 *            {@link JMapEditorPane} the tool bar controls
+	 * @param editorPane {@link JMapEditorPane} the tool bar controls
 	 */
 	public JMapEditorToolBar(JMapEditorPane editorPane) {
-		super("Control the editor actions", JToolBar.HORIZONTAL);
-		this.actionButtons = new TreeMap<Integer, JButton>();
-		// Create a Listener to sniff the zooms on the JMapPane
-		this.mapPaneListener = new JMapPaneListener() {
-			public void performMapPaneEvent(XMapPaneEvent e) {
-				if (!(e instanceof JEditorPaneEvent))
-					return;
+	  super("Control the editor actions", JToolBar.HORIZONTAL);
+      this.actionButtons   = new TreeMap<Integer,JButton>();
+      // Create a Listener to sniff the zooms on the JMapPane
+      this.mapPaneListener = new JMapPaneListener() {
+          public void performMapPaneEvent(XMapPaneEvent e) {
+              if ( !(e instanceof JEditorPaneEvent) )
+                return;
 
-				// At the moment the layer editing is finished, the editor mode
-				// is not yet initialized. However for the button activation the
-				// mode NULL is essential in this case.
-				EditorMode mode = ((JEditorPaneEvent) e).getEditorMode();
-				if (e instanceof LayerEditCanceledEvent
-						|| e instanceof LayerEditFinishedEvent)
-					mode = null;
-				updateButtonActivation(mode);
-			}
-		};
-
-		setMapPane(editorPane);
-		setFloatable(false);
-		setRollover(true);
-
-		init();
+              // At the moment the layer editing is finished, the editor mode
+              // is not yet initialized. However for the button activation the
+              // mode NULL is essential in this case.
+              EditorMode mode = ((JEditorPaneEvent)e).getEditorMode();
+              if ( e instanceof LayerEditCanceledEvent ||
+                   e instanceof LayerEditFinishedEvent )
+                mode = null;
+              updateButtonActivation(mode);
+          }
+      };    
+     
+      setMapPane(editorPane);
+	  setFloatable(false);
+	  setRollover(true);
+	  
+	  init();
 	}
-
+	
 	/**
 	 * Sets the {@link JMapEditorPane} controlled by this tool bar.
-	 * 
-	 * @param editorPane
-	 *            {@link JMapEditorPane} to control (if {@code null} this tool
-	 *            bar controls NOTHING!)
+	 * @param editorPane {@link JMapEditorPane} to control (if {@code null} this
+	 *                   tool bar controls NOTHING!)
 	 */
 	public void setMapPane(JMapEditorPane editorPane) {
-		// Remove listener from old MapPane
-		if (this.editorPane != null)
-			this.editorPane.removeMapPaneListener(mapPaneListener);
-		this.editorPane = editorPane;
-		if (this.editorPane != null && mapPaneListener != null)
-			this.editorPane.addMapPaneListenerNew(mapPaneListener);
+	  // Remove listener from old MapPane
+	  if ( this.editorPane != null )
+	    this.editorPane.removeMapPaneListener( mapPaneListener );
+      this.editorPane = editorPane;
+      if ( this.editorPane != null && mapPaneListener != null )
+        this.editorPane.addMapPaneListener( mapPaneListener );
 	}
-
+	
 	/**
-	 * Calls {@link #initActions()} and then puts all action buttons to the tool
-	 * bar.
+	 * Calls {@link #initActions()} and then puts all action buttons
+	 * to the tool bar.
 	 */
 	protected void init() {
-		initActions();
-		initToolBar();
-		updateButtonActivation(null);
+	  initActions();
+	  initToolBar();
+	  updateButtonActivation(null);
 	}
 
-	/**
-	 * Creates the action buttons and adds them to {@link #actionButtons}.
-	 */
-	protected void initActions() {
-		// Action button to create a new layer
-		addAction(
-				new EditorPaneToolBarAction(LAYER_NEW, this,
-						"button.layer.new",
-						new ImageIcon(JMapEditorPane.class
-								.getResource("resource/icons/layer_new.png"))),
-				false);
+    /**
+     * Creates the action buttons and adds them to {@link #actionButtons}.
+     */
+    protected void initActions() {
+      // Action button to create a new layer
+      addAction( new EditorPaneToolBarAction(
+          LAYER_NEW,
+          this,
+          "button.layer.new",
+          new ImageIcon(JMapEditorPane.class.getResource("resource/icons/layer_new.png"))
+      ), false);
 
-		// Action button to finish a layer
-		addAction(
-				new EditorPaneToolBarAction(
-						LAYER_SAVE,
-						this,
-						"button.layer.save",
-						new ImageIcon(JMapEditorPane.class
-								.getResource("resource/icons/layer_finish.png"))),
-				false);
+      // Action button to finish a layer
+      addAction( new EditorPaneToolBarAction(
+          LAYER_SAVE,
+          this,
+          "button.layer.save",
+          new ImageIcon(JMapEditorPane.class.getResource("resource/icons/layer_finish.png"))
+      ), false);
 
-		// Action button to cancel a layer
-		addAction(
-				new EditorPaneToolBarAction(
-						LAYER_CANCEL,
-						this,
-						"button.layer.cancel",
-						new ImageIcon(JMapEditorPane.class
-								.getResource("resource/icons/layer_cancel.png"))),
-				false);
+      // Action button to cancel a layer
+      addAction( new EditorPaneToolBarAction(
+          LAYER_CANCEL,
+          this,
+          "button.layer.cancel",
+          new ImageIcon(JMapEditorPane.class.getResource("resource/icons/layer_cancel.png"))
+      ), false);
 
-		// Action button to undo all editing action
-		addAction(
-				new EditorPaneToolBarAction(EDIT_CLEAR, this,
-						"button.edit.clear", new ImageIcon(JMapEditorPane.class
-								.getResource("resource/icons/edit_clear.png"))),
-				false);
+      // Action button to undo all editing action
+      addAction( new EditorPaneToolBarAction(
+          EDIT_CLEAR,
+          this,
+          "button.edit.clear",
+          new ImageIcon(JMapEditorPane.class.getResource("resource/icons/edit_clear.png"))
+      ), false);
 
-		// Action button to undo a editing action
-		addAction(
-				new EditorPaneToolBarAction(EDIT_UNDO, this,
-						"button.edit.undo",
-						new ImageIcon(JMapEditorPane.class
-								.getResource("resource/icons/edit_undo.png"))),
-				false);
+      // Action button to undo a editing action
+      addAction( new EditorPaneToolBarAction(
+          EDIT_UNDO,
+          this,
+          "button.edit.undo",
+          new ImageIcon(JMapEditorPane.class.getResource("resource/icons/edit_undo.png"))
+      ), false);
 
-		// Action button to redo a undone editing action
-		addAction(
-				new EditorPaneToolBarAction(EDIT_REDO, this,
-						"button.edit.redo",
-						new ImageIcon(JMapEditorPane.class
-								.getResource("resource/icons/edit_redo.png"))),
-				false);
+      // Action button to redo a undone editing action
+      addAction( new EditorPaneToolBarAction(
+          EDIT_REDO,
+          this,
+          "button.edit.redo",
+          new ImageIcon(JMapEditorPane.class.getResource("resource/icons/edit_redo.png"))
+      ), false);
 
-		// Action button to finish a feature
-		addAction(
-				new EditorPaneToolBarAction(EDIT_FINISH, this,
-						"button.edit.finish",
-						new ImageIcon(JMapEditorPane.class
-								.getResource("resource/icons/edit_finish.png"))),
-				false);
-	}
+      // Action button to finish a feature
+      addAction( new EditorPaneToolBarAction(
+          EDIT_FINISH,
+          this,
+          "button.edit.finish",
+          new ImageIcon(JMapEditorPane.class.getResource("resource/icons/edit_finish.png"))
+      ), false);
+    }
+    
+    /**
+     * Clears the GUI of all components and adds all action buttons to the
+     * tool bar.
+     */
+    protected void initToolBar() {
+      setAlignmentY( 1f );
+      removeAll();
+//      // Separator to the left of the tool actions to start
+//      // the tool buttons with the map (not with the coordinate grid)
+//      Dimension dimension = new Dimension( 49,10);
+//      addSeparator(dimension);
+//      // Space between tool buttons and action buttons
+//      Dimension dimension2 = new Dimension( 10,10);
+//      this.addSeparator(dimension2);
+      // Action buttons
+      for (JButton b : actionButtons.values())
+        add(b);
+    }
+    
 
-	/**
-	 * Clears the GUI of all components and adds all action buttons to the tool
-	 * bar.
-	 */
-	protected void initToolBar() {
-		setAlignmentY(1f);
-		removeAll();
-		// // Separator to the left of the tool actions to start
-		// // the tool buttons with the map (not with the coordinate grid)
-		// Dimension dimension = new Dimension( 49,10);
-		// addSeparator(dimension);
-		// // Space between tool buttons and action buttons
-		// Dimension dimension2 = new Dimension( 10,10);
-		// this.addSeparator(dimension2);
-		// Action buttons
-		for (JButton b : actionButtons.values())
-			add(b);
-	}
-
-	/**
-	 * Performs the action of an action button.
-	 * 
-	 * @param tool
-	 *            the action
-	 * @param e
-	 *            the event of the button
-	 */
+    /**
+     * Performs the action of an action button.
+     * @param tool the action
+     * @param e    the event of the button
+     */
 	protected void performActionButton(int action, ActionEvent e) {
-		if (editorPane == null)
-			return;
-
-		try {
-			// Perform the action "New layer"
-			if (action == LAYER_NEW)
-				createNewLayer();
-			// Perform the action "Finish layer"
-			if (action == LAYER_SAVE)
-				editorPane.finishEditing();
-			// Perform the action "Cancel layer"
-			if (action == LAYER_CANCEL)
-				editorPane.cancelEditing();
-
-			// Perform the action "Finish feature"
-			if (action == EDIT_FINISH)
-				editorPane.finishFeature();
-			// Perform the action "Undo editing"
-			if (action == EDIT_UNDO)
-				editorPane.undoEditing();
-			// Perform the action "Redo editing"
-			if (action == EDIT_REDO)
-				editorPane.redoEditing();
-			// Perform the action "Clear editing"
-			if (action == EDIT_CLEAR)
-				editorPane.undoAll();
-		} catch (Exception err) {
-			ExceptionDialog.show(err);
-		}
+      if ( editorPane == null )
+        return;
+      
+      try {
+        // Perform the action "New layer"
+        if ( action == LAYER_NEW )
+          createNewLayer();
+        // Perform the action "Finish layer"
+        if ( action == LAYER_SAVE )
+          editorPane.finishEditing();
+        // Perform the action "Cancel layer"
+        if ( action == LAYER_CANCEL )
+          editorPane.cancelEditing();
+  
+        // Perform the action "Finish feature"
+        if ( action == EDIT_FINISH )
+          editorPane.finishFeature();
+        // Perform the action "Undo editing"
+        if ( action == EDIT_UNDO )
+          editorPane.undoEditing();
+        // Perform the action "Redo editing"
+        if ( action == EDIT_REDO )
+          editorPane.redoEditing();
+        // Perform the action "Clear editing"
+        if ( action == EDIT_CLEAR )
+          editorPane.undoAll();
+      } catch (Exception err) {
+        ExceptionDialog.show(err);
+      }
 	}
-
+	
 	/**
-	 * Sets the enables/disables property for every toolbar button according to
-	 * the current editor state.
-	 * 
-	 * @param editorMode
-	 *            editor mode (because some events are fired BEFORE the new mode
-	 *            is set)
+	 * Sets the enables/disables property for every toolbar button according 
+	 * to the current editor state. 
+	 * @param editorMode editor mode (because some events are fired BEFORE
+	 *                   the new mode is set)
 	 */
 	protected void updateButtonActivation(EditorMode editorMode) {
-		if (editorPane == null) {
-			setAllActionsEnabled(false, false);
-			return;
-		}
-		getButton(LAYER_NEW).setEnabled(editorMode == null);
-		getButton(LAYER_SAVE).setEnabled(editorMode != null);
-		getButton(LAYER_CANCEL).setEnabled(editorMode != null);
-		getButton(EDIT_UNDO).setEnabled(editorPane.isUndoPossible());
-		getButton(EDIT_REDO).setEnabled(editorPane.isRedoPossible());
-		getButton(EDIT_CLEAR).setEnabled(editorPane.isUndoPossible());
-		getButton(EDIT_FINISH).setEnabled(
-				editorMode != null && editorMode != EditorMode.New_Point);
+	  if ( editorPane == null ) {
+	    setAllActionsEnabled(false, false);
+	    return;
+	  }
+      getButton( LAYER_NEW ).setEnabled( editorMode == null );
+	  getButton( LAYER_SAVE ).setEnabled( editorMode != null );
+      getButton( LAYER_CANCEL ).setEnabled( editorMode != null );
+      getButton( EDIT_UNDO ).setEnabled( editorPane.isUndoPossible() );
+      getButton( EDIT_REDO ).setEnabled( editorPane.isRedoPossible() );
+      getButton( EDIT_CLEAR ).setEnabled( editorPane.isUndoPossible() );
+      getButton( EDIT_FINISH ).setEnabled( editorMode != null && editorMode != EditorMode.New_Point );
 	}
-
+	
 	/**
 	 * Starts new layer.
 	 */
 	protected void createNewLayer() {
-		// Ask layer type and name
-		ManualInputOption.Text titleOption = new ManualInputOption.Text(
-				getResourceString("NewLayer.layer.title"), true,
-				getResourceString("NewLayer.layer.title.default"));
-		SelectionInputOption.Radio<JMapEditorPane.EditorMode> typeOption = new SelectionInputOption.Radio<JMapEditorPane.EditorMode>(
-				getResourceString("NewLayer.layer.type"), true,
-				new JMapEditorPane.EditorMode[] { EditorMode.New_Point,
-						EditorMode.New_Line, EditorMode.New_Polygon },
-				new String[] { getResourceString("NewLayer.layer.type.point"),
-						getResourceString("NewLayer.layer.type.line"),
-						getResourceString("NewLayer.layer.type.polygon") });
-		FeatureTypeInputOption ftOption = new FeatureTypeInputOption(
-				getResourceString("NewLayer.ftype.title"), false) {
-			// Checks whether "the_geom" is used as attribute name
-			// --> not allowed because JEditorPane uses this attribute
-			// for the default geometry of new layers
-			public boolean performIsInputValid() {
-				if (super.performIsInputValid()) {
-					SimpleFeatureType ft = inpTableModel.createFeatureType();
-					if (ft.getDescriptor(JMapEditorPane.GEOMETRY_ATTR) != null)
-						throw new UnsupportedOperationException(
-								getResourceString("NewLayer.Err.GeomAttr",
-										JMapEditorPane.GEOMETRY_ATTR));
-				}
-				return true;
-			}
-		};
-		Object[] value = MultipleOptionPane.showMultipleInputDialog(this,
-				getResourceString("NewLayer.dialog.title"), titleOption,
-				typeOption, ftOption);
-		if (value == null)
-			return; // Dialog canceled
-		editorPane.setAdditionalAttributes(ftOption.getValue());
-		editorPane.startEditing((JMapEditorPane.EditorMode) value[1],
-				(String) value[0]);
+	  // Ask layer type and name
+	  ManualInputOption.Text titleOption = new ManualInputOption.Text(
+	      getResourceString("NewLayer.layer.title"), true, getResourceString("NewLayer.layer.title.default")
+      );
+	  SelectionInputOption.Radio<JMapEditorPane.EditorMode> typeOption = new SelectionInputOption.Radio<JMapEditorPane.EditorMode>(
+          getResourceString("NewLayer.layer.type"),
+          true,
+          new JMapEditorPane.EditorMode[] { EditorMode.New_Point, EditorMode.New_Line, EditorMode.New_Polygon },
+          new String[] { getResourceString("NewLayer.layer.type.point"), getResourceString("NewLayer.layer.type.line"), getResourceString("NewLayer.layer.type.polygon") }
+	  );
+	  FeatureTypeInputOption ftOption = new FeatureTypeInputOption(
+	      getResourceString("NewLayer.ftype.title"),
+	      false
+	  ) {
+	        // Checks whether "the_geom" is used as attribute name
+	        // --> not allowed because JEditorPane uses this attribute
+	        //     for the default geometry of new layers
+    	    public boolean performIsInputValid() {
+    	      if ( super.performIsInputValid() ) {
+    	        SimpleFeatureType ft = inpTableModel.createFeatureType();
+    	        if ( ft.getDescriptor( JMapEditorPane.GEOMETRY_ATTR ) != null )
+    	          throw new UnsupportedOperationException(getResourceString("NewLayer.Err.GeomAttr",JMapEditorPane.GEOMETRY_ATTR));
+    	      }
+    	      return true;
+    	    }
+	  };
+	  Object[] value = MultipleOptionPane.showMultipleInputDialog(
+	      this,
+	      getResourceString("NewLayer.dialog.title"),
+	      titleOption,
+	      typeOption,
+	      ftOption
+	  );
+	  if ( value == null )
+	    return; // Dialog canceled
+	  editorPane.setAdditionalAttributes( ftOption.getValue() );
+	  editorPane.startEditing(
+	      (JMapEditorPane.EditorMode)value[1],
+	      (String)value[0]
+	  );
 	}
 
-	/**
-	 * Adds an action to the tool bar. Does nothing if a tool or action with the
-	 * specified ID already exists!
-	 * 
-	 * @param buttonAction
-	 *            action for the button
-	 * @param resetToolBar
-	 *            indicates whether the toolbar GUI is reset after adding the
-	 *            button (if adding several actions it useful only to reset the
-	 *            GUI for the last added tool)
-	 */
-	public void addAction(EditorPaneToolBarAction buttonAction,
-			boolean resetToolBar) {
-		if (isButtonIDUsed(buttonAction.getID())) {
-			LOGGER.warn("addAction(.) ignored because ID already used for tool or action: "
-					+ buttonAction.getID());
-			return;
-		}
-		JButton button = new JButton(buttonAction);
-		actionButtons.put(buttonAction.getID(), button);
-		if (resetToolBar)
-			initToolBar();
-	}
+    /**
+     * Adds an action to the tool bar. Does nothing if a tool or action with the
+     * specified ID already exists!
+     * @param buttonAction action for the button
+     * @param resetToolBar indicates whether the toolbar GUI is reset after adding
+     *                     the button (if adding several actions it useful only to
+     *                     reset the GUI for the last added tool) 
+     */
+    public void addAction(EditorPaneToolBarAction buttonAction, boolean resetToolBar) {
+      if ( isButtonIDUsed(buttonAction.getID()) ) {
+        LOGGER.warn("addAction(.) ignored because ID already used for tool or action: "+buttonAction.getID());
+        return;
+      }
+      JButton button = new JButton(buttonAction);
+      actionButtons.put( buttonAction.getID(), button );
+      if ( resetToolBar )
+        initToolBar();
+    }
 
-	/**
-	 * Adds an action to the tool bar and resets the toolbar GUI.
-	 * 
-	 * @param buttonAction
-	 *            action for the toggle button
-	 */
-	public void addAction(EditorPaneToolBarAction buttonAction) {
-		addAction(buttonAction, true);
-	}
+    /**
+     * Adds an action to the tool bar and resets the toolbar GUI.
+     * @param buttonAction action for the toggle button
+     */
+    public void addAction(EditorPaneToolBarAction buttonAction) {
+      addAction(buttonAction, true);
+    }
+    
+    /**
+     * Returns the button for a specific tool or action.
+     * @param id the constant for a tool
+     * @return a {@link JButton} if {@code id} specifies an {@linkplain #getActionButton(int) action button}
+     *         or {@link JToogleButton} if {@code id} specifies a {@linkplain #getToolButton(int) tool button}
+     */
+    public AbstractButton getButton(int id) {
+      AbstractButton button = actionButtons.get(id);
+      if ( button == null )
+        LOGGER.warn("Unknown action ID: "+id);
+      return button;
+    }
 
-	/**
-	 * Returns the button for a specific tool or action.
-	 * 
-	 * @param id
-	 *            the constant for a tool
-	 * @return a {@link JButton} if {@code id} specifies an
-	 *         {@linkplain #getActionButton(int) action button} or
-	 *         {@link JToogleButton} if {@code id} specifies a
-	 *         {@linkplain #getToolButton(int) tool button}
-	 */
-	public AbstractButton getButton(int id) {
-		AbstractButton button = actionButtons.get(id);
-		if (button == null)
-			LOGGER.warn("Unknown action ID: " + id);
-		return button;
-	}
+    /**
+     * Returns the button for a specific action.
+     * @param action the constant an action 
+     */
+    public JButton getActionButton(int action) {
+      AbstractButton button = getButton(action);
+      if ( button != null && !(button instanceof JButton) ) {
+        LOGGER.warn("ID specifies no action: "+action);
+        button = null;
+      }
+      return (JButton)button; 
 
-	/**
-	 * Returns the button for a specific action.
-	 * 
-	 * @param action
-	 *            the constant an action
-	 */
-	public JButton getActionButton(int action) {
-		AbstractButton button = getButton(action);
-		if (button != null && !(button instanceof JButton)) {
-			LOGGER.warn("ID specifies no action: " + action);
-			button = null;
-		}
-		return (JButton) button;
+    }
 
-	}
+    /**
+     * Sets whether an action is activated or not. The visible property
+     * of the button is not affected.
+     * @param id actionID
+     * @param enabled if {@code true} the action becomes available
+     */
+    public void setButtonEnabled(int id, boolean enabled) {
+      AbstractButton button = getButton(id);
+      if ( button == null )
+        return;
+      button.setEnabled( enabled );
+    }
 
-	/**
-	 * Sets whether an action is activated or not. The visible property of the
-	 * button is not affected.
-	 * 
-	 * @param id
-	 *            actionID
-	 * @param enabled
-	 *            if {@code true} the action becomes available
-	 */
-	public void setButtonEnabled(int id, boolean enabled) {
-		AbstractButton button = getButton(id);
-		if (button == null)
-			return;
-		button.setEnabled(enabled);
-	}
-
-	/**
-	 * Sets whether an action is activated or not.
-	 * 
-	 * @param id
-	 *            actionID
-	 * @param enabled
-	 *            if {@code true} the tool becomes available
-	 * @param hideOnDisable
-	 *            if {@code true} the button is also hidden if {@code enabled}
-	 *            is {@code false}
-	 */
+    /**
+     * Sets whether an action is activated or not.
+     * @param id actionID
+     * @param enabled if {@code true} the tool becomes available
+     * @param hideOnDisable if {@code true} the button is also hidden if
+     *                      {@code enabled} is {@code false}
+     */
 	public void setButtonEnabled(int id, boolean enabled, boolean hideOnDisable) {
-		AbstractButton button = getButton(id);
-		if (button == null)
-			return;
-		button.setEnabled(enabled);
-		// if button is enabled, it becomes visible anyway
-		// if button is disabled and the "hide" option is set, it is also hidden
-		if (enabled)
-			button.setVisible(true);
-		else
-			button.setVisible(!hideOnDisable);
+	  AbstractButton button = getButton(id);
+	  if ( button == null )
+	    return;
+	  button.setEnabled( enabled );
+	  // if button is enabled, it becomes visible anyway
+	  // if button is disabled and the "hide" option is set, it is also hidden 
+	  if ( enabled )
+	    button.setVisible( true );
+	  else
+	    button.setVisible( !hideOnDisable );
 	}
 
-	/**
-	 * Checks whether a ID is already used for a tool or action.
-	 * 
-	 * @param tool
-	 *            tool ID
-	 */
-	public boolean isButtonIDUsed(int id) {
-		return actionButtons.get(id) != null;
-	}
+    /**
+     * Checks whether a ID is already used for a tool or action.
+     * @param tool tool ID
+     */
+    public boolean isButtonIDUsed(int id) {
+      return actionButtons.get(id) != null;
+    }
 
-	/**
-	 * Checks whether a tool is activated.
-	 * 
-	 * @param tool
-	 *            tool ID
-	 * @return {@code false} if an unknown ID is specified
-	 */
-	public boolean isButtonEnabled(int id) {
-		AbstractButton button = getButton(id);
-		if (button != null)
-			return button.isEnabled();
-		return false;
-	}
+    /**
+     * Checks whether a tool is activated.
+     * @param tool tool ID
+     * @return {@code false} if an unknown ID is specified
+     */
+    public boolean isButtonEnabled(int id) {
+      AbstractButton button = getButton(id);
+      if ( button != null )
+        return button.isEnabled();
+      return false;
+    }
 
-	/**
-	 * Sets the activation for all actions.
-	 * 
-	 * @param enabled
-	 *            if {@code true} all actions becomes available
-	 * @param hideOnDisable
-	 *            if {@code true} the buttons are also hidden if {@code enabled}
-	 *            is {@code false}
-	 */
-	public void setAllActionsEnabled(boolean enabled, boolean hideOnDisable) {
-		for (int tool : actionButtons.keySet())
-			setButtonEnabled(tool, enabled, hideOnDisable);
-	}
+    /**
+     * Sets the activation for all actions.
+     * @param enabled if {@code true} all actions becomes available
+     * @param hideOnDisable if {@code true} the buttons are also hidden if
+     *                      {@code enabled} is {@code false}
+     */
+    public void setAllActionsEnabled(boolean enabled, boolean hideOnDisable) {
+      for (int tool : actionButtons.keySet())
+        setButtonEnabled(tool,enabled,hideOnDisable);
+    }   
+    
+    /**
+     * Returns the maximum ID of actions. 
+     */
+    public int getMaxActionID() {
+      return actionButtons.lastKey();
+    }
 
-	/**
-	 * Returns the maximum ID of actions.
-	 */
-	public int getMaxActionID() {
-		return actionButtons.lastKey();
-	}
+    /**
+     * Returns the minimum ID of actions. 
+     */
+    public int getMinActionID() {
+      return actionButtons.firstKey();
+    }
+    
+    protected static String getResourceString(String key, Object... params) {
+      return GeotoolsGUIUtil.RESOURCE.getString("schmitzm.geotools.gui.JMapEditorToolBar."+key,params);
+    }
+    
+    /**
+     * Extends the {@link AbstractAction} with maintaining an ID and
+     * the {@link JMapEditorToolBar} the action controls.
+     * Additionally this class automatically calls
+     * {@link JMapEditorToolBar#performActionButton(int, ActionEvent)}.
+     * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+     */
+    public static class EditorPaneToolBarAction extends AbstractAction {
+      /** The ID of the action */
+      protected int id = -1;
+      /** The tool bar, this action is made for. */
+      protected JMapEditorToolBar toolBar = null;
 
-	/**
-	 * Returns the minimum ID of actions.
-	 */
-	public int getMinActionID() {
-		return actionButtons.firstKey();
-	}
+      /**
+       * Creates a new action with a dummy description and no icon.
+       * @param id      unique ID for the action
+       * @param toolBar toolbar this action is made for
+       */
+      public EditorPaneToolBarAction(int id, JMapEditorToolBar toolBar) {
+        this(id,toolBar,""+id);
+      }
 
-	protected static String getResourceString(String key, Object... params) {
-		return GeotoolsGUIUtil.RESOURCE.getString(
-				"schmitzm.geotools.gui.JMapEditorToolBar." + key, params);
-	}
+      /**
+       * Creates a new action without an icon.
+       * @param id      unique ID for the action
+       * @param toolBar toolbar this action is made for
+       * @param name    description used for buttons or menus 
+       */
+      public EditorPaneToolBarAction(int id, JMapEditorToolBar toolBar, String name) {
+        this(id,toolBar,name,null);
+      }
 
-	/**
-	 * Extends the {@link AbstractAction} with maintaining an ID and the
-	 * {@link JMapEditorToolBar} the action controls. Additionally this class
-	 * automatically calls
-	 * {@link JMapEditorToolBar#performActionButton(int, ActionEvent)}.
-	 * 
-	 * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
-	 *         (University of Bonn/Germany)
-	 */
-	public static class EditorPaneToolBarAction extends AbstractAction {
-		/** The ID of the action */
-		protected int id = -1;
-		/** The tool bar, this action is made for. */
-		protected JMapEditorToolBar toolBar = null;
+      /**
+       * Creates a new action.
+       * @param id      unique ID for the action
+       * @param toolBar toolbar this action is made for
+       * @param name    description used for buttons or menus 
+       * @param icon    icon used for buttons or menus 
+       */
+      public EditorPaneToolBarAction(int id, JMapEditorToolBar toolBar, String name, Icon icon) {
+        super("",icon);
+        this.id      = id;
+        this.toolBar = toolBar;
+        this.putValue(SHORT_DESCRIPTION, getResourceString(name));
+      }
 
-		/**
-		 * Creates a new action with a dummy description and no icon.
-		 * 
-		 * @param id
-		 *            unique ID for the action
-		 * @param toolBar
-		 *            toolbar this action is made for
-		 */
-		public EditorPaneToolBarAction(int id, JMapEditorToolBar toolBar) {
-			this(id, toolBar, "" + id);
-		}
-
-		/**
-		 * Creates a new action without an icon.
-		 * 
-		 * @param id
-		 *            unique ID for the action
-		 * @param toolBar
-		 *            toolbar this action is made for
-		 * @param name
-		 *            description used for buttons or menus
-		 */
-		public EditorPaneToolBarAction(int id, JMapEditorToolBar toolBar,
-				String name) {
-			this(id, toolBar, name, null);
-		}
-
-		/**
-		 * Creates a new action.
-		 * 
-		 * @param id
-		 *            unique ID for the action
-		 * @param toolBar
-		 *            toolbar this action is made for
-		 * @param name
-		 *            description used for buttons or menus
-		 * @param icon
-		 *            icon used for buttons or menus
-		 */
-		public EditorPaneToolBarAction(int id, JMapEditorToolBar toolBar,
-				String name, Icon icon) {
-			super("", icon);
-			this.id = id;
-			this.toolBar = toolBar;
-			this.putValue(SHORT_DESCRIPTION, getResourceString(name));
-		}
-
-		/**
-		 * Calls {@link JMapEditorToolBar#performActionButton(int, ActionEvent)}
-		 * .
-		 */
-		public void actionPerformed(ActionEvent e) {
-			if (toolBar.actionButtons.get(id) != null)
-				toolBar.performActionButton(id, e);
-		}
-
-		/**
-		 * Returns the (unique) id of this action.
-		 * 
-		 * @return
-		 */
-		public int getID() {
-			return id;
-		}
-	}
+      /**
+       * Calls {@link JMapEditorToolBar#performActionButton(int, ActionEvent)}.
+       */
+      public void actionPerformed(ActionEvent e) {
+        if ( toolBar.actionButtons.get(id) != null )
+          toolBar.performActionButton(id, e);
+      }
+      
+      /**
+       * Returns the (unique) id of this action.
+       * @return
+       */
+      public int getID() {
+        return id;
+      }
+    }
 }

Modified: branches/2.3.x/src/schmitzm/geotools/gui/LayeredMapFrame.java
===================================================================
--- branches/2.3.x/src/schmitzm/geotools/gui/LayeredMapFrame.java	2010-12-18 21:58:10 UTC (rev 1354)
+++ branches/2.3.x/src/schmitzm/geotools/gui/LayeredMapFrame.java	2010-12-18 22:36:54 UTC (rev 1355)
@@ -80,213 +80,197 @@
  * </ul>
  * Um Layer einzufuegen koennen die {@code addLayer(.)}-Methoden des
  * {@link #getLayeredMapPane() LayeredMapPane} (dabei wird ein Default-Style
- * verwendet) oder die entsprechenden Methoden des {@link MapContext} (
- * {@code getLayeredMapPane().getMapPane().getContext()}).
- * 
+ * verwendet) oder die entsprechenden Methoden des {@link MapContext} ({@code
+ * getLayeredMapPane().getMapPane().getContext()}).
  * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
  *         (University of Bonn/Germany)
  * @version 1.0
  */
 public class LayeredMapFrame extends JFrame {
-	private JPanel contentPane = null;
-	/** Karten- und Layer-Kontroll-Bereich. */
-	protected LayeredMapPane layeredMapPane = null;
-	private SelectableXMapPane mapPane = null;
-	private MapContext mapContext = null;
-	/** Toolbar zur Kontroller der Karten-Aktionen (z.B. Zoom oder Select). */
-	protected MapActionControlPane mapControl = null;
-	/** Status-Balken. */
-	protected MapPaneStatusBar statusBar = null;
-	/** Fenster fuer SimpleFeature-Details */
-	protected FeatureCollectionFrame featuresFrame = null;
-	/**
-	 * Auswahlfeld fuer das Raster, fuer welches die Koordinaten angezeigt
-	 * werden.
-	 */
-	protected SelectionInputOption<MapLayer> rasterComboBox = null;
+  private JPanel contentPane = null;
+  /** Karten- und Layer-Kontroll-Bereich. */
+  protected LayeredMapPane layeredMapPane = null;
+  private SelectableXMapPane mapPane = null;
+  private MapContext mapContext = null;
+  /** Toolbar zur Kontroller der Karten-Aktionen (z.B. Zoom oder Select). */
+  protected MapActionControlPane mapControl = null;
+  /** Status-Balken. */
+  protected MapPaneStatusBar statusBar = null;
+  /** Fenster fuer SimpleFeature-Details */
+  protected FeatureCollectionFrame featuresFrame = null;
+  /**
+   * Auswahlfeld fuer das Raster, fuer welches die Koordinaten angezeigt werden.
+   */
+  protected SelectionInputOption<MapLayer> rasterComboBox = null;
 
-	/**
-	 * Erzeugt ein neues (leeres) Map-Fenster.
-	 */
-	public LayeredMapFrame() {
-		this(null, "");
-	}
+  /**
+   * Erzeugt ein neues (leeres) Map-Fenster.
+   */
+  public LayeredMapFrame() {
+    this(null, "");
+  }
 
-	/**
-	 * Erzeugt ein neues (leeres) Map-Fenster.
-	 * 
-	 * @param lmp
-	 *            {@link LayeredMapPane} welches zur Anzeige der Karten
-	 *            verwendet wird (wenn {@code null} wird eine neue
-	 *            {@link LayeredMapPane} -Instanz erzeugt)
-	 */
-	public LayeredMapFrame(LayeredMapPane lmp) {
-		this(lmp, "");
-	}
+  /**
+   * Erzeugt ein neues (leeres) Map-Fenster.
+   * @param lmp {@link LayeredMapPane} welches zur Anzeige der Karten verwendet
+   *          wird (wenn {@code null} wird eine neue {@link LayeredMapPane}
+   *          -Instanz erzeugt)
+   */
+  public LayeredMapFrame(LayeredMapPane lmp) {
+    this(lmp, "");
+  }
 
-	/**
-	 * Erzeugt ein neues (leeres) Map-Fenster.
-	 * 
-	 * @param title
-	 *            Titel des Fensters
-	 */
-	public LayeredMapFrame(String title) {
-		this(null, title);
-	}
+  /**
+   * Erzeugt ein neues (leeres) Map-Fenster.
+   * @param title Titel des Fensters
+   */
+  public LayeredMapFrame(String title) {
+    this(null, title);
+  }
 
-	/**
-	 * Ausgewaehlte Features werden im Detail-Frame angezeigt. Eine Referenz auf
-	 * diesen Listener muss bestehen, sonst wird er automatisch entfernt.
-	 */
-	JMapPaneListener listenSelectedFeaturesAreShownInDetail = new JMapPaneListener() {
-		public void performMapPaneEvent(XMapPaneEvent e) {
-			// Wenn Features ueber die Maus aus der Karte ausgewaehlt werden,
-			// oeffnet sich ein Detail-Fenster
-			if (e instanceof FeatureSelectedEvent
-					&& e.getSourceObject() == mapPane) {
-				FeatureSelectedEvent fse = (FeatureSelectedEvent) e;
-				FeatureCollection fc = fse.getSelectionResult();
-				featuresFrame.setFeatureCollection(fc);
-				featuresFrame.setTitle(fse.getSourceLayer().getTitle() + " ["
-						+ fse.getSelectionRange() + "]");
-				if (!featuresFrame.isVisible()) {
-					SwingUtil.setRelativeFramePosition(featuresFrame, 1, 0);
-				}
-				featuresFrame.setVisible(true);
-			}
+  /**
+   * Erzeugt ein neues (leeres) Map-Fenster.
+   * @param title Titel des Fensters
+   * @param lmp {@link LayeredMapPane} welches zur Anzeige der Karten verwendet
+   *          wird (wenn {@code null} wird eine neue {@link LayeredMapPane}
+   *          -Instanz erzeugt)
+   */
+  public LayeredMapFrame(LayeredMapPane lmp, String title) {
+    super();
+    this.setSize(new Dimension(500, 400));
+    this.setTitle(title);
+    contentPane = (JPanel) this.getContentPane();
+    contentPane.setLayout(new GridBagLayout());
 
-			if (e instanceof GridCoverageSelectedEvent) {
-				// ...
-			}
-		}
-	};
+    // Karte und Layer-Kontrolle
+    layeredMapPane = lmp != null ? lmp : new LayeredMapPane();
+    mapPane = layeredMapPane.getMapPane();
+    mapContext = mapPane.getMapContext();
+    mapControl = new MapActionControlPane(mapPane, MapActionControlPane.VERTICAL);
+    mapControl.setFloatable(false);
 
-	/**
-	 * Erzeugt ein neues (leeres) Map-Fenster.
-	 * 
-	 * @param title
-	 *            Titel des Fensters
-	 * @param lmp
-	 *            {@link LayeredMapPane} welches zur Anzeige der Karten
-	 *            verwendet wird (wenn {@code null} wird eine neue
-	 *            {@link LayeredMapPane} -Instanz erzeugt)
-	 */
-	public LayeredMapFrame(LayeredMapPane lmp, String title) {
-		super();
-		this.setSize(new Dimension(500, 400));
-		this.setTitle(title);
-		contentPane = (JPanel) this.getContentPane();
-		contentPane.setLayout(new GridBagLayout());
+    // unter Layer-Liste eine ComboBox mit Raster-Auswahl einfuegen
+    this.rasterComboBox = new SelectionInputOption.Combo<MapLayer>("", false);
+    this.mapContext.addMapLayerListListener(new MapLayerListListener() {
+      public void layerChanged(MapLayerListEvent e) {
+        updateRasterComboBox();
+      }
 
-		// Karte und Layer-Kontrolle
-		layeredMapPane = lmp != null ? lmp : new LayeredMapPane();
-		mapPane = layeredMapPane.getMapPane();
-		mapContext = mapPane.getMapContext();
-		mapControl = new MapActionControlPane(mapPane,
-				MapActionControlPane.VERTICAL);
-		mapControl.setFloatable(false);
+      public void layerMoved(MapLayerListEvent e) {
+      }
 
-		// unter Layer-Liste eine ComboBox mit Raster-Auswahl einfuegen
-		this.rasterComboBox = new SelectionInputOption.Combo<MapLayer>("",
-				false);
-		this.mapContext.addMapLayerListListener(new MapLayerListListener() {
-			public void layerChanged(MapLayerListEvent e) {
-				updateRasterComboBox();
-			}
+      public void layerAdded(MapLayerListEvent e) {
+        updateRasterComboBox();
+      }
 
-			public void layerMoved(MapLayerListEvent e) {
-			}
+      public void layerRemoved(MapLayerListEvent e) {
+        updateRasterComboBox();
+      }
+    });
+    this.layeredMapPane.horSplitPane.getContainer(0).add(rasterComboBox,
+                                                         BorderLayout.SOUTH);
 
-			public void layerAdded(MapLayerListEvent e) {
-				updateRasterComboBox();
-			}
+    // Spezielles RasterPositionLabel in dem die Koordinaten des in der
+    // ComboBox ausgewaehlten Rasters angezeigt werden
+    RasterPositionLabel rpLabel = new RasterPositionLabel(1) {
+      protected MapLayer determineRasterLayer(final SelectableXMapPane mapPane) {
+        return rasterComboBox.getValue();
+      }
+    };
 
-			public void layerRemoved(MapLayerListEvent e) {
-				updateRasterComboBox();
-			}
-		});
-		this.layeredMapPane.horSplitPane.getContainer(0).add(rasterComboBox,
-				BorderLayout.SOUTH);
+    // Status-Zeile mit Raster-Auswahlfeld
+    statusBar = new MapPaneStatusBar(mapPane, rpLabel, null);
+    statusBar.setBorder(BorderFactory.createCompoundBorder(
+                                                           BorderFactory.createLoweredBevelBorder(),
+                                                           BorderFactory.createEmptyBorder(
+                                                                                           2,
+                                                                                           5,
+                                                                                           2,
+                                                                                           5)));
 
-		// Spezielles RasterPositionLabel in dem die Koordinaten des in der
-		// ComboBox ausgewaehlten Rasters angezeigt werden
-		RasterPositionLabel rpLabel = new RasterPositionLabel(1) {
-			protected MapLayer determineRasterLayer(
-					final SelectableXMapPane mapPane) {
-				return rasterComboBox.getValue();
-			}
-		};
+    // Status-Zeile mit Raster-Auswahlfeld kombinieren
+    JPanel statusBarContainer = new JPanel();
+    statusBarContainer.setLayout(new BorderLayout());
+    statusBarContainer.add(rasterComboBox, BorderLayout.WEST);
+    statusBarContainer.add(statusBar, BorderLayout.CENTER);
 
-		// Status-Zeile mit Raster-Auswahlfeld
-		statusBar = new MapPaneStatusBar(mapPane, rpLabel, null);
-		statusBar.setBorder(BorderFactory.createCompoundBorder(
-				BorderFactory.createLoweredBevelBorder(),
-				BorderFactory.createEmptyBorder(2, 5, 2, 5)));
+    // Root-SplitPane in Fenster einfuegen
+    contentPane.add(layeredMapPane, new GridBagConstraints(0, 0, 1, 1, 1.0,
+        1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,
+            0, 0, 0), 0, 0));
+    contentPane.add(mapControl, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,
+        GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2, 0, 0,
+            0), 0, 0));
+    contentPane.add(statusBarContainer, new GridBagConstraints(0, 1, 2, 1, 1.0,
+        0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2,
+            0, 0, 0), 0, 0));
 
-		// Status-Zeile mit Raster-Auswahlfeld kombinieren
-		JPanel statusBarContainer = new JPanel();
-		statusBarContainer.setLayout(new BorderLayout());
-		statusBarContainer.add(rasterComboBox, BorderLayout.WEST);
-		statusBarContainer.add(statusBar, BorderLayout.CENTER);
+    // Fenster fuer SimpleFeature-Details
+    featuresFrame = new FeatureCollectionFrame(null, true);
+    featuresFrame.setSize(new Dimension(400, 200));
+    // Ausgewaehlte Features werden im Detail-Frame angezeigt
+    mapPane.addMapPaneListener(new JMapPaneListener() {
+      public void performMapPaneEvent(XMapPaneEvent e) {
+        // Wenn Features ueber die Maus aus der Karte ausgewaehlt werden,
+        // oeffnet sich ein Detail-Fenster
+        if (e instanceof FeatureSelectedEvent && e.getSourceObject() == mapPane) {
+          FeatureSelectedEvent fse = (FeatureSelectedEvent) e;
+          FeatureCollection fc = fse.getSelectionResult();
+          featuresFrame.setFeatureCollection(fc);
+          featuresFrame.setTitle(fse.getSourceLayer().getTitle() + " [" +
+                                 fse.getSelectionRange() + "]");
+          if (!featuresFrame.isVisible()) {
+            SwingUtil.setRelativeFramePosition(featuresFrame, 1, 0);
+          }
+          featuresFrame.setVisible(true);
+        }
 
-		// Root-SplitPane in Fenster einfuegen
-		contentPane.add(layeredMapPane, new GridBagConstraints(0, 0, 1, 1, 1.0,
-				1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-				new Insets(0, 0, 0, 0), 0, 0));
-		contentPane.add(mapControl, new GridBagConstraints(1, 0, 1, 1, 0.0,
-				0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-				new Insets(2, 0, 0, 0), 0, 0));
-		contentPane.add(statusBarContainer, new GridBagConstraints(0, 1, 2, 1,
-				1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
-				new Insets(2, 0, 0, 0), 0, 0));
+        if (e instanceof GridCoverageSelectedEvent) {
+          // ...
+        }
+      }
+    });
+  }
 
-		// Fenster fuer SimpleFeature-Details
-		featuresFrame = new FeatureCollectionFrame(null, true);
-		featuresFrame.setSize(new Dimension(400, 200));
+  protected void updateRasterComboBox() {
+    // Letzte Auswahl merken
+    MapLayer lastSelection = (MapLayer) rasterComboBox.getValue();
+    // Alle Raster-Layer und Titel ermitteln
+    Vector<MapLayer> rasterLayer = new Vector<MapLayer>();
+    Vector<String> rasterLayerDesc = new Vector<String>();
+    for (MapLayer layer : mapPane.getMapContext().getLayers())
+      if (mapPane.isGridCoverageLayer(layer)) {
+        rasterLayer.add(layer);
+        rasterLayerDesc.add(layer.getTitle());
+      }
+    // Auswahl neu setzen
+    rasterComboBox.setSelectionObjects(rasterLayer.toArray(new MapLayer[0]),
+                                       rasterLayerDesc.toArray());
+    // Wenn nur ein Raster zur Verfuegung steht, dieses autom. auswaehlen
+    if (rasterLayer.size() == 1)
+      lastSelection = rasterLayer.firstElement();
+    // Letzte Auswahl setzen
+    rasterComboBox.setSelectedItem(lastSelection);
+  }
 
-		mapPane.addMapPaneListenerNew(listenSelectedFeaturesAreShownInDetail);
-	}
+  /**
+   * Liefert den Karten- und Kontroll-Bereich des Fensters.
+   */
+  public LayeredMapPane getLayeredMapPane() {
+    return this.layeredMapPane;
+  }
 
-	protected void updateRasterComboBox() {
-		// Letzte Auswahl merken
-		MapLayer lastSelection = (MapLayer) rasterComboBox.getValue();
-		// Alle Raster-Layer und Titel ermitteln
-		Vector<MapLayer> rasterLayer = new Vector<MapLayer>();
-		Vector<String> rasterLayerDesc = new Vector<String>();
-		for (MapLayer layer : mapPane.getMapContext().getLayers())
-			if (mapPane.isGridCoverageLayer(layer)) {
-				rasterLayer.add(layer);
-				rasterLayerDesc.add(layer.getTitle());
-			}
-		// Auswahl neu setzen
-		rasterComboBox
-				.setSelectionObjects(rasterLayer.toArray(new MapLayer[0]),
-						rasterLayerDesc.toArray());
-		// Wenn nur ein Raster zur Verfuegung steht, dieses autom. auswaehlen
-		if (rasterLayer.size() == 1)
-			lastSelection = rasterLayer.firstElement();
-		// Letzte Auswahl setzen
-		rasterComboBox.setSelectedItem(lastSelection);
-	}
+  /**
+   * Liefert den Status-Bereich des Fensters.
+   */
+  public MapPaneStatusBar getStatusBar() {
+    return this.statusBar;
+  }
 
-	/**
-	 * Liefert den Karten- und Kontroll-Bereich des Fensters.
-	 */
-	public LayeredMapPane getLayeredMapPane() {
-		return this.layeredMapPane;
-	}
-
-	/**
-	 * Liefert den Status-Bereich des Fensters.
-	 */
-	public MapPaneStatusBar getStatusBar() {
-		return this.statusBar;
-	}
-
-	// /**
-	// * Liefert den Toolbar fuer die Karten-Aktionen.
-	// */
-	// public MapActionControlPane getToolBar() {
-	// return this.mapControl;
-	// }
+//  /**
+//   * Liefert den Toolbar fuer die Karten-Aktionen.
+//   */
+//  public MapActionControlPane getToolBar() {
+//    return this.mapControl;
+//  }
 }

Modified: branches/2.3.x/src/schmitzm/geotools/gui/XMapPane.java
===================================================================
--- branches/2.3.x/src/schmitzm/geotools/gui/XMapPane.java	2010-12-18 21:58:10 UTC (rev 1354)
+++ branches/2.3.x/src/schmitzm/geotools/gui/XMapPane.java	2010-12-18 22:36:54 UTC (rev 1355)
@@ -58,7 +58,6 @@
 import org.geotools.swing.JMapPane;
 import org.geotools.swing.event.MapMouseEvent;
 import org.geotools.swing.event.MapPaneListener;
-import org.geotools.util.WeakHashSet;
 import org.opengis.display.canvas.RenderingState;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
@@ -558,17 +557,8 @@
 	/**
 	 * List of listeners of this {@link XMapPane}
 	 */
-	@Deprecated
-	protected Vector<JMapPaneListener> DEPRECATEDmapPaneListeners = new Vector<JMapPaneListener>();
+	protected Vector<JMapPaneListener> mapPaneListeners = new Vector<JMapPaneListener>();
 	/**
-	 * 
-	 * List of {@link JMapPaneListener} for this {@link XMapPane}. The listeners
-	 * are kept in a {@link WeakHashSet}, so calsses listening has to keep a
-	 * reference to the listener or it will be removed.
-	 */
-	protected WeakHashSet<JMapPaneListener> mapPaneListeners = new WeakHashSet<JMapPaneListener>(
-			JMapPaneListener.class);
-	/**
 	 * If not <code>null</code>, the {@link XMapPane} will not allow to zoom/pan
 	 * out of that area
 	 **/
@@ -819,8 +809,6 @@
 	 *            Ereignis
 	 */
 	public void fireMapPaneEvent(XMapPaneEvent e) {
-		for (JMapPaneListener l : DEPRECATEDmapPaneListeners)
-			l.performMapPaneEvent(e);
 		for (JMapPaneListener l : mapPaneListeners)
 			l.performMapPaneEvent(e);
 	}
@@ -830,19 +818,8 @@
 	 * 
 	 * @param l
 	 *            neuer Listener
-	 * @Deprecated Use addMapPaneListenerNew and KEEP A REFERENCE TO THE
-	 *             LISTENER or it will be removed automatically.
 	 */
 	public void addMapPaneListener(final JMapPaneListener l) {
-		DEPRECATEDmapPaneListeners.add(l);
-	}
-
-	/**
-	 * Fuegt der Map einen Listener hinzu. The listenrs do not have to be
-	 * removed. When the listener is not referenced anymore outside, it will be
-	 * removed automatically.
-	 */
-	public void addMapPaneListenerNew(final JMapPaneListener l) {
 		mapPaneListeners.add(l);
 	}
 
@@ -1102,7 +1079,7 @@
 		disposeImages();
 
 		// Remove all mapPaneListeners that have registered with us
-		DEPRECATEDmapPaneListeners.clear();
+		mapPaneListeners.clear();
 
 		removeMouseMotionListener(xMapPaneMouseListener);
 		removeMouseListener(xMapPaneMouseListener);
@@ -1701,7 +1678,7 @@
 
 	@Override
 	protected void paintComponent(final Graphics g) {
-
+		
 		setBackground(Color.blue);
 
 		// Maybe update the cursor and maybe stop the repainting timer
@@ -1712,7 +1689,16 @@
 
 		if (!isWellDefined())
 			return;
+		//
+		// if (paneResized) {
+		// // ((Graphics2D) g).setBackground(getMapBackgroundColor());
+		// // g.clearRect(0, 0, getMapPaneSize().width,
+		// getMapPaneSize().height);
+		// return;
+		// }
 
+		// super.paintComponent(g); // candidate for removal
+
 		boolean paintedSomething = false;
 
 		if (mapImageInvalid) { /* if the map changed then redraw */
@@ -1729,7 +1715,14 @@
 
 				mapAreaChanged = false;
 
+				// if (getMapArea().covers(oldMapArea)) {
+				// // quickPreviewHint = ZOOM_OUT;
+				// paintedSomething = drawScaledPreviewImage_Zoom((Graphics2D)
+				// g);
+				// } else if (oldMapArea.covers(getMapArea())) {
+				// quickPreviewHint = ZOOM_IN;
 				paintedSomething = drawScaledPreviewImage_Zoom((Graphics2D) g);
+				// }
 			}
 		}
 
@@ -1766,6 +1759,15 @@
 	 */
 	private void disposeImages() {
 
+		// System.out.println("vorher = "
+		// + new MbDecimalFormatter().format(LangUtil.gcTotal()));
+		// bi.flush();
+		// return bi = null;
+		// System.out.println("nacher = "
+		// + new MbDecimalFormatter().format(LangUtil.gcTotal()));
+		//
+		// System.out.println("\n");
+
 		if (preFinalImage != null) {
 			preFinalImage.flush();
 			preFinalImage = null;
@@ -1789,17 +1791,46 @@
 
 	}
 
+	//
+	// /**
+	// * Performs a {@value #PAN} action. During panning, the displacement is
+	// * stored in {@link #imageOrigin} object. Calling {@link #performPan()}
+	// will
+	// * reset the offset and call {@link #setMapArea(Envelope)}.
+	// */
+	// public void performPan() {
+	//
+	// final Rectangle winBounds = getMapPaneSize();
+	//
+	// winBounds.translate(-imageOrigin.x, -imageOrigin.y);
+	// final Envelope newMapArea = tranformWindowToGeo(winBounds.x,
+	// winBounds.y, winBounds.x + winBounds.width, winBounds.y
+	// + winBounds.height);
+	//
+	// imageOrigin.x = 0;
+	// imageOrigin.y = 0;
+	//
+	// if (!setMapArea(newMapArea)) {
+	// /**
+	// * If setMapArea returns true, the finalImage is updated anyways.
+	// * This if-case exists to ensure that we repaint a correct image
+	// * even if the new panning area has been denied.
+	// */
+	// updateFinalImage();
+	// repaint();
+	// }
+	//
+	// if (getCursor() == SwingUtil.PANNING_CURSOR)
+	// setCursor(SwingUtil.PAN_CURSOR);
+	// }
+
 	/**
-	 * Entfernt einen Listener von der {@link XMapPane}.
+	 * Entfernt einen Listener von der Map.
 	 * 
 	 * @param l
 	 *            zu entfernender Listener
-	 * 
-	 * @Deprecated Use addMapPaneListenerNew and KEEP A REFERENCE TO THE
-	 *             LISTENER or it will be removed automatically.
 	 */
 	public void removeMapPaneListener(final JMapPaneListener l) {
-		DEPRECATEDmapPaneListeners.remove(l);
 		mapPaneListeners.remove(l);
 	}
 

Modified: branches/2.3.x/src/skrueger/geotools/CrsLabel.java
===================================================================
--- branches/2.3.x/src/skrueger/geotools/CrsLabel.java	2010-12-18 21:58:10 UTC (rev 1354)
+++ branches/2.3.x/src/skrueger/geotools/CrsLabel.java	2010-12-18 22:36:54 UTC (rev 1355)
@@ -23,7 +23,7 @@
 		super();
 		this.mapPane = mapPane;
 
-		mapPane.addMapPaneListenerNew(listenForCrsChange);
+		mapPane.addMapPaneListener(listenForCrsChange);
 
 		updateCrs();
 

Modified: branches/2.3.x/src/skrueger/geotools/MapPaneToolBar.java
===================================================================
--- branches/2.3.x/src/skrueger/geotools/MapPaneToolBar.java	2010-12-18 21:58:10 UTC (rev 1354)
+++ branches/2.3.x/src/skrueger/geotools/MapPaneToolBar.java	2010-12-18 22:36:54 UTC (rev 1355)
@@ -265,6 +265,13 @@
 		init();
 	}
 
+//	private CrsLabel getCrsComponent() {
+//		if (crsViewer == null) {
+//			crsViewer = new CrsLabel(this.mapPane);
+//		}
+//		return crsViewer;
+//	}
+
 	/**
 	 * Sets the {@link SelectableXMapPane} controlled by this tool bar.
 	 * 
@@ -278,7 +285,7 @@
 			this.mapPane.removeMapPaneListener(mapPaneListener);
 		this.mapPane = mapPane;
 		if (this.mapPane != null && mapPaneListener != null)
-			this.mapPane.addMapPaneListenerNew(mapPaneListener);
+			this.mapPane.addMapPaneListener(mapPaneListener);
 	}
 
 	/**

Modified: branches/2.3.x/src/skrueger/geotools/labelsearch/SearchResultFeature.java
===================================================================
--- branches/2.3.x/src/skrueger/geotools/labelsearch/SearchResultFeature.java	2010-12-18 21:58:10 UTC (rev 1354)
+++ branches/2.3.x/src/skrueger/geotools/labelsearch/SearchResultFeature.java	2010-12-18 22:36:54 UTC (rev 1355)
@@ -75,23 +75,6 @@
 		return title;
 	}
 
-	JMapPaneListener listenWhenRenderingIsFInishedAndBlink = new JMapPaneListener() {
-
-//		boolean virgin = true;
-
-		@Override
-		public void performMapPaneEvent(XMapPaneEvent e) {
-			if (e instanceof MapRenderingStateEvent) {
-				MapRenderingStateEvent mre = (MapRenderingStateEvent) e;
-				if (mre.getState() == RenderingState.ON_HOLD) {
-					// Remove this listener, and blink!
-					mapPane.blink(feature);
-					mapPane.removeMapPaneListener(this);
-				}
-			}
-		}
-	};
-
 	@Override
 	public void open() {
 
@@ -103,8 +86,23 @@
 
 		// ZOmming will take some time, until the new map is correctly rendered
 		if (mapPane.zoomTo(feature)) {
+			mapPane.addMapPaneListener(new JMapPaneListener() {
 
-			mapPane.addMapPaneListenerNew(listenWhenRenderingIsFInishedAndBlink);
+				boolean virgin = true;
+
+				@Override
+				public void performMapPaneEvent(XMapPaneEvent e) {
+					if (virgin && e instanceof MapRenderingStateEvent) {
+						MapRenderingStateEvent mre = (MapRenderingStateEvent) e;
+						if (mre.getState() == RenderingState.ON_HOLD) {
+							// Remove this listener, and blink!
+							mapPane.blink(feature);
+							virgin = false;
+							// mapPane.removeMapPaneListener(this);
+						}
+					}
+				}
+			});
 			// TODO Remove the listener and the virgin flag again! otherwise the
 			// listener is never removed!
 		} else {



More information about the Schmitzm-commits mailing list