[gcalctool] More buttons and functions



commit 2c5997091997e5b02e4025fb83ad492b315be864
Author: Robert Ancell <robert ancell gmail com>
Date:   Fri Apr 9 15:04:00 2010 +1000

    More buttons and functions

 data/buttons-advanced.ui  |   36 +++++++++++++++++++--
 data/buttons-basic.ui     |    5 ++-
 data/buttons-financial.ui |   74 +++++---------------------------------------
 src/math-buttons.c        |   18 ++++-------
 src/mp-equation-lexer.l   |    2 +
 src/mp-equation.c         |    9 +++++
 6 files changed, 63 insertions(+), 81 deletions(-)
---
diff --git a/data/buttons-advanced.ui b/data/buttons-advanced.ui
index 64e3778..f2d61e3 100644
--- a/data/buttons-advanced.ui
+++ b/data/buttons-advanced.ui
@@ -14,6 +14,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Inverse [Ctrl+I]</property>
             <property name="border_width">3</property>
             <property name="focus_on_click">False</property>
             <child internal-child="accessible">
@@ -42,10 +43,11 @@
         </child>
         <child>
           <object class="GtkButton" id="calc_factor_button">
-            <property name="label">fact</property>
+            <property name="label">a&#xD7;b</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Factorize [Ctrl+F]</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -70,6 +72,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Factorial [!]</property>
             <property name="border_width">3</property>
             <property name="focus_on_click">False</property>
             <child internal-child="accessible">
@@ -101,6 +104,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Fractional component</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -340,7 +344,6 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">False</property>
-            <property name="tooltip_text" translatable="yes" comments="Tooltip for the numeric point button">Numeric point [. or ,]</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -485,6 +488,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Subscript mode [Alt]</property>
             <property name="border_width">3</property>
             <property name="focus_on_click">False</property>
             <child internal-child="accessible">
@@ -511,6 +515,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Superscript mode [Ctrl]</property>
             <property name="border_width">3</property>
             <property name="focus_on_click">False</property>
             <child internal-child="accessible">
