1 package com.hammurapi.jcapture; 2 import java.io.IOException; 3 import java.net.URL; 4 import java.util.ArrayList; 5 import java.util.HashMap; 6 import java.util.Iterator; 7 import java.util.List; 8 import java.util.Map; 9 import java.util.zip.DataFormatException; 10 11 import com.flagstone.transform.DefineTag; 12 import com.flagstone.transform.Movie; 13 import com.flagstone.transform.MovieTag; 14 import com.flagstone.transform.Place2; 15 import com.flagstone.transform.datatype.CoordTransform; 16 17 18 public class ButtonManager { 19 20 private final Map<String, Place2> buttons; 21 private final List<DefineTag> definitions; 22 ButtonManager()23 public ButtonManager() { 24 buttons = new HashMap<String, Place2>(); 25 definitions = new ArrayList<DefineTag>(); 26 } 27 loadLibrary(URL libUrl)28 public void loadLibrary(URL libUrl) throws IOException, DataFormatException { 29 Movie movie = new Movie(); 30 movie.decodeFromUrl(libUrl); 31 findDefinitions(movie, definitions); 32 findButtons(movie, buttons); 33 } 34 maxIdentifier()35 public int maxIdentifier() { 36 int identifier = 0; 37 DefineTag object; 38 for (Iterator<DefineTag>iter = definitions.iterator(); iter.hasNext();) { 39 object = iter.next(); 40 if (object.getIdentifier() > identifier) { 41 identifier = object.getIdentifier(); 42 } 43 } 44 return identifier; 45 } 46 getDefinitions()47 public List<DefineTag> getDefinitions() { 48 List<DefineTag> list = new ArrayList<DefineTag>(definitions.size()); 49 for (Iterator<DefineTag>iter = definitions.iterator(); iter.hasNext();) { 50 list.add((DefineTag) iter.next().copy()); 51 } 52 return list; 53 } 54 getButton(final String name, final int layer, final int xpos, final int ypos)55 public Place2 getButton(final String name, final int layer, final int xpos, final int ypos) { 56 Place2 place = (Place2)buttons.get(name).copy(); 57 place.setLayer(layer); 58 place.setTransform(new CoordTransform(1, 1, 0, 0, xpos, ypos)); 59 return place; 60 } 61 findDefinitions(final Movie movie, final List<DefineTag> list)62 private void findDefinitions(final Movie movie, final List<DefineTag> list) { 63 MovieTag object; 64 for (Iterator<MovieTag> iter = movie.getObjects().iterator(); iter.hasNext();) { 65 object = iter.next(); 66 if (object instanceof DefineTag) { 67 list.add((DefineTag)object); 68 } 69 } 70 } 71 findButtons(final Movie movie, final Map<String, Place2> list)72 private void findButtons(final Movie movie, final Map<String, Place2> list) { 73 MovieTag object; 74 Place2 place; 75 for (Iterator<MovieTag>iter = movie.getObjects().iterator(); iter.hasNext();) { 76 object = iter.next(); 77 if (object instanceof Place2) { 78 place = (Place2)object; 79 if (place.getName() != null) { 80 list.put(place.getName(), place); 81 } 82 } 83 } 84 } 85 } 86