2016-09-19 18:48:27 +02:00
|
|
|
package org.warp.picalculator.math.functions;
|
2016-09-18 14:33:25 +02:00
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
2016-09-19 18:48:27 +02:00
|
|
|
import org.warp.picalculator.Error;
|
|
|
|
import org.warp.picalculator.Errors;
|
|
|
|
import org.warp.picalculator.Utils;
|
2017-01-31 22:29:49 +01:00
|
|
|
import org.warp.picalculator.gui.DisplayManager;
|
2017-02-02 10:30:45 +01:00
|
|
|
import org.warp.picalculator.gui.graphicengine.cpu.CPUEngine;
|
2017-02-14 20:02:03 +01:00
|
|
|
import org.warp.picalculator.math.MathContext;
|
|
|
|
import org.warp.picalculator.math.Function;
|
|
|
|
import org.warp.picalculator.math.FunctionOperator;
|
2016-09-19 18:48:27 +02:00
|
|
|
import org.warp.picalculator.math.MathematicalSymbols;
|
2016-11-25 22:40:43 +01:00
|
|
|
import org.warp.picalculator.math.rules.ExpandRule1;
|
|
|
|
import org.warp.picalculator.math.rules.NumberRule3;
|
|
|
|
import org.warp.picalculator.math.rules.NumberRule4;
|
|
|
|
import org.warp.picalculator.math.rules.NumberRule5;
|
2016-09-18 14:33:25 +02:00
|
|
|
|
2017-02-14 20:02:03 +01:00
|
|
|
public class SumSubtraction extends FunctionOperator {
|
2016-09-18 14:33:25 +02:00
|
|
|
|
2017-02-14 20:02:03 +01:00
|
|
|
public SumSubtraction(MathContext root, Function value1, Function value2) {
|
2017-01-17 22:32:40 +01:00
|
|
|
super(root, value1, value2);
|
2016-09-18 14:33:25 +02:00
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-12-04 22:22:16 +01:00
|
|
|
@Override
|
2017-02-14 20:02:03 +01:00
|
|
|
protected Function NewInstance(MathContext root, Function value1, Function value2) {
|
2017-01-17 22:32:40 +01:00
|
|
|
return new SumSubtraction(root, value1, value2);
|
2016-12-04 22:22:16 +01:00
|
|
|
}
|
2016-09-18 14:33:25 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getSymbol() {
|
|
|
|
return MathematicalSymbols.SUM_SUBTRACTION;
|
|
|
|
}
|
|
|
|
|
2016-10-02 16:01:41 +02:00
|
|
|
@Override
|
2016-11-25 22:40:43 +01:00
|
|
|
protected boolean isSolvable() {
|
2017-02-14 20:02:03 +01:00
|
|
|
if (parameter1 instanceof Number & parameter2 instanceof Number) {
|
2016-10-02 16:01:41 +02:00
|
|
|
return true;
|
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
if (NumberRule3.compare(this)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
if (ExpandRule1.compare(this)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
if (NumberRule4.compare(this)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
if (NumberRule5.compare(this)) {
|
|
|
|
return true;
|
|
|
|
}
|
2016-10-02 16:01:41 +02:00
|
|
|
return false;
|
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-09-18 14:33:25 +02:00
|
|
|
@Override
|
2016-12-04 22:22:16 +01:00
|
|
|
public ArrayList<Function> solve() throws Error {
|
2017-02-14 20:02:03 +01:00
|
|
|
if (parameter1 == null || parameter2 == null) {
|
2016-09-18 14:33:25 +02:00
|
|
|
throw new Error(Errors.SYNTAX_ERROR);
|
|
|
|
}
|
|
|
|
ArrayList<Function> result = new ArrayList<>();
|
2016-11-25 22:40:43 +01:00
|
|
|
if (NumberRule3.compare(this)) {
|
|
|
|
result = NumberRule3.execute(this);
|
|
|
|
} else if (ExpandRule1.compare(this)) {
|
|
|
|
result = ExpandRule1.execute(this);
|
|
|
|
} else if (NumberRule4.compare(this)) {
|
|
|
|
result = NumberRule4.execute(this);
|
|
|
|
} else if (NumberRule5.compare(this)) {
|
|
|
|
result = NumberRule5.execute(this);
|
2017-02-14 20:02:03 +01:00
|
|
|
} else if (parameter1.isSimplified() & parameter2.isSimplified()) {
|
|
|
|
result.add(((Number) parameter1).add((Number) parameter2));
|
|
|
|
result.add(((Number) parameter1).add(((Number) parameter2).multiply(new Number(mathContext, "-1"))));
|
2016-09-18 14:33:25 +02:00
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void generateGraphics() {
|
2017-02-14 20:02:03 +01:00
|
|
|
parameter1.setSmall(small);
|
|
|
|
parameter1.recomputeDimensions();
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2017-02-14 20:02:03 +01:00
|
|
|
parameter2.setSmall(small);
|
|
|
|
parameter2.recomputeDimensions();
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-09-18 14:33:25 +02:00
|
|
|
width = calcWidth();
|
|
|
|
height = calcHeight();
|
|
|
|
line = calcLine();
|
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-09-18 14:33:25 +02:00
|
|
|
@Override
|
2017-02-14 20:02:03 +01:00
|
|
|
public void draw(int x, int y, boolean small, int caretPos) {
|
2016-09-18 14:33:25 +02:00
|
|
|
// glColor3f(127, 127-50+new Random().nextInt(50), 255);
|
|
|
|
// glFillRect(x,y,width,height);
|
|
|
|
// glColor3f(0, 0, 0);
|
2017-01-31 22:29:49 +01:00
|
|
|
|
|
|
|
final int ln = getLine();
|
2016-09-18 14:33:25 +02:00
|
|
|
int dx = 0;
|
2017-02-14 20:02:03 +01:00
|
|
|
parameter1.draw(dx + x, ln - parameter1.getLine() + y, null, null);
|
|
|
|
dx += parameter1.getWidth();
|
2017-02-02 10:30:45 +01:00
|
|
|
Utils.getFont(small).use(DisplayManager.engine);
|
2016-09-18 14:33:25 +02:00
|
|
|
dx += 1;
|
2017-01-31 22:29:49 +01:00
|
|
|
DisplayManager.renderer.glDrawStringLeft(dx + x, ln - Utils.getFontHeight(small) / 2 + y, getSymbol());
|
2017-02-02 10:30:45 +01:00
|
|
|
dx += Utils.getFont(small).getStringWidth(getSymbol());
|
2017-02-14 20:02:03 +01:00
|
|
|
parameter2.draw(dx + x, ln - parameter2.getLine() + y, null, null);
|
2016-09-18 14:33:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getWidth() {
|
|
|
|
return width;
|
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-09-18 14:33:25 +02:00
|
|
|
@Override
|
|
|
|
protected int calcWidth() {
|
|
|
|
int dx = 0;
|
2017-02-14 20:02:03 +01:00
|
|
|
dx += parameter1.getWidth();
|
2016-09-18 14:33:25 +02:00
|
|
|
dx += 1;
|
2017-02-02 10:30:45 +01:00
|
|
|
dx += Utils.getFont(small).getStringWidth(getSymbol());
|
2017-02-14 20:02:03 +01:00
|
|
|
return dx += parameter2.getWidth();
|
2016-09-18 14:33:25 +02:00
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-11-25 22:40:43 +01:00
|
|
|
@Override
|
|
|
|
public boolean equals(Object o) {
|
|
|
|
if (o instanceof SumSubtraction) {
|
2017-02-14 20:02:03 +01:00
|
|
|
final FunctionOperator f = (FunctionOperator) o;
|
|
|
|
return parameter1.equals(f.parameter1) && parameter2.equals(f.parameter2);
|
2016-11-25 22:40:43 +01:00
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
2016-09-18 14:33:25 +02:00
|
|
|
}
|