1 33 34 package edu.rice.cs.drjava.config; 35 36 import edu.rice.cs.util.swing.Utilities; 37 38 import java.util.Hashtable ; 39 import java.util.Vector ; 40 43 59 public abstract class Option<T> extends OptionParser<T> implements FormatStrategy<T> { 60 61 64 final Hashtable <Configuration,Vector <OptionListener<T>>> listeners = 65 new Hashtable <Configuration,Vector <OptionListener<T>>>(); 66 67 71 public Option(String name, T def) { super(name,def); } 72 73 78 public String format(T value) { return value.toString(); } 79 80 public String getDefaultString() { return format(getDefault()); } 81 82 85 86 87 String getString(DefaultOptionMap om) { return format(getOption(om)); } 88 89 90 void notifyListeners(Configuration config, T val) { 91 final Vector <OptionListener<T>> v = listeners.get(config); 92 if (v == null) return; final OptionEvent<T> e = new OptionEvent<T>(this, val); 94 final int size = v.size(); 95 Utilities.invokeLater(new Runnable () { 96 public void run() { 97 for (int i = 0; i < size; i++) v.get(i).optionChanged(e); 98 } 99 }); 100 } 101 102 103 void addListener(Configuration c, OptionListener<T> l) { 104 Vector <OptionListener<T>> v = listeners.get(c); 105 if (v == null) { 106 v = new Vector <OptionListener<T>>(); 107 listeners.put(c,v); 108 } 109 v.add(l); 110 } 111 112 113 void removeListener(Configuration c, OptionListener<T> l) { 114 Vector <OptionListener<T>> v = listeners.get(c); 115 if (v != null && v.remove(l) && v.size() == 0) listeners.remove(c); } 117 } 118 119 120 121 122 | Popular Tags |