[gnome-calculator/wip/tbernard/336-icon-update: 1/3] adaptive



commit af68868ba9fefb1afb78c010b9cf6acbc221c54d
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Wed Oct 16 21:22:39 2019 +0200

    adaptive

 meson.build                |   24 +
 org.gnome.Calculator.json  |   14 +
 src/buttons-advanced.ui    | 1717 +++++++++++++++++++-------------------
 src/buttons-programming.ui | 1969 +++++++++++++++++++++++---------------------
 src/calculator.css         |   58 +-
 src/gnome-calculator.vala  |    4 +-
 src/math-buttons.vala      |    1 -
 src/math-converter.ui      |  146 ++--
 src/math-converter.vala    |   12 +-
 src/math-display.vala      |    4 +
 src/math-window.ui         |   16 +-
 src/meson.build            |    2 +
 12 files changed, 2117 insertions(+), 1850 deletions(-)
---
diff --git a/meson.build b/meson.build
index d2d88cb0..cfdf8cb3 100644
--- a/meson.build
+++ b/meson.build
@@ -27,6 +27,30 @@ libxml = dependency('libxml-2.0')
 libsoup = dependency('libsoup-2.4', version: '>= 2.42')
 gee = dependency('gee-0.8', version: '>= 0.20.0')
 
+libhandy = dependency('libhandy-0.0', version: '>= 0.0.9', required: false)
+if not libhandy.found()
+  libhandy_subproj = subproject(
+    'libhandy',
+    default_options: [
+      'examples=false',
+      'glade_catalog=disabled',
+      'tests=false',
+    ]
+  )
+
+  # When using libhandy as subproject, make sure we get the VAPI file
+  libhandy = declare_dependency(
+    dependencies: [
+      libhandy_subproj.get_variable('libhandy_dep'),
+      libhandy_subproj.get_variable('libhandy_vapi'),
+    ]
+  )
+
+  libhandy_vapidir = join_paths(meson.build_root(), 'subprojects', 'libhandy', 'src')
+else
+  libhandy_vapidir = ''
+endif
+
 # Libraries
 cc = meson.get_compiler('c')
 valac = meson.get_compiler('vala')
diff --git a/org.gnome.Calculator.json b/org.gnome.Calculator.json
index 7c3e7084..914a5c27 100644
--- a/org.gnome.Calculator.json
+++ b/org.gnome.Calculator.json
@@ -83,6 +83,20 @@
                 }
             ]
         },
+        {
+            "name": "libhandy",
+            "buildsystem": "meson",
+            "builddir": true,
+            "config-opts": [
+                "-Dglade_catalog=disabled"
+            ],
+            "sources": [
+                {
+                    "type": "git",
+                    "url": "https://source.puri.sm/Librem5/libhandy.git";
+                }
+            ]
+        },
         {
             "name" : "gnome-calculator",
             "buildsystem" : "meson",
diff --git a/src/buttons-advanced.ui b/src/buttons-advanced.ui
index 03a490dd..a36d644b 100644
--- a/src/buttons-advanced.ui
+++ b/src/buttons-advanced.ui
@@ -2,988 +2,1051 @@
 <interface>
   <!-- interface-naming-policy toplevel-contextual -->
   <requires lib="gtk+" version="3.16"/>
-  <object class="GtkGrid" id="button_panel">
+  <object class="HdyLeaflet" id="button_panel">
     <property name="visible">True</property>
-    <property name="row-homogeneous">True</property>
-    <property name="column-homogeneous">True</property>
-    <property name="row_spacing">4</property>
-    <property name="column_spacing">4</property>
+    <property name="child_transition_type">slide</property>
+    <property name="mode_transition_type">slide</property>
+    <property name="halign">center</property>
+    <property name="visible-child-name">basic</property>
+    <style>
+      <class name="math-buttons"/>
+    </style>
     <child>
-      <object class="GtkButton" id="calc_inverse_button">
+      <object class="GtkGrid" id="basic">
         <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Inverse [Ctrl+I]</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'⁻¹'</property>
-        <child internal-child="accessible">
-          <object class="AtkObject" id="calc_inverse_button-atkobject">
-            <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the 
inverse button">Inverse</property>
+        <property name="halign">center</property>
+        <property name="row-homogeneous">True</property>
+        <property name="column-homogeneous">True</property>
+        <property name="row_spacing">4</property>
+        <property name="column_spacing">4</property>
+        <child>
+          <object class="GtkButton" id="calc_4_button">
+            <property name="label">4</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="action_name">cal.insert-digit</property>
+            <property name="action_target">4</property>
+            <style>
+              <class name="number-button"/>
+            </style>
           </object>
+          <packing>
+            <property name="top_attach">2</property>
+          </packing>
         </child>
         <child>
-          <object class="GtkLabel" id="label20">
+          <object class="GtkButton" id="calc_7_button">
+            <property name="label">7</property>
             <property name="visible">True</property>
-            <property name="label">&lt;i&gt;x&lt;/i&gt;&lt;sup&gt;−1&lt;/sup&gt;</property>
-            <property name="use_markup">True</property>
-            <property name="justify">center</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="action_name">cal.insert-digit</property>
+            <property name="action_target">7</property>
+            <style>
+              <class name="number-button"/>
+            </style>
           </object>
+          <packing>
+            <property name="top_attach">1</property>
+            <property name="left_attach">0</property>
+          </packing>
         </child>
-      </object>
-      <packing>
-        <property name="left_attach">6</property>
-        <property name="top_attach">2</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_factor_button">
-        <property name="label">a×b</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Factorize [Ctrl+F]</property>
-        <property name="action_name">cal.factorize</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>
+        <child>
+          <object class="GtkButton" id="calc_8_button">
+            <property name="label">8</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="action_name">cal.insert-digit</property>
+            <property name="action_target">8</property>
+            <style>
+              <class name="number-button"/>
+            </style>
           </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">1</property>
+          </packing>
         </child>
-      </object>
-      <packing>
-        <property name="left_attach">5</property>
-        <property name="top_attach">4</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_factorial_button">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Factorial [!]</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'!'</property>
-        <child internal-child="accessible">
-          <object class="AtkObject" id="calc_factorial_button-atkobject">
-            <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the 
factorial button">Factorial</property>
+        <child>
+          <object class="GtkButton" id="calc_9_button">
+            <property name="label">9</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="action_name">cal.insert-digit</property>
+            <property name="action_target">9</property>
+            <style>
+              <class name="number-button"/>
+            </style>
           </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">1</property>
+          </packing>
         </child>
         <child>
-          <object class="GtkLabel" id="label14">
+          <object class="GtkButton" id="calc_5_button">
+            <property name="label">5</property>
             <property name="visible">True</property>
-            <property name="label">&lt;i&gt;x&lt;/i&gt;!</property>
-            <property name="use_markup">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="action_name">cal.insert-digit</property>
+            <property name="action_target">5</property>
+            <style>
+              <class name="number-button"/>
+            </style>
           </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">2</property>
+          </packing>
         </child>
-      </object>
-      <packing>
-        <property name="left_attach">7</property>
-        <property name="top_attach">2</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_imaginary_portion_button">
-        <property name="label">Im</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Imaginary Component</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'Im '</property>
-      </object>
-      <packing>
-        <property name="left_attach">7</property>
-        <property name="top_attach">4</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_imaginary_button">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'i'</property>
         <child>
-          <object class="GtkLabel" id="imaginary_label">
+          <object class="GtkButton" id="calc_6_button">
+            <property name="label">6</property>
             <property name="visible">True</property>
-            <property name="label">&lt;i&gt;i&lt;/i&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="action_name">cal.insert-digit</property>
+            <property name="action_target">6</property>
+            <style>
+              <class name="number-button"/>
+            </style>
           </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">2</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="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Modulus divide</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">' mod '</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_divide_button">
+            <property name="label">÷</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Divide [/]</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'÷'</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_1_button">
+            <property name="label">1</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="action_name">cal.insert-digit</property>
+            <property name="action_target">1</property>
+            <style>
+              <class name="number-button"/>
+            </style>
+          </object>
+          <packing>
+            <property name="top_attach">3</property>
+            <property name="left_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_2_button">
+            <property name="label">2</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="action_name">cal.insert-digit</property>
+            <property name="action_target">2</property>
+            <style>
+              <class name="number-button"/>
+            </style>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_0_button">
+            <property name="label">0</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="action_name">cal.insert-digit</property>
+            <property name="action_target">0</property>
+            <style>
+              <class name="number-button"/>
+            </style>
+          </object>
+          <packing>
+            <property name="top_attach">4</property>
+            <property name="left_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_numeric_point_button">
+            <property name="label" comments="Label is set in gtk.c to comply with LC flags">.</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="action_name">cal.insert-numeric-point</property>
+            <style>
+              <class name="numeric-point-button"/>
+            </style>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_3_button">
+            <property name="label">3</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="action_name">cal.insert-digit</property>
+            <property name="action_target">3</property>
+            <style>
+              <class name="number-button"/>
+            </style>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_multiply_button">
+            <property name="label">×</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Multiply [*]</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'×'</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_subtract_button">
+            <property name="label">−</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Subtract [-]</property>
+            <property name="action_name">cal.subtract</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_add_button">
+            <property name="label">+</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Add [+]</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'+'</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_pi_button">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Pi [Ctrl+P]</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'π'</property>
+            <child>
+              <object class="GtkLabel" id="pi_label">
+                <property name="visible">True</property>
+                <property name="label">π</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">4</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_root_button">
+            <property name="label">√</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Root [Ctrl+R]</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'√'</property>
+          </object>
+          <packing>
+            <property name="left_attach">4</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_x_squared_button">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Square [Ctrl+2]</property>
+            <property name="action_name">cal.square</property>
+            <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>
+            <child>
+              <object class="GtkLabel" id="x_squared_label">
+                <property name="visible">True</property>
+                <property 
name="label">&lt;i&gt;x&lt;/i&gt;&lt;sup&gt;&lt;i&gt;2&lt;/i&gt;&lt;/sup&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">4</property>
+            <property name="top_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_clear_button">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Clear Display [Escape]</property>
+            <property name="action_name">cal.clear</property>
+            <style>
+              <class name="destructive-action"/>
+              <class name="image-button"/>
+            </style>
+            <child>
+              <object class="GtkImage" id="calc_clear_icon">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="icon_name">edit-clear-symbolic</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_start_group_button">
+            <property name="label">(</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Start Group [(]</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'('</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_end_group_button">
+            <property name="label">)</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">End Group [)]</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">')'</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_percentage_button">
+            <property name="label">%</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Percentage [%]</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'%'</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_result_button">
+            <property name="label" translatable="yes" comments="Label on the solve button (clicking this 
solves the displayed calculation)">=</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Calculate Result</property>
+            <property name="action_name">cal.solve</property>
+            <style>
+              <class name="suggested-action"/>
+            </style>
+          </object>
+          <packing>
+            <property name="left_attach">4</property>
+            <property name="top_attach">3</property>
+            <property name="height">2</property>
+          </packing>
         </child>
       </object>
       <packing>
-        <property name="left_attach">2</property>
-        <property name="top_attach">4</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_4_button">
-        <property name="label">4</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="action_name">cal.insert-digit</property>
-        <property name="action_target">4</property>
-        <style>
-          <class name="number-button"/>
-        </style>
-      </object>
-      <packing>
-        <property name="top_attach">2</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_7_button">
-        <property name="label">7</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="action_name">cal.insert-digit</property>
-        <property name="action_target">7</property>
-        <style>
-          <class name="number-button"/>
-        </style>
-      </object>
-      <packing>
-        <property name="top_attach">1</property>
-        <property name="left_attach">0</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_8_button">
-        <property name="label">8</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="action_name">cal.insert-digit</property>
-        <property name="action_target">8</property>
-        <style>
-          <class name="number-button"/>
-        </style>
-      </object>
-      <packing>
-        <property name="left_attach">1</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_9_button">
-        <property name="label">9</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="action_name">cal.insert-digit</property>
-        <property name="action_target">9</property>
-        <style>
-          <class name="number-button"/>
-        </style>
-      </object>
-      <packing>
-        <property name="left_attach">2</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_5_button">
-        <property name="label">5</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="action_name">cal.insert-digit</property>
-        <property name="action_target">5</property>
-        <style>
-          <class name="number-button"/>
-        </style>
-      </object>
-      <packing>
-        <property name="left_attach">1</property>
-        <property name="top_attach">2</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_6_button">
-        <property name="label">6</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="action_name">cal.insert-digit</property>
-        <property name="action_target">6</property>
-        <style>
-          <class name="number-button"/>
-        </style>
-      </object>
-      <packing>
-        <property name="left_attach">2</property>
-        <property name="top_attach">2</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_divide_button">
-        <property name="label">÷</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Divide [/]</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'÷'</property>
-      </object>
-      <packing>
-        <property name="left_attach">3</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_1_button">
-        <property name="label">1</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="action_name">cal.insert-digit</property>
-        <property name="action_target">1</property>
-        <style>
-          <class name="number-button"/>
-        </style>
-      </object>
-      <packing>
-        <property name="top_attach">3</property>
-        <property name="left_attach">0</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_2_button">
-        <property name="label">2</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="action_name">cal.insert-digit</property>
-        <property name="action_target">2</property>
-        <style>
-          <class name="number-button"/>
-        </style>
-      </object>
-      <packing>
-        <property name="left_attach">1</property>
-        <property name="top_attach">3</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_0_button">
-        <property name="label">0</property>
-        <property name="width_request">50</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="action_name">cal.insert-digit</property>
-        <property name="action_target">0</property>
-        <style>
-          <class name="number-button"/>
-        </style>
-      </object>
-      <packing>
-        <property name="top_attach">4</property>
-        <property name="left_attach">0</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_numeric_point_button">
-        <property name="label" comments="Label is set in gtk.c to comply with LC flags">.</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="action_name">cal.insert-numeric-point</property>
-        <style>
-          <class name="numeric-point-button"/>
-        </style>
-      </object>
-      <packing>
-        <property name="left_attach">1</property>
-        <property name="top_attach">4</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_3_button">
-        <property name="label">3</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="action_name">cal.insert-digit</property>
-        <property name="action_target">3</property>
-        <style>
-          <class name="number-button"/>
-        </style>
-      </object>
-      <packing>
-        <property name="left_attach">2</property>
-        <property name="top_attach">3</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_multiply_button">
-        <property name="label">×</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Multiply [*]</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'×'</property>
-      </object>
-      <packing>
-        <property name="left_attach">3</property>
-        <property name="top_attach">2</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_subtract_button">
-        <property name="label">−</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Subtract [-]</property>
-        <property name="action_name">cal.subtract</property>
-      </object>
-      <packing>
-        <property name="left_attach">3</property>
-        <property name="top_attach">3</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_add_button">
-        <property name="label">+</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Add [+]</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'+'</property>
-      </object>
-      <packing>
-        <property name="left_attach">3</property>
-        <property name="top_attach">4</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_result_button">
-        <property name="label" translatable="yes" comments="Label on the solve button (clicking this solves 
the displayed calculation)">=</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Calculate Result</property>
-        <property name="action_name">cal.solve</property>
-        <style>
-          <class name="suggested-action"/>
-        </style>
-      </object>
-      <packing>
-        <property name="left_attach">4</property>
-        <property name="top_attach">4</property>
+        <property name="name">basic</property>
       </packing>
     </child>
     <child>
