package info.limpet.stackedcharts.ui.editor.drop;
import info.limpet.stackedcharts.model.Dataset;
import info.limpet.stackedcharts.model.DependentAxis;
import info.limpet.stackedcharts.model.impl.StackedchartsFactoryImpl;
import info.limpet.stackedcharts.ui.editor.commands.AddAxisToChartCommand;
import info.limpet.stackedcharts.ui.editor.commands.AddDatasetsToAxisCommand;
import info.limpet.stackedcharts.ui.editor.parts.AxisLandingPadEditPart;
import info.limpet.stackedcharts.ui.editor.parts.ChartEditPart.ChartPanePosition;
import info.limpet.stackedcharts.ui.editor.parts.ChartPaneEditPart;
import java.util.List;
import org.eclipse.emf.common.util.EList;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.swt.dnd.DropTargetEvent;
public class DatasetToAxisLandingDropTargetListener extends
DatasetDropTargetListener
{
public DatasetToAxisLandingDropTargetListener(GraphicalViewer viewer)
{
super(viewer);
}
@Override
public boolean appliesTo(DropTargetEvent event)
{
EditPart findObjectAt = findPart(event);
return findObjectAt instanceof AxisLandingPadEditPart;
}
protected Command createCommand(AbstractGraphicalEditPart axis,
List<Dataset> datasets)
{
CompoundCommand compoundCommand = new CompoundCommand();
// get the dimensions of the first dataset
final String units;
if (datasets != null && datasets.size() > 0 && datasets.get(0).getUnits() != null)
{
final Dataset dataset = datasets.get(0);
units = dataset.getUnits();
}
else
{
units = "[dimensionless]";
}
StackedchartsFactoryImpl factory = new StackedchartsFactoryImpl();
DependentAxis newAxis = factory.createDependentAxis();
newAxis.setName(units);
newAxis.setAxisType(factory.createNumberAxis());
final ChartPaneEditPart.AxisLandingPad pad =
(ChartPaneEditPart.AxisLandingPad) axis.getModel();
// find out which list (min/max) this axis is currently on
final EList<DependentAxis> destination =
pad.getPos() == ChartPanePosition.MIN ? pad.getChart().getMinAxes()
: pad.getChart().getMaxAxes();
compoundCommand.add(new AddAxisToChartCommand(destination, newAxis));
AddDatasetsToAxisCommand addDatasetsToAxisCommand =
new AddDatasetsToAxisCommand(newAxis, datasets
.toArray(new Dataset[datasets.size()]));
compoundCommand.add(addDatasetsToAxisCommand);
return compoundCommand;
}
}