[tiled] r695 - in trunk/src/tiled: core io mapeditor/dialogs mapeditor/widget

svn@biggeruniverse.com svn at biggeruniverse.com
Sat Aug 19 10:33:52 PDT 2006


Author: bjorn
Date: 2006-08-19 12:33:52 -0500 (Sat, 19 Aug 2006)
New Revision: 695

Modified:
   trunk/src/tiled/core/Map.java
   trunk/src/tiled/io/MapWriter.java
   trunk/src/tiled/mapeditor/dialogs/PropertiesDialog.java
   trunk/src/tiled/mapeditor/widget/TilePalettePanel.java
Log:
Cleaned up usages of EventListenerList and fixed out of bounds exceptions while creating a stamp brush from the tile palette when the mouse is dragged outside of the palette.

Modified: trunk/src/tiled/core/Map.java
===================================================================
--- trunk/src/tiled/core/Map.java	2006-08-14 23:49:11 UTC (rev 694)
+++ trunk/src/tiled/core/Map.java	2006-08-19 17:33:52 UTC (rev 695)
@@ -12,11 +12,7 @@
 
 package tiled.core;
 
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Properties;
-import java.util.Vector;
-import javax.swing.event.EventListenerList;
+import java.util.*;
 
 import tiled.mapeditor.Resources;
 import tiled.mapeditor.util.MapChangeListener;
@@ -47,9 +43,8 @@
     private LinkedList objects;
 
     private int tileWidth, tileHeight;
-    private int totalObjects;
     private int orientation = MDO_ORTHO;
-    private EventListenerList mapChangeListeners;
+    private final List mapChangeListeners = new LinkedList();
     private Properties properties;
     private String filename;
 