-      <object class="GtkButton" id="calc_clear_button">
+      <object class="GtkSeparator">
         <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Clear Display [Escape]</property>
-        <property name="action_name">cal.clear</property>
-        <property name="label">C</property>
+        <property name="orientation">vertical</property>
       </object>
-      <packing>
-        <property name="left_attach">5</property>
-      </packing>
     </child>
     <child>
-      <object class="GtkToggleButton" id="calc_subscript_button">
+      <object class="GtkGrid" id="advanced">
         <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Subscript mode [Alt]</property>
-        <property name="action_name">cal.set-number-mode</property>
-        <property name="action_target">'subscript'</property>
-        <child internal-child="accessible">
-          <object class="AtkObject" id="calc_subscript_button-atkobject">
-            <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the 
subscript mode button">Subscript</property>
+        <property name="halign">center</property>
+        <property name="row-homogeneous">True</property>
+        <property name="column-homogeneous">True</property>
+        <property name="row_spacing">4</property>
+        <property name="column_spacing">4</property>
+        <child>
+          <object class="GtkToggleButton" id="calc_subscript_button">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Subscript mode [Alt]</property>
+            <property name="action_name">cal.set-number-mode</property>
+            <property name="action_target">'subscript'</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="calc_subscript_button-atkobject">
+                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the subscript mode button">Subscript</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label4">
+                <property name="visible">True</property>
+                <property name="label">↓n</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
         </child>
         <child>
-          <object class="GtkLabel" id="label4">
+          <object class="GtkToggleButton" id="calc_superscript_button">
             <property name="visible">True</property>
-            <property name="label">↓n</property>
-            <property name="use_markup">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Superscript mode [Ctrl]</property>
+            <property name="action_name">cal.set-number-mode</property>
+            <property name="action_target">'superscript'</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="calc_superscript_button-atkobject">
+                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the superscript mode button">Superscript</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label3">
+                <property name="visible">True</property>
+                <property name="label">↑n</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+          </packing>
         </child>
-      </object>
-      <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">0</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkToggleButton" id="calc_superscript_button">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Superscript mode [Ctrl]</property>
-        <property name="action_name">cal.set-number-mode</property>
-        <property name="action_target">'superscript'</property>
-        <child internal-child="accessible">
-          <object class="AtkObject" id="calc_superscript_button-atkobject">
-            <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the 
superscript mode button">Superscript</property>
+        <child>
+          <object class="GtkButton" id="calc_factor_button">
+            <property name="label">a×b</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Factorize [Ctrl+F]</property>
+            <property name="action_name">cal.factorize</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>
           </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+          </packing>
         </child>
         <child>
-          <object class="GtkLabel" id="label3">
+          <object class="GtkButton" id="calc_exponential_button">
             <property name="visible">True</property>
