changes
This commit is contained in:
parent
85b3dc7e52
commit
9ab192abaa
@ -12,7 +12,6 @@
|
|||||||
calc:textUp="ln"
|
calc:textUp="ln"
|
||||||
calc:textLeft="0b:"
|
calc:textLeft="0b:"
|
||||||
calc:textDown="lg"
|
calc:textDown="lg"
|
||||||
calc:directionTextScale="0.5"
|
calc:directionTextScale="0.5;0.5;0.5;0.33"
|
||||||
|
|
||||||
style="?digitButtonStyle"
|
style="?digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
@ -10,7 +10,7 @@
|
|||||||
a:id="@+id/fiveDigitButton"
|
a:id="@+id/fiveDigitButton"
|
||||||
a:text="5"
|
a:text="5"
|
||||||
calc:textUp="t"
|
calc:textUp="t"
|
||||||
calc:textLeft="e"
|
calc:textLeft="E"
|
||||||
calc:textDown="j"
|
calc:textDown="j"
|
||||||
style="?digitButtonStyle"
|
style="?digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
@ -10,7 +10,7 @@
|
|||||||
a:id="@+id/fourDigitButton"
|
a:id="@+id/fourDigitButton"
|
||||||
a:text="4"
|
a:text="4"
|
||||||
calc:textUp="x"
|
calc:textUp="x"
|
||||||
calc:textLeft="d"
|
calc:textLeft="D"
|
||||||
calc:textDown="y"
|
calc:textDown="y"
|
||||||
style="?digitButtonStyle"
|
style="?digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
@ -12,6 +12,6 @@
|
|||||||
calc:textDown="e"
|
calc:textDown="e"
|
||||||
calc:textLeft="0o:"
|
calc:textLeft="0o:"
|
||||||
calc:textUp="π"
|
calc:textUp="π"
|
||||||
calc:directionTextScale="0.5"
|
calc:directionTextScale="0.5;0.5;0.5;0.33"
|
||||||
style="?digitButtonStyle"
|
style="?digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
@ -11,7 +11,7 @@
|
|||||||
a:id="@+id/oneDigitButton"
|
a:id="@+id/oneDigitButton"
|
||||||
a:text="1"
|
a:text="1"
|
||||||
calc:textUp="sin"
|
calc:textUp="sin"
|
||||||
calc:textLeft="a"
|
calc:textLeft="A"
|
||||||
calc:textDown="asin"
|
calc:textDown="asin"
|
||||||
style="?digitButtonStyle"
|
style="?digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
@ -12,7 +12,6 @@
|
|||||||
calc:textUp="i"
|
calc:textUp="i"
|
||||||
calc:textLeft="0x:"
|
calc:textLeft="0x:"
|
||||||
calc:textDown="!"
|
calc:textDown="!"
|
||||||
calc:directionTextScale="0.5"
|
calc:directionTextScale="0.5;0.5;0.5;0.33"
|
||||||
|
|
||||||
style="?digitButtonStyle"
|
style="?digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
@ -11,7 +11,7 @@
|
|||||||
calc:textUp="deg"
|
calc:textUp="deg"
|
||||||
a:id="@+id/sixDigitButton"
|
a:id="@+id/sixDigitButton"
|
||||||
a:text="6"
|
a:text="6"
|
||||||
calc:textLeft="f"
|
calc:textLeft="F"
|
||||||
calc:textDown="rad"
|
calc:textDown="rad"
|
||||||
style="?digitButtonStyle"
|
style="?digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
@ -11,7 +11,7 @@
|
|||||||
a:id="@+id/threeDigitButton"
|
a:id="@+id/threeDigitButton"
|
||||||
a:text="3"
|
a:text="3"
|
||||||
calc:textUp="tan"
|
calc:textUp="tan"
|
||||||
calc:textLeft="c"
|
calc:textLeft="C"
|
||||||
calc:textDown="atan"
|
calc:textDown="atan"
|
||||||
style="?digitButtonStyle"
|
style="?digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
@ -11,7 +11,7 @@
|
|||||||
a:id="@+id/twoDigitButton"
|
a:id="@+id/twoDigitButton"
|
||||||
a:text="2"
|
a:text="2"
|
||||||
calc:textUp="cos"
|
calc:textUp="cos"
|
||||||
calc:textLeft="b"
|
calc:textLeft="B"
|
||||||
calc:textDown="acos"
|
calc:textDown="acos"
|
||||||
style="?digitButtonStyle"
|
style="?digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
@ -4,7 +4,7 @@
|
|||||||
<attr name="textUp" format="string"/>
|
<attr name="textUp" format="string"/>
|
||||||
<attr name="textDown" format="string"/>
|
<attr name="textDown" format="string"/>
|
||||||
<attr name="textLeft" format="string"/>
|
<attr name="textLeft" format="string"/>
|
||||||
<attr name="directionTextScale" format="float"/>
|
<attr name="directionTextScale" format="string"/>
|
||||||
<attr name="hTextPosition" format="float"/>
|
<attr name="hTextPosition" format="float"/>
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
<string name="p_drag_distance_key">org.solovyev.android.calculator.DragButtonCalibrationActivity_distance</string>
|
<string name="p_drag_distance_key">org.solovyev.android.calculator.DragButtonCalibrationActivity_distance</string>
|
||||||
<string name="p_drag_distance">15;350</string>
|
<string name="p_drag_distance">35;350</string>
|
||||||
|
|
||||||
<string name="p_drag_angle_key">org.solovyev.android.calculator.DragButtonCalibrationActivity_angle</string>
|
<string name="p_drag_angle_key">org.solovyev.android.calculator.DragButtonCalibrationActivity_angle</string>
|
||||||
<string name="p_drag_angle">0;45</string>
|
<string name="p_drag_angle">0;45</string>
|
||||||
|
@ -76,7 +76,7 @@
|
|||||||
a:title="@string/c_swipe_distance"
|
a:title="@string/c_swipe_distance"
|
||||||
a:summary="@string/c_swipe_distance_summary"
|
a:summary="@string/c_swipe_distance_summary"
|
||||||
a:text=" pxs"
|
a:text=" pxs"
|
||||||
a:defaultValue="15;350"
|
a:defaultValue="35;350"
|
||||||
range:steps="10"
|
range:steps="10"
|
||||||
range:boundaries="10;500"/>
|
range:boundaries="10;500"/>
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ public class TextHighlighter implements TextProcessor<TextHighlighter.Result, St
|
|||||||
i = processHighlightedText(text1, i, match, "b", null);
|
i = processHighlightedText(text1, i, match, "b", null);
|
||||||
break;
|
break;
|
||||||
case numeral_base:
|
case numeral_base:
|
||||||
i = processHighlightedText(text1, i, match, "font", nbFontAttributes);
|
i = processHighlightedText(text1, i, match, "b", null);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (mathType.getMathType() == MathType.text || match.length() <= 1) {
|
if (mathType.getMathType() == MathType.text || match.length() <= 1) {
|
||||||
|
@ -133,7 +133,7 @@ public enum CalculatorEngine {
|
|||||||
final PreparedExpression preparedExpression = preprocessor.process(expression);
|
final PreparedExpression preparedExpression = preprocessor.process(expression);
|
||||||
sb.append(preparedExpression);
|
sb.append(preparedExpression);
|
||||||
|
|
||||||
//Log.d(CalculatorEngine.class.getName(), "Preprocessed expression: " + preprocessedExpression);
|
//Log.d(CalculatorEngine.class.getName(), "Preprocessed expression: " + preparedExpression);
|
||||||
/*if (operation == JsclOperation.numeric && preparedExpression.isExistsUndefinedVar()) {
|
/*if (operation == JsclOperation.numeric && preparedExpression.isExistsUndefinedVar()) {
|
||||||
operation = JsclOperation.simplify;
|
operation = JsclOperation.simplify;
|
||||||
|
|
||||||
|
@ -6,7 +6,11 @@
|
|||||||
|
|
||||||
package org.solovyev.android.calculator.model;
|
package org.solovyev.android.calculator.model;
|
||||||
|
|
||||||
|
import jscl.MathEngine;
|
||||||
import jscl.NumeralBase;
|
import jscl.NumeralBase;
|
||||||
|
import jscl.math.numeric.Numeric;
|
||||||
|
import jscl.math.numeric.Real;
|
||||||
|
import jscl.text.*;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.solovyev.android.calculator.math.MathType;
|
import org.solovyev.android.calculator.math.MathType;
|
||||||
@ -105,6 +109,7 @@ public class NumberBuilder {
|
|||||||
public MathType.Result process(@NotNull StringBuilder sb, @Nullable MutableObject<Integer> numberOffset) {
|
public MathType.Result process(@NotNull StringBuilder sb, @Nullable MutableObject<Integer> numberOffset) {
|
||||||
int numberOfTokens = 0;
|
int numberOfTokens = 0;
|
||||||
|
|
||||||
|
final NumeralBase localNb;
|
||||||
if (numberBuilder != null) {
|
if (numberBuilder != null) {
|
||||||
try {
|
try {
|
||||||
number = numberBuilder.toString();
|
number = numberBuilder.toString();
|
||||||
@ -116,22 +121,26 @@ public class NumberBuilder {
|
|||||||
numberOfTokens += number.length() - newNumber.length();
|
numberOfTokens += number.length() - newNumber.length();
|
||||||
number = newNumber;
|
number = newNumber;
|
||||||
}
|
}
|
||||||
Double.valueOf(number);
|
|
||||||
|
toDouble(number, getNumeralBase());
|
||||||
|
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
number = null;
|
number = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
numberBuilder = null;
|
numberBuilder = null;
|
||||||
|
localNb = getNumeralBase();
|
||||||
nb = defaultNumeralBase;
|
nb = defaultNumeralBase;
|
||||||
} else {
|
} else {
|
||||||
number = null;
|
number = null;
|
||||||
|
localNb = getNumeralBase();
|
||||||
}
|
}
|
||||||
|
|
||||||
return replaceSystemVars(sb, number, numberOfTokens, numberOffset);
|
return replaceSystemVars(sb, number, numberOfTokens, numberOffset, localNb, simpleFormat);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private MathType.Result replaceSystemVars(StringBuilder sb, String number, int numberOfTokens, @Nullable MutableObject<Integer> numberOffset) {
|
private static MathType.Result replaceSystemVars(StringBuilder sb, String number, int numberOfTokens, @Nullable MutableObject<Integer> numberOffset, @NotNull NumeralBase nb, boolean simpleFormat) {
|
||||||
MathType.Result result = null;
|
MathType.Result result = null;
|
||||||
|
|
||||||
if (number != null) {
|
if (number != null) {
|
||||||
@ -156,13 +165,18 @@ public class NumberBuilder {
|
|||||||
int indexOfDot = number.indexOf('.');
|
int indexOfDot = number.indexOf('.');
|
||||||
|
|
||||||
if (indexOfDot < 0) {
|
if (indexOfDot < 0) {
|
||||||
int indexOfE = number.indexOf('E');
|
int indexOfE;
|
||||||
|
if (nb == NumeralBase.hex) {
|
||||||
|
indexOfE = -1;
|
||||||
|
} else {
|
||||||
|
indexOfE = number.indexOf('E');
|
||||||
|
}
|
||||||
if (indexOfE < 0) {
|
if (indexOfE < 0) {
|
||||||
formattedNumber = CalculatorEngine.instance.format(Double.valueOf(number), false);
|
formattedNumber = Numeric.toString(toDouble(number, nb), nb);
|
||||||
} else {
|
} else {
|
||||||
final String part;
|
final String part;
|
||||||
if (indexOfDot != 0) {
|
if (indexOfDot != 0) {
|
||||||
part = CalculatorEngine.instance.format(Double.valueOf(number.substring(0, indexOfE)), false);
|
part = Numeric.toString(toDouble(number.substring(0, indexOfE), nb), nb);
|
||||||
} else {
|
} else {
|
||||||
part = "";
|
part = "";
|
||||||
}
|
}
|
||||||
@ -171,14 +185,14 @@ public class NumberBuilder {
|
|||||||
} else {
|
} else {
|
||||||
final String integerPart;
|
final String integerPart;
|
||||||
if (indexOfDot != 0) {
|
if (indexOfDot != 0) {
|
||||||
integerPart = CalculatorEngine.instance.format(Double.valueOf(number.substring(0, indexOfDot)), false);
|
integerPart = Numeric.toString(toDouble(number.substring(0, indexOfDot), nb), nb);
|
||||||
} else {
|
} else {
|
||||||
integerPart = "";
|
integerPart = "";
|
||||||
}
|
}
|
||||||
formattedNumber = integerPart + number.substring(indexOfDot);
|
formattedNumber = integerPart + number.substring(indexOfDot);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
formattedNumber = CalculatorEngine.instance.format(Double.valueOf(number), true);
|
formattedNumber = Numeric.toString(toDouble(number, nb), nb);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (numberOffset != null) {
|
if (numberOffset != null) {
|
||||||
@ -192,6 +206,35 @@ public class NumberBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isHexMode() {
|
public boolean isHexMode() {
|
||||||
return nb == NumeralBase.hex;
|
return nb == NumeralBase.hex || ( nb == null && defaultNumeralBase == NumeralBase.hex);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private NumeralBase getNumeralBase(){
|
||||||
|
return nb == null ? defaultNumeralBase : nb;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private static Double toDouble(@NotNull String s, @NotNull NumeralBase nb) throws NumberFormatException{
|
||||||
|
|
||||||
|
final MathEngine me = CalculatorEngine.instance.getEngine();
|
||||||
|
|
||||||
|
final NumeralBase defaultNb = me.getNumeralBase();
|
||||||
|
try {
|
||||||
|
me.setNumeralBase(nb);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return JsclIntegerParser.parser.parse(Parser.Parameters.newInstance(s, new MutableInt(0), me), null).content().doubleValue();
|
||||||
|
} catch (ParseException e) {
|
||||||
|
try {
|
||||||
|
return ((Real) DoubleParser.parser.parse(Parser.Parameters.newInstance(s, new MutableInt(0), me), null).content()).doubleValue();
|
||||||
|
} catch (ParseException e1) {
|
||||||
|
throw new NumberFormatException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
me.setNumeralBase(defaultNb);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,10 +15,14 @@ import android.util.AttributeSet;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.solovyev.android.calculator.R;
|
import org.solovyev.android.calculator.R;
|
||||||
|
import org.solovyev.common.NumberParser;
|
||||||
|
import org.solovyev.common.utils.CollectionsUtils;
|
||||||
import org.solovyev.common.utils.Point2d;
|
import org.solovyev.common.utils.Point2d;
|
||||||
import org.solovyev.common.utils.StringUtils;
|
import org.solovyev.common.utils.StringUtils;
|
||||||
|
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -29,7 +33,10 @@ import java.util.Map;
|
|||||||
public class DirectionDragButton extends DragButton {
|
public class DirectionDragButton extends DragButton {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private final static Float DEFAULT_DIRECTION_TEXT_SCALE = 0.33f;
|
private final static Float DEFAULT_DIRECTION_TEXT_SCALE_FLOAT = 0.33f;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private final static String DEFAULT_DIRECTION_TEXT_SCALE = "0.33;0.33;0.33;0.33";
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private String textMiddle;
|
private String textMiddle;
|
||||||
@ -48,6 +55,9 @@ public class DirectionDragButton extends DragButton {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private TextPaint paint;
|
private TextPaint paint;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private Float textScale;
|
||||||
|
|
||||||
private DirectionTextData(@NotNull GuiDragDirection guiDragDirection, @NotNull String text) {
|
private DirectionTextData(@NotNull GuiDragDirection guiDragDirection, @NotNull String text) {
|
||||||
this.guiDragDirection = guiDragDirection;
|
this.guiDragDirection = guiDragDirection;
|
||||||
this.text = text;
|
this.text = text;
|
||||||
@ -84,10 +94,19 @@ public class DirectionDragButton extends DragButton {
|
|||||||
public void setPaint(@NotNull TextPaint paint) {
|
public void setPaint(@NotNull TextPaint paint) {
|
||||||
this.paint = paint;
|
this.paint = paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public Float getTextScale() {
|
||||||
|
return textScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTextScale(@NotNull Float textScale) {
|
||||||
|
this.textScale = textScale;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static enum GuiDragDirection {
|
protected static enum GuiDragDirection {
|
||||||
up(DragDirection.up) {
|
up(DragDirection.up, 0) {
|
||||||
@Override
|
@Override
|
||||||
public int getAttributeId() {
|
public int getAttributeId() {
|
||||||
return R.styleable.DragButton_textUp;
|
return R.styleable.DragButton_textUp;
|
||||||
@ -99,7 +118,7 @@ public class DirectionDragButton extends DragButton {
|
|||||||
return getUpDownTextPosition(paint, basePaint, text, baseText, 1, w, h);
|
return getUpDownTextPosition(paint, basePaint, text, baseText, 1, w, h);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
down(DragDirection.down) {
|
down(DragDirection.down, 2) {
|
||||||
@Override
|
@Override
|
||||||
public int getAttributeId() {
|
public int getAttributeId() {
|
||||||
return R.styleable.DragButton_textDown;
|
return R.styleable.DragButton_textDown;
|
||||||
@ -111,7 +130,7 @@ public class DirectionDragButton extends DragButton {
|
|||||||
return getUpDownTextPosition(paint, basePaint, text, baseText, -1, w, h);
|
return getUpDownTextPosition(paint, basePaint, text, baseText, -1, w, h);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
left(DragDirection.left) {
|
left(DragDirection.left, 3) {
|
||||||
@Override
|
@Override
|
||||||
public int getAttributeId() {
|
public int getAttributeId() {
|
||||||
return R.styleable.DragButton_textLeft;
|
return R.styleable.DragButton_textLeft;
|
||||||
@ -134,7 +153,7 @@ public class DirectionDragButton extends DragButton {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}/*,
|
}/*,
|
||||||
right(DragDirection.right) {
|
right(DragDirection.right, 1) {
|
||||||
@Override
|
@Override
|
||||||
public int getAttributeId() {
|
public int getAttributeId() {
|
||||||
return 0;
|
return 0;
|
||||||
@ -144,12 +163,19 @@ public class DirectionDragButton extends DragButton {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private final DragDirection dragDirection;
|
private final DragDirection dragDirection;
|
||||||
|
|
||||||
GuiDragDirection(@NotNull DragDirection dragDirection) {
|
private final int attributePosition;
|
||||||
|
|
||||||
|
GuiDragDirection(@NotNull DragDirection dragDirection, int attributePosition) {
|
||||||
this.dragDirection = dragDirection;
|
this.dragDirection = dragDirection;
|
||||||
|
this.attributePosition = attributePosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract int getAttributeId();
|
public abstract int getAttributeId();
|
||||||
|
|
||||||
|
public int getAttributePosition() {
|
||||||
|
return attributePosition;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public abstract Point2d getTextPosition(@NotNull Paint paint, @NotNull Paint basePaint, @NotNull CharSequence text, CharSequence baseText, int w, int h);
|
public abstract Point2d getTextPosition(@NotNull Paint paint, @NotNull Paint basePaint, @NotNull CharSequence text, CharSequence baseText, int w, int h);
|
||||||
|
|
||||||
@ -188,7 +214,7 @@ public class DirectionDragButton extends DragButton {
|
|||||||
private final Map<GuiDragDirection, DirectionTextData> directionTextDataMap = new EnumMap<GuiDragDirection, DirectionTextData>(GuiDragDirection.class);
|
private final Map<GuiDragDirection, DirectionTextData> directionTextDataMap = new EnumMap<GuiDragDirection, DirectionTextData>(GuiDragDirection.class);
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private Float directionTextScale = DEFAULT_DIRECTION_TEXT_SCALE;
|
private String directionTextScale = DEFAULT_DIRECTION_TEXT_SCALE;
|
||||||
|
|
||||||
private boolean initialized = false;
|
private boolean initialized = false;
|
||||||
|
|
||||||
@ -210,7 +236,7 @@ public class DirectionDragButton extends DragButton {
|
|||||||
if (!StringUtils.isEmpty(attrValue)) {
|
if (!StringUtils.isEmpty(attrValue)) {
|
||||||
switch (attr) {
|
switch (attr) {
|
||||||
case R.styleable.DragButton_directionTextScale:
|
case R.styleable.DragButton_directionTextScale:
|
||||||
this.directionTextScale = Float.valueOf(attrValue);
|
this.directionTextScale = attrValue;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// try drag direction text
|
// try drag direction text
|
||||||
@ -225,6 +251,13 @@ public class DirectionDragButton extends DragButton {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (Map.Entry<GuiDragDirection, Float> entry : getDirectionTextScales().entrySet()) {
|
||||||
|
final DirectionTextData dtd = directionTextDataMap.get(entry.getKey());
|
||||||
|
if (dtd != null) {
|
||||||
|
dtd.setTextScale(entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// backup text
|
// backup text
|
||||||
this.textMiddle = String.valueOf(getText());
|
this.textMiddle = String.valueOf(getText());
|
||||||
|
|
||||||
@ -275,7 +308,7 @@ public class DirectionDragButton extends DragButton {
|
|||||||
|
|
||||||
directionTextPaint.setColor(resources.getColor(R.color.button_text_color));
|
directionTextPaint.setColor(resources.getColor(R.color.button_text_color));
|
||||||
directionTextPaint.setAlpha(getDefaultDirectionTextAlpha());
|
directionTextPaint.setAlpha(getDefaultDirectionTextAlpha());
|
||||||
directionTextPaint.setTextSize(basePaint.getTextSize() * getDirectionTextScale());
|
directionTextPaint.setTextSize(basePaint.getTextSize() * directionTextData.getTextScale());
|
||||||
|
|
||||||
directionTextData.setPaint(directionTextPaint);
|
directionTextData.setPaint(directionTextPaint);
|
||||||
}
|
}
|
||||||
@ -313,8 +346,35 @@ public class DirectionDragButton extends DragButton {
|
|||||||
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Float getDirectionTextScale() {
|
public String getDirectionTextScale() {
|
||||||
return directionTextScale;
|
return directionTextScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private Map<GuiDragDirection, Float> getDirectionTextScales() {
|
||||||
|
final List<Float> scales = CollectionsUtils.split(getDirectionTextScale(), ";", new NumberParser<Float>(Float.class));
|
||||||
|
|
||||||
|
final Map<GuiDragDirection, Float> result = new HashMap<GuiDragDirection, Float>();
|
||||||
|
for (GuiDragDirection guiDragDirection : GuiDragDirection.values()) {
|
||||||
|
result.put(guiDragDirection, DEFAULT_DIRECTION_TEXT_SCALE_FLOAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (scales.size() == 1) {
|
||||||
|
final Float scale = scales.get(0);
|
||||||
|
for (Map.Entry<GuiDragDirection, Float> entry : result.entrySet()) {
|
||||||
|
entry.setValue(scale);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < scales.size(); i++) {
|
||||||
|
for (GuiDragDirection guiDragDirection : GuiDragDirection.values()) {
|
||||||
|
if (guiDragDirection.getAttributePosition() == i) {
|
||||||
|
result.put(guiDragDirection, scales.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,11 @@
|
|||||||
package org.solovyev.android.calculator;
|
package org.solovyev.android.calculator;
|
||||||
|
|
||||||
import jscl.JsclMathEngine;
|
import jscl.JsclMathEngine;
|
||||||
|
import jscl.MathEngine;
|
||||||
|
import jscl.NumeralBase;
|
||||||
import junit.framework.Assert;
|
import junit.framework.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.solovyev.android.calculator.model.CalculatorEngine;
|
||||||
import org.solovyev.android.calculator.model.TextProcessor;
|
import org.solovyev.android.calculator.model.TextProcessor;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -23,7 +26,7 @@ public class TextHighlighterTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testProcess() throws Exception {
|
public void testProcess() throws Exception {
|
||||||
TextProcessor textHighlighter = new TextHighlighter(0, true, JsclMathEngine.instance);
|
TextProcessor<?, String> textHighlighter = new TextHighlighter(0, true, JsclMathEngine.instance);
|
||||||
|
|
||||||
final Random random = new Random(new Date().getTime());
|
final Random random = new Random(new Date().getTime());
|
||||||
for (int i = 0; i < 1000; i++) {
|
for (int i = 0; i < 1000; i++) {
|
||||||
@ -48,7 +51,7 @@ public class TextHighlighterTest {
|
|||||||
textHighlighter = new TextHighlighter(0, false, JsclMathEngine.instance);
|
textHighlighter = new TextHighlighter(0, false, JsclMathEngine.instance);
|
||||||
Assert.assertEquals("0.1E3", textHighlighter.process("0.1E3").toString());
|
Assert.assertEquals("0.1E3", textHighlighter.process("0.1E3").toString());
|
||||||
Assert.assertEquals("1E3", textHighlighter.process("1E3").toString());
|
Assert.assertEquals("1E3", textHighlighter.process("1E3").toString());
|
||||||
Assert.assertEquals("2<font color=\"#008000\">0x:</font>", textHighlighter.process("20x:").toString());
|
Assert.assertEquals("2<b>0x:</b>", textHighlighter.process("20x:").toString());
|
||||||
Assert.assertEquals("20x", textHighlighter.process("20x").toString());
|
Assert.assertEquals("20x", textHighlighter.process("20x").toString());
|
||||||
Assert.assertEquals("22x", textHighlighter.process("22x").toString());
|
Assert.assertEquals("22x", textHighlighter.process("22x").toString());
|
||||||
Assert.assertEquals("20t", textHighlighter.process("20t").toString());
|
Assert.assertEquals("20t", textHighlighter.process("20t").toString());
|
||||||
@ -73,5 +76,55 @@ public class TextHighlighterTest {
|
|||||||
Assert.assertEquals("<font color=\"#000000\"><i>sin</i>(</font><font color=\"#ffff9a\">2</font><font color=\"#000000\">)</font>", textHighlighter.process("sin(2)").toString());
|
Assert.assertEquals("<font color=\"#000000\"><i>sin</i>(</font><font color=\"#ffff9a\">2</font><font color=\"#000000\">)</font>", textHighlighter.process("sin(2)").toString());
|
||||||
Assert.assertEquals("<font color=\"#000000\"><i>atanh</i>(</font><font color=\"#ffff9a\">2</font><font color=\"#000000\">)</font>", textHighlighter.process("atanh(2)").toString());
|
Assert.assertEquals("<font color=\"#000000\"><i>atanh</i>(</font><font color=\"#ffff9a\">2</font><font color=\"#000000\">)</font>", textHighlighter.process("atanh(2)").toString());
|
||||||
|
|
||||||
|
|
||||||
|
Assert.assertEquals("<b>0x:</b>E", textHighlighter.process("0x:E").toString());
|
||||||
|
Assert.assertEquals("<b>0x:</b>6F", textHighlighter.process("0x:6F").toString());
|
||||||
|
Assert.assertEquals("<b>0x:</b>6F", textHighlighter.process("0x:6F.").toString());
|
||||||
|
Assert.assertEquals("<b>0x:</b>6F", textHighlighter.process("0x:6F.2").toString());
|
||||||
|
Assert.assertEquals("<b>0x:</b>6F", textHighlighter.process("0x:6F.B").toString());
|
||||||
|
Assert.assertEquals("<b>0x:</b>6F", textHighlighter.process("0x:006F.B").toString());
|
||||||
|
Assert.assertEquals("<b>0x:</b>0", textHighlighter.process("0x:0").toString());
|
||||||
|
Assert.assertEquals("<b>0x:</b>FF33233FFE", textHighlighter.process("0x:FF33233FFE").toString());
|
||||||
|
Assert.assertEquals("<b>0x:</b>FF33233FFE", textHighlighter.process("0x:FF33 233 FFE").toString());
|
||||||
|
|
||||||
|
final MathEngine me = CalculatorEngine.instance.getEngine();
|
||||||
|
try {
|
||||||
|
me.setNumeralBase(NumeralBase.hex);
|
||||||
|
Assert.assertEquals("E", textHighlighter.process("E").toString());
|
||||||
|
Assert.assertEquals(".E", textHighlighter.process(".E").toString());
|
||||||
|
Assert.assertEquals("E", textHighlighter.process("E.").toString());
|
||||||
|
Assert.assertEquals(".E.", textHighlighter.process(".E.").toString());
|
||||||
|
Assert.assertEquals("6F", textHighlighter.process("6F").toString());
|
||||||
|
Assert.assertEquals("6F", textHighlighter.process("6F").toString());
|
||||||
|
Assert.assertEquals("6F", textHighlighter.process("6F.").toString());
|
||||||
|
Assert.assertEquals("6F", textHighlighter.process("6F.2").toString());
|
||||||
|
Assert.assertEquals("6F", textHighlighter.process("6F.B").toString());
|
||||||
|
Assert.assertEquals("6F", textHighlighter.process("006F.B").toString());
|
||||||
|
} finally {
|
||||||
|
me.setNumeralBase(NumeralBase.dec);
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.assertEquals("<b>0b:</b>110101", textHighlighter.process("0b:110101").toString());
|
||||||
|
Assert.assertEquals("<b>0b:</b>110101", textHighlighter.process("0b:110101.").toString());
|
||||||
|
Assert.assertEquals("<b>0b:</b>110101", textHighlighter.process("0b:110101.101").toString());
|
||||||
|
Assert.assertEquals("<b>0b:</b>11010100", textHighlighter.process("0b:11010100.1").toString());
|
||||||
|
Assert.assertEquals("<b>0b:</b>110101", textHighlighter.process("0b:110101.0").toString());
|
||||||
|
Assert.assertEquals("<b>0b:</b>0", textHighlighter.process("0b:0").toString());
|
||||||
|
Assert.assertEquals("<b>0b:</b>1010100101111010101001", textHighlighter.process("0b:1010100101111010101001").toString());
|
||||||
|
Assert.assertEquals("<b>0b:</b>1010100101111010101001", textHighlighter.process("0b:101 010 01 0 111 1 0 10101001").toString());
|
||||||
|
|
||||||
|
try {
|
||||||
|
me.setNumeralBase(NumeralBase.bin);
|
||||||
|
Assert.assertEquals("110101", textHighlighter.process("110101").toString());
|
||||||
|
Assert.assertEquals("110101", textHighlighter.process("110101.").toString());
|
||||||
|
Assert.assertEquals("110101", textHighlighter.process("110101.101").toString());
|
||||||
|
Assert.assertEquals("11010100", textHighlighter.process("11010100.1").toString());
|
||||||
|
Assert.assertEquals("110101", textHighlighter.process("110101.0").toString());
|
||||||
|
Assert.assertEquals("0", textHighlighter.process("0").toString());
|
||||||
|
Assert.assertEquals("1010100101111010101001", textHighlighter.process("1010100101111010101001").toString());
|
||||||
|
Assert.assertEquals("1010100101111010101001", textHighlighter.process("101 010 01 0 111 1 0 10101001").toString());
|
||||||
|
} finally {
|
||||||
|
me.setNumeralBase(NumeralBase.dec);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -367,12 +367,12 @@ public class CalculatorEngineTest {
|
|||||||
public void testNumeralSystems() throws Exception {
|
public void testNumeralSystems() throws Exception {
|
||||||
final CalculatorEngine cm = CalculatorEngine.instance;
|
final CalculatorEngine cm = CalculatorEngine.instance;
|
||||||
|
|
||||||
Assert.assertEquals("11 259 375", cm.evaluate(JsclOperation.numeric, "0x:abcdef").getResult());
|
Assert.assertEquals("11 259 375", cm.evaluate(JsclOperation.numeric, "0x:ABCDEF").getResult());
|
||||||
Assert.assertEquals("30 606 154.462", cm.evaluate(JsclOperation.numeric, "0x:abcdef*e").getResult());
|
Assert.assertEquals("30 606 154.462", cm.evaluate(JsclOperation.numeric, "0x:ABCDEF*e").getResult());
|
||||||
Assert.assertEquals("30 606 154.462", cm.evaluate(JsclOperation.numeric, "e*0x:abcdef").getResult());
|
Assert.assertEquals("30 606 154.462", cm.evaluate(JsclOperation.numeric, "e*0x:ABCDEF").getResult());
|
||||||
Assert.assertEquals("2.718", cm.evaluate(JsclOperation.numeric, "e*0x:abcdef/0x:abcdef").getResult());
|
Assert.assertEquals("2.718", cm.evaluate(JsclOperation.numeric, "e*0x:ABCDEF/0x:ABCDEF").getResult());
|
||||||
Assert.assertEquals("30 606 154.462", cm.evaluate(JsclOperation.numeric, "0x:abcdef*e*0x:abcdef/0x:abcdef").getResult());
|
Assert.assertEquals("30 606 154.462", cm.evaluate(JsclOperation.numeric, "0x:ABCDEF*e*0x:ABCDEF/0x:ABCDEF").getResult());
|
||||||
Assert.assertEquals("30 606 154.462", cm.evaluate(JsclOperation.numeric, "c+0x:abcdef*e*0x:abcdef/0x:abcdef-c+0x:c-0x:c").getResult());
|
Assert.assertEquals("30 606 154.462", cm.evaluate(JsclOperation.numeric, "c+0x:ABCDEF*e*0x:ABCDEF/0x:ABCDEF-c+0x:C-0x:C").getResult());
|
||||||
Assert.assertEquals("1 446 257 064 651.832", cm.evaluate(JsclOperation.numeric, "28*28 * sin(28) - 0b:1101 + √(28) + exp ( 28) ").getResult());
|
Assert.assertEquals("1 446 257 064 651.832", cm.evaluate(JsclOperation.numeric, "28*28 * sin(28) - 0b:1101 + √(28) + exp ( 28) ").getResult());
|
||||||
Assert.assertEquals("13", cm.evaluate(JsclOperation.numeric, "0b:1101").getResult());
|
Assert.assertEquals("13", cm.evaluate(JsclOperation.numeric, "0b:1101").getResult());
|
||||||
|
|
||||||
@ -388,7 +388,8 @@ public class CalculatorEngineTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cm.getEngine().setNumeralBase(NumeralBase.hex);
|
cm.getEngine().setNumeralBase(NumeralBase.hex);
|
||||||
Assert.assertEquals("637b", cm.evaluate(JsclOperation.numeric, "56ce+cad").getResult());
|
Assert.assertEquals("637B", cm.evaluate(JsclOperation.numeric, "56CE+CAD").getResult());
|
||||||
|
Assert.assertEquals("E", cm.evaluate(JsclOperation.numeric, "E").getResult());
|
||||||
} finally {
|
} finally {
|
||||||
cm.setNumeralBase(defaultNumeralBase);
|
cm.setNumeralBase(defaultNumeralBase);
|
||||||
}
|
}
|
||||||
|
@ -49,9 +49,9 @@ public class NumeralBaseTest {
|
|||||||
testExpression(line, new Expression2());
|
testExpression(line, new Expression2());
|
||||||
testExpression(line, new Expression3());
|
testExpression(line, new Expression3());
|
||||||
|
|
||||||
final String dec = line[0];
|
final String dec = line[0].toUpperCase();
|
||||||
final String hex = "0x:" + line[1];
|
final String hex = "0x:" + line[1].toUpperCase();
|
||||||
final String bin = "0b:" + line[2];
|
final String bin = "0b:" + line[2].toUpperCase();
|
||||||
|
|
||||||
final List<String> input = new ArrayList<String>();
|
final List<String> input = new ArrayList<String>();
|
||||||
input.add(dec);
|
input.add(dec);
|
||||||
@ -93,9 +93,9 @@ public class NumeralBaseTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void testExpression(@NotNull String[] line, @NotNull Converter<String, String> converter) throws ParseException, CalculatorEvalException, CalculatorParseException {
|
public static void testExpression(@NotNull String[] line, @NotNull Converter<String, String> converter) throws ParseException, CalculatorEvalException, CalculatorParseException {
|
||||||
final String dec = line[0];
|
final String dec = line[0].toUpperCase();
|
||||||
final String hex = "0x:" + line[1];
|
final String hex = "0x:" + line[1].toUpperCase();
|
||||||
final String bin = "0b:" + line[2];
|
final String bin = "0b:" + line[2].toUpperCase();
|
||||||
|
|
||||||
final String decExpression = converter.convert(dec);
|
final String decExpression = converter.convert(dec);
|
||||||
final String decResult = CalculatorEngine.instance.evaluate(JsclOperation.numeric, decExpression).getResult();
|
final String decResult = CalculatorEngine.instance.evaluate(JsclOperation.numeric, decExpression).getResult();
|
||||||
|
@ -62,18 +62,24 @@ public class ToJsclTextProcessorTest {
|
|||||||
Assert.assertEquals( "E(-1.2)", preprocessor.process("E(-1.2)").toString());
|
Assert.assertEquals( "E(-1.2)", preprocessor.process("E(-1.2)").toString());
|
||||||
Assert.assertEquals( "EE", preprocessor.process("EE").toString());
|
Assert.assertEquals( "EE", preprocessor.process("EE").toString());
|
||||||
|
|
||||||
Assert.assertEquals( "0x:abcdef", preprocessor.process("0x:abcdef").toString());
|
try {
|
||||||
Assert.assertEquals( "0x:abcdef", preprocessor.process("0x:a bc def").toString());
|
CalculatorEngine.instance.getEngine().setNumeralBase(NumeralBase.hex);
|
||||||
Assert.assertEquals( "0x:abcdef", preprocessor.process("0x:a bc def").toString());
|
Assert.assertEquals( "22F*exp(F)", preprocessor.process("22Fexp(F)").toString());
|
||||||
Assert.assertEquals( "0x:abcdef*0*x", preprocessor.process("0x:a bc def*0x").toString());
|
} finally {
|
||||||
Assert.assertEquals( "0x:abcdef001*0*x", preprocessor.process("0x:a bc def001*0x").toString());
|
CalculatorEngine.instance.getEngine().setNumeralBase(NumeralBase.dec);
|
||||||
Assert.assertEquals( "0x:abcdef001*0*c", preprocessor.process("0x:a bc def001*0c").toString());
|
}
|
||||||
Assert.assertEquals( "0x:abcdef001*c", preprocessor.process("0x:a bc def001*c").toString());
|
Assert.assertEquals( "0x:ABCDEF", preprocessor.process("0x:ABCDEF").toString());
|
||||||
|
Assert.assertEquals( "0x:ABCDEF", preprocessor.process("0x:A BC DEF").toString());
|
||||||
|
Assert.assertEquals( "0x:ABCDEF", preprocessor.process("0x:A BC DEF").toString());
|
||||||
|
Assert.assertEquals( "0x:ABCDEF*0*x", preprocessor.process("0x:A BC DEF*0x").toString());
|
||||||
|
Assert.assertEquals( "0x:ABCDEF001*0*x", preprocessor.process("0x:A BC DEF001*0x").toString());
|
||||||
|
Assert.assertEquals( "0x:ABCDEF001*0*c", preprocessor.process("0x:A BC DEF001*0c").toString());
|
||||||
|
Assert.assertEquals( "0x:ABCDEF001*c", preprocessor.process("0x:A BC DEF001*c").toString());
|
||||||
Assert.assertEquals( "0b:1101", preprocessor.process("0b:1101").toString());
|
Assert.assertEquals( "0b:1101", preprocessor.process("0b:1101").toString());
|
||||||
Assert.assertEquals( "0x:1c", preprocessor.process("0x:1c").toString());
|
Assert.assertEquals( "0x:1C", preprocessor.process("0x:1C").toString());
|
||||||
Assert.assertEquals( "0x:1c", preprocessor.process(" 0x:1c").toString());
|
Assert.assertEquals( "0x:1C", preprocessor.process(" 0x:1C").toString());
|
||||||
Assert.assertEquals( "0x:1c*0x:1c*sin(0x:1c)-0b:1101+√(0x:1c)+exp(0x:1c)", preprocessor.process("0x:1c*0x:1c * sin(0x:1c) - 0b:1101 + √(0x:1c) + exp ( 0x:1c)").toString());
|
Assert.assertEquals( "0x:1C*0x:1C*sin(0x:1C)-0b:1101+√(0x:1C)+exp(0x:1C)", preprocessor.process("0x:1C*0x:1C * sin(0x:1C) - 0b:1101 + √(0x:1C) + exp ( 0x:1C)").toString());
|
||||||
Assert.assertEquals( "0x:1c*0x:1c*sin(0x:1c)-0b:1101+√(0x:1c)+exp(0x:1c)", preprocessor.process("0x:1c*0x:1c * sin(0x:1c) - 0b:1101 + √(0x:1c) + exp ( 0x:1c)").toString());
|
Assert.assertEquals( "0x:1C*0x:1C*sin(0x:1C)-0b:1101+√(0x:1C)+exp(0x:1C)", preprocessor.process("0x:1C*0x:1C * sin(0x:1C) - 0b:1101 + √(0x:1C) + exp ( 0x:1C)").toString());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
preprocessor.process("ln()");
|
preprocessor.process("ln()");
|
||||||
@ -147,7 +153,7 @@ public class ToJsclTextProcessorTest {
|
|||||||
Assert.assertEquals("101", JsclMathEngine.instance.evaluate("10+11"));
|
Assert.assertEquals("101", JsclMathEngine.instance.evaluate("10+11"));
|
||||||
|
|
||||||
JsclMathEngine.instance.setNumeralBase(NumeralBase.hex);
|
JsclMathEngine.instance.setNumeralBase(NumeralBase.hex);
|
||||||
Assert.assertEquals("56ce+cad", processor.process("56ce+cad").getExpression());
|
Assert.assertEquals("56CE+CAD", processor.process("56CE+CAD").getExpression());
|
||||||
} finally {
|
} finally {
|
||||||
JsclMathEngine.instance.setNumeralBase(defaultNumeralBase);
|
JsclMathEngine.instance.setNumeralBase(defaultNumeralBase);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user