package org.openlca.app.editors.graphical.model;
import java.util.EventObject;
import java.util.List;
import org.eclipse.draw2d.IFigure;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.commands.CommandStackListener;
import org.eclipse.gef.editpolicies.ComponentEditPolicy;
import org.openlca.app.editors.graphical.layout.Animation;
import org.openlca.app.editors.graphical.layout.LayoutManager;
import org.openlca.app.editors.graphical.policy.LayoutPolicy;
class ProductSystemPart extends AppAbstractEditPart<ProductSystemNode> {
CommandStackListener stackListener = new CommandStackChangedListener();
@Override
public void activate() {
super.activate();
getViewer().getEditDomain().getCommandStack().addCommandStackListener(stackListener);
}
@Override
public void deactivate() {
getViewer().getEditDomain().getCommandStack().removeCommandStackListener(stackListener);
super.deactivate();
}
@Override
protected IFigure createFigure() {
ProductSystemNode node = getModel();
ProductSystemFigure figure = new ProductSystemFigure(node);
return figure;
}
@Override
protected void createEditPolicies() {
installEditPolicy(EditPolicy.LAYOUT_ROLE, new LayoutPolicy());
installEditPolicy(EditPolicy.COMPONENT_ROLE, new ComponentEditPolicy() {
});
LayoutManager manager = new LayoutManager(getModel());
getFigure().setLayoutManager(manager);
}
@SuppressWarnings("unchecked")
@Override
public List<ProcessPart> getChildren() {
return super.getChildren();
}
@Override
public boolean isSelectable() {
return false;
}
private class CommandStackChangedListener implements CommandStackListener {
@Override
public void commandStackChanged(EventObject event) {
if (!Animation.captureLayout(getFigure()))
return;
while (Animation.step())
getFigure().getUpdateManager().performUpdate();
Animation.end();
}
}
}