2002/08/07 04:30:20
[org.ibex.core.git] / src / org / xwt / SpecialBoxProperty.java
index 205b8e6..cff3b5e 100644 (file)
@@ -101,8 +101,8 @@ class SpecialBoxProperty {
                     else if (s.equals("pink")) newcolor = pink;
                     else if (s.equals("yellow")) newcolor = yellow;
                     else if (s.equals("white")) newcolor = white;
-                    else if (Log.on) Log.log(this, "invalid color " + s);
-
+                    else if (Log.on) Log.log(this, "invalid color \"" + s + "\" at " +
+                                             Context.enter().interpreterSourceFile + ":" + Context.enter().interpreterLine);
                     if (newcolor == b.color) return;
                     b.color = newcolor;
                     b.dirty();
@@ -122,7 +122,8 @@ class SpecialBoxProperty {
                 }
                 public void put(Box b, Object value) {
                     int newtextcolor = b.color;
-                    String s = value == null ? null : value.toString();
+                    if (value == null) return;
+                    String s = value.toString();
                     if (s.length() > 0 && s.charAt(0) == '#')
                         newtextcolor = 0xFF000000 |
                             (Integer.parseInt(s.substring(1, 3), 16) << 16) |
@@ -144,7 +145,8 @@ class SpecialBoxProperty {
                     else if (s.equals("pink")) newtextcolor = pink;
                     else if (s.equals("yellow")) newtextcolor = yellow;
                     else if (s.equals("white")) newtextcolor = white;
-                    else if (Log.on) Log.log(this, "invalid textcolor " + s);
+                    else if (Log.on) Log.log(this, "invalid color \"" + s + "\" at " +
+                                             Context.enter().interpreterSourceFile + ":" + Context.enter().interpreterLine);
 
                     if (newtextcolor == b.textcolor) return;
                     b.textcolor = newtextcolor;
@@ -167,6 +169,9 @@ class SpecialBoxProperty {
                             */
                         }
 
+                    // FIXME: don't know why this is needed
+                    b.dirty();
+
                     b.text = t;
                     b.textupdate();
                     b.dirty();
@@ -176,9 +181,12 @@ class SpecialBoxProperty {
                 public Object get(Box b) { return b; }
                 public void put(Box b, Object value) {
                     if (value == null) b.remove();
-                    else if (value.equals("window")) Platform.createSurface(b, false, true);
-                    else if (value.equals("frame")) Platform.createSurface(b, true, true);
-                    else if (Log.on) Log.log(this, "put invalid value to 'thisbox' property: " + value);
+                    else if (value.equals("window") || value.equals("frame")) {
+                        if (b.redirect != b && Log.on)
+                            Log.log(this, "WARNING: you have created a surface whose root box's redirect is not itself " +
+                                    "-- this isn't usually a good idea");
+                        Platform.createSurface(b, value.equals("frame"), true);
+                    } else if (Log.on) Log.log(this, "put invalid value to 'thisbox' property: " + value);
                 }
             });
 
@@ -235,6 +243,15 @@ class SpecialBoxProperty {
                     }
                 } });
         
+        specialBoxProperties.put("fixedaspect", new SpecialBoxProperty() {
+                public Object get(Box b) { return b.sizetoimage ? Boolean.TRUE : Boolean.FALSE; }
+                public void put(Box b, Object value) {
+                    boolean newval = stob(value);
+                    if (newval == b.fixedaspect) return;
+                    b.fixedaspect = newval;
+                    b.dirty();
+                } });
+        
         specialBoxProperties.put("shrink", new SpecialBoxProperty() {
                 public Object get(Box b) { return (b.vshrink && b.hshrink) ? Boolean.TRUE : Boolean.FALSE; }
                 public void put(Box b, Object value) {
@@ -462,7 +479,7 @@ class SpecialBoxProperty {
                 public void put(String name, Box b, Object value) {
                     if (b.surface == null) return;
                     if (b.getParent() == null) {
-                        if (b.surface.boxContainingMouse.getParent() != null)
+                        if (b.surface.boxContainingMouse != null && b.surface.boxContainingMouse.getParent() != null)
                             b.surface.boxContainingMouse.put(name, b.surface.boxContainingMouse, value);
                     } else {
                         // check siblings
@@ -494,6 +511,7 @@ class SpecialBoxProperty {
                 public Object get(Box b) {
                     if (b.surface == null) return null;
                     else if (b.getRoot() == null) return null;
+                    else if (b.getParent() == null) return null;
                     else return b.getRoot().getRootProxy();
                 } });
 
@@ -630,6 +648,15 @@ class SpecialBoxProperty {
                     b.set(dmax, 1, stosh(value));
                 }
             });
+
+        specialBoxProperties.put("redirect", new SpecialBoxProperty() {
+                public void put(Box b, Object value) { }
+                public Object get(Box b) {
+                    if (b.redirect == null) return null;
+                    if (b.redirect == b) return Boolean.TRUE;
+                    return get(b.redirect);
+                }
+            });
     }