android_calculator-15: Add numeral systems

This commit is contained in:
Sergey Solovyev 2011-12-06 16:32:10 +04:00
parent d7935db77b
commit 04b7fcfd4c
7 changed files with 50 additions and 4 deletions

View File

@ -102,7 +102,14 @@
<string name="p_rad">Радианы</string> <string name="p_rad">Радианы</string>
<string name="p_grad">Грады</string> <string name="p_grad">Грады</string>
<string name="p_turns">Обороты</string> <string name="p_turns">Обороты</string>
<string name="c_angle_units_summary">Определяет единицы измерения углов.</string> <string name="c_angle_units_summary">Устанавливает единицы измерения углов.</string>
<string name="c_calc_numeral_bases">Системы счичления</string>
<string name="c_numeral_bases_summary">Устанавливает систему счисления для всех вводимых чисел.</string>
<string name="p_dec">Десятичная</string>
<string name="p_hex">Шестнадцатеричная</string>
<string name="p_oct">Восьмиричная</string>
<string name="p_bin">Бинарная</string>
<string name="c_calc_theme">Тема оформления</string> <string name="c_calc_theme">Тема оформления</string>
<string name="p_default_theme">По умолчанию</string> <string name="p_default_theme">По умолчанию</string>

View File

@ -60,4 +60,17 @@
<item>turns</item> <item>turns</item>
</string-array> </string-array>
<string-array name="p_numeral_bases_names">
<item>@string/p_dec</item>
<item>@string/p_hex</item>
<item>@string/p_oct</item>
<item>@string/p_bin</item>
</string-array>
<string-array name="p_numeral_bases">
<item>dec</item>
<item>hex</item>
<item>oct</item>
<item>bin</item>
</string-array>
</resources> </resources>

View File

@ -30,6 +30,9 @@
<string name="p_calc_angle_units_key">org.solovyev.android.calculator.CalculatorActivity_angle_units</string> <string name="p_calc_angle_units_key">org.solovyev.android.calculator.CalculatorActivity_angle_units</string>
<string name="p_calc_angle_units">deg</string> <string name="p_calc_angle_units">deg</string>
<string name="p_calc_numeral_bases_key">org.solovyev.android.calculator.CalculatorActivity_numeral_bases</string>
<string name="p_calc_numeral_bases">dec</string>
<string name="p_calc_theme_key">org.solovyev.android.calculator.CalculatorActivity_calc_theme</string> <string name="p_calc_theme_key">org.solovyev.android.calculator.CalculatorActivity_calc_theme</string>
<string name="p_calc_theme">default_theme</string> <string name="p_calc_theme">default_theme</string>

View File

@ -105,6 +105,13 @@
<string name="p_turns">Turns</string> <string name="p_turns">Turns</string>
<string name="c_angle_units_summary">Defines the default units for angles.</string> <string name="c_angle_units_summary">Defines the default units for angles.</string>
<string name="c_calc_numeral_bases">Numeral systems</string>
<string name="c_numeral_bases_summary">Defines the default numeral system for all input numbers.</string>
<string name="p_dec">Decimal</string>
<string name="p_hex">Hexadecimal</string>
<string name="p_oct">Octal</string>
<string name="p_bin">Binary</string>
<string name="c_calc_theme">Theme</string> <string name="c_calc_theme">Theme</string>
<string name="p_default_theme">Default</string> <string name="p_default_theme">Default</string>
<string name="p_violet_theme">Violet</string> <string name="p_violet_theme">Violet</string>

View File

@ -29,6 +29,12 @@
a:summary="@string/c_angle_units_summary" a:summary="@string/c_angle_units_summary"
a:entryValues="@array/p_angle_units"/> a:entryValues="@array/p_angle_units"/>
<ListPreference a:key="@string/p_calc_numeral_bases_key"
a:title="@string/c_calc_numeral_bases"
a:entries="@array/p_numeral_bases_names"
a:summary="@string/c_numeral_bases_summary"
a:entryValues="@array/p_numeral_bases"/>
</PreferenceCategory> </PreferenceCategory>

View File

