[tiled] r706 - in trunk/src/tiled: core mapeditor mapeditor/resources mapeditor/util/cutter

svn at biggeruniverse.com svn at biggeruniverse.com
Sat Nov 4 13:24:19 PST 2006


Author: bjorn
Date: 2006-11-04 15:24:18 -0600 (Sat, 04 Nov 2006)
New Revision: 706

Modified:
   trunk/src/tiled/core/TileSet.java
   trunk/src/tiled/mapeditor/MapEditor.java
   trunk/src/tiled/mapeditor/resources/gui.properties
   trunk/src/tiled/mapeditor/util/cutter/BasicTileCutter.java
   trunk/src/tiled/mapeditor/util/cutter/BorderTileCutter.java
   trunk/src/tiled/mapeditor/util/cutter/TileCutter.java
Log:
Accepted patch by Pedro Miller Rabinovitch that adds manual refreshing of changed tilesets.

Modified: trunk/src/tiled/core/TileSet.java
===================================================================
--- trunk/src/tiled/core/TileSet.java	2006-11-04 20:11:27 UTC (rev 705)
+++ trunk/src/tiled/core/TileSet.java	2006-11-04 21:24:18 UTC (rev 706)
@@ -17,11 +17,7 @@
 import java.awt.image.FilteredImageSource;
 import java.io.File;
 import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.Vector;
-import java.util.LinkedList;
+import java.util.*;
 import javax.imageio.ImageIO;
 
 import tiled.mapeditor.util.TransparentImageFilter;
@@ -137,10 +133,73 @@
         }
     }
 
