/* * Copyright 2008 Eckhart Arnold (eckhart_arnold@hotmail.com). * * 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 de.eckhartarnold.client; //import com.google.gwt.event.dom.client.ClickEvent; //import com.google.gwt.event.dom.client.ClickHandler; //import com.google.gwt.core.shared.GWT; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Widget; /** * Abstract base class for all layout classes for the slide show. * * <p>The layout classes define how and where these elements are * placed. A "layout" for the slide show * always contains the image panel on which the slides are shown and it may * contain (usually it does) a control panel to control the slide show and * a caption where the captions of those images that have a caption are * displayed. * * @author ecki */ public abstract class Layout { /** the key in the "info.json" dictionary that determines whether * by clicking on an image a window with its full sized version is * opened. The value can be either "true" or "false", default is * "true". */ public static final String KEY_CLICKABLE = "image clickable"; /** * the key in the "info.json" dictionary that determines whether the * window scrollbars shall be turned of when attaching the image * panel. (This may be useful for avoiding flickering, but should * not be used when the slide show is embedded in a larger html * page so that it does not occupy the whole page alone!) */ public static final String KEY_DISABLE_SCROLLING = "disable scrolling"; /** The standard configuration of the layout: control panel at the top, * image panel in the middle, caption at the bottom. */ public static final String STD_CFG = "IOFT"; // Image, Caption, Filmstrip, Touch // "PICT"; // Panel, Image, Caption, Touch /** The widget that display the caption. */ protected Caption caption; /** The control panel widget. */ protected ControlPanel control; /** Touchscreen controls */ protected TouchControls touch; /** * The film strip widget which, if present at all, is usually "swallowed" * by the control panel. */ protected Filmstrip filmstrip; /** The widget on which the images are displayed. */ protected ImagePanel imagePanel; /** The <code>Slideshow</code> object controlling the slide show. */ protected Slideshow slideshow; /** * Creates a new layout object. * * @param collection the information about the image collection * @param configuration the configuration string for the layout */ public Layout(ImageCollectionInfo collection, String configuration) { init(collection, configuration); } /** * Creates a new layout object. The layout object created with this * constructor does contain a <code>ControlPanel</code>. It will * also contain a <code>Caption</code> unless the captions of * <em>all</em> images are empty. * * @param collection the information about the image collection */ public Layout(ImageCollectionInfo collection) { String cfg; if (collection.hasCaptions()) cfg = "PICT"; else cfg = "PIT"; init(collection, cfg); } /** * Returns the <code>Caption</code> object, if the layout contains a * caption. * @return the <code>Caption</code> object or <code>null</code> */ public Caption getCaption() { return caption; } /** * Returns the <code>SlideshowControl</code> object, if the layout contains a * control panel. * @return the <code>SlideshowControl</code> object or <code>null</code> */ public SlideshowControl getSlideshowControl() { return control; } /** * Returns the <code>FlipImagePanel</code> object. * @return the <code>FlipImagePanel</code> object */ public ImagePanel getImagePanel() { return imagePanel; } /** * Returns the <code>Slideshow</code> object. * @return the <code>Slideshow</code> object */ public Slideshow getSlideshow() { return slideshow; } /** * Returns the root widget of the layout. The widget can be inserted anywhere * in a web site. After attaching the root widget to the web site, method * <code>issueResize</code> should be called to make sure that the layout's * size is adjusted properly. * * @return the root widget of the layout */ public abstract Widget getRootWidget(); /** * Calls the <code>prepareResized</code> and <code>onResized</code> methods * of the widgets associated with this layout. This method should be called * after attaching the layout's root widget to the DOM-tree! */ public void issueResize() { imagePanel.prepareResized(); if (control != null) control.prepareResized(); if (caption != null) { caption.prepareResized(); caption.onResized(); } if (control != null) control.onResized(); imagePanel.onResized(); } /** * Sets the listener for the "home" resp. "back to the gallery button" for * all control panels of the slideshow. * @see de.eckhartarnold.client.SlideshowControl#setHomeButtonListener(com.google.gwt.event.dom.client.ClickHandler) * @param handler the <code>ClickHandler</code> for the gallery/home button */ public void setHomeButtonListener(ClickHandler handler) { if (control != null) control.setHomeButtonListener(handler); if (touch != null) touch.setHomeButtonListener(handler); } private void init(ImageCollectionInfo collection, String configuration) { imagePanel = new ImagePanel(collection); /* String clickable = collection.getInfo().get(KEY_CLICKABLE); if (clickable == null || clickable.equalsIgnoreCase("true")) { imagePanel.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { Window.open(imagePanel.getImageURL(), "_blank", "menubar=no,toolbar=no,directories=no,personalbar=no,"+ "location=yes,resizable=yes,scrollbars=yes"); } }); }*/ String disableScrolling = collection.getInfo().get(KEY_DISABLE_SCROLLING); if (disableScrolling != null && disableScrolling.equalsIgnoreCase("true")){ imagePanel.addAttachmentListener(new AttachmentListener() { public void onLoad(Widget sender) { Window.enableScrolling(false); } public void onUnload(Widget sender) { Window.enableScrolling(true); } }); } slideshow = new Slideshow(imagePanel, collection.getImageNames(), collection.getDirectories(), collection.getImageSizes()); if (configuration.contains("F")) { control = new ControlPanel(slideshow); filmstrip = new Filmstrip(collection); ((ControlPanel) control).swallowFilmstrip(filmstrip, true); } else if (configuration.contains("P")) { control = new ControlPanel(slideshow); } if (configuration.contains("T")) { touch = new TouchControls(slideshow); } if (configuration.contains("C") || configuration.contains("O")) caption = new Caption(slideshow, collection.getCaptions()); } }