/*******************************************************************************
* Copyright (c) 2010 Oak Ridge National Laboratory.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
package org.eclipse.nebula.visualization.internal.xygraph.undo;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.nebula.visualization.xygraph.figures.Axis;
import org.eclipse.nebula.visualization.xygraph.linearscale.Range;
/**
* The command for graph zooming and panning.
*
* @author Xihui Chen
* @author Kay Kasemir (allow <code>null</code> for x axis)
*/
public class ZoomCommand extends SaveStateCommand {
final private List<Axis> xAxisList;
final private List<Axis> yAxisList;
final private List<Range> beforeXRangeList = new ArrayList<Range>();
final private List<Range> beforeYRangeList = new ArrayList<Range>();
final private List<Range> afterXRangeList = new ArrayList<Range>();
final private List<Range> afterYRangeList = new ArrayList<Range>();
/**
* Initialize
*
* @param name
* Name of operation for undo/redo GUI
* @param xAxisList
* X Axes to save or <code>null</code>
* @param yAxisList
* Y Axes to save
*/
public ZoomCommand(final String name, final List<Axis> xAxisList, final List<Axis> yAxisList) {
super(name);
this.xAxisList = xAxisList;
this.yAxisList = yAxisList;
saveOriginalState();
}
private void saveOriginalState() {
if (xAxisList != null)
for (Axis axis : xAxisList)
beforeXRangeList.add(axis.getRange());
for (Axis axis : yAxisList)
beforeYRangeList.add(axis.getRange());
}
public void redo() {
int i = 0;
if (xAxisList != null) {
for (Axis axis : xAxisList) {
axis.setRange(afterXRangeList.get(i));
i++;
}
}
i = 0;
for (Axis axis : yAxisList) {
axis.setRange(afterYRangeList.get(i));
i++;
}
}
public void undo() {
int i = 0;
if (xAxisList != null) {
for (Axis axis : xAxisList) {
axis.setRange(beforeXRangeList.get(i));
i++;
}
}
i = 0;
for (Axis axis : yAxisList) {
axis.setRange(beforeYRangeList.get(i));
i++;
}
}
@Override
public void saveState() {
if (xAxisList != null)
for (Axis axis : xAxisList)
afterXRangeList.add(axis.getRange());
for (Axis axis : yAxisList)
afterYRangeList.add(axis.getRange());
}
}