/**
* Copyright 2005-2014 Restlet
*
* The contents of this file are subject to the terms of one of the following
* open source licenses: Apache 2.0 or or EPL 1.0 (the "Licenses"). You can
* select the license that you prefer but you may not use this file except in
* compliance with one of these Licenses.
*
* You can obtain a copy of the Apache 2.0 license at
* http://www.opensource.org/licenses/apache-2.0
*
* You can obtain a copy of the EPL 1.0 license at
* http://www.opensource.org/licenses/eclipse-1.0
*
* See the Licenses for the specific language governing permissions and
* limitations under the Licenses.
*
* Alternatively, you can obtain a royalty free commercial license with less
* limitations, transferable or non-transferable, directly at
* http://restlet.com/products/restlet-framework
*
* Restlet is a registered trademark of Restlet S.A.S.
*/
package org.restlet.example.book.restlet.ch09.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;
/**
* A tree displaying a set of email folders.
*/
public class Mailboxes extends Composite {
/**
* Specifies the images that will be bundled for this Composite and specify
* that tree's images should also be included in the same bundle.
*/
public interface Images extends ClientBundle, Tree.Resources {
ImageResource drafts();
ImageResource home();
ImageResource inbox();
ImageResource sent();
ImageResource templates();
ImageResource trash();
@Source("noimage.png")
ImageResource treeLeaf();
}
private Tree tree;
/**
* Constructs a new mailboxes widget with a bundle of images.
*
* @param images a bundle that provides the images for this widget
*/
public Mailboxes() {
Images images = GWT.create(Images.class);
tree = new Tree(images);
TreeItem root = new TreeItem(
imageItemHTML(images.home(), "foo@example.com"));
tree.addItem(root);
addImageItem(root, "Inbox", images.inbox());
addImageItem(root, "Drafts", images.drafts());
addImageItem(root, "Templates", images.templates());
addImageItem(root, "Sent", images.sent());
addImageItem(root, "Trash", images.trash());
root.setState(true);
initWidget(tree);
}
/**
* A helper method to simplify adding tree items that have attached images.
* {@link #addImageItem(TreeItem, String, ImageResource) code}
*
* @param root the tree item to which the new item will be added.
* @param title the text associated with this item.
*/
private TreeItem addImageItem(TreeItem root, String title,
ImageResource imageProto) {
TreeItem item = new TreeItem(imageItemHTML(imageProto, title));
root.addItem(item);
return item;
}
/**
* Generates HTML for a tree item with an attached icon.
*
* @param imageProto the image prototype to use
* @param title the title of the item
* @return the resultant HTML
*/
private String imageItemHTML(ImageResource imageProto, String title) {
return AbstractImagePrototype.create(imageProto).getHTML() + " " + title;
}
}