-            <property name="label">↑n</property>
-            <property name="use_markup">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Scientific exponent [Ctrl+E]</property>
+            <property name="action_name">cal.insert-exponent</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="calc_exponential_button-atkobject">
+                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the scientific exponent button">Scientific Exponent</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="label">×10&lt;sup&gt;&lt;i&gt;y&lt;/i&gt;&lt;/sup&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">1</property>
+          </packing>
         </child>
-      </object>
-      <packing>
-        <property name="left_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_exponential_button">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Scientific exponent [Ctrl+E]</property>
-        <property name="action_name">cal.insert-exponent</property>
-        <child internal-child="accessible">
-          <object class="AtkObject" id="calc_exponential_button-atkobject">
-            <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the 
scientific exponent button">Scientific Exponent</property>
+        <child>
+          <object class="GtkButton" id="calc_cosine_button">
+            <property name="label">cos</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Cosine</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'cos '</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_sine_button">
+            <property name="label">sin</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Sine</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'sin '</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_tangent_button">
+            <property name="label">tan</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Tangent</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'tan '</property>
+          </object>
+          <packing>
+            <property name="left_attach">4</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_hyperbolic_cosine_button">
+            <property name="label">cosh</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Hyperbolic Cosine</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'cosh '</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="calc_hyperbolic_sine_button">
+            <property name="label">sinh</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Hyperbolic Sine</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'sinh '</property>
           </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">1</property>
+          </packing>
         </child>
         <child>
-          <object class="GtkLabel" id="label2">
+          <object class="GtkButton" id="calc_hyperbolic_tangent_button">
+            <property name="label">tanh</property>
             <property name="visible">True</property>