@@ -60,7 +55,6 @@
     public Map(int width, int height) {
         super(width, height);
 
-        mapChangeListeners = new EventListenerList();
         properties = new Properties();
         tilesets = new Vector();
         specialLayers = new Vector();
@@ -71,33 +65,31 @@
      * Adds a change listener. The listener will be notified when the map
      * changes in certain ways.
      *
-     * @param l the change listener to add
+     * @param listener the change listener to add
      * @see MapChangeListener#mapChanged(MapChangedEvent)
      */
-    public void addMapChangeListener(MapChangeListener l) {
-        mapChangeListeners.add(MapChangeListener.class, l);
+    public void addMapChangeListener(MapChangeListener listener) {
+        mapChangeListeners.add(listener);
     }
 
     /**
      * Removes a change listener.
-     * @param l
+     * @param listener
      */
-    public void removeMapChangeListener(MapChangeListener l) {
-        mapChangeListeners.remove(MapChangeListener.class, l);
+    public void removeMapChangeListener(MapChangeListener listener) {
+        mapChangeListeners.remove(listener);
     }
 
     /**
      * Notifies all registered map change listeners about a change.
      */
     protected void fireMapChanged() {
-        Object[] listeners = mapChangeListeners.getListenerList();
+        Iterator iterator = mapChangeListeners.iterator();
         MapChangedEvent event = null;
 
-        for (int i = listeners.length - 2; i >= 0; i -= 2) {
-            if (listeners[i] == MapChangeListener.class) {
-                if (event == null) event = new MapChangedEvent(this);
-                ((MapChangeListener)listeners[i + 1]).mapChanged(event);
-            }
+        while (iterator.hasNext()) {
+            if (event == null) event = new MapChangedEvent(this);
+            ((MapChangeListener) iterator.next()).mapChanged(event);
         }
     }
 
@@ -108,17 +100,17 @@
         fireMapChanged();
     }
 
-    public void addLayerSpecial(MapLayer l) {
-        l.setMap(this);
-        specialLayers.add(l);
+    public void addLayerSpecial(MapLayer layer) {
+        layer.setMap(this);
+        specialLayers.add(layer);
         fireMapChanged();
     }
 
-    public MapLayer addLayer(MapLayer l) {
-        l.setMap(this);
-        super.addLayer(l);
+    public MapLayer addLayer(MapLayer layer) {
+        layer.setMap(this);
+        super.addLayer(layer);
         fireMapChanged();
-        return l;
+        return layer;
     }
 
     /**
@@ -135,24 +127,24 @@
         return layer;
     }
 
-    public void setLayer(int index, MapLayer l) {
-        l.setMap(this);
-        super.setLayer(index, l);
+    public void setLayer(int index, MapLayer layer) {
+        layer.setMap(this);
+        super.setLayer(index, layer);
         fireMapChanged();
     }
-    
+
     /**
      * Adds a Tileset to this Map. If the set is already attached to this map,
      * <code>addTileset</code> simply returns.
      *
-     * @param s a tileset to add
+     * @param tileset a tileset to add
      */
-    public void addTileset(TileSet s) {
-        if (s == null || tilesets.indexOf(s) > -1) {
+    public void addTileset(TileSet tileset) {
+        if (tileset == null || tilesets.indexOf(tileset) > -1) {
             return;
         }
 
-        Tile t = s.getTile(0);
+        Tile t = tileset.getTile(0);
 
         if (t != null) {
             int tw = t.getWidth();
@@ -165,7 +157,7 @@
             }
         }
 
-        tilesets.add(s);
+        tilesets.add(tileset);
         fireMapChanged();
     }
 
@@ -174,16 +166,16 @@
      * from the map layers. A {@link MapChangedEvent} is fired when all
      * processing is complete.
      *
-     * @param s TileSet to remove
+     * @param tileset TileSet to remove
      * @throws LayerLockedException
      */
-    public void removeTileset(TileSet s) throws LayerLockedException {
+    public void removeTileset(TileSet tileset) throws LayerLockedException {
         // Sanity check
-        if (tilesets.indexOf(s) == -1)
+        if (tilesets.indexOf(tileset) == -1)
             return;
 
         // Go through the map and remove any instances of the tiles in the set
-        Iterator tileIterator = s.iterator();
+        Iterator tileIterator = tileset.iterator();
         while (tileIterator.hasNext()) {
             Tile tile = (Tile)tileIterator.next();
             Iterator layerIterator = getLayers();
@@ -195,7 +187,7 @@
             }
         }
 
-        tilesets.remove(s);
+        tilesets.remove(tileset);
         fireMapChanged();
     }
 
@@ -296,8 +288,8 @@
 
     /**
      * Sets a new tile width.
-     * 
-     * @param width 
+     *
+     * @param width
      */
     public void setTileWidth(int width) {
         tileWidth = width;
@@ -306,8 +298,8 @@
 
     /**
      * Sets a new tile height.
-     * 
-     * @param height 
+     *
+     * @param height
      */
     public void setTileHeight(int height) {
         tileHeight = height;
@@ -339,7 +331,7 @@
 
     /**
      * Returns a vector with the currently loaded tilesets.
-     * 
+     *
      * @return Vector
      */
     public Vector getTilesets() {
@@ -349,8 +341,8 @@
     /**
      * Get the tile set that matches the given global tile id, only to be used
      * when loading a map.
-     * 
-     * @param gid 
+     *
+     * @param gid
      * @return TileSet
      */
     public TileSet findTileSetForTileGID(int gid) {
@@ -367,7 +359,7 @@
 
     /**
      * Returns width of map in tiles.
-     * 
+     *
      * @return int
      */
     public int getWidth() {
@@ -376,7 +368,7 @@
 
     /**
      * Returns height of map in tiles.
-     * 
+     *
      * @return int
      */
     public int getHeight() {
@@ -450,15 +442,6 @@
     */
 
     /**
-     * Returns the amount of objects on the map.
-     *
-     * @return The total objects in the map
-     */
-    public int getTotalObjects() {
-        return totalObjects;
-    }
-
-    /**
      * Returns the orientation of this map. Orientation will be one of
      * {@link Map#MDO_ISO}, {@link Map#MDO_ORTHO}, {@link Map#MDO_HEX},
      * {@link Map#MDO_OBLIQUE} and {@link Map#MDO_SHIFTED}.

Modified: trunk/src/tiled/io/MapWriter.java
===================================================================
--- trunk/src/tiled/io/MapWriter.java	2006-08-14 23:49:11 UTC (rev 694)
+++ trunk/src/tiled/io/MapWriter.java	2006-08-19 17:33:52 UTC (rev 695)
@@ -5,7 +5,7 @@
  *  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.
- * 
+ *
  *  Adam Turk <aturk at biggeruniverse.com>
  *  Bjorn Lindeijer <b.lindeijer at xs4all.nl>
  */
@@ -29,7 +29,7 @@
 {
     /**
      * Saves a map to a file.
-     * 
+     *
      * @param map
      * @param filename the filename of the map file
      * @throws Exception
@@ -38,26 +38,26 @@
 
     /**
      * Saves a tileset to a file.
-     * 
+     *
      * @param set
      * @param filename the filename of the tileset file
      * @throws Exception
      */
     public void writeTileset(TileSet set, String filename) throws Exception;
-    
+
     /**
      * Writes a map to an already opened stream. Useful
      * for maps which are part of a larger binary dataset
-     * 
+     *
      * @param map the Map to be written
      * @param out
      * @throws Exception
      */
     public void writeMap(Map map, OutputStream out) throws Exception;
-    
+
     /**
      * Overload this to write a tileset to an open stream.
-     * 
+     *
      * @param set
      * @param out
      * @throws Exception

Modified: trunk/src/tiled/mapeditor/dialogs/PropertiesDialog.java
===================================================================
--- trunk/src/tiled/mapeditor/dialogs/PropertiesDialog.java	2006-08-14 23:49:11 UTC (rev 694)
+++ trunk/src/tiled/mapeditor/dialogs/PropertiesDialog.java	2006-08-19 17:33:52 UTC (rev 695)
@@ -85,7 +85,7 @@
         //create actionlisteners
         okButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent actionEvent) {
-            	buildPropertiesAndDispose();
+                buildPropertiesAndDispose();
             }
         });
 
@@ -141,7 +141,7 @@
     }
 
     private void deleteSelected() {
-    	int total = propertiesTable.getSelectedRowCount();
+        int total = propertiesTable.getSelectedRowCount();
         Object[] keys = new Object[total];
         int[] selRows = propertiesTable.getSelectedRows();
 

Modified: trunk/src/tiled/mapeditor/widget/TilePalettePanel.java
===================================================================
--- trunk/src/tiled/mapeditor/widget/TilePalettePanel.java	2006-08-14 23:49:11 UTC (rev 694)
+++ trunk/src/tiled/mapeditor/widget/TilePalettePanel.java	2006-08-19 17:33:52 UTC (rev 695)
@@ -14,17 +14,15 @@
 
 import java.awt.*;
 import java.awt.event.MouseEvent;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Vector;
 import javax.swing.JPanel;
 import javax.swing.Scrollable;
-import javax.swing.event.EventListenerList;
 import javax.swing.event.MouseInputAdapter;
 
-import tiled.core.Tile;
-import tiled.core.TileLayer;
-import tiled.core.TileSet;
-import tiled.core.TilesetChangeListener;
-import tiled.core.TilesetChangedEvent;
+import tiled.core.*;
 import tiled.mapeditor.util.TileRegionSelectionEvent;
 import tiled.mapeditor.util.TileSelectionEvent;
 import tiled.mapeditor.util.TileSelectionListener;
@@ -39,12 +37,12 @@
 {
     private static final int TILES_PER_ROW = 4;
     private TileSet tileset;
-    private EventListenerList tileSelectionListeners;
+    private List tileSelectionListeners;
     private Vector tilesetMap;
     private Rectangle selection;
 
     public TilePalettePanel() {
-        tileSelectionListeners = new EventListenerList();
+        tileSelectionListeners = new LinkedList();
 
         MouseInputAdapter mouseInputAdapter = new MouseInputAdapter() {
             private Point origin;
@@ -77,44 +75,32 @@
      * user selects a tile.
      */
     public void addTileSelectionListener(TileSelectionListener listener) {
-        tileSelectionListeners.add(TileSelectionListener.class, listener);
+        tileSelectionListeners.add(listener);
     }
 
     /**
      * Removes tile selection listener.
      */
     public void removeTileSelectionListener(TileSelectionListener listener) {
-        tileSelectionListeners.remove(TileSelectionListener.class, listener);
+        tileSelectionListeners.remove(listener);
     }
 
-    protected void fireTileSelectionEvent(Tile selectedTile) {
-        Object[] listeners = tileSelectionListeners.getListenerList();
-        TileSelectionEvent event = null;
+    private void fireTileSelectionEvent(Tile selectedTile) {
+        TileSelectionEvent event = new TileSelectionEvent(this, selectedTile);
+        Iterator iterator = tileSelectionListeners.iterator();
 
-        for (int i = listeners.length - 2; i >= 0; i -= 2) {
-            if (listeners[i] == TileSelectionListener.class) {
-                if (event == null) {
-                    event = new TileSelectionEvent(this, selectedTile);
-                }
-
-                ((TileSelectionListener) listeners[i + 1]).tileSelected(event);
-            }
+        while (iterator.hasNext()) {
+            ((TileSelectionListener) iterator.next()).tileSelected(event);
         }
     }
 
     private void fireTileRegionSelectionEvent(Rectangle selection) {
-        Object[] listeners = tileSelectionListeners.getListenerList();
-        TileRegionSelectionEvent event = null;
+        TileLayer region = createTileLayerFromRegion(selection);
+        TileRegionSelectionEvent event = new TileRegionSelectionEvent(this, region);
+        Iterator iterator = tileSelectionListeners.iterator();
 
-        for (int i = listeners.length - 2; i >= 0; i -= 2) {
-            if (listeners[i] == TileSelectionListener.class) {
-                if (event == null) {
-                    TileLayer region = createTileLayerFromRegion(selection);
-                    event = new TileRegionSelectionEvent(this, region);
-                }
-
-                ((TileSelectionListener) listeners[i + 1]).tileRegionSelected(event);
-            }
+        while (iterator.hasNext()) {
+            ((TileSelectionListener) iterator.next()).tileRegionSelected(event);
         }
     }
 
@@ -167,14 +153,19 @@
 
     /**
      * Converts pixel coordinates to tile coordinates. The returned coordinates
-     * are adjusted with respect to the number of tiles per row.
+     * are at least 0 and adjusted with respect to the number of tiles per row
+     * and the number of rows.
      */
     private Point getTileCoordinates(int x, int y) {
         int twidth = tileset.getTileWidth() + 1;
         int theight = tileset.getTileHeight() + 1;
+        int tileCount = tilesetMap.size();
+        int tilesPerRow = getTilesPerRow();
+        int rows = tileCount / tilesPerRow +
+                (tileCount % tilesPerRow > 0 ? 1 : 0);
 
-        int tileX = Math.min(x / twidth, getTilesPerRow() - 1);
-        int tileY = y / theight;
+        int tileX = Math.max(0, Math.min(x / twidth, tilesPerRow - 1));
+        int tileY = Math.max(0, Math.min(y / theight, rows - 1));
 
         return new Point(tileX, tileY);
     }




More information about the tiled-commit mailing list