public VPaintableWidgetContainer getParent();
public MeasuredSize getMeasuredSize();
+
+ /**
+ * Returns <code>true</code> if the width of this paintable is currently
+ * undefined. If the width is undefined, the actual width of the paintable
+ * is defined by its contents.
+ *
+ * @return <code>true</code> if the width is undefined, else
+ * <code>false</code>
+ */
+ public boolean isUndefinedWidth();
+
+ /**
+ * Returns <code>true</code> if the height of this paintable is currently
+ * undefined. If the height is undefined, the actual height of the paintable
+ * is defined by its contents.
+ *
+ * @return <code>true</code> if the height is undefined, else
+ * <code>false</code>
+ */
+ public boolean isUndefinedHeight();
+
+ /**
+ * Returns <code>true</code> if the width of this paintable is currently
+ * relative. If the width is relative, the actual width of the paintable is
+ * a percentage of the size allocated to it by its parent.
+ *
+ * @return <code>true</code> if the width is undefined, else
+ * <code>false</code>
+ */
+ public boolean isRelativeWidth();
+
+ /**
+ * Returns <code>true</code> if the height of this paintable is currently
+ * relative. If the height is relative, the actual height of the paintable
+ * is a percentage of the size allocated to it by its parent.
+ *
+ * @return <code>true</code> if the width is undefined, else
+ * <code>false</code>
+ */
+ public boolean isRelativeHeight();
+
+ /**
+ * Gets the width of this paintable as defined on the server.
+ *
+ * @return the server side width definition
+ */
+ public String getDefinedWidth();
+
+ /**
+ * Gets the height of this paintable as defined on the server.
+ *
+ * @return the server side height definition
+ */
+ public String getDefinedHeight();
}
import com.google.gwt.user.client.ui.Focusable;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
+import com.vaadin.terminal.gwt.client.MeasureManager;
import com.vaadin.terminal.gwt.client.MeasureManager.MeasuredSize;
import com.vaadin.terminal.gwt.client.TooltipInfo;
import com.vaadin.terminal.gwt.client.UIDL;
private ApplicationConnection connection;
private String id;
- private final MeasuredSize measuredSize = new MeasuredSize();
+ private final MeasuredSize measuredSize = new MeasuredSize(this);
/* State variables */
private boolean enabled = true;
private boolean visible = true;
+ private String definedWidth = "";
+ private String definedHeight = "";
+
/**
* Default constructor
*/
* taken into account
*/
- getConnection().updateComponentSize(this, uidl);
+ updateComponentSize(uidl);
+ }
+
+ private void updateComponentSize(UIDL uidl) {
+ String w = uidl.hasAttribute("width") ? uidl
+ .getStringAttribute("width") : "";
+
+ String h = uidl.hasAttribute("height") ? uidl
+ .getStringAttribute("height") : "";
+
+ // Dirty if either dimension changed between relative and non-relative
+ MeasureManager.MeasuredSize measuredSize = getMeasuredSize();
+ if (!measuredSize.isDirty()
+ && (w.endsWith("%") != definedWidth.endsWith("%") || h
+ .endsWith("%") != definedHeight.endsWith("%"))) {
+ measuredSize.setDirty(true);
+ }
+
+ definedWidth = w;
+ definedHeight = h;
+
+ // Set defined sizes
+ Widget component = getWidgetForPaintable();
+
+ component.setHeight(h);
+ component.setWidth(w);
+ }
+
+ public boolean isRelativeHeight() {
+ return definedHeight.endsWith("%");
+ }
+
+ public boolean isRelativeWidth() {
+ return definedWidth.endsWith("%");
+ }
+
+ public boolean isUndefinedHeight() {
+ return definedHeight.length() == 0;
+ }
+
+ public boolean isUndefinedWidth() {
+ return definedWidth.length() == 0;
+ }
+
+ public String getDefinedHeight() {
+ return definedHeight;
+ }
+
+ public String getDefinedWidth() {
+ return definedWidth;
}
/**