-            <property name="label">×10&lt;sup&gt;&lt;i&gt;y&lt;/i&gt;&lt;/sup&gt;</property>
-            <property name="use_markup">True</property>
-          </object>
-        </child>
-      </object>
-      <packing>
-        <property name="left_attach">2</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="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Modulus divide</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">' mod '</property>
-      </object>
-      <packing>
-        <property name="left_attach">3</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_start_group_button">
-        <property name="label">(</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Start Group [(]</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'('</property>
-      </object>
-      <packing>
-        <property name="left_attach">4</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_end_group_button">
-        <property name="label">)</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">End Group [)]</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">')'</property>
-      </object>
-      <packing>
-        <property name="left_attach">5</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkMenuButton" id="calc_memory_button">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Memory</property>
-        <child internal-child="accessible">
-          <object class="AtkObject" id="calc_memory_button-atkobject">
-            <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the 
memory button">Memory</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Hyperbolic Tangent</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'tanh '</property>
           </object>
+          <packing>
+            <property name="left_attach">4</property>
+            <property name="top_attach">1</property>
+          </packing>
         </child>
         <child>
-          <object class="GtkHBox" id="hbox20">
+          <object class="GtkButton" id="calc_x_pow_y_button">
             <property name="visible">True</property>
-            <child>
-              <object class="GtkLabel" id="label23">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes" comments="The label on the memory 
button">x</property>
-                <attributes>
-                  <attribute name="style" value="italic"/>
-                </attributes>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Exponent [^ or **]</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'^'</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="calc_x_pow_y_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>
-              <packing>
-                <property name="position">0</property>
-              </packing>
             </child>
             <child>
-              <object class="GtkArrow" id="arrow14">
+              <object class="GtkLabel" id="x_pow_y_label">
                 <property name="visible">True</property>
-                <property name="arrow_type">down</property>
+                <property 
name="label">&lt;i&gt;x&lt;/i&gt;&lt;sup&gt;&lt;i&gt;y&lt;/i&gt;&lt;/sup&gt;</property>
+                <property name="use_markup">True</property>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="position">1</property>
-              </packing>
             </child>
           </object>
-        </child>
-      </object>
-      <packing>
-        <property name="left_attach">4</property>
-        <property name="top_attach">2</property>
-        <property name="width">2</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_abs_button">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Absolute Value [|]</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'|'</property>
-        <child internal-child="accessible">
-          <object class="AtkObject" id="calc_abs_button-atkobject">
-            <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the 
absolute value button">Absolute Value</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label1">
-            <property name="visible">True</property>
-            <property name="label">|&lt;i&gt;x&lt;/i&gt;|</property>
-            <property name="use_markup">True</property>
-          </object>
-        </child>
-      </object>
-      <packing>
-        <property name="left_attach">8</property>
-        <property name="top_attach">2</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_real_portion_button">
-        <property name="label">Re</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Real Component</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'Re '</property>
-      </object>
-      <packing>
-        <property name="left_attach">6</property>
-        <property name="top_attach">4</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_conjugate_button">
-        <property name="label">conj</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Complex conjugate</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'conj '</property>
-      </object>
-      <packing>
-        <property name="left_attach">8</property>
-        <property name="top_attach">4</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_arg_button">
-        <property name="label">Arg</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Complex argument</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'Arg '</property>
-      </object>
-      <packing>
-        <property name="left_attach">9</property>
-        <property name="top_attach">2</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_natural_logarithm_button">
-        <property name="label">ln</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Natural Logarithm</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'ln '</property>
-      </object>
-      <packing>
-        <property name="left_attach">9</property>
-        <property name="top_attach">3</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_logarithm_button">
-        <property name="label">log</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Logarithm</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'log '</property>
-      </object>
-      <packing>
-        <property name="left_attach">8</property>
-        <property name="top_attach">3</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_x_pow_y_button">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Exponent [^ or **]</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'^'</property>
-        <child internal-child="accessible">
-          <object class="AtkObject" id="calc_x_pow_y_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>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">2</property>
+          </packing>
         </child>
         <child>
-          <object class="GtkLabel" id="x_pow_y_label">
+          <object class="GtkButton" id="calc_inverse_button">
             <property name="visible">True</property>
-            <property name="label">&lt;i&gt;x&lt;/i&gt;&lt;sup&gt;&lt;i&gt;y&lt;/i&gt;&lt;/sup&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Inverse [Ctrl+I]</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'⁻¹'</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="calc_inverse_button-atkobject">
+                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the inverse button">Inverse</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label20">
+                <property name="visible">True</property>
+                <property name="label">&lt;i&gt;x&lt;/i&gt;&lt;sup&gt;−1&lt;/sup&gt;</property>
+                <property name="use_markup">True</property>
+                <property name="justify">center</property>
+              </object>
+            </child>
           </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">2</property>
+          </packing>
         </child>
-      </object>
-      <packing>
-        <property name="left_attach">6</property>
-        <property name="top_attach">3</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_root_button">
-        <property name="label">√</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Root [Ctrl+R]</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'√'</property>
-      </object>
-      <packing>
-        <property name="left_attach">7</property>
-        <property name="top_attach">3</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_undo_button">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Undo [Ctrl+Z]</property>
-        <property name="action_name">cal.undo</property>
         <child>
-          <object class="GtkImage" id="image2">
+          <object class="GtkButton" id="calc_eulers_number_button">
             <property name="visible">True</property>
-            <property name="icon-name">edit-undo-symbolic</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Euler’s Number</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'e'</property>
+            <child>
+              <object class="GtkLabel" id="eulers_number_label">
+                <property name="visible">True</property>
+                <property name="label">&lt;i&gt;e&lt;/i&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">2</property>
+          </packing>
         </child>
-      </object>
-      <packing>
-        <property name="left_attach">4</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_pi_button">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Pi [Ctrl+P]</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'π'</property>
         <child>
-          <object class="GtkLabel" id="pi_label">
+          <object class="GtkButton" id="calc_natural_logarithm_button">
+            <property name="label">ln</property>
             <property name="visible">True</property>
-            <property name="label">π</property>
-            <property name="use_markup">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Natural Logarithm</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'ln '</property>
           </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">2</property>
+          </packing>
         </child>
-      </object>
-      <packing>
-        <property name="left_attach">4</property>
-        <property name="top_attach">3</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="calc_eulers_number_button">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_underline">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Euler’s Number</property>
-        <property name="action_name">cal.insert-general</property>
-        <property name="action_target">'e'</property>
         <child>
-          <object class="GtkLabel" id="eulers_number_label">
+          <object class="GtkButton" id="calc_logarithm_button">
+            <property name="label">log</property>
             <property name="visible">True</property>
-            <property name="label">&lt;i&gt;e&lt;/i&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Logarithm</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'log '</property>
           </object>
+          <packing>
+            <property name="left_attach">4</property>
+            <property name="top_attach">2</property>
+          </packing>
         </child>
-      </object>
-      <packing>
-        <property name="left_attach">5</property>
-        <property name="top_attach">3</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkGrid" id="goniometric_buttons">
-        <property name="visible">True</property>
-        <property name="row-homogeneous">True</property>
-        <property name="column-homogeneous">True</property>
-        <property name="row_spacing">4</property>
-        <property name="column_spacing">4</property>
         <child>
-          <object class="GtkButton" id="calc_cosine_button">
-            <property name="label">cos</property>
+          <object class="GtkButton" id="calc_factorial_button">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Cosine</property>
+            <property name="tooltip_text" translatable="yes">Factorial [!]</property>
             <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'cos '</property>
+            <property name="action_target">'!'</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="calc_factorial_button-atkobject">
+                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the factorial button">Factorial</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label14">
+                <property name="visible">True</property>
+                <property name="label">&lt;i&gt;x&lt;/i&gt;!</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="left_attach">0</property>
+            <property name="top_attach">3</property>
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="calc_sine_button">
-            <property name="label">sin</property>
+          <object class="GtkButton" id="calc_abs_button">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Sine</property>
+            <property name="tooltip_text" translatable="yes">Absolute Value [|]</property>
             <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'sin '</property>
+            <property name="action_target">'|'</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="calc_abs_button-atkobject">
+                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the absolute value button">Absolute Value</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="label">|&lt;i&gt;x&lt;/i&gt;|</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="left_attach">1</property>
+            <property name="top_attach">3</property>
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="calc_tangent_button">
-            <property name="label">tan</property>
+          <object class="GtkButton" id="calc_imaginary_button">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Tangent</property>
             <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'tan '</property>
+            <property name="action_target">'i'</property>
+            <child>
+              <object class="GtkLabel" id="imaginary_label">
+                <property name="visible">True</property>
+                <property name="label">&lt;i&gt;i&lt;/i&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="left_attach">2</property>
+            <property name="top_attach">3</property>
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="calc_hyperbolic_sine_button">
-            <property name="label">sinh</property>
+          <object class="GtkButton" id="calc_real_portion_button">
+            <property name="label">Re</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Hyperbolic Sine</property>
+            <property name="tooltip_text" translatable="yes">Real Component</property>
             <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'sinh '</property>
+            <property name="action_target">'Re '</property>
           </object>
           <packing>
-            <property name="left_attach">0</property>
-            <property name="top_attach">1</property>
+            <property name="left_attach">3</property>
+            <property name="top_attach">3</property>
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="calc_hyperbolic_cosine_button">
-            <property name="label">cosh</property>
+          <object class="GtkButton" id="calc_imaginary_portion_button">
+            <property name="label">Im</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Hyperbolic Cosine</property>
+            <property name="tooltip_text" translatable="yes">Imaginary Component</property>
             <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'cosh '</property>
+            <property name="action_target">'Im '</property>
           </object>
           <packing>
-            <property name="left_attach">1</property>
-            <property name="top_attach">1</property>
+            <property name="left_attach">4</property>
+            <property name="top_attach">3</property>
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="calc_hyperbolic_tangent_button">
-            <property name="label">tanh</property>
+          <object class="GtkButton" id="calc_conjugate_button">
+            <property name="label">conj</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
             <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Hyperbolic Tangent</property>
+            <property name="tooltip_text" translatable="yes">Complex conjugate</property>
             <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'tanh '</property>
+            <property name="action_target">'conj '</property>
           </object>
           <packing>
-            <property name="left_attach">2</property>
-            <property name="top_attach">1</property>
+            <property name="left_attach">3</property>
+            <property name="top_attach">4</property>
           </packing>
         </child>
-      </object>
-      <packing>
-        <property name="left_attach">6</property>
-        <property name="top_attach">0</property>
-        <property name="width">4</property>
-        <property name="height">2</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkMenuButton" id="calc_function_button">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="focus_on_click">False</property>
-        <property name="tooltip_text" translatable="yes">Additional Functions</property>
-        <child internal-child="accessible">
-          <object class="AtkObject" id="calc_function_button-atkobject">
-            <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the 
store value button">Store</property>
+        <child>
+          <object class="GtkButton" id="calc_arg_button">
+            <property name="label">Arg</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Complex argument</property>
+            <property name="action_name">cal.insert-general</property>
+            <property name="action_target">'Arg '</property>
           </object>
+          <packing>
+            <property name="left_attach">4</property>
+            <property name="top_attach">4</property>
+          </packing>
         </child>
         <child>
-          <object class="GtkHBox" id="hbox2">
+          <object class="GtkMenuButton" id="calc_memory_button">
             <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Memory</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="calc_memory_button-atkobject">
+                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the memory button">Memory</property>
+              </object>
+            </child>
             <child>
-              <object class="GtkLabel" id="label5">
+              <object class="GtkHBox" id="hbox20">
                 <property name="visible">True</property>
-                <property name="label">f(x)</property>
+                <child>
+                  <object class="GtkLabel" id="label23">
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes" comments="The label on the memory 
button">x</property>
+                    <attributes>
+                      <attribute name="style" value="italic"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkArrow" id="arrow14">
+                    <property name="visible">True</property>
+                    <property name="arrow_type">down</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">4</property>
+            <property name="width">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkMenuButton" id="calc_function_button">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Additional Functions</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="calc_function_button-atkobject">
+                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the store value button">Store</property>
               </object>
-              <packing>
-                <property name="position">0</property>
-              </packing>
             </child>
             <child>
-              <object class="GtkArrow" id="arrow1">
+              <object class="GtkHBox" id="hbox2">
                 <property name="visible">True</property>
-                <property name="arrow_type">down</property>
+                <child>
+                  <object class="GtkLabel" id="label5">
+                    <property name="visible">True</property>
+                    <property name="label">f(x)</property>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkArrow" id="arrow1">
+                    <property name="visible">True</property>
+                    <property name="arrow_type">down</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="position">1</property>
-              </packing>
             </child>
+            <style>
+              <class name="fx-button"/>
+            </style>
           </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">4</property>
+          </packing>
         </child>
-        <style>
-          <class name="fx-button"/>
-        </style>
       </object>
       <packing>
-        <property name="left_attach">9</property>
-        <property name="top_attach">4</property>
+        <property name="name">advanced</property>
       </packing>
     </child>
-    <style>
-      <class name="math-buttons"/>
-    </style>
+  </object>
+  <object class="GtkSizeGroup">
+    <property name="mode">both</property>
+    <widgets>
+      <widget name="basic"/>
+      <widget name="advanced"/>
+    </widgets>
   </object>
 </interface>
diff --git a/src/buttons-programming.ui b/src/buttons-programming.ui
index f8e33b62..47f9b4ba 100644
--- a/src/buttons-programming.ui
+++ b/src/buttons-programming.ui
@@ -5,10 +5,19 @@
   <object class="GtkVBox" id="button_panel">
     <property name="visible">True</property>
     <property name="spacing">6</property>
+    <child>
+      <object class="GtkBox">
+        <property name="visible">True</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">6</property>
+        <style>
+          <class name="display-toolbar"/>
+        </style>
     <child>
       <object class="GtkBox" id="hbox1">
         <property name="visible">True</property>
         <property name="orientation">horizontal</property>
+        <property name="spacing">6</property>
         <child>
           <object class="GtkComboBoxText" id="base_combo">
             <property name="visible">True</property>
@@ -21,6 +30,34 @@
             </items>
           </object>
         </child>
+        <child>
+          <object class="GtkButton" id="undo_button">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="valign">center</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="label" translatable="yes">Undo</property>
+            <property name="tooltip_text" translatable="yes">Undo [Ctrl+Z]</property>
+            <property name="action_name">win.undo</property>
+            <style>
+              <class name="text-button"/>
+            </style>
+          </object>
+          <packing>
+            <property name="pack_type">end</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkSeparator">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+          </object>
+          <packing>
+            <property name="pack_type">end</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkLabel" id="base_label">
             <property name="visible">True</property>
@@ -30,14 +67,10 @@
             <property name="label" comments="Example content">FF₁₆ 256₁₀</property>
           </object>
           <packing>
-            <property name="expand">True</property>
+            <property name="pack_type">end</property>
           </packing>
         </child>
       </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="position">0</property>
-      </packing>
     </child>
     <child>
       <object class="GtkAlignment" id="bit_panel">
@@ -1223,1034 +1256,1108 @@
           </object>
         </child>
       </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="position">1</property>
-      </packing>
+    </child>
+      </object>
     </child>
     <child>
-      <object class="GtkGrid" id="advanced_panel">
+      <object class="HdyLeaflet">
         <property name="visible">True</property>
-        <property name="row-homogeneous">True</property>
-        <property name="column-homogeneous">True</property>
-        <property name="row_spacing">4</property>
-        <property name="column_spacing">4</property>
-        <child>
-          <object class="GtkButton" id="calc_root_button">
-            <property name="label">√</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Root [Ctrl+R]</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'√'</property>
-          </object>
-          <packing>
-            <property name="left_attach">7</property>
-            <property name="top_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_logarithm_button">
-            <property name="label">log</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Logarithm</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'log '</property>
-          </object>
-          <packing>
-            <property name="left_attach">7</property>
-            <property name="top_attach">3</property>
-          </packing>
-        </child>
+        <property name="child_transition_type">slide</property>
+        <property name="mode_transition_type">slide</property>
+        <property name="halign">center</property>
+        <property name="visible-child-name">basic</property>
+        <style>
+          <class name="math-buttons"/>
+        </style>
         <child>
-          <object class="GtkButton" id="calc_factor_button">
-            <property name="label">fact</property>
+          <object class="GtkGrid" id="basic">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Factorize [Ctrl+F]</property>
-            <property name="action_name">cal.factorize</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>
+            <property name="halign">center</property>
+            <property name="row-homogeneous">True</property>
+            <property name="column-homogeneous">True</property>
+            <property name="row_spacing">4</property>
+            <property name="column_spacing">4</property>
+            <child>
+              <object class="GtkGrid" id="digits">
+                <property name="visible">True</property>
+                <property name="row-homogeneous">True</property>
+                <property name="column-homogeneous">True</property>
+                <property name="row_spacing">4</property>
+                <property name="column_spacing">4</property>
+                <child>
+                  <object class="GtkButton" id="calc_0_button">
+                    <property name="label">0</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">0</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_1_button">
+                    <property name="label">1</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">1</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_2_button">
+                    <property name="label">2</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">2</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">2</property>
+                    <property name="top_attach">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_3_button">
+                    <property name="label">3</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">3</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">3</property>
+                    <property name="top_attach">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_4_button">
+                    <property name="label">4</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">4</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_5_button">
+                    <property name="label">5</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">5</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_6_button">
+                    <property name="label">6</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">6</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">2</property>
+                    <property name="top_attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_7_button">
+                    <property name="label">7</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">7</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">3</property>
+                    <property name="top_attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_8_button">
+                    <property name="label">8</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">8</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_9_button">
+                    <property name="label">9</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">9</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_10_button">
+                    <property name="label">A</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">10</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">2</property>
+                    <property name="top_attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_11_button">
+                    <property name="label">B</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">11</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">3</property>
+                    <property name="top_attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_12_button">
+                    <property name="label">C</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">12</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_13_button">
+                    <property name="label">D</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">13</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_14_button">
+                    <property name="label">E</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">14</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">2</property>
+                    <property name="top_attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="calc_15_button">
+                    <property name="label">F</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="action_name">cal.insert-digit</property>
+                    <property name="action_target">15</property>
+                    <style>
+                      <class name="number-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">3</property>
+                    <property name="top_attach">0</property>
+                  </packing>
+                </child>
               </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">3</property>
+                <property name="height">3</property>
+              </packing>
             </child>
-          </object>
-          <packing>
-            <property name="left_attach">7</property>
-            <property name="top_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_binary_logarithm_button">
-            <property name="label">log₂</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Binary Logarithm</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'log₂ '</property>
-          </object>
-          <packing>
-            <property name="left_attach">8</property>
-            <property name="top_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_abs_button">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Absolute Value [|]</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'|'</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="calc_abs_button-atkobject">
-                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the absolute value button">Absolute Value</property>
+            <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="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Modulus divide</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">' mod '</property>
               </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="top_attach">0</property>
+              </packing>
             </child>
             <child>
-              <object class="GtkLabel" id="label1">
+              <object class="GtkButton" id="calc_divide_button">
+                <property name="label">÷</property>
                 <property name="visible">True</property>
-                <property name="label">|&lt;i&gt;x&lt;/i&gt;|</property>
-                <property name="use_markup">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Divide [/]</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'÷'</property>
               </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="top_attach">1</property>
+              </packing>
             </child>
-          </object>
-          <packing>
-            <property name="left_attach">8</property>
-            <property name="top_attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_integer_portion_button">
-            <property name="label">int</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Integer Component</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'int '</property>
-          </object>
-          <packing>
-            <property name="left_attach">9</property>
-            <property name="top_attach">3</property>
-          </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="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Fractional Component</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'frac '</property>
-          </object>
-          <packing>
-            <property name="left_attach">9</property>
-            <property name="top_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_divide_button">
-            <property name="label">÷</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Divide [/]</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'÷'</property>
-          </object>
-          <packing>
-            <property name="left_attach">4</property>
-            <property name="top_attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_0_button">
-            <property name="label">0</property>
-            <property name="width_request">50</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">0</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">0</property>
-            <property name="top_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_multiply_button">
-            <property name="label">×</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Multiply [*]</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'×'</property>
-          </object>
-          <packing>
-            <property name="left_attach">4</property>
-            <property name="top_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_subtract_button">
-            <property name="label">−</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Subtract [-]</property>
-            <property name="action_name">cal.subtract</property>
-          </object>
-          <packing>
-            <property name="left_attach">4</property>
-            <property name="top_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_add_button">
-            <property name="label">+</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Add [+]</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'+'</property>
-          </object>
-          <packing>
-            <property name="left_attach">4</property>
-            <property name="top_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_result_button">
-            <property name="label" translatable="yes" comments="Label on the solve button (clicking this 
solves the displayed calculation)">=</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Calculate Result</property>
-            <property name="action_name">cal.solve</property>
-            <style>
-              <class name="suggested-action"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">6</property>
-            <property name="top_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_clear_button">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Clear Display [Escape]</property>
-            <property name="action_name">cal.clear</property>
-            <property name="label">C</property>
-          </object>
-          <packing>
-            <property name="left_attach">6</property>
-            <property name="top_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_1_button">
-            <property name="label">1</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">1</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="top_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_2_button">
-            <property name="label">2</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">2</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">2</property>
-            <property name="top_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_3_button">
-            <property name="label">3</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">3</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">3</property>
-            <property name="top_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_4_button">
-            <property name="label">4</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">4</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">0</property>
-            <property name="top_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_5_button">
-            <property name="label">5</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">5</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="top_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_6_button">
-            <property name="label">6</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">6</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">2</property>
-            <property name="top_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_7_button">
-            <property name="label">7</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">7</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">3</property>
-            <property name="top_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_8_button">
-            <property name="label">8</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">8</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">0</property>
-            <property name="top_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_9_button">
-            <property name="label">9</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">9</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="top_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_10_button">
-            <property name="label">A</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">10</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">2</property>
-            <property name="top_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_11_button">
-            <property name="label">B</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">11</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">3</property>
-            <property name="top_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_12_button">
-            <property name="label">C</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">12</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">0</property>
-            <property name="top_attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_13_button">
-            <property name="label">D</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">13</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="top_attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_14_button">
-            <property name="label">E</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">14</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">2</property>
-            <property name="top_attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_15_button">
-            <property name="label">F</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-digit</property>
-            <property name="action_target">15</property>
-            <style>
-              <class name="number-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">3</property>
-            <property name="top_attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkToggleButton" id="calc_subscript_button">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Subscript mode [Alt]</property>
-            <property name="action_name">cal.set-number-mode</property>
-            <property name="action_target">'subscript'</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="calc_subscript_button-atkobject">
-                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the subscript mode button">Subscript</property>
+            <child>
+              <object class="GtkButton" id="calc_numeric_point_button">
+                <property name="label" comments="Label is set in gtk.c to comply with LC flags">.</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="action_name">cal.insert-numeric-point</property>
+                <style>
+                  <class name="numeric-point-button"/>
+                </style>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">4</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="calc_multiply_button">
+                <property name="label">×</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Multiply [*]</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'×'</property>
               </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="top_attach">2</property>
