package org.korsakow.ide.ui.controller.action;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.korsakow.ide.resources.widget.WidgetModel;
import org.korsakow.ide.ui.interfacebuilder.InterfaceBuilderMainPanel;
import org.korsakow.ide.ui.interfacebuilder.WidgetCanvasModel;
public class MoveBackwardsAction extends AbstractAction
{
public final static class DepthSort implements Comparator<WidgetModel>
{
private final List<WidgetModel> widgets;
public DepthSort(List<WidgetModel> widgets)
{
this.widgets = widgets;
}
public int compare(WidgetModel o1, WidgetModel o2)
{
return widgets.indexOf(o1) - widgets.indexOf(o2);
}
}
private final InterfaceBuilderMainPanel interfBuilder;
public MoveBackwardsAction(InterfaceBuilderMainPanel interfBuilder)
{
this.interfBuilder = interfBuilder;
}
@Override
public void performAction()
{
WidgetCanvasModel model = interfBuilder.getCanvas().getModel();
final List<WidgetModel> widgets = model.getWidgets();
List<WidgetModel> selected = new ArrayList<WidgetModel>(model.getSelectedWidgets());
Collections.sort(selected, new DepthSort(widgets));
for (WidgetModel widget : selected) {
int index = model.indexOfWidget(widget);
if (index < 1)
continue;
model.addWidget(index-1, widget);
}
}
}