/* * Smart GWT (GWT for SmartClient) * Copyright 2008 and beyond, Isomorphic Software, Inc. * * Smart GWT is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3 * as published by the Free Software Foundation. Smart GWT is also * available under typical commercial license terms - see * http://smartclient.com/license * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ import com.smartgwt.client.widgets.AnimationCallback; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Img; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.layout.VLayout; import com.google.gwt.core.client.EntryPoint; public class AnimateComplexSequenceSample implements EntryPoint { protected ZoomImg zoomedObject = null; public void onModuleLoad() { VLayout layout = new VLayout(); layout.setMembersMargin(10); layout.addChild(new ZoomImg(this, 0, "cube_blue.png")); layout.addChild(new ZoomImg(this, 100, "pawn_yellow.png")); layout.addChild(new ZoomImg(this, 200, "piece_green.png")); layout.draw(); } public static class ZoomImg extends Img { private AnimateComplexSequenceSample sample; private int zoomTime; private int shrinkTime; private Integer originalLeft = null; public ZoomImg(final AnimateComplexSequenceSample sample, int left, String src) { final ZoomImg _this = this; this.sample = sample; setLeft(left); setSrc(src); setWidth(48); setHeight(48); setAppImgDir("pieces/48/"); zoomTime = 1000; shrinkTime = 300; addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { // remember original position if (originalLeft == null) originalLeft = getLeft(); if (sample.zoomedObject == null) { // nothing expanded, so just expand zoom(); } else if (_this.equals(sample.zoomedObject)) { // already expanded, so just shrink shrink(); sample.zoomedObject = null; } else { // another object is expanded; shrink it and then expand this object sample.zoomedObject.shrink(new AnimationCallback() { public void execute(boolean earlyFinish) { zoom(); } }); } } }); } public void zoom() { animateRect(25, 100, 200, 200, null, zoomTime); sample.zoomedObject = this; } public void shrink() { shrink(null); } public void shrink(AnimationCallback postShrinkScript) { animateRect(originalLeft, 0, 48, 48, postShrinkScript, shrinkTime); } } }