From: Matti Tahvonen Date: Thu, 18 Dec 2008 13:19:28 +0000 (+0000) Subject: fixes #2370 : added additional client side checks for 0px size components X-Git-Tag: 6.7.0.beta1~3504 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=fe195567ac0d902b8589675d5a456a5406cadabe;p=vaadin-framework.git fixes #2370 : added additional client side checks for 0px size components svn changeset:6276/svn branch:trunk --- diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java b/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java index e3092aa6b5..b2572e8ad0 100755 --- a/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java @@ -127,7 +127,13 @@ public class ApplicationConnection { private ArrayList relativeSizeChanges = new ArrayList();; private ArrayList componentCaptionSizeChanges = new ArrayList();; - private Date requestStartTime;; + private Date requestStartTime; + + private boolean validatingLayouts = false; + + private Set zeroWidthComponents = null; + + private Set zeroHeightComponents = null; public ApplicationConnection(WidgetSet widgetSet, ApplicationConfiguration cnf) { @@ -576,6 +582,11 @@ public class ApplicationConnection { view.clear(); idToPaintable.clear(); paintableToId.clear(); + if (meta.containsKey("invalidLayouts")) { + validatingLayouts = true; + zeroWidthComponents = new HashSet(); + zeroHeightComponents = new HashSet(); + } } if (meta.containsKey("timedRedirect")) { final JSONObject timedRedirect = meta.get("timedRedirect") @@ -686,9 +697,14 @@ public class ApplicationConnection { } applicationRunning = false; } - if (meta.containsKey("invalidLayouts")) { + if (validatingLayouts) { getConsole().printLayoutProblems( - meta.get("invalidLayouts").isArray(), this); + meta.get("invalidLayouts").isArray(), this, + zeroHeightComponents, zeroWidthComponents); + zeroHeightComponents = null; + zeroWidthComponents = null; + validatingLayouts = false; + } } @@ -1223,6 +1239,10 @@ public class ApplicationConnection { if (horizontalScrollBar) { height -= renderSpace.getScrollbarSize(); } + if (validatingLayouts && height <= 0) { + zeroHeightComponents.add((Paintable) child); + } + height = (int) (height * relativeSize.getHeight() / 100.0); if (height < 0) { @@ -1278,6 +1298,10 @@ public class ApplicationConnection { if (verticalScrollBar) { width -= renderSpace.getScrollbarSize(); } + if (validatingLayouts && width <= 0) { + zeroWidthComponents.add((Paintable) child); + } + width = (int) (width * relativeSize.getWidth() / 100.0); if (width < 0) { diff --git a/src/com/itmill/toolkit/terminal/gwt/client/Console.java b/src/com/itmill/toolkit/terminal/gwt/client/Console.java index 28d4b38843..b040ea2074 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/Console.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/Console.java @@ -4,6 +4,8 @@ package com.itmill.toolkit.terminal.gwt.client; +import java.util.Set; + import com.google.gwt.json.client.JSONArray; public interface Console { @@ -17,6 +19,8 @@ public interface Console { public abstract void dirUIDL(UIDL u); public abstract void printLayoutProblems(JSONArray array, - ApplicationConnection applicationConnection); + ApplicationConnection applicationConnection, + Set zeroHeightComponents, + Set zeroWidthComponents); } \ No newline at end of file diff --git a/src/com/itmill/toolkit/terminal/gwt/client/IDebugConsole.java b/src/com/itmill/toolkit/terminal/gwt/client/IDebugConsole.java index 9dbc96df6d..b3070bef74 100755 --- a/src/com/itmill/toolkit/terminal/gwt/client/IDebugConsole.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/IDebugConsole.java @@ -5,6 +5,7 @@ package com.itmill.toolkit.terminal.gwt.client; import java.util.List; +import java.util.Set; import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONObject; @@ -348,10 +349,13 @@ public final class IDebugConsole extends IToolkitOverlay implements Console { } }-*/; - public void printLayoutProblems(JSONArray array, ApplicationConnection ac) { - log("************************"); + public void printLayoutProblems(JSONArray array, ApplicationConnection ac, + Set zeroHeightComponents, + Set zeroWidthComponents) { int size = array.size(); - log("Layouts analyzed, total top level errors: " + size); + panel.add(new HTML("
************************" + + "

Layouts analyzed on server, total top level errors: " + + size + "

")); if (size > 0) { Tree tree = new Tree(); TreeItem root = new TreeItem("Root errors"); @@ -361,10 +365,53 @@ public final class IDebugConsole extends IToolkitOverlay implements Console { } panel.add(tree); tree.addItem(root); + + if (zeroHeightComponents.size() > 0 + || zeroWidthComponents.size() > 0) { + panel.add(new HTML("

Client side notifications

" + + " Following relative sized components where " + + "rendered to zero size container on client side." + + " Note that these are not necessary invalid " + + "states. Just reported here as they might be.")); + if (zeroHeightComponents.size() > 0) { + panel.add(new HTML( + "

Vertically zero size:

")); + printClientSideDetectedIssues(zeroHeightComponents, ac); + } + if (zeroWidthComponents.size() > 0) { + panel.add(new HTML( + "

Horizontally zero size:

")); + printClientSideDetectedIssues(zeroWidthComponents, ac); + } + } } log("************************"); } + private void printClientSideDetectedIssues( + Set zeroHeightComponents, ApplicationConnection ac) { + for (final Paintable paintable : zeroHeightComponents) { + final Container layout = Util.getLayout((Widget) paintable); + + VerticalPanel errorDetails = new VerticalPanel(); + errorDetails.add(new Label("" + Util.getSimpleName(paintable) + + " inside " + Util.getSimpleName(layout))); + final CheckBox emphasisInUi = new CheckBox( + "Emphasis components parent in UI (actual component not visible)"); + emphasisInUi.addClickListener(new ClickListener() { + public void onClick(Widget sender) { + if (paintable != null) { + Element element2 = ((Widget) layout).getElement(); + Widget.setStyleName(element2, "invalidlayout", + emphasisInUi.isChecked()); + } + } + }); + errorDetails.add(emphasisInUi); + panel.add(errorDetails); + } + } + private void printLayoutError(JSONObject error, TreeItem parent, final ApplicationConnection ac) { final String pid = error.get("id").isString().stringValue(); diff --git a/src/com/itmill/toolkit/terminal/gwt/client/NullConsole.java b/src/com/itmill/toolkit/terminal/gwt/client/NullConsole.java index ab22b42216..4813c7116a 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/NullConsole.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/NullConsole.java @@ -4,6 +4,8 @@ package com.itmill.toolkit.terminal.gwt.client; +import java.util.Set; + import com.google.gwt.json.client.JSONArray; /** @@ -25,7 +27,10 @@ public class NullConsole implements Console { public void printObject(Object msg) { } - public void printLayoutProblems(JSONArray array, ApplicationConnection ac) { + public void printLayoutProblems(JSONArray array, + ApplicationConnection applicationConnection, + Set zeroHeightComponents, + Set zeroWidthComponents) { } }