From 4740e4e13dc5287182ceaf390bf011eda506a83a Mon Sep 17 00:00:00 2001 From: serso Date: Tue, 22 Nov 2011 23:56:46 +0400 Subject: [PATCH] rad/degrees --- res/layout-land/main_calculator.xml | 22 +- res/layout-land/main_cellphone.xml | 22 +- res/layout/calc_clear_button.xml | 6 +- res/layout/calc_six_digit_button.xml | 4 +- res/values-it/strings.xml | 272 ++++++++++++++++++ res/values-ru/strings.xml | 16 +- res/values/strings.xml | 15 +- .../calculator/CalculatorActivity.java | 7 +- .../android/calculator/model/Var.java | 16 +- .../view/widgets/AngleUnitsButton.java | 7 + .../view/widgets/DirectionDragButton.java | 6 +- 11 files changed, 345 insertions(+), 48 deletions(-) create mode 100644 res/values-it/strings.xml diff --git a/res/layout-land/main_calculator.xml b/res/layout-land/main_calculator.xml index 68132bb2..5ea43f97 100644 --- a/res/layout-land/main_calculator.xml +++ b/res/layout-land/main_calculator.xml @@ -52,18 +52,16 @@ a:layout_height="fill_parent" a:layout_weight="4"/> - + - + - \ No newline at end of file diff --git a/res/layout/calc_six_digit_button.xml b/res/layout/calc_six_digit_button.xml index d2e9cc85..12ed26c4 100644 --- a/res/layout/calc_six_digit_button.xml +++ b/res/layout/calc_six_digit_button.xml @@ -6,10 +6,10 @@ ~ or visit http://se.solovyev.org --> - \ No newline at end of file diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml new file mode 100644 index 00000000..ef565c49 --- /dev/null +++ b/res/values-it/strings.xml @@ -0,0 +1,272 @@ + + + + + + + Calculator++ + Calc++ + Impostazioni + Errore + Risultato copiato negli appunti! + Impostazioni + Aiuto + About + Variabili e costanti + + + + Impostazioni principali + Impostazioni calcolo + Impostazioni aspetto + Impostazioni trascinamento tasti + + + Calibrazione pulsante trascinamento + Consente di calibrare il pulsante di trascinamento + Giù + Su + Riavvia + + + Copyright (c) 2009-2011\n\nCreato da serso aka se.solovyev\n\n + Questo programma è open source:\ntutto il codice può essere trovato su\nhttp://github.com\n\n + Per ulteriori informazioni contatta\nl\'autore via email\nse.solovyev@gmail.com + \no visita\nhttp://se.solovyev.org\n\n + Se vuoi aiutare il progetto\npuoi effettuare una donazione via\nhttp://paypal.com\n\n + Se ti piace l\'applicazione\nvota 5 stelle nel\nandroid.market + + + annulla + rifai + CE + cancella + incolla + vars + + Evidenzia espressioni + Arrotonda risultato + Attiva/disattiva arrotondamento dei risultati + Precisione del risultato + Esci + Aggiungi + Annulla + Salva + Rimuovi + + No + Conferma rimozione + Vuoi davvero cancellare la variabile \'%s\'? + Nome + Valore + Descrizione + Crea variabile + Modifica variabile + + Il valore deve essere un numero o vuoto! + Il nome della variabile entra in conflitto col nome della funzione! + Una variabile con lo stesso nome esiste già! + Il nome della costante non è valido: il nome deve iniziare con una lettera, può contenere lettere, cifre e underscore. + La variabile di sistema non può essere cambiata! + + Rapporto tra la circonferenza di qualsiasi cerchio col suo diametro + Unico numero reale tale che il valore della derivata (pendenza della retta tangente) della funzione f(x) = e^x nel punto x = 0 che è uguale a 1 + Unità immaginaria, definita come i^2 = -1 + Velocità della luce nel vuoto, m·s^-1 + La costante gravitazionale è una costante fisica empirica coinvolta nel calcolo dell\' attrazione gravitazionale tra gli oggetti con massa, m^3·kg^−1·s^−2 + Costante fisica che riflette la dimensione dei quanti di energia in meccanica quantistica, J·s + Costante di riduzione di Planck, J·s + Non è un numero + Infinito + + Inserisci una nuova espressione + Premi per copiare + Continua + Dona + Puoi ringraziare l\'autore di questo programma per email\n\n + se.solovyev@gmail.com\n\n + o donando su\n\nhttp://paypal.com\n\n + oppure votando l\'applicazione con 5 stelle nell\'\n\nandroid.market + + Cronologia + M + La cronologia è vuota! + Cronologia + Il carattere \'%s\' non è accettato come nome di variabile! + + Unità angoli + Gradi + Radianti + Definisci l\'unità di misura predefinita per gli angoli. + + Tema + Predefinito + Viola + Blu chiaro + Precisione del risultato (tutti i calcoli sono fatti con la massima precisione, indipendentemente dal valore di questa opzione) + Attiva o disattiva la colorazione e lo styling dell\' editor calcolatrice + Imposta il tema per la calcolatrice + Cancella cronologia + Le prossime costanti sono indefinite: {0}! + + Nessun separatore + Apostrofo (\') + Spazio ( ) + Separatore raggruppamento + Imposta separatore raggruppamento + + Layout + Cellulare + Calcolatrice + Imposta layout per i pulsanti + + Feedback tattile + Attiva o disattiva la vibrazione su click dei pulsanti + + Breve + Media + Lunga + + Durata feedback tattile + Durata della vibrazione su click dei pulsanti + Funzioni + + Funzione trigonometrica seno. + Funzione trigonometrica coseno. + Funzione trigonometrica tangente. + Funzione trigonometrica cotangente. + Arcseno - inversa della funzione seno. + Arccoseno - inversa della funzione coseno. + Arctangente - inversa della funzione tangente. + Arccotangente - inversa della funzione cotangente. + Logaritmo naturale - logaritmo in base e. + Logaritmo decimale - logaritmo in base 10. + Funzione esponenziale. + Funzione radice quadrata. + Funzione radice cubica. + Funzione che restituisce il valore assoluto di un argomento. + Funzione che restituisce il segno di un argomento: -1 se l\'argomnto è minore di 0, 0 se è uguale a 0, 1 se è maggiore di 0. + Funzione uguaglianza - restituisce 1 se i due argomenti sono uguali, 0 altrimenti. + Funzione minore-o-uguale - restituisce 1 se i due argomenti sono uguali o il primo è minore del secondo, 0 altrimenti. + Funzione maggiore-o-uguale - restituisce 1 se i due argomenti sono uguali o il primo è maggiore del secondo, 0 altrimenti. + Funzione disuguaglianza - restituisce 1 se i due argomenti non sono uguali, 0 altrimenti. + Funzione minore - restituisce 1 se il primo argomento è minore del secondo, 0 altrimenti. + Funzione maggiore - restituisce 1 se il primo argomento è maggiore del secondo, 0 altrimenti. + Converte gradi in radianti: d - gradi, m - minuti (predefinito = 0), s - secondi (predefinito = 0). + Converte gradi dalla notazione DMS in notazione decimale: d - gradi, m - minuti (predefinito = 0), s - secondi (predefinito = 0). + Converte radianti in gradi. + + Impossibile creare una costante vuota! + Risultato attuale non valido! + Operatori + + L\'operazione modulo trova il resto della divisione di \'x\' by \'y\'. + Funzione somma \'f(i)\', iterazione tra \'i\' da \'from\' a \'to\'. + Restituisce il prodotto della funzione \'f(i)\', iterazione tra \'i\' da \'from\' a \'to\'. + Restituisce la derivata di ordine \'order\' della funzione \'f(x)\' in \'x\' e calcolata nel punto \'x_point\'. + Restituisce l\'integrale della funzione \'f(x)\' in \'x\'. + Funzione integrale \'f(x)\' in \'x\' da \'a\' a \'b\'. + + Restituisce il fattoriale dell\'espressione precedente. + Restituisce la percentuale dell\'espressione precedente.\nEsempi:\n + 100 + 50% = 150\n + 100 * 50% = 50\n + 100 + 100 * 50% * 50% = 125 + + Converte gradi in radianti.\n + Esempi:\n + 268° = 4.67748\n + 30.21° = 0.52726 + + + FAQ + Suggerimenti + Schermate + + +Come posso utilizzare le funzioni scritte in alto a destra e nell\'angolo in basso a destra del pulsante?\n +\n +Premi il pulsante e trascinalo leggermente verso l\'alto o verso il basso. A seconda del valore mostrato sul pulsante azione si verificherà.\n +\n +Come posso passare da radianti a gradi?\n +\n +Attualente C++ non supporta questa funzione ma è possibile utilizzare le funzioni deg() e rad() e l\'operatore ° per convertire i gradi in radianti e vice versa.\n +\n +Esempi:\n +268° = 4.67748\n +30.21° = 0.52726\n +rad(30, 21, 0) = 0.52726\n +deg(4.67748) = 268\n +\n +C++ supporta la %?\n +\n +Sì, la funzione % può essere trovata nell\'angolo in alto a destra di / button.\n +\n +Esempi:\n +\n +100 + 50% = 150\n +100 * 50% = 50\n +100 + 100 * 50% * 50% = 125\n +100 + (100 * 50% * (25 + 25)% + 100%) = 150\n +\n +Note:\n +\n +100 + (20 + 20)% = 140, ma 100+ (20% + 20%) = 124.0\n +100 + 50% ^ 2 = 2600, ma 100 + 50 ^ 2% = 101.08\n +\n +C++ supporta il calcolo delle frazioni?\n +\n +Sì, è possibile digitare l\'espressione frazionaria nell\'editor e usare = (nell\'angolo in alto a destra del pulsante = ). Inoltre è possibile utilizzare = per semplificare l\'espressione.\n +\n +Esempi:\n +\n +2/3 + 5/9 = 11/9\n +2/9 + 3/123 = 91/369\n +(6 - t) ^ 3 = 216 - 108t + 18t ^ 2 - t ^ 3\n +\n +C++ supporta il calcolo con i numeri complessi?\n +\n +Sì, basta inserire una espressione complessa (usando i o √(-1) come numero immaginario).\n +\n +Esempi:\n +\n +(2i + 1) ^ = -3 + 4i\n +e ^ i = 0.5403 + 0.84147i\n +\n +C++ può disegnare i grafici delle funzioni?\n +\n +No, attualmente C++ non supporta questa funzione.\n +\n +C++ supporta il calcolo delle matrici?\n +\n +No.\n +\n +Perchè ho 1.76732452452345E-17 invece di 0?\n +\n +Controlla l\'opzione \'Arrotonda risultato\' nelle impostazioni dell\'applicazione - dovrebbe essere attivata.\n + + + +1. È possibile omettere i segni non necessari nella moltiplicazione (invece di 3*t o t*sin(p*t) digita 3t o tsin(pt))\n\n +2. Utilizza = (nell\'angolo in alto a destra del pulsante = ) per semplificare l\'espressione\n\n +3. Basta fare click sul risultato per copiarlo negli appunti\n\n +4. Usa raramente il pulsante = - il risultato è calcolato in tempo reale\n\n +4. Aggiungi costanti per i valori usati spesso (è possibile salvare anche le espressioni)\n\n + + + +1. Schermata principale: viene visualizzata all\'avvio dell\'applicazione, può essere raggiunta da un altra schermata premendo il pulsante Indietro.\n\n +2. Schermata variabili e costanti: contiene l\'elenco delle costanti disponibili. L\'utente può aggiungere qui costanti e variabili cliccando il pulsante Aggiungi. Un breve click sulla variabile/costante la inserisce nell\'editor, un click prolungato apre la finestra di editor variabili. Può essere raggiunta dalla schermata principale premendo il pulsante π,….\n\n +3. Schermata funzioni: contiene l\'elenco di tutte le funzioni disponibili. Un breve click sulla funzione la inserisce nell\'editor. Può essere raggiunta dalla schermata principale premento il pulsante f(x).\n\n +4. Schermata operatori: contiene l\'elenco di tutti gli operatori disponibili. Un breve click sull\'operartore lo inserisce nell\'editor. Può essere raggiunta dalla schermata principale premento il pulsante ∂,….\n\n +5. Schermata cronologia: contiene l\'elenco di tutte le azioni fatte dall\'utente. Un breve click su un elemento della lista lo inserisce nell\'editor. Può essere raggiunta dalla schermata principale premento il pulsante M.\n\n +6. Schermata impostazioni: contiene le impostazioni dell\'applicazione. Può essere raggiunta dalla schermata principale premento il pulsante Impostazioni nel menù. + + + + + diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index adbd788e..f9127a83 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -27,7 +27,12 @@ За подробной информацией, пожалуйста,\nобращайтесь на почту\nse.solovyev@gmail.com\n или посетите сайт \nhttp://se.solovyev.org\n\n Если вы хотите поддержать проект материально\nвы можете сделать это через \nhttp://paypal.com\n\n - Если вам понравилось приложение -\nпоставьте 5 звёздочек в\nандроид.маркете + Если вам понравилось приложение -\nпоставьте 5 звёздочек в\nандроид.маркете\n\n + Спасибо тем, кто переводил Калькулятор++:\n + на итальянский - Gabriele Ravanetti\n\n + Это приложение использует следующие открытые библиотеки:\n + Simple (XML serialization)\n + JSCL назад @@ -158,7 +163,7 @@ Возвращает остаток от деления \'x\' на \'y\'. Суммирует функции \'f(i)\', пробегая по переменной \'i\' от \'from\' до \'to\'. Возвращает произведение функций \'f(i)\', пробегая по переменной \'i\' от \'from\' до \'to\'. - Возвращает производную порядка \'order\' функции \'f(x)\' по переменной \'x\' и вычисляет её в точке \'x_point\'. + Возвращает производную порядка \'order\' (по умолчанию = 1) функции \'f(x)\' по переменной \'x\' и вычисляет её в точке \'x_point\' (по умолчанию = такая же как и \'x\'). Возвращает интеграл функции \'f(x)\' по переменной \'x\'. Интегрирует функцию \'f(x)\' по переменной \'x\' от \'a\' до \'b\'. @@ -185,7 +190,9 @@ \n Как я могу переключиться между радианами и градусами?\n \n -На данный момент К++ не поддерживает такого переключения, но вы можете использовать функции deg() и rad() или оператор ° для перевода радиан в градусы и наоборот.\n +Для переключения единиц измерения углов либо выберите соответствующий пункт настроек приложения,\nлибо воспользуйтесь переключателем, расположенным на клавише 6\n +(текущее значение выделено жёлтым цветом).\n +Также вы можете воспользоваться функциями deg() и rad() и оператором ° для перевода радиан в градусы и обратно.\n \n Примеры:\n 268° = 4.67748\n @@ -246,7 +253,8 @@ e ^ i = 0.5403 + 0.84147i\n 2. Используйте ≡ (в верхнем правом углу кнопки =) для упрощения выражения.\n\n 3. Нажмите на результат для того, чтобы скопировать его в буфер обмена.\n\n 4. Используйте кнопку = реже - результат вычисляется на лету.\n\n -4. Создайте константы для часто используемых значений (таким образом вы можете даже сохранять выражения) +4. Создайте константы для часто используемых значений (таким образом вы можете даже сохранять выражения). +5. Используйте переменные расположенные на 4 и 5 клавише.\n\n diff --git a/res/values/strings.xml b/res/values/strings.xml index d5191d3e..bd24f1e3 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -28,7 +28,12 @@ For more information please\ncontact the author by email\nse.solovyev@gmail.com \nor visit\nhttp://se.solovyev.org\n\n If you want to support the project\nyou can donate money via\nhttp://paypal.com\n\n - If you like the application\nrank it with 5 stars in\nandroid.market + If you like the application\nrank it with 5 stars in\nandroid.market\n\n + Thanks to people who translate Calculator++ in different languages:\n + Italian - Gabriele Ravanetti\n\n + This application uses next open source libraries:\n + Simple (XML serialization)\n + JSCL undo @@ -159,7 +164,7 @@ Modulo operation finds the remainder of division of \'x\' by \'y\'. Sums functions \'f(i)\', iterating through \'i\' from \'from\' to \'to\'. Gives product of functions \'f(i)\', iterating through \'i\' from \'from\' to \'to\'. - Gives derivative of order \'order\' of functions \'f(x)\' by \'x\' variable and calculates at point \'x_point\'. + Gives derivative of order \'order\' (default = 1) of functions \'f(x)\' by \'x\' variable and calculates at point \'x_point\' (default = same as \'x\'). Gives integral of function \'f(x)\' by \'x\' variable. Integrates function \'f(x)\' by \'x\' variable from \'a\' to \'b\'. @@ -187,7 +192,10 @@ Push the button and slide lightly up or down. Depending on value showed on the b \n How can I toggle between radians and degrees?\n \n -Currently C++ doesn\'t support this feature but you can use deg() and rad() functions and ° operator to convert degrees to radians and vice versa.\n +To toggle between different angle units you can either change appropriate option in application settings\n +or use the toggle switch located on the 6 button\n +(current value is lighted with yellow color).\n +Also you can use deg() and rad() functions and ° operator to convert degrees to radians and vice versa.\n \n Examples:\n 268° = 4.67748\n @@ -248,6 +256,7 @@ Check the \'Round result\' preference in application settings - it should be tur 3. Just click on the result to copy it to the clipboard\n\n 4. Use = button seldom - result is calculating on the fly\n\n 4. Add constants for often used values (you can even save expressions)\n\n +5. Use variables located on 4 and 5 buttons\n\n diff --git a/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java b/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java index 52ab6839..6cd3f3fc 100644 --- a/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java +++ b/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java @@ -38,10 +38,7 @@ import org.solovyev.common.utils.history.HistoryAction; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.text.DecimalFormatSymbols; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Map; +import java.util.*; public class CalculatorActivity extends Activity implements FontSizeAdjuster, SharedPreferences.OnSharedPreferenceChangeListener { @@ -122,7 +119,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh equalsButton.setOnDragListener(evalOnDragListener); } - final AngleUnitsButton angleUnitsButton = (AngleUnitsButton) findViewById(R.id.clearButton); + final AngleUnitsButton angleUnitsButton = (AngleUnitsButton) findViewById(R.id.sixDigitButton); if (angleUnitsButton != null) { final OnDragListener varsOnDragListener = new OnDragListenerVibrator(newOnDragListener(new AngleUnitsChanger(), dragPreferences), vibrator, preferences); angleUnitsButton.setOnDragListener(varsOnDragListener); diff --git a/src/main/java/org/solovyev/android/calculator/model/Var.java b/src/main/java/org/solovyev/android/calculator/model/Var.java index bab72b0e..a97c3a59 100644 --- a/src/main/java/org/solovyev/android/calculator/model/Var.java +++ b/src/main/java/org/solovyev/android/calculator/model/Var.java @@ -7,6 +7,7 @@ package org.solovyev.android.calculator.model; import jscl.math.function.Constant; +import jscl.math.function.ExtendedConstant; import jscl.math.function.IConstant; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -159,7 +160,7 @@ public class Var implements IConstant { Double result = null; if (value != null) { try { - result = Double.valueOf(value); + result = ExtendedConstant.getDoubleValue0(getName(), value); } catch (NumberFormatException e) { // do nothing - string is not a double } @@ -224,11 +225,16 @@ public class Var implements IConstant { @Override public String toString() { - final String stringValue = getValue(); - if (!StringUtils.isEmpty(stringValue)) { - return getName() + " = " + stringValue; + final Double doubleValue = getDoubleValue(); + if (doubleValue == null) { + final String stringValue = getValue(); + if (!StringUtils.isEmpty(stringValue)) { + return getName() + " = " + stringValue; + } else { + return getName(); + } } else { - return getName(); + return getName() + " = " + doubleValue; } } diff --git a/src/main/java/org/solovyev/android/view/widgets/AngleUnitsButton.java b/src/main/java/org/solovyev/android/view/widgets/AngleUnitsButton.java index 4b5723e7..c39abf0e 100644 --- a/src/main/java/org/solovyev/android/view/widgets/AngleUnitsButton.java +++ b/src/main/java/org/solovyev/android/view/widgets/AngleUnitsButton.java @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2009-2011. Created by serso aka se.solovyev. + * For more information, please, contact se.solovyev@gmail.com + * or visit http://se.solovyev.org + */ + package org.solovyev.android.view.widgets; import android.content.Context; @@ -32,6 +38,7 @@ public class AngleUnitsButton extends DirectionDragButton { result.setColor(resources.getColor(R.color.selected_angle_unit_text_color)); } else { result.setColor(resources.getColor(R.color.default_text_color)); + result.setAlpha(getDefaultDirectionTextAlpha()); } } diff --git a/src/main/java/org/solovyev/android/view/widgets/DirectionDragButton.java b/src/main/java/org/solovyev/android/view/widgets/DirectionDragButton.java index 801ee237..cb50bf2d 100644 --- a/src/main/java/org/solovyev/android/view/widgets/DirectionDragButton.java +++ b/src/main/java/org/solovyev/android/view/widgets/DirectionDragButton.java @@ -188,12 +188,16 @@ public class DirectionDragButton extends DragButton { private static TextPaint getUpDownTextPaint(@NotNull Paint basePaint, @NotNull Resources resources, @NotNull Float directionTextScale) { final TextPaint result = new TextPaint(basePaint); result.setColor(resources.getColor(R.color.button_text_color)); - result.setAlpha(150); + result.setAlpha(getDefaultDirectionTextAlpha()); result.setTextSize(basePaint.getTextSize() * directionTextScale); return result; } + protected static int getDefaultDirectionTextAlpha() { + return 150; + } + @Nullable public String getTextUp() { return textUp;