20 package net.sf.gridarta.gui.mapimagecache;
22 import java.awt.Image;
24 import java.io.IOException;
25 import java.lang.ref.SoftReference;
26 import java.util.EnumMap;
27 import java.util.HashMap;
42 import org.jetbrains.annotations.NotNull;
43 import org.jetbrains.annotations.Nullable;
93 private final Map<ImageType, MapImageCacheEntry>
entries =
new EnumMap<>(
ImageType.class);
110 final MapFile mapFile = mapControl.getMapModel().getMapFile();
111 assert mapFile != null;
112 final File file = mapFile.
getFile();
144 public void mapCreated(@NotNull
final MapControl<G, A, R> mapControl,
final boolean interactive) {
145 mapControl.addMapControlListener(mapControlListener);
160 mapControl.addMapControlListener(mapControlListener);
161 mapRendererReferences.remove(mapControl);
165 mapManager.addMapManagerListener(mapManagerListener);
172 public void flush(@NotNull
final File mapFile) {
174 entries.get(imageType).flush(mapFile);
185 public Image
getIcon(@NotNull
final File mapFile) {
260 mapManager.
release(mapControl);
262 }
catch (
final IOException ignored) {
266 return entries.get(imageType).getDefaultImage();
284 }
catch (
final OutOfMemoryError ignored) {
285 return entries.get(imageType).getDefaultImage();
287 final Image[] images =
new Image[2];
288 images[0] = entries.get(
ImageType.
ICON).scaleImage(mapFile, image, ICON_WIDTH, ICON_HEIGHT);
289 images[1] = entries.get(
ImageType.
PREVIEW).scaleImage(mapFile, image, (image.getWidth(null) + PREVIEW_SCALE - 1) / PREVIEW_SCALE, (image.getHeight(null) + PREVIEW_SCALE - 1) / PREVIEW_SCALE);
291 if (mapFile != null) {
293 listener.iconChanged(mapControl);
308 final SoftReference<MapRenderer> mapRendererReference = mapRendererReferences.get(mapControl);
309 final MapRenderer tmpMapRenderer = mapRendererReference == null ? null : mapRendererReference.get();
311 if (tmpMapRenderer == null) {
313 mapRendererReferences.put(mapControl,
new SoftReference<>(mapRenderer));
315 mapRenderer = tmpMapRenderer;
325 listenerList.
add(listener);
333 listenerList.
remove(listener);
345 final MapFile mapFile = mapControl.getMapModel().getMapFile();
346 if (mapFile != null) {
347 final Image image = entries.get(imageType).lookupCache(mapFile.
getFile());
366 if (mapFile.isDirectory()) {
370 final Image image = entries.get(imageType).lookupCache(mapFile);
void addMapImageCacheListener(@NotNull final MapImageCacheListener< G, A, R > listener)
Adds a MapImageCacheListener to be notified.
Image getOrCreateIcon(@NotNull final File mapFile)
Returns an icon Image for a given map file.
Image updateCaches(@Nullable final File mapFile, @NotNull final MapControl< G, A, R > mapControl, final ImageType imageType)
Updates the cached icon and preview Images for one map file.
A MapManager manages all opened maps.
void release(@NotNull MapControl< G, A, R > mapControl)
Releases a MapControl instance.
Graphical User Interface of Gridarta.
T [] getListeners()
Returns an array of all the listeners.
Reading and writing of maps, handling of paths.
BufferedImage getFullImage()
Returns an image of the entire map view.
ICON
The icon is a small thumbnail usable as icon in file browsers.
The preview is a large thumbnail.
Creates derived files for caching files.
Image getOrCreatePreview(@NotNull final MapControl< G, A, R > mapControl)
Returns a preview Image for a given map.
Image getOrCreate(@NotNull final File mapFile, @NotNull final ImageType imageType)
Returns a preview Image for a given map file.
MapRenderer newSimpleMapRenderer(@NotNull MapModel< G, A, R > mapModel)
Creates a new map renderer instance which paints only squares but no grid, cursor, selection, or errors.
Image getPreview(@NotNull final File mapFile)
Returns a preview Image for a given map file.
Base package of all Gridarta classes.
final MapManager< G, A, R > mapManager
The MapManager for loading maps.
Reflects a game object (object on a map).
Interface for listeners listening to MapManager changes.
static final int ICON_HEIGHT
The height of icons in pixels.
void remove(@NotNull final T listener)
Removes a listener.
Interface for listeners listening on changes in MapControl instances.
static final int ICON_WIDTH
The width of icons in pixels.
void flush(@NotNull final File mapFile)
Removes the cached images for a map file.
GameObjects are the objects based on Archetypes found on maps.
void add(@NotNull final T listener)
Adds a listener.
Image getOrCreatePreview(@NotNull final File mapFile)
Returns a preview Image for a given map file.
Caches icon and preview images for map files.
An image cache entry for one ImageType.
final Map< MapControl< G, A, R >, SoftReference< MapRenderer > > mapRendererReferences
Maps MapControl instance to MapRenderer which is only used to get images.
Image updateCaches(@NotNull final File mapFile, final ImageType imageType)
Updates the cached icon and preview Images for one map file.
Base classes for rendering maps.
Image getOrCreate(@NotNull final MapControl< G, A, R > mapControl, @NotNull final ImageType imageType)
Returns an icon or preview Image for a given map.
Factory for creating MapRenderer instances.
final Map< ImageType, MapImageCacheEntry > entries
The cache entries.
Type-safe version of EventListenerList.
final EventListenerList2< MapImageCacheListener< G, A, R > > listenerList
The registered event listeners.
The types of images that are cached.
MapImageCache(@NotNull final MapManager< G, A, R > mapManager, @NotNull final Image defaultIcon, @NotNull final Image defaultPreview, @NotNull final RendererFactory< G, A, R > rendererFactory, @NotNull final CacheFiles cacheFiles)
Creates a new instance.
Image getIcon(@NotNull final File mapFile)
Returns the icon Image for a given map file.
Currently nothing more than a marker interface for unification.
final RendererFactory< G, A, R > rendererFactory
The RendererFactory for creating renderers.
File getFile()
Returns a File for this map file.
MapRenderer getRenderer(@NotNull final MapControl< G, A, R > mapControl)
Returns a MapRenderer for a map.
void removeMapImageCacheListener(@NotNull final MapImageCacheListener< G, A, R > listener)
Removes a MapControlListener to be notified.
Common interface for renderers of map control instances.
Interface for listeners interested in MapImageCache related events.
MapControl< G, A, R > openMapFile(@NotNull MapFile mapFile, boolean interactive)
Loads a map file.
static final int PREVIEW_SCALE
The scale factor for preview images.
The location of a map file with a map directory.
Interface for MapArchObjects.
final MapControlListener< G, A, R > mapControlListener
The MapControlListener attached to all MapControls.
Image getOrCreateIcon(@NotNull final MapControl< G, A, R > mapControl)
Returns an icon Image for a given map.