@ -10,6 +10,7 @@ import android.content.SharedPreferences;
import jscl.AngleUnit; import jscl.AngleUnit;
import jscl.JsclMathEngine; import jscl.JsclMathEngine;
import jscl.MathEngine; import jscl.MathEngine;
import jscl.NumeralBase;
import jscl.math.Generic; import jscl.math.Generic;
import jscl.math.function.Function; import jscl.math.function.Function;
import jscl.math.operator.Operator; import jscl.math.operator.Operator;
@ -48,8 +49,12 @@ public enum CalculatorEngine {
public static final String RESULT_PRECISION_P_KEY = "org.solovyev.android.calculator.CalculatorModel_result_precision"; public static final String RESULT_PRECISION_P_KEY = "org.solovyev.android.calculator.CalculatorModel_result_precision";
public static final String RESULT_PRECISION_DEFAULT = "5"; public static final String RESULT_PRECISION_DEFAULT = "5";
public static final String NUMERAL_BASES_P_KEY = "org.solovyev.android.calculator.CalculatorActivity_numeral_bases";
public static final String NUMERAL_BASES_DEFAULT = "dec";
public static final String ANGLE_UNITS_P_KEY = "org.solovyev.android.calculator.CalculatorActivity_angle_units"; public static final String ANGLE_UNITS_P_KEY = "org.solovyev.android.calculator.CalculatorActivity_angle_units";
public static final String ANGLE_UNITS_DEFAULT = "deg"; public static final String ANGLE_UNITS_DEFAULT = "deg";
public static final int DEFAULT_TIMEOUT = 3000; public static final int DEFAULT_TIMEOUT = 3000;
@NotNull @NotNull
@ -285,7 +290,8 @@ public enum CalculatorEngine {
//noinspection ConstantConditions //noinspection ConstantConditions
this.setPrecision(integerNumberMapper.parseValue(preferences.getString(RESULT_PRECISION_P_KEY, RESULT_PRECISION_DEFAULT))); this.setPrecision(integerNumberMapper.parseValue(preferences.getString(RESULT_PRECISION_P_KEY, RESULT_PRECISION_DEFAULT)));
this.setRoundResult(preferences.getBoolean(ROUND_RESULT_P_KEY, ROUND_RESULT_DEFAULT)); this.setRoundResult(preferences.getBoolean(ROUND_RESULT_P_KEY, ROUND_RESULT_DEFAULT));
this.setDefaultAngleUnits(AngleUnit.valueOf(preferences.getString(ANGLE_UNITS_P_KEY, ANGLE_UNITS_DEFAULT))); this.setAngleUnits(AngleUnit.valueOf(preferences.getString(ANGLE_UNITS_P_KEY, ANGLE_UNITS_DEFAULT)));
this.setNumeralBase(NumeralBase.valueOf(preferences.getString(NUMERAL_BASES_P_KEY, NUMERAL_BASES_DEFAULT)));
final String groupingSeparator = preferences.getString(GROUPING_SEPARATOR_P_KEY, GROUPING_SEPARATOR_DEFAULT); final String groupingSeparator = preferences.getString(GROUPING_SEPARATOR_P_KEY, GROUPING_SEPARATOR_DEFAULT);
if (StringUtils.isEmpty(groupingSeparator)) { if (StringUtils.isEmpty(groupingSeparator)) {
@ -337,10 +343,14 @@ public enum CalculatorEngine {
this.timeout = timeout; this.timeout = timeout;
} }
public void setDefaultAngleUnits(@NotNull AngleUnit angleUnits) { public void setAngleUnits(@NotNull AngleUnit angleUnits) {
getEngine().setAngleUnits(angleUnits); getEngine().setAngleUnits(angleUnits);
} }
public void setNumeralBase(@NotNull NumeralBase numeralBase) {
getEngine().setNumeralBase(numeralBase);
}
// for tests only // for tests only
void setThreadKiller(@NotNull ThreadKiller threadKiller) { void setThreadKiller(@NotNull ThreadKiller threadKiller) {
this.threadKiller = threadKiller; this.threadKiller = threadKiller;

View File

@ -34,7 +34,7 @@ public class AngleUnitsButton extends DirectionDragButton {
if (result != null) { if (result != null) {
final Resources resources = getResources(); final Resources resources = getResources();
if ( CalculatorEngine.instance.getEngine().getDefaultAngleUnit().name().equals(getDirectionText(direction)) ) { if ( CalculatorEngine.instance.getEngine().getAngleUnits().name().equals(getDirectionText(direction)) ) {
result.setColor(resources.getColor(R.color.selected_angle_unit_text_color)); result.setColor(resources.getColor(R.color.selected_angle_unit_text_color));
} else { } else {
result.setColor(resources.getColor(R.color.default_text_color)); result.setColor(resources.getColor(R.color.default_text_color));