123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- package de.tu_darmstadt.informatik.tk.scopviz.ui.mapView;
- import java.awt.image.BufferedImage;
- import java.lang.ref.SoftReference;
- import org.jxmapviewer.viewer.Tile;
- /**
- * The Tile class represents a particular square image piece of the world bitmap
- * at a particular zoom level.
- *
- * @author Dominik Renkel
- */
- public class CustomTile extends Tile {
- /**
- * Indicates that loading has succeeded. A PropertyChangeEvent will be fired
- * when the loading is completed
- */
- private boolean loaded = false;
- /**
- * loading priority
- */
- private Priority priority = Priority.High;
- /**
- * the tileFactory this tile is referenced to
- */
- private CustomTileFactory dtf;
- /**
- * is tile currently loading
- */
- private boolean isLoading = false;
- /**
- * The url of the image to load for this tile
- */
- private String url;
- /**
- * The image loaded for this Tile
- */
- SoftReference<BufferedImage> image = new SoftReference<BufferedImage>(null);
- /**
- * if image was loaded, when no internet connection was established, it
- * needs to reload
- */
- private Boolean reloadNeeded = false;
- /**
- * 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 CustomTile(int x, int y, int zoom) {
- super(x, y, zoom);
- }
- /**
- * 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
- */
- public CustomTile(int x, int y, int zoom, String url, Priority priority, CustomTileFactory dtf) {
- super(x, y, zoom);
- this.url = url;
- this.priority = priority;
- this.dtf = dtf;
- }
- /**
- * @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.
- */
- @Override
- 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;
- }
- /**
- * Indicates if this tile's underlying image has been successfully loaded
- * yet.
- *
- * @return true if the Tile has been loaded
- */
- @Override
- public synchronized boolean isLoaded() {
- return loaded;
- }
- /**
- * Toggles the loaded state, and fires the appropriate property change
- * notification
- *
- * @param loaded
- * the loaded flag
- */
- public synchronized void setLoaded(boolean loaded) {
- boolean old = isLoaded();
- this.loaded = loaded;
- firePropertyChange("loaded", old, isLoaded());
- // image loaded, so no reload needed
- if (this.loaded) {
- this.reloadNeeded = false;
- }
- }
- /**
- * @return the isLoading
- */
- @Override
- public boolean isLoading() {
- return isLoading;
- }
- /**
- * @param isLoading
- * the isLoading to set
- */
- @Override
- public void setLoading(boolean isLoading) {
- this.isLoading = isLoading;
- }
- /**
- * tile could not be loaded, so reload when Internet connection is
- * reestablished
- *
- * @param reload
- */
- public void setReloadNeeded(boolean reload) {
- this.reloadNeeded = reload;
- }
- /**
- * get the reloadNeeded property
- *
- * @return reload needed
- */
- public Boolean getReloadNeeded() {
- return this.reloadNeeded;
- }
- /**
- * Gets the loading priority of this tile.
- *
- * @return the priority
- */
- @Override
- public Priority getPriority() {
- return priority;
- }
- /**
- * Set the loading priority of this tile.
- *
- * @param priority
- * the priority to set
- */
- @Override
- public void setPriority(Priority priority) {
- this.priority = priority;
- }
- /**
- * Gets the URL of this tile.
- *
- * @return the url
- */
- @Override
- public String getURL() {
- return url;
- }
- }
|