-    public void checkUpdate() {
+    /**
+     * Refreshes a tileset from a tileset image file.
+     *
+     * @throws IOException
+     * @see TileSet#importTileBitmap(BufferedImage,TileCutter)
+     */
+    private void refreshImportedTileBitmap()
+            throws IOException
+    {
+        String imgFilename = tilebmpFile.getPath();
+
+        Image image = ImageIO.read(new File(imgFilename));
+        if (image == null) {
+            throw new IOException("Failed to load " + tilebmpFile);
+        }
+
+        Toolkit tk = Toolkit.getDefaultToolkit();
+
+        if (transparentColor != null) {
+            int rgb = transparentColor.getRGB();
+            image = tk.createImage(
+                    new FilteredImageSource(image.getSource(),
+                            new TransparentImageFilter(rgb)));
+        }
+
+        BufferedImage buffered = new BufferedImage(
+                image.getWidth(null),
+                image.getHeight(null),
+                BufferedImage.TYPE_INT_ARGB);
+        buffered.getGraphics().drawImage(image, 0, 0, null);
+
+        refreshImportedTileBitmap(buffered);
+    }
+
+    /**
+     * Refreshes a tileset from a buffered image. Tiles are cut by the passed
+     * cutter.
+     *
+     * @param tilebmp the image to be used, must not be null
+     */
+    private void refreshImportedTileBitmap(BufferedImage tilebmp) {
+        assert tilebmp != null;
+
+        tileCutter.reset();
+        tileCutter.setImage(tilebmp);
+
+        tileSetImage = tilebmp;
+        tileDimensions = new Rectangle(tileCutter.getTileDimensions());
+
+        int id = 0;
+        Image tile = tileCutter.getNextTile();
+        while (tile != null) {
+            int imgId = getTile(id).tileImageId;
+            overlayImage(imgId, tile);
+            tile = tileCutter.getNextTile();
+            id++;
+        }
+
+        fireTilesetChanged();
+    }
+
+    public void checkUpdate() throws IOException {
         if (tilebmpFile != null &&
                 tilebmpFile.lastModified() > tilebmpFileLastModified)
         {
+            refreshImportedTileBitmap();
+            tilebmpFileLastModified = tilebmpFile.lastModified();
         }
     }
 

Modified: trunk/src/tiled/mapeditor/MapEditor.java
===================================================================
--- trunk/src/tiled/mapeditor/MapEditor.java	2006-11-04 20:11:27 UTC (rev 705)
+++ trunk/src/tiled/mapeditor/MapEditor.java	2006-11-04 21:24:18 UTC (rev 706)
@@ -148,6 +148,8 @@
     private final Action moveLayerDownAction, moveLayerUpAction;
     private final Action mergeLayerDownAction, mergeAllLayersAction;
 
+    private static final String IMPORT_ERROR_MSG = Resources.getString("dialog.newtileset.import.error.message");
+
     private static final String TOOL_PAINT = Resources.getString("tool.paint.name");
     private static final String TOOL_ERASE = Resources.getString("tool.erase.name");
     private static final String TOOL_FILL = Resources.getString("tool.fill.name");
@@ -406,16 +408,24 @@
         layerMenu.add(new TMenuItem(mergeLayerDownAction));
         layerMenu.add(new TMenuItem(mergeAllLayersAction));
         layerMenu.addSeparator();
-        layerMenu.add(createMenuItem(Resources.getString("menu.layer.properties"), null,
+        layerMenu.add(createMenuItem(
+                Resources.getString("menu.layer.properties"), null,
                 Resources.getString("menu.layer.properties.tooltip")));
 
         JMenu tilesetMenu = new JMenu(Resources.getString("menu.tilesets"));
-        tilesetMenu.add(createMenuItem(Resources.getString("menu.tilesets.new"), null,
+        tilesetMenu.add(createMenuItem(
+                Resources.getString("menu.tilesets.new"), null,
                 Resources.getString("menu.tilesets.new.tooltip")));
-        tilesetMenu.add(createMenuItem(Resources.getString("menu.tilesets.import"), null,
+        tilesetMenu.add(createMenuItem(
+                Resources.getString("menu.tilesets.import"), null,
                 Resources.getString("menu.tilesets.import.tooltip")));
         tilesetMenu.addSeparator();
-        tilesetMenu.add(createMenuItem(Resources.getString("menu.tilesets.manager"), null,
+        tilesetMenu.add(createMenuItem(
+                Resources.getString("menu.tilesets.refresh"), null,
+                Resources.getString("menu.tilesets.refresh.tooltip"), "F5"));
+        tilesetMenu.addSeparator();
+        tilesetMenu.add(createMenuItem(
+                Resources.getString("menu.tilesets.manager"), null,
                 Resources.getString("menu.tilesets.manager.tooltip")));
 
 
@@ -1227,6 +1237,23 @@
                     }
                 }
             }
+        } else if (command.equals(Resources.getString("menu.tilesets.refresh"))) {
+            if (currentMap != null) {
+               Vector tilesets = currentMap.getTilesets();
+               Iterator iter = tilesets.iterator();
+               while (iter.hasNext()) {
+                       TileSet tileset = (TileSet) iter.next();
+                   try {
+                       tileset.checkUpdate();
+                   } catch (IOException e) {
+                       JOptionPane.showMessageDialog(appFrame,
+                               e.getLocalizedMessage(),
+                               IMPORT_ERROR_MSG, JOptionPane.WARNING_MESSAGE);
+                   }
+               }
+               mapView.repaint();
+               tilePaletteButton.setTile(currentTile);
+            }
         } else if (command.equals(Resources.getString("menu.tilesets.manager"))) {
             if (currentMap != null) {
                 TilesetManager manager = new TilesetManager(appFrame, currentMap);
@@ -2132,7 +2159,7 @@
         else if (prefs.node("io").getBoolean("autoOpenLast", false)) {
             // Load last map if it still exists
             java.util.List recent = TiledConfiguration.getRecentFiles();
-            if (recent.size() > 0) {
+            if (!recent.isEmpty()) {
                 String filename = (String) recent.get(0);
                 if (new File(filename).exists()) {
                     editor.loadMap(filename);

Modified: trunk/src/tiled/mapeditor/resources/gui.properties
===================================================================
--- trunk/src/tiled/mapeditor/resources/gui.properties	2006-11-04 20:11:27 UTC (rev 705)
+++ trunk/src/tiled/mapeditor/resources/gui.properties	2006-11-04 21:24:18 UTC (rev 706)
@@ -221,6 +221,8 @@
 menu.tilesets.manager.tooltip=Open the tileset manager
 menu.tilesets.new=New Tileset...
 menu.tilesets.new.tooltip=Add a new internal tileset
+menu.tilesets.refresh=Refresh tilesets
+menu.tilesets.refresh.tooltip=Refresh the loaded tileset images from disk
 menu.view=View
 menu.view.boundaries=Show Boundaries
 menu.view.boundaries.tooltip=Toggle layer boundaries

Modified: trunk/src/tiled/mapeditor/util/cutter/BasicTileCutter.java
===================================================================
--- trunk/src/tiled/mapeditor/util/cutter/BasicTileCutter.java	2006-11-04 20:11:27 UTC (rev 705)
+++ trunk/src/tiled/mapeditor/util/cutter/BasicTileCutter.java	2006-11-04 21:24:18 UTC (rev 706)
@@ -39,9 +39,7 @@
         this.tileSpacing = tileSpacing;
         this.offset = offset;
 
-        // Do initial setup
-        nextX = offset;
-        nextY = offset;
+        reset();
     }
 
     public String getName() {
@@ -69,6 +67,11 @@
         return null;
     }
 
+    public void reset() {
+        nextX = offset;
+        nextY = offset;
+    }
+
     public Dimension getTileDimensions() {
         return new Dimension(tileWidth, tileHeight);
     }

Modified: trunk/src/tiled/mapeditor/util/cutter/BorderTileCutter.java
===================================================================
--- trunk/src/tiled/mapeditor/util/cutter/BorderTileCutter.java	2006-11-04 20:11:27 UTC (rev 705)
+++ trunk/src/tiled/mapeditor/util/cutter/BorderTileCutter.java	2006-11-04 21:24:18 UTC (rev 706)
@@ -34,6 +34,10 @@
         return null;
     }
 
+    public void reset() {
+        // TODO Auto-generated method stub
+    }
+
     public Dimension getTileDimensions() {
         // TODO Auto-generated method stub
         return null;

Modified: trunk/src/tiled/mapeditor/util/cutter/TileCutter.java
===================================================================
--- trunk/src/tiled/mapeditor/util/cutter/TileCutter.java	2006-11-04 20:11:27 UTC (rev 705)
+++ trunk/src/tiled/mapeditor/util/cutter/TileCutter.java	2006-11-04 21:24:18 UTC (rev 706)
@@ -25,7 +25,7 @@
 {
     /**
      * Sets the image that this cutter should cut in tile images.
-     * @param image
+     * @param image the image that this cutter should cut
      */
     public void setImage(BufferedImage image);
 
@@ -37,10 +37,20 @@
     public Image getNextTile();
 
     /**
+     * Resets the tile cutter so that the next call to <code>getNextTile</code>
+     * will return the first tile.
+     */
+    void reset();
+
+    /**
      * Returns the default tile dimensions of tiles cut by this cutter.
      * @return the default tile dimensions of tiles cut by this cutter.
      */
     public Dimension getTileDimensions();
 
+    /**
+     * Returns the name of this tile cutter.
+     * @return the name of this tile cutter
+     */
     public String getName();
 }




More information about the tiled-commit mailing list