blob: 1b7f65255beeccf28faf0ffab8ea708a429a293d [file] [log] [blame]
/*
* Copyright 2007 Google Inc.
*
* 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.gwt.sample.mail.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
/**
* This application demonstrates how to construct a relatively complex user
* interface, similar to many common email readers. It has no back-end,
* populating its components with hard-coded data.
*/
public class Mail implements EntryPoint, ResizeHandler {
private static Mail singleton;
/**
* Instantiate an application-level image bundle. This object will provide
* programmatic access to all the images needed by widgets.
*/
private static final Images images = GWT.create(Images.class);
/**
* An aggregate image bundle that pulls together all the images for this
* application into a single bundle.
*/
public interface Images extends Shortcuts.Images, TopPanel.Images {
}
/**
* Gets the singleton Mail instance.
*/
public static Mail get() {
return singleton;
}
private TopPanel topPanel = new TopPanel(images);
private VerticalPanel rightPanel = new VerticalPanel();
private MailList mailList;
private MailDetail mailDetail = new MailDetail();
private Shortcuts shortcuts = new Shortcuts(images);
/**
* Displays the specified item.
*
* @param item
*/
public void displayItem(MailItem item) {
mailDetail.setItem(item);
}
/**
* This method constructs the application user interface by instantiating
* controls and hooking up event handler.
*/
public void onModuleLoad() {
singleton = this;
topPanel.setWidth("100%");
// MailList uses Mail.get() in its constructor, so initialize it after
// 'singleton'.
mailList = new MailList();
mailList.setWidth("100%");
// Create the right panel, containing the email list & details.
rightPanel.add(mailList);
rightPanel.add(mailDetail);
mailList.setWidth("100%");
mailDetail.setWidth("100%");
// Create a dock panel that will contain the menu bar at the top,
// the shortcuts to the left, and the mail list & details taking the rest.
DockPanel outer = new DockPanel();
outer.add(topPanel, DockPanel.NORTH);
outer.add(shortcuts, DockPanel.WEST);
outer.add(rightPanel, DockPanel.CENTER);
outer.setWidth("100%");
outer.setSpacing(4);
outer.setCellWidth(rightPanel, "100%");
// Hook the window resize event, so that we can adjust the UI.
Window.addResizeHandler(this);
// Get rid of scrollbars, and clear out the window's built-in margin,
// because we want to take advantage of the entire client area.
Window.enableScrolling(false);
Window.setMargin("0px");
// Finally, add the outer panel to the RootPanel, so that it will be
// displayed.
RootPanel.get().add(outer);
// Call the window resized handler to get the initial sizes setup. Doing
// this in a deferred command causes it to occur after all widgets' sizes
// have been computed by the browser.
DeferredCommand.addCommand(new Command() {
public void execute() {
onWindowResized(Window.getClientWidth(), Window.getClientHeight());
}
});
onWindowResized(Window.getClientWidth(), Window.getClientHeight());
}
public void onResize(ResizeEvent event) {
onWindowResized(event.getWidth(), event.getHeight());
}
public void onWindowResized(int width, int height) {
// Adjust the shortcut panel and detail area to take up the available room
// in the window.
int shortcutHeight = height - shortcuts.getAbsoluteTop() - 8;
if (shortcutHeight < 1) {
shortcutHeight = 1;
}
shortcuts.setHeight(shortcutHeight + "px");
// Give the mail detail widget a chance to resize itself as well.
mailDetail.adjustSize(width, height);
}
}