package com.baselet.element.sequence_aio.facet;
import com.baselet.control.basics.Line1D;
import com.baselet.control.basics.geom.PointDouble;
import com.baselet.diagram.draw.DrawHandler;
/**
* <pre>
* getLifelineLeftPartWidth
* +--+
* getLifelineRightPartWidth
* +------+
*
* |
* +--+--+
* | |
* | +-+---+
* | | |
* +-------------------+
* | | | | | height
* | | | | |
* + | +-+---+ +
* | |
* +--+--+
* |
* +--+ +--+
* gap gap
*
*</pre>
*/
public class Coregion implements LifelineOccurrence {
private static final double COREGION_GAP_LIFELINE = 10;
private static final double COREGION_HEIGHT = 10;
private final Lifeline correspondingLifeline;
private final int tick;
private final boolean start;
/**
* @param lifeline on which the Coregion is specified
* @param start if true then it is the beginning of a Coregion, otherwise it is the end of a Coregion
*/
public Coregion(Lifeline lifeline, int tick, boolean start) {
correspondingLifeline = lifeline;
this.tick = tick;
this.start = start;
}
@Override
public Line1D draw(DrawHandler drawHandler, PointDouble topLeft, PointDouble size) {
PointDouble topLeftCoregion = new PointDouble(topLeft.x + size.x / 2.0 - getWidth() / 2.0, topLeft.y + size.y / 2.0 - COREGION_HEIGHT / 2.0);
if (isStart()) {
drawHandler.drawLine(topLeftCoregion.x, topLeftCoregion.y, topLeftCoregion.x + getWidth(), topLeftCoregion.y); // horizontal line
}
else {
drawHandler.drawLine(topLeftCoregion.x, topLeftCoregion.y + COREGION_HEIGHT, topLeftCoregion.x + getWidth(), topLeftCoregion.y + COREGION_HEIGHT); // horizontal line
}
drawHandler.drawLine(topLeftCoregion.x, topLeftCoregion.y, topLeftCoregion.x, topLeftCoregion.y + COREGION_HEIGHT); // left vertical line
drawHandler.drawLine(topLeftCoregion.x + getWidth(), topLeftCoregion.y, topLeftCoregion.x + getWidth(), topLeftCoregion.y + COREGION_HEIGHT); // right vertical line
return null;
}
@Override
public double getMinWidth(DrawHandler drawHandler) {
return getWidth();
}
public double getWidth() {
return correspondingLifeline.getLifelineRightPartWidth(tick) * 2 + COREGION_GAP_LIFELINE * 2;
}
@Override
public double getAdditionalYHeight(DrawHandler drawHandler, PointDouble size) {
return COREGION_HEIGHT - size.y;
}
public boolean isStart() {
return start;
}
}