[gcalctool] Add shortcuts to change base (Ctrl+B, Ctrl+O, Ctrl+D, Ctrl+H), and change the displayed number base
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gcalctool] Add shortcuts to change base (Ctrl+B, Ctrl+O, Ctrl+D, Ctrl+H), and change the displayed number base
- Date: Tue, 23 Feb 2010 01:14:21 +0000 (UTC)
commit 1c355644c9ebacf69b0d4613f6b2bdf6d5a515a0
Author: Robert Ancell <robert ancell gmail com>
Date: Tue Feb 23 11:38:56 2010 +1100
Add shortcuts to change base (Ctrl+B, Ctrl+O, Ctrl+D, Ctrl+H), and change the displayed number base on results
NEWS | 5 ++++
data/gcalctool.ui | 6 ++--
src/display.c | 16 ++++++++++++++
src/display.h | 2 +
src/gtk.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++------
5 files changed, 79 insertions(+), 10 deletions(-)
---
diff --git a/NEWS b/NEWS
index 74f6a59..7bcf80d 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,11 @@
* All Rights Reserved.
*/
+Overview of changes in gcalctool 5.29.92
+
+ * Add shortcuts to change base (Ctrl+B, Ctrl+O, Ctrl+D, Ctrl+H), and change
+ the displayed number base on results.
+
Overview of changes in gcalctool 5.29.91
* Fix bug where backspace deletes all input in locales with no thousands
diff --git a/data/gcalctool.ui b/data/gcalctool.ui
index 56b0cb9..37983b6 100644
--- a/data/gcalctool.ui
+++ b/data/gcalctool.ui
@@ -3409,7 +3409,7 @@
<property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the base 2 button">Base 2</property>
</object>
</child>
- <signal name="clicked" handler="button_cb"/>
+ <signal name="clicked" handler="base_cb"/>
<child>
<object class="GtkLabel" id="base_2_label">
<property name="visible">True</property>
@@ -3440,7 +3440,7 @@
<property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the base 8 button">Base 8</property>
</object>
</child>
- <signal name="clicked" handler="button_cb"/>
+ <signal name="clicked" handler="base_cb"/>
<child>
<object class="GtkLabel" id="base_8_label">
<property name="visible">True</property>
@@ -3469,7 +3469,7 @@
<property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the base 16 button">Base 16</property>
</object>
</child>
- <signal name="clicked" handler="button_cb"/>
+ <signal name="clicked" handler="base_cb"/>
<child>
<object class="GtkLabel" id="base_16_label">
<property name="visible">True</property>
diff --git a/src/display.c b/src/display.c
index 62e9b99..d76f61d 100644
--- a/src/display.c
+++ b/src/display.c
@@ -295,6 +295,22 @@ display_set_error(GCDisplay *display, const char *message)
}
+void
+display_convert(GCDisplay *display, DisplayFormat format)
+{
+ DisplayFormat old_format;
+
+ if (!display_is_result (display))
+ return;
+
+ /* FIXME: A bit hacky... */
+ old_format = display->format;
+ display->format = format;
+ display_set_answer(display);
+ display->format = old_format;
+}
+
+
static void
copy_state(GCDisplayState *dst, GCDisplayState *src)
{
diff --git a/src/display.h b/src/display.h
index 1ccda3b..e639b01 100644
--- a/src/display.h
+++ b/src/display.h
@@ -96,6 +96,8 @@ void display_set_string(GCDisplay *display, const char *, int);
void display_set_cursor(GCDisplay *display, int);
void display_set_error(GCDisplay *display, const char *);
+void display_convert(GCDisplay *display, DisplayFormat format);
+
void display_clear_stack(GCDisplay *);
void display_push(GCDisplay *);
void display_pop(GCDisplay *);
diff --git a/src/gtk.c b/src/gtk.c
index eab5357..f001525 100644
--- a/src/gtk.c
+++ b/src/gtk.c
@@ -75,9 +75,6 @@ static ButtonData button_data[] = {
{"hyperbolic_cosine", "cosh"},
{"hyperbolic_tangent", "tanh"},
{"inverse", "�¹"},
- {"base_2", "â??"},
- {"base_8", "â??"},
- {"base_16", "â??â??"},
{"and", " AND "},
{"or", " OR "},
{"xor", " XOR "},
@@ -1140,6 +1137,38 @@ digit_cb(GtkWidget *widget, GdkEventButton *event)
}
+static void
+do_base(gint base)
+{
+ if (display_is_result(&v->display)) {
+ if (base == 2)
+ display_convert (&v->display, BIN);
+ else if (base == 8)
+ display_convert (&v->display, OCT);
+ else if (base == 16)
+ display_convert (&v->display, HEX);
+ else
+ display_convert (&v->display, DEC);
+ }
+ else {
+ if (base == 2)
+ do_text("â??");
+ else if (base == 8)
+ do_text("â??");
+ else if (base == 16)
+ do_text("â??â??");
+ }
+}
+
+
+G_MODULE_EXPORT
+void
+base_cb(GtkWidget *widget, GdkEventButton *event)
+{
+ do_base(GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "base")));
+}
+
+
G_MODULE_EXPORT
void
button_cb(GtkWidget *widget, GdkEventButton *event)
@@ -1182,8 +1211,11 @@ main_window_key_press_cb(GtkWidget *widget, GdkEventKey *event)
if (state == GDK_CONTROL_MASK) {
switch(event->keyval)
{
- case GDK_u:
- do_text("µ");
+ case GDK_b:
+ do_base(2);
+ return TRUE;
+ case GDK_d:
+ do_base(10);
return TRUE;
case GDK_e:
do_text("Ã?10");
@@ -1192,15 +1224,24 @@ main_window_key_press_cb(GtkWidget *widget, GdkEventKey *event)
case GDK_f:
do_button(FN_FACTORIZE, NULL);
return TRUE;
- case GDK_r:
- do_text("â??");
+ case GDK_h:
+ do_base(16);
return TRUE;
case GDK_i:
do_text("�¹");
return TRUE;
+ case GDK_o:
+ do_base(8);
+ return TRUE;
case GDK_p:
do_text("Ï?");
return TRUE;
+ case GDK_r:
+ do_text("â??");
+ return TRUE;
+ case GDK_u:
+ do_text("µ");
+ return TRUE;
}
}
if (state == GDK_CONTROL_MASK ||
@@ -1579,6 +1620,11 @@ create_main_window()
set_string_data(X.ui, name, "calc_subscript_text", subscript_digits[i]);
set_string_data(X.ui, name, "calc_superscript_text", superscript_digits[i]);
}
+
+ /* Set base button data */
+ set_int_data(X.ui, "calc_base_2_button", "base", 2);
+ set_int_data(X.ui, "calc_base_8_button", "base", 8);
+ set_int_data(X.ui, "calc_base_16_button", "base", 16);
/* Connect menus to popup buttons */
set_data(X.ui, "calc_shift_left_button", "calc_menu", GET_WIDGET("left_shift_popup"));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]