org.jdesktop.swingx.mapviewer.Tile Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jxmapviewer2 Show documentation
Show all versions of jxmapviewer2 Show documentation
This project is based on the JXMapViewer component of SwingX-WS.
The newest version!
/*
* Tile.java
*
* Created on March 14, 2006, 4:53 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package org.jdesktop.swingx.mapviewer;
import java.awt.image.BufferedImage;
import java.lang.ref.SoftReference;
import org.jdesktop.beans.AbstractBean;
/**
* The Tile class represents a particular square image piece of the world bitmap at a particular zoom level.
* @author joshy
*/
public class Tile extends AbstractBean
{
/**
* The loading priority
*/
@SuppressWarnings("javadoc")
public enum Priority
{
High, Low
}
private Priority priority = Priority.High;
private TileFactory dtf;
private boolean isLoading = false;
// Most Recently Accessed Tiles. These are strong references, to prevent reloading
// of most recently used tiles.
// private static final Map recentlyAccessed = new HashMap();
// private static final TileCache cache = new TileCache();
/**
* The url of the image to load for this tile
*/
private String url;
/**
* Indicates that loading has succeeded. A PropertyChangeEvent will be fired when the loading is completed
*/
private boolean loaded = false;
/**
* The zoom level this tile is for
*/
private int zoom, x, y;
/**
* The image loaded for this Tile
*/
SoftReference image = new SoftReference(null);
/**
* Create a new Tile at the specified tile point and zoom level
* @param x the x value
* @param y the y value
* @param zoom the zoom level
*/
public Tile(int x, int y, int zoom)
{
loaded = false;
this.zoom = zoom;
this.x = x;
this.y = y;
}
/**
* Create a new Tile that loads its data from the given URL. The URL must resolve to an image
* @param x the x value
* @param y the y value
* @param zoom the zoom level
* @param url the URL
* @param priority the priority
* @param dtf the tile factory
*/
Tile(int x, int y, int zoom, String url, Priority priority, TileFactory dtf)
{
this.url = url;
loaded = false;
this.zoom = zoom;
this.x = x;
this.y = y;
this.priority = priority;
this.dtf = dtf;
// startLoading();
}
/**
* Indicates if this tile's underlying image has been successfully loaded yet.
* @return true if the Tile has been loaded
*/
public synchronized boolean isLoaded()
{
return loaded;
}
/**
* Toggles the loaded state, and fires the appropriate property change notification
* @param loaded the loaded flag
*/
synchronized void setLoaded(boolean loaded)
{
boolean old = isLoaded();
this.loaded = loaded;
firePropertyChange("loaded", old, isLoaded());
}
/**
* @return the Image associated with this Tile. This is a read only property This may return null at any time,
* however if this returns null, a load operation will automatically be started for it.
*/
public BufferedImage getImage()
{
BufferedImage img = image.get();
if (img == null)
{
setLoaded(false);
// tile factory can be null if the tile has invalid coords or zoom
if (dtf != null)
{
dtf.startLoading(this);
}
}
return img;
}
/**
* @return the location in the world at this zoom level that this tile should be placed
*/
/*
* public TilePoint getLocation() { return location; }
*/
/**
* @return the zoom level that this tile belongs in
*/
public int getZoom()
{
return zoom;
}
/**
* @return the isLoading
*/
public boolean isLoading()
{
return isLoading;
}
/**
* @param isLoading the isLoading to set
*/
public void setLoading(boolean isLoading)
{
this.isLoading = isLoading;
}
/**
* Gets the loading priority of this tile.
* @return the priority
*/
public Priority getPriority()
{
return priority;
}
/**
* Set the loading priority of this tile.
* @param priority the priority to set
*/
public void setPriority(Priority priority)
{
this.priority = priority;
}
/**
* Gets the URL of this tile.
* @return the url
*/
public String getURL()
{
return url;
}
/**
* @return the x value
*/
public int getX()
{
return x;
}
/**
* @return the y value
*/
public int getY()
{
return y;
}
}