@@ -539,6 +544,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Scientific exponent [Ctrl+E]</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -569,6 +575,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Modulus divide</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -587,6 +594,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Start block [(]</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -623,6 +631,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Insert variable</property>
             <property name="border_width">3</property>
             <property name="focus_on_click">False</property>
             <child internal-child="accessible">
@@ -671,6 +680,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Assign variable</property>
             <property name="border_width">3</property>
             <property name="focus_on_click">False</property>
             <child internal-child="accessible">
@@ -719,6 +729,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Absolute value [|]</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -751,6 +762,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Integer component</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -767,10 +779,11 @@
         </child>
         <child>
           <object class="GtkButton" id="calc_real_portion_button">
-            <property name="label">re</property>
+            <property name="label">&#x211C;</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Real component</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -787,10 +800,11 @@
         </child>
         <child>
           <object class="GtkButton" id="calc_imaginary_portion_button">
-            <property name="label">im</property>
+            <property name="label">&#x2111;</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Imaginary component</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -811,6 +825,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Complex conjugate</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -831,6 +846,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Natural logarithm</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -851,6 +867,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Logarithm</property>
             <property name="border_width">3</property>
             <property name="focus_on_click">False</property>
             <signal name="clicked" handler="button_cb"/>
@@ -869,6 +886,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Exponent [^ or **]</property>
             <property name="border_width">3</property>
             <property name="focus_on_click">False</property>
             <child internal-child="accessible">
@@ -900,6 +918,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Root [Ctrl+R]</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -920,6 +939,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Backspace</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -938,6 +958,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Pi [Ctrl+P]</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -964,6 +985,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Eulers number [e]</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -997,6 +1019,7 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Cosine</property>
                 <property name="border_width">3</property>
                 <property name="focus_on_click">False</property>
                 <signal name="clicked" handler="button_cb"/>
@@ -1012,6 +1035,7 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Sine</property>
                 <property name="border_width">3</property>
                 <property name="focus_on_click">False</property>
                 <signal name="clicked" handler="button_cb"/>
@@ -1029,6 +1053,7 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Tangent</property>
                 <property name="border_width">3</property>
                 <property name="focus_on_click">False</property>
                 <signal name="clicked" handler="button_cb"/>
@@ -1046,6 +1071,7 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Hyperbolic cosine</property>
                 <property name="border_width">3</property>
                 <property name="focus_on_click">False</property>
                 <signal name="clicked" handler="button_cb"/>
@@ -1063,6 +1089,7 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Hyperbolic sine</property>
                 <property name="border_width">3</property>
                 <property name="focus_on_click">False</property>
                 <signal name="clicked" handler="button_cb"/>
@@ -1082,6 +1109,7 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Hyperbolic tangent</property>
                 <property name="border_width">3</property>
                 <property name="focus_on_click">False</property>
                 <signal name="clicked" handler="button_cb"/>
diff --git a/data/buttons-basic.ui b/data/buttons-basic.ui
index 1e0d026..4c9d138 100644
--- a/data/buttons-basic.ui
+++ b/data/buttons-basic.ui
@@ -384,6 +384,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Clear display [Escape]</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -500,6 +501,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Square root</property>
             <property name="border_width">3</property>
             <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
@@ -519,14 +521,15 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Square</property>
             <property name="border_width">3</property>
             <property name="focus_on_click">False</property>
-            <signal name="clicked" handler="button_cb"/>
             <child internal-child="accessible">
               <object class="AtkObject" id="calc_x_squared_button-atkobject">
                 <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the exponentiation (x to the power of y) button">Exponent</property>
               </object>
             </child>
+            <signal name="clicked" handler="button_cb"/>
             <child>
               <object class="GtkLabel" id="x_squared_label">
                 <property name="visible">True</property>
diff --git a/data/buttons-financial.ui b/data/buttons-financial.ui
index 9837ee3..61024ea 100644
--- a/data/buttons-financial.ui
+++ b/data/buttons-financial.ui
@@ -206,31 +206,6 @@
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="calc_factor_button">
-            <property name="label">fact</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="border_width">3</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="calc_factor_button-atkobject">
-                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the factorize button">Factorize</property>
-              </object>
-            </child>
-            <signal name="clicked" handler="factorize_cb"/>
-          </object>
-          <packing>
-            <property name="left_attach">5</property>
-            <property name="right_attach">6</property>
-            <property name="top_attach">4</property>
-            <property name="bottom_attach">5</property>
-            <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
-            <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
-          </packing>
-        </child>
-        <child>
           <object class="GtkButton" id="calc_natural_logarithm_button">
             <property name="label">ln</property>
             <property name="visible">True</property>
@@ -332,46 +307,6 @@
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="calc_fractional_portion_button">
-            <property name="label">frac</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="border_width">3</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <signal name="clicked" handler="button_cb"/>
-          </object>
-          <packing>
-            <property name="left_attach">7</property>
-            <property name="right_attach">8</property>
-            <property name="top_attach">4</property>
-            <property name="bottom_attach">5</property>
-            <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
-            <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_modulus_divide_button">
-            <property name="label">mod</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="border_width">3</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <signal name="clicked" handler="button_cb"/>
-          </object>
-          <packing>
-            <property name="left_attach">6</property>
-            <property name="right_attach">7</property>
-            <property name="top_attach">4</property>
-            <property name="bottom_attach">5</property>
-            <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
-            <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
-          </packing>
-        </child>
-        <child>
           <object class="GtkButton" id="calc_4_button">
             <property name="label">4</property>
             <property name="visible">True</property>
@@ -988,6 +923,15 @@
         <child>
           <placeholder/>
         </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
       </object>
     </child>
   </object>
diff --git a/src/math-buttons.c b/src/math-buttons.c
index 15fb80e..1c6cc93 100644
--- a/src/math-buttons.c
+++ b/src/math-buttons.c
@@ -36,7 +36,7 @@ struct MathButtonsPrivate
     ButtonMode mode;
     GtkBuilder *basic_ui, *advanced_ui, *financial_ui, *programming_ui;
 
-    GdkColor colour_numbers, colour_action, colour_operator, colour_function, colour_memory, colour_trig, colour_group;
+    GdkColor colour_numbers, colour_action, colour_operator, colour_function, colour_memory, colour_group;
 
     GtkWidget *bas_panel, *adv_panel, *fin_panel, *prog_panel;
 
@@ -393,12 +393,12 @@ load_mode(MathButtons *buttons, ButtonMode mode)
     set_tint(GET_WIDGET(builder, "calc_or_button"), &buttons->priv->colour_operator, 1);  
     set_tint(GET_WIDGET(builder, "calc_xor_button"), &buttons->priv->colour_operator, 1);
 
-    set_tint(GET_WIDGET(builder, "calc_cosine_button"), &buttons->priv->colour_trig, 1);
-    set_tint(GET_WIDGET(builder, "calc_sine_button"), &buttons->priv->colour_trig, 1);
-    set_tint(GET_WIDGET(builder, "calc_tangent_button"), &buttons->priv->colour_trig, 1);
-    set_tint(GET_WIDGET(builder, "calc_hyperbolic_cosine_button"), &buttons->priv->colour_trig, 1);
-    set_tint(GET_WIDGET(builder, "calc_hyperbolic_sine_button"), &buttons->priv->colour_trig, 1);
-    set_tint(GET_WIDGET(builder, "calc_hyperbolic_tangent_button"), &buttons->priv->colour_trig, 1);
+    set_tint(GET_WIDGET(builder, "calc_cosine_button"), &buttons->priv->colour_function, 2);
+    set_tint(GET_WIDGET(builder, "calc_sine_button"), &buttons->priv->colour_function, 2);
+    set_tint(GET_WIDGET(builder, "calc_tangent_button"), &buttons->priv->colour_function, 2);
+    set_tint(GET_WIDGET(builder, "calc_hyperbolic_cosine_button"), &buttons->priv->colour_function, 2);
+    set_tint(GET_WIDGET(builder, "calc_hyperbolic_sine_button"), &buttons->priv->colour_function, 2);
+    set_tint(GET_WIDGET(builder, "calc_hyperbolic_tangent_button"), &buttons->priv->colour_function, 2);
 
     set_tint(GET_WIDGET(builder, "calc_start_group_button"), &buttons->priv->colour_group, 1);
     set_tint(GET_WIDGET(builder, "calc_end_group_button"), &buttons->priv->colour_group, 1);
@@ -851,7 +851,6 @@ finc_response_cb(GtkWidget *widget, gint response_id, MathButtons *buttons)
             continue;
         }
         entry = GET_WIDGET(buttons->priv->financial_ui, finc_dialog_fields[dialog][i]);
