package org.eclipse.uml2.diagram.sequence.internal.layout.vertical;
import java.util.Collections;
import java.util.List;
import org.eclipse.uml2.diagram.sequence.internal.layout.GeometryConstants;
import org.eclipse.uml2.diagram.sequence.internal.layout.model.SdLayoutModelAccess;
import org.eclipse.uml2.diagram.sequence.internal.layout.vertical.input.LifeLine;
import org.eclipse.uml2.diagram.sequence.internal.layout.vertical.input.SDVerticalLayoutInput;
/**
*
*/
public class SDVerticalLayout {
public interface Config {
//boolean useOldVerticalLayout();
//String useOldLayoutString = myConfig.getProperty("option.sequenceDiagram20.debug.useOldVerticalLayout", null);
}
public SDVerticalLayout(SdLayoutModelAccess layoutModelAccess, Config config) {
myLayoutModelAccess = layoutModelAccess;
}
/**
* @param fullLayout
* @return bottomPos -- most lower position of elements
*/
public int doLayout(boolean fullLayout, int topPos) {
SDVerticalLayoutInput input = myLayoutModelAccess.getLayoutModel().getSDVerticalLayoutInput();
int bottomPos;
if (input.doesContainNonvirtual()) {
//System.out.println("[SDVerticalLayout.doLayout] BEFORE");
//dumpVerticalLayoutInput(input);
List lifeLinesList = Collections.list(input.lifeLines());
LifeLine [] lifeLines = new LifeLine[lifeLinesList.size()];
lifeLinesList.toArray(lifeLines);
bottomPos = new NewLayoutSession(lifeLines, fullLayout, topPos).go();
} else {
bottomPos = topPos;
}
//System.out.println("[SDVerticalLayout.doLayout] AFTER");
//dumpVerticalLayoutInput(input);
myLayoutModelAccess.getLayoutModel().getRootFrameContainer().layoutVerticallyUtiedFrames(topPos+GeometryConstants.Lifeline.SKIP_LIFELINE_FROM_TOP);
return bottomPos;
}
private final SdLayoutModelAccess myLayoutModelAccess ;
// private void dumpVerticalLayoutInput(SDVerticalLayoutInput input) {
// for (Enumeration lifelineEnum = input.lifeLines(); lifelineEnum.hasMoreElements(); ) {
// int priorityDepth = 0;
// Lifeline lifeLine = (Lifeline) lifelineEnum.nextElement();
// System.out.println("[SDVerticalLayout.dumpVerticalLayoutInput] lifeline "+lifeLine); //$NON-NLS-1$
//
// for (LifeLineIterator it = lifeLine.iterator(); it.hasNext(); ) {
// it.nextClueValue();
//
// LifeLineElement element = it.nextElement();
//
// System.out.println("[SDVerticalLayout.dumpVerticalLayoutInput] element "+element); //$NON-NLS-1$
// System.out.println("[SDVerticalLayout.dumpVerticalLayoutInput] "+element.getPointOffset()+" + "+(element.getSize() - element.getPointOffset())+" constraint: "+element.getHorizontalConstraint()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// System.out.println("[SDVerticalLayout.dumpVerticalLayoutInput] "+element.getPosition().getPositionValue()); //$NON-NLS-1$
//
// LifeLineElement.Position position = element.getPosition();
// if (position.isFirstPrioritedPosition()) {
// System.out.println("[SDVerticalLayout.dumpVerticalLayoutInput] first priorited '{'"); //$NON-NLS-1$
// priorityDepth ++;
// }
// if (position.isLastPrioritedPosition()) {
// System.out.println("[SDVerticalLayout.dumpVerticalLayoutInput] last priorited '}'"); //$NON-NLS-1$
// priorityDepth --;
// }
// }
// System.out.println();
// System.out.println();
// if (priorityDepth != 0) {
// throw new RuntimeException("Priority inconsistence"); //$NON-NLS-1$
// }
// }
// }
}