package com.baselet.element.elementnew.uml;
import java.util.List;
import com.baselet.control.basics.geom.PointDouble;
import com.baselet.control.enums.AlignHorizontal;
import com.baselet.control.enums.ElementId;
import com.baselet.diagram.draw.DrawHandler;
import com.baselet.diagram.draw.helper.ColorOwn;
import com.baselet.diagram.draw.helper.Style;
import com.baselet.element.NewGridElement;
import com.baselet.element.facet.Facet;
import com.baselet.element.facet.PropertiesParserState;
import com.baselet.element.facet.Settings;
import com.baselet.element.facet.common.SeparatorLineFacet;
import com.baselet.element.facet.common.TextBeforeFirstSeparatorCollectorFacet;
import com.baselet.element.facet.common.TextBeforeFirstSeparatorCollectorFacet.TextBeforeFirstSeparatorCollectorFacetResponse;
import com.baselet.element.settings.SettingsManualResizeTop;
public class Frame extends NewGridElement {
@Override
protected Settings createSettings() {
return new SettingsManualResizeTop() {
@Override
protected List<Facet> createFacets() {
return listOf(super.createFacets(), TextBeforeFirstSeparatorCollectorFacet.INSTANCE, SeparatorLineFacet.INSTANCE);
}
};
}
@Override
public ElementId getId() {
return ElementId.UMLFrame;
}
@Override
protected void drawCommonContent(PropertiesParserState state) {
DrawHandler drawer = state.getDrawer();
drawer.drawRectangle(0, 0, getRealSize().getWidth(), getRealSize().getHeight());
TextBeforeFirstSeparatorCollectorFacetResponse packageTitleResponse = state.getFacetResponse(TextBeforeFirstSeparatorCollectorFacet.class, null);
if (packageTitleResponse != null) {
double top = state.getBuffer().getTop();
double textDistanceToTop = drawer.getDistanceBorderToText() + top;
double heightOfTitle = drawer.getDistanceBorderToText() + textDistanceToTop;
double width = 0;
for (String line : packageTitleResponse.getLines()) {
width = Math.max(width, drawer.textWidth(line));
heightOfTitle += drawer.textHeightMax();
}
double corner = heightOfTitle * 0.4;
double rightSpace = corner * 1.5;
double lowerLeftSpace = state.getXLimits(heightOfTitle).getLeft();
width += rightSpace + lowerLeftSpace;
Style style = drawer.getStyleClone();
drawer.setBackgroundColor(ColorOwn.TRANSPARENT);
drawer.drawLines(new PointDouble(width, top), new PointDouble(width, heightOfTitle - corner), new PointDouble(width - corner, heightOfTitle), new PointDouble(lowerLeftSpace, heightOfTitle));
drawer.setStyle(style); // reset style to state before manipulations for drawing the template class
state.getBuffer().setTopMin(heightOfTitle);
double printHeightIter = textDistanceToTop;
for (String line : packageTitleResponse.getLines()) {
printHeightIter += drawer.textHeightMax();
drawer.print(line, lowerLeftSpace + drawer.getDistanceBorderToText(), printHeightIter, AlignHorizontal.LEFT);
}
}
}
}