+              </packing>
             </child>
             <child>
-              <object class="GtkLabel" id="label4">
+              <object class="GtkButton" id="calc_subtract_button">
+                <property name="label">−</property>
                 <property name="visible">True</property>
-                <property name="label">↓n</property>
-                <property name="use_markup">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Subtract [-]</property>
+                <property name="action_name">cal.subtract</property>
               </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="top_attach">3</property>
+              </packing>
             </child>
-          </object>
-          <packing>
-            <property name="left_attach">0</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkToggleButton" id="calc_superscript_button">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Superscript mode [Ctrl]</property>
-            <property name="action_name">cal.set-number-mode</property>
-            <property name="action_target">'superscript'</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="calc_superscript_button-atkobject">
-                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the superscript mode button">Superscript</property>
+            <child>
+              <object class="GtkButton" id="calc_add_button">
+                <property name="label">+</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Add [+]</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'+'</property>
               </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="top_attach">4</property>
+              </packing>
             </child>
             <child>
-              <object class="GtkLabel" id="label3">
+              <object class="GtkButton" id="calc_character_button">
+                <property name="label">á</property>
                 <property name="visible">True</property>
-                <property name="label">↑n</property>
-                <property name="use_markup">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Insert Character Code</property>
+                <property name="action_name">cal.insert-character</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="calc_character_button-atkobject">
+                    <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name 
for the insert character button">Insert Character</property>
+                  </object>
+                </child>
               </object>
+              <packing>
+                <property name="left_attach">4</property>
+                <property name="top_attach">0</property>
+              </packing>
             </child>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_numeric_point_button">
-            <property name="label" comments="Label is set in gtk.c to comply with LC flags">.</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="action_name">cal.insert-numeric-point</property>
-            <style>
-              <class name="numeric-point-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="left_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkMenuButton" id="calc_memory_button">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Memory</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="calc_store_button-atkobject">
-                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the store value button">Store</property>
+            <child>
+              <object class="GtkButton" id="calc_root_button">
+                <property name="label">√</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Root [Ctrl+R]</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'√'</property>
               </object>
+              <packing>
+                <property name="left_attach">4</property>
+                <property name="top_attach">1</property>
+              </packing>
             </child>
             <child>
-              <object class="GtkHBox" id="hbox20">
+              <object class="GtkButton" id="calc_x_squared_button">
                 <property name="visible">True</property>
-                <property name="spacing">3</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Square [Ctrl+2]</property>
+                <property name="action_name">cal.square</property>
+                <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>
                 <child>
-                  <object class="GtkLabel" id="label23">
+                  <object class="GtkLabel" id="x_squared_label">
                     <property name="visible">True</property>
-                    <property name="label" translatable="yes" comments="The label on the memory 
button">x</property>
+                    <property 
name="label">&lt;i&gt;x&lt;/i&gt;&lt;sup&gt;&lt;i&gt;2&lt;/i&gt;&lt;/sup&gt;</property>
+                    <property name="use_markup">True</property>
                   </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
                 </child>
