Package com.googlecode.gwt.test.internal.patchers

Source Code of com.googlecode.gwt.test.internal.patchers.UIObjectPatcher

package com.googlecode.gwt.test.internal.patchers;

import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Node;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.PotentialElement;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
import com.googlecode.gwt.test.patchers.PatchClass;
import com.googlecode.gwt.test.patchers.PatchMethod;
import com.googlecode.gwt.test.utils.GwtReflectionUtils;

@PatchClass(UIObject.class)
class UIObjectPatcher {

   @PatchMethod
   static double extractLengthValue(UIObject uiObject, String s) {
      if ("auto".equals(s) || "inherit".equals(s) || "".equals(s)) {
         return 0;
      }
      StringBuffer buffer = new StringBuffer();
      for (int i = 0; i < s.length(); i++) {
         char c = s.charAt(i);
         if (c >= '0' && c <= '9') {
            buffer.append(c);
         }
      }
      return Double.parseDouble(buffer.toString());
   }

   @PatchMethod
   static boolean isVisible(Element elem) {
      String display = elem.getStyle().getProperty("display");

      return !display.equals("none");
   }

   @PatchMethod
   static void replaceElement(UIObject uiObject, Element elem) {
      Element element = GwtReflectionUtils.getPrivateFieldValue(uiObject, "element");
      if (element != null) {
         // replace this.element in its parent with elem.
         replaceNode(uiObject, element, elem);
      }

      GwtReflectionUtils.setPrivateFieldValue(uiObject, "element", elem);
   }

   @PatchMethod
   static void replaceNode(UIObject uiObject, Element node, Element newNode) {
      Node parent = node.getParentNode();

      if (parent != null) {
         parent.insertBefore(newNode, node);
         parent.removeChild(node);
      }
   }

   @PatchMethod
   static void setElement(UIObject uiObject, com.google.gwt.user.client.Element elem) {
      Element element = GwtReflectionUtils.getPrivateFieldValue(uiObject, "element");
      assert element == null || PotentialElement.isPotential(element) : "Element may only be set once";

      GwtReflectionUtils.setPrivateFieldValue(uiObject, "element", elem);

      // Bind the widget to listen to element so we can trigger event on it even
      // if the widget has not been attached yet
      if (Widget.class.isInstance(uiObject)) {
         DOM.setEventListener(elem, (Widget) uiObject);
      }

   }

   @PatchMethod
   static void setVisible(Element elem, boolean visible) {
      String display = visible ? "" : "none";
      elem.getStyle().setProperty("display", display);
   }

   @PatchMethod
   static void updatePrimaryAndDependentStyleNames(Element elem, String newPrimaryStyle) {

      String[] classes = elem.getPropertyString("className").split(" ");

      if (classes.length < 1) {
         elem.setPropertyString("className", newPrimaryStyle);
      } else {
         String oldPrimaryStyle = classes[0];
         int oldPrimaryStyleLen = oldPrimaryStyle.length();

         classes[0] = newPrimaryStyle;
         for (int i = 1; i < classes.length; i++) {
            String name = classes[i];
            if (name.length() > oldPrimaryStyleLen && name.charAt(oldPrimaryStyleLen) == '-'
                     && name.indexOf(oldPrimaryStyle) == 0) {
               classes[i] = newPrimaryStyle + name.substring(oldPrimaryStyleLen);
            }
         }

         StringBuilder sb = new StringBuilder();
         for (String name : classes) {
            sb.append(name + " ");
         }

         elem.setPropertyString("className", sb.toString().trim());
      }
   }

}
TOP

Related Classes of com.googlecode.gwt.test.internal.patchers.UIObjectPatcher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.