| // Copyright (C) 2008 The Android Open Source Project | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| package com.google.gwtexpui.user.client; | |
| import com.google.gwt.event.logical.shared.ResizeEvent; | |
| import com.google.gwt.event.logical.shared.ResizeHandler; | |
| import com.google.gwt.event.shared.HandlerRegistration; | |
| import com.google.gwt.user.client.Window; | |
| import com.google.gwt.user.client.ui.DialogBox; | |
| /** A DialogBox that automatically re-centers itself if the window changes */ | |
| public class AutoCenterDialogBox extends DialogBox { | |
| private HandlerRegistration recenter; | |
| public AutoCenterDialogBox() { | |
| this(false); | |
| } | |
| public AutoCenterDialogBox(boolean autoHide) { | |
| this(autoHide, true); | |
| } | |
| public AutoCenterDialogBox(boolean autoHide, boolean modal) { | |
| super(autoHide, modal); | |
| } | |
| @Override | |
| public void show() { | |
| if (recenter == null) { | |
| recenter = | |
| Window.addResizeHandler( | |
| new ResizeHandler() { | |
| @Override | |
| public void onResize(ResizeEvent event) { | |
| final int w = event.getWidth(); | |
| final int h = event.getHeight(); | |
| AutoCenterDialogBox.this.onResize(w, h); | |
| } | |
| }); | |
| } | |
| super.show(); | |
| } | |
| @Override | |
| protected void onUnload() { | |
| if (recenter != null) { | |
| recenter.removeHandler(); | |
| recenter = null; | |
| } | |
| super.onUnload(); | |
| } | |
| /** | |
| * Invoked when the outer browser window resizes. | |
| * | |
| * <p>Subclasses may override (but should ensure they still call super.onResize) to implement | |
| * custom logic when a window resize occurs. | |
| * | |
| * @param width new browser window width | |
| * @param height new browser window height | |
| */ | |
| protected void onResize(int width, int height) { | |
| if (isAttached()) { | |
| center(); | |
| } | |
| } | |
| } |