+              </object>
+              <packing>
+                <property name="left_attach">4</property>
+                <property name="top_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="calc_clear_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Clear Display [Escape]</property>
+                <property name="action_name">cal.clear</property>
+                <style>
+                  <class name="destructive-action"/>
+                  <class name="image-button"/>
+                </style>
                 <child>
-                  <object class="GtkArrow" id="arrow14">
+                  <object class="GtkImage" id="calc_clear_icon">
                     <property name="visible">True</property>
-                    <property name="arrow_type">down</property>
+                    <property name="can_focus">False</property>
+                    <property name="icon_name">edit-clear-symbolic</property>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
               </object>
+              <packing>
+                <property name="left_attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="calc_start_group_button">
+                <property name="label">(</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Start Group [(]</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'('</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="calc_end_group_button">
+                <property name="label">)</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">End Group [)]</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">')'</property>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="top_attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="calc_result_button">
+                <property name="label" translatable="yes" comments="Label on the solve button (clicking this 
solves the displayed calculation)">=</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Calculate Result</property>
+                <property name="action_name">cal.solve</property>
+                <style>
+                  <class name="suggested-action"/>
+                </style>
+              </object>
+              <packing>
+                <property name="left_attach">4</property>
+                <property name="top_attach">3</property>
+                <property name="height">2</property>
+              </packing>
             </child>
           </object>
           <packing>
-            <property name="left_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_xor_button">
-            <property name="label">XOR</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Boolean Exclusive OR</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'⊻'</property>
-          </object>
-          <packing>
-            <property name="left_attach">5</property>
-            <property name="top_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_or_button">
-            <property name="label">OR</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Boolean OR</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'∨'</property>
-          </object>
-          <packing>
-            <property name="left_attach">5</property>
-            <property name="top_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_and_button">
-            <property name="label">AND</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Boolean AND</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'∧'</property>
-          </object>
-          <packing>
-            <property name="left_attach">5</property>
-            <property name="top_attach">2</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="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Modulus divide</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">' mod '</property>
-          </object>
-          <packing>
-            <property name="left_attach">5</property>
-            <property name="top_attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_start_group_button">
-            <property name="label">(</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Start Group [(]</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'('</property>
-          </object>
-          <packing>
-            <property name="left_attach">4</property>
+            <property name="name">basic</property>
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="calc_end_group_button">
-            <property name="label">)</property>
+          <object class="GtkSeparator">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">End Group [)]</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">')'</property>
+            <property name="orientation">vertical</property>
           </object>
-          <packing>
-            <property name="left_attach">5</property>
-          </packing>
         </child>
         <child>
-          <object class="GtkMenuButton" id="calc_shift_left_button">
+          <object class="GtkGrid" id="advanced">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Shift Left</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="calc_shift_left_button-atkobject">
-                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the shift left button">Shift Left</property>
+            <property name="halign">center</property>
+            <property name="row-homogeneous">True</property>
+            <property name="column-homogeneous">True</property>
+            <property name="row_spacing">4</property>
+            <property name="column_spacing">4</property>
+            <child>
+              <object class="GtkToggleButton" id="calc_subscript_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Subscript mode [Alt]</property>
+                <property name="action_name">cal.set-number-mode</property>
+                <property name="action_target">'subscript'</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="calc_subscript_button-atkobject">
+                    <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name 
for the subscript mode button">Subscript</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label4">
+                    <property name="visible">True</property>
+                    <property name="label">↓n</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkToggleButton" id="calc_superscript_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Superscript mode [Ctrl]</property>
+                <property name="action_name">cal.set-number-mode</property>
+                <property name="action_target">'superscript'</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="calc_superscript_button-atkobject">
+                    <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name 
for the superscript mode button">Superscript</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label3">
+                    <property name="visible">True</property>
+                    <property name="label">↑n</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="calc_factor_button">
+                <property name="label">a×b</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Factorize [Ctrl+F]</property>
+                <property name="action_name">cal.factorize</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>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="calc_x_pow_y_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Exponent [^ or **]</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'^'</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="calc_x_pow_y_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>
+                <child>
+                  <object class="GtkLabel" id="x_pow_y_label">
+                    <property name="visible">True</property>
+                    <property 
name="label">&lt;i&gt;x&lt;/i&gt;&lt;sup&gt;&lt;i&gt;y&lt;/i&gt;&lt;/sup&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="calc_inverse_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Inverse [Ctrl+I]</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'⁻¹'</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="calc_inverse_button-atkobject">
+                    <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name 
for the inverse button">Inverse</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label20">
+                    <property name="visible">True</property>
+                    <property name="label">&lt;i&gt;x&lt;/i&gt;&lt;sup&gt;−1&lt;/sup&gt;</property>
+                    <property name="use_markup">True</property>
+                    <property name="justify">center</property>
+                  </object>
+                </child>
               </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">2</property>
+              </packing>
             </child>
             <child>
-              <object class="GtkHBox" id="hbox11">
+              <object class="GtkButton" id="calc_factorial_button">
                 <property name="visible">True</property>
-                <property name="spacing">3</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Factorial [!]</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'!'</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="calc_factorial_button-atkobject">
+                    <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name 
for the factorial button">Factorial</property>
+                  </object>
+                </child>
                 <child>
-                  <object class="GtkLabel" id="label7">
+                  <object class="GtkLabel" id="label14">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="label">&lt;&lt;</property>
+                    <property name="label">&lt;i&gt;x&lt;/i&gt;!</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="calc_abs_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Absolute Value [|]</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'|'</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="calc_abs_button-atkobject">
+                    <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name 
for the absolute value button">Absolute Value</property>
                   </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
                 </child>
                 <child>
-                  <object class="GtkArrow" id="arrow5">
+                  <object class="GtkLabel" id="label1">
                     <property name="visible">True</property>
-                    <property name="arrow_type">down</property>
+                    <property name="label">|&lt;i&gt;x&lt;/i&gt;|</property>
+                    <property name="use_markup">True</property>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
               </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">3</property>
+              </packing>
             </child>
-          </object>
-          <packing>
-            <property name="left_attach">6</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkMenuButton" id="calc_shift_right_button">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Shift Right</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="calc_shift_right_button-atkobject">
-                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the shift right button">Shift Right</property>
+            <child>
+              <object class="GtkButton" id="calc_logarithm_button">
+                <property name="label">log</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Logarithm</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'log '</property>
               </object>
+              <packing>
+                <property name="left_attach">4</property>
+                <property name="top_attach">2 </property>
+              </packing>
             </child>
             <child>
-              <object class="GtkHBox" id="hbox10">
+              <object class="GtkButton" id="calc_binary_logarithm_button">
+                <property name="label">log₂</property>
                 <property name="visible">True</property>
-                <property name="spacing">3</property>
-                <child>
-                  <object class="GtkLabel" id="label6">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="label">&gt;&gt;</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Binary Logarithm</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'log₂ '</property>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="top_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="calc_integer_portion_button">
+                <property name="label">int</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Integer Component</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'int '</property>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="top_attach">3</property>
+              </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="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Fractional Component</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'frac '</property>
+              </object>
+              <packing>
+                <property name="left_attach">4</property>
+                <property name="top_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkMenuButton" id="calc_memory_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Memory</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="calc_store_button-atkobject">
+                    <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name 
for the store value button">Store</property>
                   </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
                 </child>
                 <child>
-                  <object class="GtkArrow" id="arrow4">
+                  <object class="GtkHBox" id="hbox20">
                     <property name="visible">True</property>
-                    <property name="arrow_type">down</property>
+                    <property name="spacing">3</property>
+                    <child>
+                      <object class="GtkLabel" id="label23">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes" comments="The label on the memory 
button">x</property>
+                      </object>
+                      <packing>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkArrow" id="arrow14">
+                        <property name="visible">True</property>
+                        <property name="arrow_type">down</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
               </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">4</property>
+                <property name="width">2</property>
+              </packing>
             </child>
-          </object>
-          <packing>
-            <property name="left_attach">7</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_character_button">
-            <property name="label">á</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Insert Character Code</property>
-            <property name="action_name">cal.insert-character</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="calc_character_button-atkobject">
-                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the insert character button">Insert Character</property>
+            <child>
+              <object class="GtkButton" id="calc_xor_button">
+                <property name="label">XOR</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Boolean Exclusive OR</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'⊻'</property>
               </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="top_attach">2</property>
+              </packing>
             </child>
-          </object>
-          <packing>
-            <property name="left_attach">8</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_not_button">
-            <property name="label">NOT</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Boolean NOT</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'¬'</property>
-          </object>
-          <packing>
-            <property name="left_attach">6</property>
-            <property name="top_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_factorial_button">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Factorial [!]</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'!'</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="calc_factorial_button-atkobject">
-                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the factorial button">Factorial</property>
+            <child>
+              <object class="GtkButton" id="calc_or_button">
+                <property name="label">OR</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Boolean OR</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'∨'</property>
               </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="top_attach">1</property>
+              </packing>
             </child>
             <child>
-              <object class="GtkLabel" id="label14">
+              <object class="GtkButton" id="calc_and_button">
+                <property name="label">AND</property>
                 <property name="visible">True</property>
-                <property name="label">&lt;i&gt;x&lt;/i&gt;!</property>
-                <property name="use_markup">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Boolean AND</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'∧'</property>
               </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="top_attach">0</property>
+              </packing>
             </child>
-          </object>
-          <packing>
-            <property name="left_attach">8</property>
-            <property name="top_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_inverse_button">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Inverse [Ctrl+I]</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'⁻¹'</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="calc_inverse_button-atkobject">
-                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the inverse button">Inverse</property>
+            <child>
+              <object class="GtkMenuButton" id="calc_shift_left_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Shift Left</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="calc_shift_left_button-atkobject">
+                    <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name 
for the shift left button">Shift Left</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkHBox" id="hbox11">
+                    <property name="visible">True</property>
+                    <property name="spacing">3</property>
+                    <child>
+                      <object class="GtkLabel" id="label7">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="label">&lt;&lt;</property>
+                      </object>
+                      <packing>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkArrow" id="arrow5">
+                        <property name="visible">True</property>
+                        <property name="arrow_type">down</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
               </object>
+              <packing>
+                <property name="left_attach">3</property>
+              </packing>
             </child>
             <child>
-              <object class="GtkLabel" id="label20">
+              <object class="GtkMenuButton" id="calc_shift_right_button">
                 <property name="visible">True</property>
-                <property name="label">&lt;i&gt;x&lt;/i&gt;&lt;sup&gt;−1&lt;/sup&gt;</property>
-                <property name="use_markup">True</property>
-                <property name="justify">center</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Shift Right</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="calc_shift_right_button-atkobject">
+                    <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name 
for the shift right button">Shift Right</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkHBox" id="hbox10">
+                    <property name="visible">True</property>
+                    <property name="spacing">3</property>
+                    <child>
+                      <object class="GtkLabel" id="label6">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="label">&gt;&gt;</property>
+                      </object>
+                      <packing>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkArrow" id="arrow4">
+                        <property name="visible">True</property>
+                        <property name="arrow_type">down</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
               </object>
+              <packing>
+                <property name="left_attach">4</property>
+              </packing>
             </child>
-          </object>
-          <packing>
-            <property name="left_attach">9</property>
-            <property name="top_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_x_pow_y_button">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Exponent [^ or **]</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'^'</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="calc_x_pow_y_button-atkobject">
-                <property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for 
the exponentiation (x to the power of y) button">Exponent</property>
+            <child>
+              <object class="GtkButton" id="calc_not_button">
+                <property name="label">NOT</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Boolean NOT</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'¬'</property>
               </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="top_attach">3</property>
+              </packing>
             </child>
             <child>
-              <object class="GtkLabel" id="x_pow_y_label">
+              <object class="GtkButton" id="calc_ones_complement_button">
+                <property name="label">ones</property>
                 <property name="visible">True</property>
-                <property 
name="label">&lt;i&gt;x&lt;/i&gt;&lt;sup&gt;&lt;i&gt;y&lt;/i&gt;&lt;/sup&gt;</property>
-                <property name="use_markup">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Ones’ Complement</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'ones '</property>
               </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="top_attach">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="calc_twos_complement_button">
+                <property name="label">twos</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="tooltip_text" translatable="yes">Two’s Complement</property>
+                <property name="action_name">cal.insert-general</property>
+                <property name="action_target">'twos '</property>
+              </object>
+              <packing>
+                <property name="left_attach">4</property>
+                <property name="top_attach">1</property>
+              </packing>
             </child>
           </object>
           <packing>
-            <property name="left_attach">8</property>
-            <property name="top_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_ones_complement_button">
-            <property name="label">ones</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Ones’ Complement</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'ones '</property>
-          </object>
-          <packing>
-            <property name="left_attach">6</property>
-            <property name="top_attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_twos_complement_button">
-            <property name="label">twos</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="tooltip_text" translatable="yes">Two’s Complement</property>
-            <property name="action_name">cal.insert-general</property>
-            <property name="action_target">'twos '</property>
-          </object>
-          <packing>
-            <property name="left_attach">7</property>
-            <property name="top_attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="calc_trunc_button">
-            <property name="label">trunc</property>
-            <property name="visible">False</property>
-            <property name="can_focus">False</property>
-            <property name="receives_default">False</property>
-            <property name="use_underline">False</property>
-            <property name="focus_on_click">False</property>
-          </object>
-          <packing>
-            <property name="left_attach">8</property>
-            <property name="top_attach">1</property>
+            <property name="name">advanced</property>
           </packing>
         </child>
-        <child>
-          <placeholder/>
-        </child>
-        <style>
-          <class name="math-buttons"/>
-        </style>
       </object>
-      <packing>
-        <property name="position">2</property>
-      </packing>
     </child>
   </object>
+  <object class="GtkSizeGroup">
+    <property name="mode">both</property>
+    <widgets>
+      <widget name="basic"/>
+      <widget name="advanced"/>
+    </widgets>
+  </object>
   <object class="GtkDialog" id="character_code_dialog">
     <property name="border_width">6</property>
     <property name="title" translatable="yes" comments="Title of insert character code dialog">Insert 
Character Code</property>
diff --git a/src/calculator.css b/src/calculator.css
index a97b1e8c..350f748c 100644
--- a/src/calculator.css
+++ b/src/calculator.css
@@ -15,15 +15,68 @@
   padding: 0px 12px;
 }
 
