00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 package org.classroomgaming.cgp;
00021
00022 import java.awt.event.*;
00023 import java.net.MalformedURLException;
00024 import java.util.*;
00025 import java.applet.*;
00026 import java.awt.*;
00027 import java.net.URL;
00028 import javax.swing.JComponent;
00029
00030 public class ImageManager {
00031
00032 private static HashMap<String, ImageHandle> IDs;
00033 private static HashMap<Integer, Image> images;
00034 private static MediaTracker mt;
00035 private static URL base;
00036 private static int imageID = 0;
00037 private static final ImageManager mgr = new ImageManager();
00038 private static Image dummy;
00039 private static Component component;
00040 private static Configurator config;
00041
00042
00043 private class ImageHandle {
00044
00045 public String name;
00046 public int id;
00047 public int references;
00048
00049 public ImageHandle(String n, int i) {
00050 name = n;
00051 id = i;
00052 references = 1;
00053 }
00054 }
00055
00056 public Component getComponent() {
00057 return component;
00058 }
00059
00060 public void setComponent(Component c) {
00061 if (component != c) {
00062
00063 component = c;
00064
00065 }
00066 }
00067
00070 public static ImageManager getInstance() {
00071 return mgr;
00072 }
00073
00077 private ImageManager() {
00078
00079 IDs = new HashMap<String, ImageHandle>();
00080 images = new HashMap<Integer, Image>();
00081 }
00082
00085 public void init(Component a, Configurator c) {
00086
00087
00088 mt = new MediaTracker(a);
00089 component = a;
00090 config = c;
00091
00092
00093 }
00094
00095 public Image getImage(String name) {
00096 return getImage(getImageID(name));
00097 }
00098
00099 public Image getImage(int id) {
00100 Integer ID0 = new Integer(id);
00101 if (images.containsKey(ID0)) {
00102 Object o = images.get(ID0);
00103 return (Image) o;
00104 }
00105 return dummy;
00106 }
00107
00108 public int getImageID(String name) {
00109 if (IDs.containsKey(name)) {
00110
00111 ImageHandle h = (ImageHandle) IDs.get(name);
00112 return h.id;
00113 }
00114 return 0;
00115 }
00116
00117 public void drawImage(Graphics g, int id, int x, int y) {
00118 Image img = getImage(id);
00119 g.drawImage(img, x, y, component);
00120
00121 }
00122
00123 public int load(String name) {
00124 if (IDs.containsKey(name)) {
00125
00126 ImageHandle h = (ImageHandle) IDs.get(name);
00127 ++h.references;
00128 return h.id;
00129 } else {
00130 ImageHandle h = new ImageHandle(name, ++imageID);
00131
00132
00133
00134
00135
00136 Image i = config.getImageLoader().loadImage(name);
00137
00138
00139
00140
00141 mt.addImage(i, h.id);
00142 IDs.put(name, h);
00143 images.put(new Integer(h.id), i);
00144 return h.id;
00145
00146 }
00147 }
00148
00149 public void unload(String name) {
00150 if (IDs.containsKey(name)) {
00151 ImageHandle h = (ImageHandle) IDs.get(name);
00152 if (--h.references <= 0) {
00153 images.remove(new Integer(h.id));
00154 IDs.remove(name);
00155 }
00156 }
00157 }
00158
00159 public void waitForAll() {
00160 try {
00161 mt.waitForAll();
00162 } catch (InterruptedException e) {
00163 }
00164 Object errors[] = mt.getErrorsAny();
00165 for (int i = 0; i < errors.length; ++i) {
00166 Image img = (Image) errors[i];
00167 java.lang.System.out.println(img.toString());
00168 return;
00169 }
00170 }
00171 }