2018-09-11 19:19:24 +02:00
|
|
|
package it.cavallium.warppi.gui.expression.blocks;
|
|
|
|
|
|
|
|
import it.cavallium.warppi.gui.expression.Caret;
|
|
|
|
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
|
|
|
|
import it.cavallium.warppi.gui.graphicengine.Renderer;
|
|
|
|
import it.cavallium.warppi.math.Function;
|
|
|
|
import it.cavallium.warppi.math.MathContext;
|
|
|
|
import it.cavallium.warppi.math.parser.features.FeaturePowerChar;
|
|
|
|
import it.cavallium.warppi.math.parser.features.interfaces.Feature;
|
2018-09-12 22:16:33 +02:00
|
|
|
import it.cavallium.warppi.util.Error;
|
2018-09-11 19:19:24 +02:00
|
|
|
|
|
|
|
public class BlockPower2 extends Block {
|
|
|
|
|
|
|
|
private final BlockContainer containerExponent;
|
|
|
|
|
|
|
|
public BlockPower2() {
|
|
|
|
containerExponent = new BlockContainer(true);
|
|
|
|
containerExponent.addBlock(0, new BlockNumericChar('2'));
|
|
|
|
recomputeDimensions();
|
|
|
|
}
|
2018-09-22 11:17:30 +02:00
|
|
|
|
2018-09-11 19:19:24 +02:00
|
|
|
@Override
|
|
|
|
public int getCaretDeltaPositionAfterCreation() {
|
|
|
|
return 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-09-22 11:17:30 +02:00
|
|
|
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
|
2018-09-11 19:19:24 +02:00
|
|
|
BlockContainer.getDefaultFont(true).use(ge);
|
|
|
|
r.glColor(BlockContainer.getDefaultColor());
|
|
|
|
containerExponent.draw(ge, r, x, y, caret);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-09-22 11:17:30 +02:00
|
|
|
public boolean putBlock(final Caret caret, final Block newBlock) {
|
2018-09-11 19:19:24 +02:00
|
|
|
boolean added = false;
|
|
|
|
added = added | containerExponent.putBlock(caret, newBlock);
|
2018-09-22 11:17:30 +02:00
|
|
|
if (added)
|
2018-09-11 19:19:24 +02:00
|
|
|
recomputeDimensions();
|
|
|
|
return added;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-09-22 11:17:30 +02:00
|
|
|
public boolean delBlock(final Caret caret) {
|
2018-09-11 19:19:24 +02:00
|
|
|
boolean removed = false;
|
|
|
|
removed = removed | containerExponent.delBlock(caret);
|
2018-09-22 11:17:30 +02:00
|
|
|
if (removed)
|
2018-09-11 19:19:24 +02:00
|
|
|
recomputeDimensions();
|
|
|
|
return removed;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-09-22 11:17:30 +02:00
|
|
|
public BlockReference<?> getBlock(final Caret caret) {
|
2018-09-11 19:19:24 +02:00
|
|
|
return containerExponent.getBlock(caret);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void recomputeDimensions() {
|
|
|
|
final int w2 = containerExponent.getWidth();
|
|
|
|
final int h2 = containerExponent.getHeight();
|
|
|
|
width = w2 + 1;
|
|
|
|
height = h2 + BlockContainer.getDefaultCharHeight(small) - 3;
|
|
|
|
line = h2 + BlockContainer.getDefaultCharHeight(small) / 2 - 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-09-22 11:17:30 +02:00
|
|
|
public void setSmall(final boolean small) {
|
2018-09-11 19:19:24 +02:00
|
|
|
this.small = small;
|
|
|
|
containerExponent.setSmall(true);
|
|
|
|
recomputeDimensions();
|
|
|
|
}
|
|
|
|
|
|
|
|
public BlockContainer getExponentContainer() {
|
|
|
|
return containerExponent;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int computeCaretMaxBound() {
|
|
|
|
return containerExponent.computeCaretMaxBound();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-09-22 11:17:30 +02:00
|
|
|
public Feature toFeature(final MathContext context) throws Error {
|
2018-09-11 19:19:24 +02:00
|
|
|
final Function exp = getExponentContainer().toFunction(context);
|
|
|
|
return new FeaturePowerChar(exp);
|
|
|
|
}
|
|
|
|
}
|