-window > grid {
-  padding: 12px;
+/* window > grid { */
+/*   padding: 12px; */
+/* } */
+
+mathdisplay {
+  margin-top: 12px;
+  margin-left: 12px;
+  margin-right: 12px;
+  border-radius: 5px 5px 0 0;
 }
 
+.display-toolbar {
+  margin-left: 12px;
+  margin-right: 12px;
+}
+
+/* Copied from .inline-toolbar */
+.display-toolbar {
+  /* @extend %toolbar */
+  -GtkWidget-window-dragging: true;
+  padding: 4px;
+  background-color: @theme_bg_color;
+
+  /* @extend %darkbar */
+  border-style: solid;
+  border-color: @borders;
+  background-color: mix(@theme_bg_color, @borders, 0.7);
+
+  /* .inline-toolbar */
+  padding: 3px;
+  border-width: 0 1px 1px;
+  border-radius: 0  0 5px 5px;
+}
+
+/* Copied from .inline-toolbar */
+.display-toolbar:backdrop {
+  /* @extend %darkbar */
+  border-color: @unfocused_borders;
+  /* background-color: @theme_backdrop_dark_fill; */
+  background-color: mix(@unfocused_borders, @theme_unfocused_bg_color, 0.35);;
+  box-shadow: none;
+  /* transition: @theme_backdrop_transition; */
+  transition: 200ms ease-out
+}
+
+.math-buttons > grid {
+  min-height: 316px;
+  min-width: 316px;
+  margin-left: 12px;
+  margin-right: 12px;
+  margin-top: 6px;
+  margin-bottom: 12px;
+}
 
 .math-buttons button {
+  /* Counter the button.text-button style. */
+  padding: 4px;
 }
 
   .math-buttons .number-button {
+    font-size: 1.2em;
+    font-weight: bolder;
   }
 
   .math-buttons .numeric-point-button {
@@ -42,6 +95,7 @@ window > grid {
 
 .history-view {
   border-width: 0 0 1px 0;
+  border-radius: 5px 5px 0 0;
 }
 
 .history-view, .history-entry {
diff --git a/src/gnome-calculator.vala b/src/gnome-calculator.vala
index be9e84d1..880828ca 100644
--- a/src/gnome-calculator.vala
+++ b/src/gnome-calculator.vala
@@ -33,7 +33,7 @@ public class Calculator : Gtk.Application
         { "new-window", new_window_cb, null, null, null },
         { "preferences", show_preferences_cb, null, null, null },
         { "shortcuts", keyboard_shortcuts_cb, null, null, null },
-        { "help", help_cb, null, null, null },
+        // { "help", help_cb, null, null, null },
         { "about", about_cb, null, null, null },
         { "quit", quit_cb, null, null, null },
     };
@@ -401,6 +401,8 @@ public class Calculator : Gtk.Application
         Intl.bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
         Intl.textdomain (GETTEXT_PACKAGE);
 
+        Hdy.init (ref args);
+
         /* Seed random number generator. */
         var now = new DateTime.now_utc ();
         Random.set_seed (now.get_microsecond ());
diff --git a/src/math-buttons.vala b/src/math-buttons.vala
index 694ec7f1..c1381b5b 100644
--- a/src/math-buttons.vala
+++ b/src/math-buttons.vala
@@ -108,7 +108,6 @@ public class MathButtons : Gtk.Box
     public MathButtons (MathEquation equation)
     {
         Object (orientation: Gtk.Orientation.VERTICAL, vexpand_set: true);
-        spacing = 6;
         show.connect (load_buttons);
         this.equation = equation;
 
diff --git a/src/math-converter.ui b/src/math-converter.ui
index 9ec03820..a4c704d4 100644
--- a/src/math-converter.ui
+++ b/src/math-converter.ui
@@ -2,25 +2,23 @@
 <!-- Generated with glade 3.19.0 -->
 <interface>
   <requires lib="gtk+" version="3.16"/>
-  <template class="MathConverter" parent="GtkGrid">
+  <template class="MathConverter" parent="GtkBox">
     <property name="visible">False</property>
     <property name="can_focus">False</property>
-    <property name="row_spacing">6</property>
-    <property name="column_spacing">6</property>
+    <property name="spacing">6</property>
+    <style>
+      <class name="display-toolbar"/>
+    </style>
     <child>
-      <object class="GtkButton" id="swap_button">
-        <property name="label">⇆</property>
+      <object class="GtkLabel" id="from_label">
         <property name="visible">True</property>
+        <property name="sensitive">True</property>
         <property name="can_focus">False</property>
-        <property name="receives_default">False</property>
-        <property name="tooltip_text" translatable="yes">Switch conversion units</property>
-        <property name="relief">none</property>
-        <signal name="clicked" handler="swap_button_clicked_cb" swapped="no"/>
+        <property name="valign">center</property>
+        <property name="justify">center</property>
+        <property name="xalign">0</property>
+        <property name="yalign">0</property>
       </object>
-      <packing>
-        <property name="left_attach">3</property>
-        <property name="top_attach">0</property>
-      </packing>
     </child>
     <child>
       <object class="GtkButton" id="in_button">
@@ -28,14 +26,7 @@
         <property name="can_focus">False</property>
         <property name="label" translatable="yes"> to </property>
         <signal name="clicked" handler="convert_button_clicked_cb" swapped="no"/>
-        <style>
-          <class name="flat"/>
-        </style>
       </object>
-      <packing>
-        <property name="left_attach">1</property>
-        <property name="top_attach">0</property>
-      </packing>
     </child>
     <child>
       <object class="GtkComboBox" id="from_combo">
@@ -49,10 +40,29 @@
           </attributes>
         </child>
       </object>
-      <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">0</property>
-      </packing>
+    </child>
+    <child>
+      <object class="GtkLabel" id="convert_equals">
+        <property name="visible">True</property>
+        <property name="sensitive">True</property>
+        <property name="can_focus">False</property>
+        <property name="valign">center</property>
+        <property name="justify">center</property>
+        <property name="xalign">0</property>
+        <property name="yalign">0</property>
+        <property name="label" translatable="yes" context="convertion equals label">=</property>
+      </object>
+    </child>
+    <child>
+      <object class="GtkLabel" id="to_label">
+        <property name="visible">True</property>
+        <property name="sensitive">True</property>
+        <property name="can_focus">False</property>
+        <property name="valign">center</property>
+        <property name="justify">center</property>
+        <property name="xalign">0</property>
+        <property name="yalign">0</property>
+      </object>
     </child>
     <child>
       <object class="GtkComboBox" id="to_combo">
@@ -67,70 +77,44 @@
           </attributes>
         </child>
       </object>
+    </child>
+    <child>
+      <object class="GtkButton" id="swap_button">
+        <property name="label">⇆</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="receives_default">False</property>
+        <property name="tooltip_text" translatable="yes">Switch conversion units</property>
+        <signal name="clicked" handler="swap_button_clicked_cb" swapped="no"/>
+      </object>
+    </child>
+    <child>
+      <object class="GtkButton" id="undo_button">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">True</property>
+        <property name="valign">center</property>
+        <property name="use_underline">True</property>
+        <property name="focus_on_click">False</property>
+        <property name="label" translatable="yes">Undo</property>
+        <property name="tooltip_text" translatable="yes">Undo [Ctrl+Z]</property>
+        <property name="action_name">win.undo</property>
+        <style>
+          <class name="text-button"/>
+        </style>
+      </object>
       <packing>
-        <property name="left_attach">2</property>
-        <property name="top_attach">0</property>
+        <property name="pack_type">end</property>
       </packing>
     </child>
     <child>
-      <object class="GtkBox" id="result_holder">
+      <object class="GtkSeparator">
         <property name="visible">True</property>
-        <property name="orientation">horizontal</property>
-        <property name="sensitive">True</property>
-        <property name="spacing">6</property>
         <property name="can_focus">False</property>
-        <property name="halign">end</property>
-        <property name="valign">center</property>
-        <property name="hexpand">True</property>
-        <property name="vexpand">False</property>
-        <child>
-          <object class="GtkLabel" id="from_label">
-            <property name="visible">True</property>
-            <property name="sensitive">True</property>
-            <property name="can_focus">False</property>
-            <property name="halign">start</property>
-            <property name="valign">center</property>
-            <property name="hexpand">True</property>
-            <property name="vexpand">False</property>
-            <property name="justify">center</property>
-            <property name="xalign">0</property>
-            <property name="yalign">0</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkLabel" id="convert_equals">
-            <property name="visible">True</property>
-            <property name="sensitive">True</property>
-            <property name="can_focus">False</property>
-            <property name="halign">center</property>
-            <property name="valign">center</property>
-            <property name="hexpand">False</property>
-            <property name="vexpand">False</property>
-            <property name="justify">center</property>
-            <property name="xalign">0</property>
-            <property name="yalign">0</property>
-            <property name="label" translatable="yes" context="convertion equals label">=</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkLabel" id="to_label">
-            <property name="visible">True</property>
-            <property name="sensitive">True</property>
-            <property name="can_focus">False</property>
-            <property name="halign">end</property>
-            <property name="valign">center</property>
-            <property name="hexpand">True</property>
-            <property name="vexpand">False</property>
-            <property name="justify">center</property>
-            <property name="xalign">0</property>
-            <property name="yalign">0</property>
-          </object>
-          <packing>
-            <property name="expand">false</property>
-            <property name="fill">true</property>
-          </packing>
-        </child>
       </object>
+      <packing>
+        <property name="pack_type">end</property>
+      </packing>
     </child>
   </template>
 </interface>
diff --git a/src/math-converter.vala b/src/math-converter.vala
index ee335891..dd0b5af3 100644
--- a/src/math-converter.vala
+++ b/src/math-converter.vala
@@ -9,7 +9,7 @@
  */
 
 [GtkTemplate (ui = "/org/gnome/calculator/math-converter.ui")]
-public class MathConverter : Gtk.Grid
+public class MathConverter : Gtk.Box
 {
     private MathEquation equation = null;
 
@@ -27,10 +27,16 @@ public class MathConverter : Gtk.Grid
     [GtkChild]
     private Gtk.Label to_label;
 
+    private Serializer serializer;
+
     public signal void changed ();
 
     construct
     {
+        serializer = new Serializer (DisplayFormat.AUTOMATIC, 10, 2);
+        serializer.set_leading_digits (6);
+        serializer.set_show_thousands_separators (true);
+
         from_combo.set_cell_data_func (from_renderer, from_cell_data_func);
         CurrencyManager.get_default ().updated.connect (() => { update_result_label (); });
 
@@ -106,8 +112,8 @@ public class MathConverter : Gtk.Grid
         var z = convert_equation (x, out source_unit, out target_unit);
         if (z != null)
         {
-            var source_text = source_unit.format (x);
-            var target_text = target_unit.format (z);
+            var source_text = serializer.to_string (x);
+            var target_text = serializer.to_string (z);
             from_label.set_text (source_text);
             to_label.set_text (target_text);
         }
diff --git a/src/math-display.vala b/src/math-display.vala
index a54bb778..c8866649 100644
--- a/src/math-display.vala
+++ b/src/math-display.vala
@@ -24,6 +24,10 @@ public class MathDisplay : Gtk.Viewport
     /* Spinner widget that shows if we're calculating a response */
     Gtk.Spinner spinner;
 
+    static construct {
+        set_css_name ("mathdisplay");
+    }
+
     public MathDisplay (MathEquation equation)
     {
         _equation = equation;
diff --git a/src/math-window.ui b/src/math-window.ui
index 2b3f3af6..e10d2339 100644
--- a/src/math-window.ui
+++ b/src/math-window.ui
@@ -86,10 +86,6 @@
         <property name="vexpand">True</property>
         <property name="border_width">0</property>
         <property name="orientation">vertical</property>
-        <property name="row_spacing">6</property>
-        <child>
-          <placeholder/>
-        </child>
         <child>
           <object class="MathConverter" id="converter">
             <property name="visible">False</property>
@@ -153,6 +149,18 @@
             </style>
           </object>
         </child>
+        <child>
+          <object class="GtkButton" id="undo_button">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <property name="focus_on_click">False</property>
+            <style>
+              <class name="image-button"/>
+            </style>
+          </object>
+        </child>
         <child>
           <object class="GtkMenuButton" id="primary_menu_button">
             <property name="visible">True</property> <!-- Disabled until 
https://wiki.gnome.org/Initiatives/GnomeGoals/AppMenuRetirement is confirmed -->
diff --git a/src/meson.build b/src/meson.build
index eda7295a..da366109 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -24,6 +24,7 @@ gnome_calculator_deps = [
   gobject,
   gtk,
   gtksourceview,
+  libhandy,
   mpc,
   mpfr,
   posix,
@@ -40,6 +41,7 @@ gnome_calculator_vala_flags = [
 
 gnome_calculator_c_flags = [
   '-include', 'config.h',
+  '-DHANDY_USE_UNSTABLE_API',
 ]
 
 gnome_calculator_includes = [


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