- if (redirect != null && !"self".equals(redirect)) b.redirect = redir;
-
- for(int i=0; _postapply != null && i<_postapply.length; i++)
- if (_postapply[i] != null) {
- _postapply[i].apply(b, null, null, callback, numerator, denominator);
- numerator += _postapply[i].numUnits();
- }
-
- pboxes.setSize(numids);
- ptemplates.setSize(numids);
-
- numerator = original_numerator + numUnits();
-
- if (callback != null)
- try {
- Array args = new Array();
- args.addElement(new Double(numerator));
- args.addElement(new Double(denominator));
- callback.call(args);
- } catch (JS.Exn e) {
- if (Log.on) Log.log(this, "WARNING: uncaught ecmascript exception: " + e);
- }
-
- if (Thread.currentThread() instanceof ThreadMessage) try {
- XWT.sleep(0);
- } catch (JS.Exn e) {
- if (Log.on) Log.log(this, "WARNING: uncaught ecmascript exception: " + e);
- }
- }
-
-
- // Theming Logic ////////////////////////////////////////////////////////////
-
- /** helper method to recursively gather up the list of keys to be preserved */
- private void gatherPreserves(Vec v) {
- for(int i=0; preserve != null && i<preserve.length; i++) v.addElement(preserve[i]);
- for(int i=0; _preapply != null && i<_preapply.length; i++) if (_preapply[i] != null) _preapply[i].gatherPreserves(v);
- for(int i=0; _postapply != null && i<_postapply.length; i++) if (_postapply[i] != null) _postapply[i].gatherPreserves(v);
- }
-
- /** adds a theme mapping, retemplatizing as needed */
- public static void retheme(JS.Callable callback) {
- XWF.flushXWFs();
-
- // clear changed marker and relink
- Template[] t = new Template[cache.size()];
- Enumeration e = cache.elements();
- for(int i=0; e.hasMoreElements(); i++) t[i] = (Template)e.nextElement();
- for(int i=0; i<t.length; i++) {
- t[i].changed = false;
- t[i].numunits = -1;
- t[i].link(true);
- }
-
- for(int i=0; i<Surface.allSurfaces.size(); i++) {
- Box b = ((Surface)Surface.allSurfaces.elementAt(i)).root;
- if (b != null) reapply(b);
- }
-
- if (callback != null)
- try {
- Array args = new Array();
- args.addElement(new Double(1.0));
- args.addElement(new Double(1.0));
- callback.call(args);
- } catch (JS.Exn ex) {
- if (Log.on) Log.log(Template.class, "WARNING: uncaught ecmascript exception: " + ex.getMessage());
- }
- }
-
- /** template reapplication procedure */
- private static void reapply(Box b) {
-
- Log.log(Template.class, "Template.reapply() not implemented");
- /*
- // Ref 7.5.1: check if we need to retemplatize
- boolean retemplatize = false;
- if (b.templatename != null) {
- Template t = getTemplate(b.templatename, b.importlist);
- if (t != b.template) retemplatize = true;
- b.template = t;
- }
- if (b.template != null && b.template.changed) retemplatize = true;
-
- if (retemplatize) {
-
- // Ref 7.5.2: "Preserve all properties on the box mentioned in the <preserve> elements of any
- // of the templates which would be applied in step 7."
- Vec keys = new Vec();
- b.template.gatherPreserves(keys);
- Object[] vals = new Object[keys.size()];
- for(int i=0; i<keys.size(); i++) vals[i] = b.get(((String)keys.elementAt(i)), null);
-
- // Ref 7.5.3: "Remove and save all children of the box, or its redirect target, if it has one"
- Box[] kids = null;
- if (b.redirect != null) {
- kids = new Box[b.redirect.numChildren()];
- for(int i=b.redirect.numChildren() - 1; i >= 0; i--) {
- kids[i] = b.redirect.getChild(i);
- kids[i].remove();
- }
- }
-
- // Ref 7.5.4: "Set the box's redirect target to self"
- b.redirect = b;
-
- // Ref 7.5.5: "Remove all of the box's immediate children"
- for(Box cur = b.getChild(b.numChildren() - 1); cur != null;) {
- Box oldcur = cur;
- cur = cur.prevSibling();
- oldcur.remove();
- }
-
- // Ref 7.5.6: "Remove all traps set by scripts run during the application of any template to this box"
- Trap.removeAllTrapsByBox(b);
-
- // Ref 7.5.7: "Apply the template to the box according to the usual application procedure"
- b.template.apply(b, null, null, null, 0, 1);
-
- // Ref 7.5.8: "Re-add the saved children which were removed in step 3"
- for(int i=0; kids != null && i<kids.length; i++) b.put(Integer.MAX_VALUE, null, kids[i]);
-
- // Ref 7.5.9: "Re-put any property values which were preserved in step 2"
- for(int i=0; i<keys.size(); i++) b.put((String)keys.elementAt(i), null, vals[i]);
- }
-
- // Recurse
- for(Box j = b.getChild(0); j != null; j = j.nextSibling()) reapply(j);
- */