-        // FIXME: Have to delocalize the input
         mp_set_from_string(gtk_entry_get_text(GTK_ENTRY(entry)), &arg[i]);
         gtk_entry_set_text(GTK_ENTRY(entry), "0");
     }
@@ -1217,9 +1216,6 @@ math_buttons_init (MathButtons *buttons)
     buttons->priv->colour_memory.red = 65535;
     buttons->priv->colour_memory.green = 0;
     buttons->priv->colour_memory.blue = 65535;
-    buttons->priv->colour_trig.red = 65535;
-    buttons->priv->colour_trig.green = 65535;
-    buttons->priv->colour_trig.blue = 0;
     buttons->priv->colour_group.red = 65535;
     buttons->priv->colour_group.green = 65535;
     buttons->priv->colour_group.blue = 65535;
diff --git a/src/mp-equation-lexer.l b/src/mp-equation-lexer.l
index 5f22ef3..2dd5229 100644
--- a/src/mp-equation-lexer.l
+++ b/src/mp-equation-lexer.l
@@ -71,6 +71,8 @@ AND  "â?§"|[aA][nN][dD]
 OR   "â?¨"|[oO][rR]
 XOR  "â?»"|"â??"|[xX][oO][rR]
 NOT  "¬"|"~"|[nN][oO][tT]
+RE   "â?°â??"
+IM   "â??"
 IN   [iI][nN]
 
 %%
diff --git a/src/mp-equation.c b/src/mp-equation.c
index 0399484..91328f5 100644
--- a/src/mp-equation.c
+++ b/src/mp-equation.c
@@ -130,8 +130,11 @@ function_is_defined(MPEquationParserState *state, const char *name)
         strcmp(lower_name, "ln") == 0 ||
         strcmp(lower_name, "sqrt") == 0 ||
         strcmp(lower_name, "abs") == 0 ||
+        strcmp(lower_name, "conj") == 0 ||
         strcmp(lower_name, "int") == 0 ||
         strcmp(lower_name, "frac") == 0 ||
+        strcmp(lower_name, "re") == 0 ||
+        strcmp(lower_name, "im") == 0 ||
         strcmp(lower_name, "sin") == 0 || strcmp(lower_name, "cos") == 0 || strcmp(lower_name, "tan") == 0 ||
         strcmp(lower_name, "sin�¹") == 0 || strcmp(lower_name, "cos�¹") == 0 || strcmp(lower_name, "tan�¹") == 0 ||
         strcmp(lower_name, "sinh") == 0 || strcmp(lower_name, "cosh") == 0 || strcmp(lower_name, "tanh") == 0 ||
@@ -179,10 +182,16 @@ get_function(MPEquationParserState *state, const char *name, const MPNumber *x,
         mp_sqrt(x, z);
     else if (strcmp(lower_name, "abs") == 0) // |x|
         mp_abs(x, z);
+    else if (strcmp(lower_name, "conj") == 0)
+        mp_conjugate(x, z);
     else if (strcmp(lower_name, "int") == 0)
         mp_integer_component(x, z);
     else if (strcmp(lower_name, "frac") == 0)
         mp_fractional_component(x, z);
+    else if (strcmp(lower_name, "re") == 0)
+        mp_real_component(x, z);
+    else if (strcmp(lower_name, "im") == 0)
+        mp_imaginary_component(x, z);
     else if (strcmp(lower_name, "sin") == 0)
         mp_sin(x, state->options->angle_units, z);
     else if (strcmp(lower_name, "cos") == 0)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]