/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * 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 org.uberfire.ext.wires.core.grids.client.widget.grid.animation; import java.util.ArrayList; import java.util.List; import com.ait.lienzo.client.core.animation.AnimationTweener; import com.ait.lienzo.client.core.animation.IAnimation; import com.ait.lienzo.client.core.animation.IAnimationCallback; import com.ait.lienzo.client.core.animation.IAnimationHandle; import com.ait.lienzo.client.core.animation.TimedAnimation; import org.uberfire.ext.wires.core.grids.client.model.GridRow; import org.uberfire.ext.wires.core.grids.client.widget.grid.GridWidget; /** * An animation to expand collapsed rows in a merged block. The cells in * the merged block are set to expanded when the animation starts. */ public class MergableGridWidgetExpandRowsAnimation extends TimedAnimation { public MergableGridWidgetExpandRowsAnimation(final GridWidget gridWidget, final int uiRowIndex, final int uiColumnIndex, final int rowCount) { super(500, new IAnimationCallback() { private AnimationTweener tweener = AnimationTweener.EASE_OUT; private List<Double> heights = new ArrayList<Double>(); @Override public void onStart(final IAnimation iAnimation, final IAnimationHandle iAnimationHandle) { //Store the rows' target heights for (int i = 0; i < rowCount; i++) { final GridRow row = gridWidget.getModel().getRow(uiRowIndex + i); heights.add(row.peekHeight()); } //Mark cells as expanded gridWidget.getModel().expandCell(uiRowIndex, uiColumnIndex); } @Override public void onFrame(final IAnimation iAnimation, final IAnimationHandle iAnimationHandle) { //Set the rows' height from zero to their starting height final double pct = assertPct(iAnimation.getPercent()); for (int i = 1; i < rowCount; i++) { final GridRow row = gridWidget.getModel().getRow(uiRowIndex + i); row.setHeight(pct * heights.get(i)); } gridWidget.getLayer().batch(); } @Override public void onClose(final IAnimation iAnimation, final IAnimationHandle iAnimationHandle) { //Do nothing } private double assertPct(final double pct) { if (pct < 0) { return 0; } if (pct > 1.0) { return 1.0; } return tweener.apply(pct); } }); } }