Revision: 7418
Author: [email protected]
Date: Fri Jan 15 13:50:17 2010
Log: tr...@7391 was merged into this branch
Adds PopupPanel#setAutoHideOnHistoryEventsEnabled() to hide popup on
history events
svn merge --ignore-ancestry -c 7391
http://google-web-toolkit.googlecode.com/svn/trunk .
http://code.google.com/p/google-web-toolkit/source/detail?r=7418
Modified:
/releases/2.0/branch-info.txt
/releases/2.0/user/src/com/google/gwt/user/client/ui/PopupPanel.java
/releases/2.0/user/src/com/google/gwt/user/datepicker/client/DateBox.java
/releases/2.0/user/test/com/google/gwt/user/client/ui/PopupTest.java
=======================================
--- /releases/2.0/branch-info.txt Fri Jan 15 13:48:32 2010
+++ /releases/2.0/branch-info.txt Fri Jan 15 13:50:17 2010
@@ -1229,3 +1229,7 @@
tr...@7390 was merged into this branch
Refactor of FocusImpl.
svn merge --ignore-ancestry -c 7390
http://google-web-toolkit.googlecode.com/svn/trunk .
+
+tr...@7391 was merged into this branch
+ Adds PopupPanel#setAutoHideOnHistoryEventsEnabled() to hide popup on
history events
+ svn merge --ignore-ancestry -c 7391
http://google-web-toolkit.googlecode.com/svn/trunk .
=======================================
--- /releases/2.0/user/src/com/google/gwt/user/client/ui/PopupPanel.java
Wed Dec 2 11:33:05 2009
+++ /releases/2.0/user/src/com/google/gwt/user/client/ui/PopupPanel.java
Fri Jan 15 13:50:17 2010
@@ -30,6 +30,8 @@
import com.google.gwt.event.logical.shared.HasCloseHandlers;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.user.client.Command;
@@ -37,6 +39,7 @@
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventPreview;
+import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.Event.NativePreviewEvent;
import com.google.gwt.user.client.Event.NativePreviewHandler;
@@ -68,7 +71,7 @@
* which is commonly used to gray out the widgets behind it. It can be
enabled
* using {...@link #setGlassEnabled(boolean)}. It has a default style name of
* "gwt-PopupPanelGlass", which can be changed using
- * {...@link #setGlassStyleName()}.
+ * {...@link #setGlassStyleName(String)}.
* </p>
*
* <p>
@@ -364,6 +367,7 @@
private AnimationType animType = AnimationType.CENTER;
private boolean autoHide, previewAllNativeEvents, modal, showing;
+ private boolean autoHideOnHistoryEvents;
private List<Element> autoHidePartners;
@@ -390,6 +394,7 @@
private int leftPosition = -1;
private HandlerRegistration nativePreviewHandlerRegistration;
+ private HandlerRegistration historyHandlerRegistration;
/**
* The {...@link ResizeAnimation} used to open and close the {...@link
PopupPanel}s.
@@ -419,11 +424,13 @@
* Creates an empty popup panel, specifying its "auto-hide" property.
*
* @param autoHide <code>true</code> if the popup should be automatically
- * hidden when the user clicks outside of it
+ * hidden when the user clicks outside of it or the history
token
+ * changes.
*/
public PopupPanel(boolean autoHide) {
this();
this.autoHide = autoHide;
+ this.autoHideOnHistoryEvents = autoHide;
}
/**
@@ -431,7 +438,8 @@
* properties.
*
* @param autoHide <code>true</code> if the popup should be automatically
- * hidden when the user clicks outside of it
+ * hidden when the user clicks outside of it or the history
token
+ * changes.
* @param modal <code>true</code> if keyboard or mouse events that do not
* target the PopupPanel or its children should be ignored
*/
@@ -482,7 +490,8 @@
int left = (Window.getClientWidth() - getOffsetWidth()) >> 1;
int top = (Window.getClientHeight() - getOffsetHeight()) >> 1;
- setPopupPosition(Math.max(Window.getScrollLeft() + left, 0),
Math.max(Window.getScrollTop() + top, 0));
+ setPopupPosition(Math.max(Window.getScrollLeft() + left, 0), Math.max(
+ Window.getScrollTop() + top, 0));
if (!initiallyShowing) {
setAnimationEnabled(initiallyAnimated);
@@ -592,8 +601,19 @@
}
/**
- * Returns <code>true</code> if a glass element will be displayed under
- * the {...@link PopupPanel}.
+ * Returns <code>true</code> if the popup should be automatically hidden
when
+ * the history token changes, such as when the user presses the
browser's back
+ * button.
+ *
+ * @return true if enabled, false if disabled
+ */
+ public boolean isAutoHideOnHistoryEventsEnabled() {
+ return autoHideOnHistoryEvents;
+ }
+
+ /**
+ * Returns <code>true</code> if a glass element will be displayed under
the
+ * {...@link PopupPanel}.
*
* @return true if enabled
*/
@@ -710,7 +730,7 @@
autoHidePartners.remove(partner);
}
}
-
+
/**
* @deprecated Use the {...@link HandlerRegistration#removeHandler} method
on the
* object returned by {...@link #addCloseHandler} instead
@@ -733,11 +753,22 @@
public void setAutoHideEnabled(boolean autoHide) {
this.autoHide = autoHide;
}
+
+ /**
+ * Enable or disable autoHide on history change events. When enabled, the
+ * popup will be automatically hidden when the history token changes,
such as
+ * when the user presses the browser's back button. Disabled by default.
+ *
+ * @param enabled true to enable, false to disable
+ */
+ public void setAutoHideOnHistoryEventsEnabled(boolean enabled) {
+ this.autoHideOnHistoryEvents = enabled;
+ }
/**
* When enabled, the background will be blocked with a semi-transparent
pane
- * the next time it is shown. If the PopupPanel is already visible, the
- * glass will not be displayed until it is hidden and shown again.
+ * the next time it is shown. If the PopupPanel is already visible, the
glass
+ * will not be displayed until it is hidden and shown again.
*
* @param enabled true to enable, false to disable
*/
@@ -1352,10 +1383,19 @@
public void onPreviewNativeEvent(NativePreviewEvent event) {
previewNativeEvent(event);
}
+ });
+ historyHandlerRegistration = History.addValueChangeHandler(new
ValueChangeHandler<String>() {
+ public void onValueChange(ValueChangeEvent<String> event) {
+ if (autoHideOnHistoryEvents) {
+ hide();
+ }
+ }
});
} else if (nativePreviewHandlerRegistration != null) {
nativePreviewHandlerRegistration.removeHandler();
nativePreviewHandlerRegistration = null;
+ historyHandlerRegistration.removeHandler();
+ historyHandlerRegistration = null;
}
}
}
=======================================
---
/releases/2.0/user/src/com/google/gwt/user/datepicker/client/DateBox.java
Mon Nov 2 12:44:54 2009
+++
/releases/2.0/user/src/com/google/gwt/user/datepicker/client/DateBox.java
Fri Jan 15 13:50:17 2010
@@ -264,11 +264,10 @@
*/
public DateBox(DatePicker picker, Date date, Format format) {
this.picker = picker;
- this.popup = new PopupPanel();
+ this.popup = new PopupPanel(true);
assert format != null : "You may not construct a date box with a null
format";
this.format = format;
- popup.setAutoHideEnabled(true);
popup.addAutoHidePartner(box.getElement());
popup.setWidget(picker);
popup.setStyleName("dateBoxPopup");
=======================================
--- /releases/2.0/user/test/com/google/gwt/user/client/ui/PopupTest.java
Thu Nov 5 11:50:57 2009
+++ /releases/2.0/user/test/com/google/gwt/user/client/ui/PopupTest.java
Fri Jan 15 13:50:17 2010
@@ -23,6 +23,7 @@
import com.google.gwt.junit.DoNotRunWith;
import com.google.gwt.junit.Platform;
import com.google.gwt.junit.client.GWTTestCase;
+import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
@@ -127,6 +128,21 @@
// Remove a partner
popup.removeAutoHidePartner(partner0);
}
+
+ public void testAutoHideOnHistoryEvent() {
+ PopupPanel popup = createPopupPanel();
+ popup.show();
+ assertTrue(popup.isShowing());
+
+ // When autoHideOnHistoryEvent is disabled, the popup remains visible.
+ History.newItem("popupToken0");
+ assertTrue(popup.isShowing());
+
+ // When autoHideOnHistoryEvent is enabled, the popup is hidden.
+ popup.setAutoHideOnHistoryEventsEnabled(true);
+ History.newItem("popupToken1");
+ assertFalse(popup.isShowing());
+ }
/**
* Tests that a large PopupPanel is not positioned off the top or left
edges
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors