| 1 package gnu.kawa.models; 2 import java.awt.Dimension ; 3 import java.awt.geom.Dimension2D ; 4 import gnu.mapping.ThreadLocation; 5 6 11 12 public abstract class Display 13 { 14 public static ThreadLocation myDisplay = new ThreadLocation("my-display"); 15 16 public static Display getInstance () 17 { 18 Object d = myDisplay.get(null); 19 if (d instanceof Display) 20 return (Display) d; 21 String name = d == null ? "swing" : d.toString(); 22 Class [] noClasses = new Class [0]; 23 for (;;) 24 { 25 int comma = name.indexOf(','); 26 String rest = null; 27 if (comma >= 0) 28 { 29 rest = name.substring(comma+1); 30 name = name.substring(0, comma); 31 } 32 33 if (name.equals("swing")) 34 name = "gnu.kawa.swingviews.SwingDisplay"; 35 else if (name.equals("swt")) 36 name = "gnu.kawa.swtviews.SwtDisplay"; 37 else if (name.equals("echo2")) 38 name = "gnu.kawa.echo2.Echo2Display"; 39 40 try 41 { 42 Class clas = Class.forName(name); 43 java.lang.reflect.Method method 44 = clas.getDeclaredMethod("getInstance", noClasses); 45 return (Display) method.invoke(null, new Object [0]); 46 } 47 catch (ClassNotFoundException ex) 48 { 49 if (rest == null) 50 throw new RuntimeException ("no display toolkit: "+d); 51 name = rest; 52 } 53 catch (Throwable ex) 54 { 55 throw gnu.mapping.WrappedException.wrapIfNeeded(ex); 56 } 57 } 58 } 59 60 public abstract Window makeWindow (); 61 62 public abstract void addButton (Button model, Object where); 63 64 public abstract void addLabel (Label model, Object where); 65 66 public abstract void addImage (DrawImage model, Object where); 67 68 public void addText (Text model, Object where) 69 { 70 throw new Error ("makeView called on DrawImage"); 71 } 72 73 public void addSpacer (Spacer model, Object where) 74 { 75 throw new Error ("makeView called on Spacer"); 76 } 77 78 public abstract void addBox (Box model, Object where); 79 80 public abstract void addView (Object view, Object where); 81 82 public static Dimension asDimension (Dimension2D dim) 83 { 84 if (dim instanceof Dimension || dim == null) 85 return (Dimension ) dim; 86 else 87 return new Dimension ((int) (dim.getWidth() + 0.5), 88 (int) (dim.getHeight() + 0.5)); 89 } 90 91 public Model coerceToModel (Object component) 92 { 93 if (component instanceof gnu.lists.FString || component instanceof String ) 94 return new Label(component.toString()); 95 return (Model) component; 96 } 97 } 98 | Popular Tags |