mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 08:37:25 -05:00
215 lines
4.1 KiB
Java
215 lines
4.1 KiB
Java
/*
|
|
* 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<URI, BufferedImage> recentlyAccessed = new HashMap<URI, BufferedImage>();
|
|
// 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<BufferedImage> image = new SoftReference<BufferedImage>(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;
|
|
}
|
|
|
|
}
|