Java tutorial
/** * Copyright 2010 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.livingstories.client.lsp.views.contentitems; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; import com.google.livingstories.client.AssetContentItem; import com.google.livingstories.client.lsp.BylineWidget; import com.google.livingstories.client.lsp.LspMessageHolder; import com.google.livingstories.client.lsp.event.EventBus; import com.google.livingstories.client.lsp.event.PopupImageLoadedEvent; import com.google.livingstories.client.lsp.views.Resources; import com.google.livingstories.client.ui.OverlayLabel; import com.google.livingstories.client.util.BoundedImage; /** * Popup view for an image. Fires a PopupImageLoadedEvent through the event bus so * popup panels can recenter themselves based on the size of the image. */ public class ImagePopupView extends Composite { private static ImagePopupViewUiBinder uiBinder = GWT.create(ImagePopupViewUiBinder.class); interface ImagePopupViewUiBinder extends UiBinder<Widget, ImagePopupView> { } private static String BROKEN_LINK_TEXT = LspMessageHolder.consts.imageUnavailable(); private static final int WINDOW_PADDING = 200; @UiField SimplePanel image; @UiField OverlayLabel caption; @UiField SimplePanel byline; public ImagePopupView(final AssetContentItem contentItem) { initWidget(uiBinder.createAndBindUi(this)); new BoundedImage(contentItem.getContent(), Window.getClientWidth() - WINDOW_PADDING, Window.getClientHeight() - WINDOW_PADDING) { @Override public void onImageLoad(boolean failed) { PopupImageLoadedEvent event; if (failed) { Label brokenLink = new Label(BROKEN_LINK_TEXT); brokenLink.setStylePrimaryName(Resources.INSTANCE.css().error()); image.setWidget(brokenLink); image.setSize("250px", "150px"); event = new PopupImageLoadedEvent(250, 150); } else { image.setWidget(this); event = new PopupImageLoadedEvent(this.getDisplayWidth(), this.getDisplayHeight()); } caption.setText(contentItem.getCaption()); if (!contentItem.getContributorIds().isEmpty()) { byline.setWidget(new BylineWidget(contentItem, false)); } EventBus.INSTANCE.fireEvent(event); } }; } }