package xapi.jre.ui.impl.feature;
import com.github.javaparser.ASTHelper;
import com.github.javaparser.ast.expr.UiAttrExpr;
import javafx.geometry.Pos;
import xapi.dev.source.MethodBuffer;
import xapi.dev.ui.ContainerMetadata;
import xapi.dev.ui.UiComponentGenerator;
import xapi.dev.ui.UiFeatureGenerator;
import xapi.dev.ui.UiGeneratorTools;
import xapi.dev.ui.UiVisitScope;
/**
* Created by James X. Nelson (james @wetheinter.net) on 7/1/16.
*/
public class JavaFxAlignFeatureGenerator extends UiFeatureGenerator {
@Override
public UiVisitScope startVisit(
UiGeneratorTools service, UiComponentGenerator generator, ContainerMetadata container, UiAttrExpr attr
) {
String panel = container.peekPanelName();
final MethodBuffer mb = container.getMethod(panel);
final String align = container.getUi().getAttribute("align")
.map(ASTHelper::extractAttrValue)
.orElse("center").toLowerCase();
// default align in javafx is ugly; only use it if null is explicitly sent.
if (!"null".equals(align)) {
String pos = mb.addImport(Pos.class);
mb.print(panel + ".setAlignment(" + pos + ".");
switch (align) {
case "center":
mb.println(Pos.CENTER + ");");
break;
case "centerLeft":
mb.println(Pos.CENTER_LEFT + ");");
break;
case "centerRight":
mb.println(Pos.CENTER_RIGHT + ");");
break;
case "top":
mb.println(Pos.TOP_CENTER + ");");
break;
case "topLeft":
mb.println(Pos.TOP_LEFT + ");");
break;
case "topRight":
mb.println(Pos.TOP_RIGHT + ");");
break;
case "bottom":
mb.println(Pos.BOTTOM_CENTER + ");");
break;
case "bottomLeft":
mb.println(Pos.BOTTOM_LEFT + ");");
break;
case "bottomRight":
mb.println(Pos.BOTTOM_RIGHT + ");");
break;
case "left":
mb.println(Pos.BASELINE_LEFT + ");");
break;
case "right":
mb.println(Pos.BASELINE_RIGHT + ");");
break;
case "middle":
mb.println(Pos.BASELINE_CENTER + ");");
break;
default:
throw new IllegalArgumentException("Unacceptable align attribute value: " + align);
}
}
return super.startVisit(service, generator, container, attr);
}
}