[gcalctool/gcalctool-newui2] ...



commit bae22513d4179d83f1940b39309e5a66ea79f3ce
Author: Robert Ancell <robert ancell gmail com>
Date:   Sat Aug 15 11:06:41 2009 -0700

    ...

 data/gcalctool.schemas.in |   78 +++++++----------
 data/gcalctool.ui         |    4 +-
 src/calctool.c            |    5 -
 src/functions.c           |  103 ---------------------
 src/functions.h           |    5 -
 src/get.h                 |    7 +-
 src/gtk.c                 |  216 ++++++++++++++------------------------------
 src/ui.h                  |   10 --
 8 files changed, 105 insertions(+), 323 deletions(-)
---
diff --git a/data/gcalctool.schemas.in b/data/gcalctool.schemas.in
index b31dfde..0adc8f4 100644
--- a/data/gcalctool.schemas.in
+++ b/data/gcalctool.schemas.in
@@ -21,61 +21,45 @@ To change the gconftool target use the - -config-source=blah option to gconftool
       <type>int</type>
       <default>9</default>
       <locale name="C">
-        <short>Accuracy value</short>
+        <short>Number of digits after numeric point</short>
         <long>
-          The number of digits displayed after the numeric point.
-          This value must be in the range 0 to 9.
-        </long>
-      </locale>
-    </schema>
-    <schema>
-      <applyto>/apps/gcalctool/base</applyto>
-      <key>/schemas/apps/gcalctool/base</key>
-      <owner>gcalctool</owner>
-      <type>string</type>
-      <default>DEC</default>
-      <locale name="C">
-        <short>Numeric Base</short>
-        <long>
-          The initial numeric base. Valid values are 
-          BIN (binary)
-          OCT (octal)
-          DEC (decimal)
-          HEX (hexadecimal)
+          The number of digits displayed after the numeric point (0-N)
         </long>
       </locale>
     </schema>
     <schema> 
-      <applyto>/apps/gcalctool/display</applyto> 
-      <key>/schemas/apps/gcalctool/display</key> 
+      <applyto>/apps/gcalctool/result_format</applyto>
+      <key>/schemas/apps/gcalctool/result_format</key> 
       <owner>gcalctool</owner> 
       <type>string</type>
-      <default>FIX</default> 
+      <default>decimal</default> 
       <locale name="C"> 
-        <short>Display Mode</short> 
+        <short>Display format for results</short> 
         <long> 
-          The initial display mode. Valid values are
-            ENG (engineering) 
-            FIX (fixed-point)
-            SCI (scientific)
+          The format to provide results in.  Valid values:
+            "decimal" - in decimal form, e.g. "2783.25"
+            "scientific" - in scientific form, e.g. "2.78325*10^3"
+            "engineering" - in engineering form, e.g. "2.78325k"
+            "binary" - in binary form, e.g. "101011011111.01â??"
+            "octal" - in octal form, e.g. "5337.2â??"
+            "hexadecimal" - in hexadecimal form, e.g. "ADF.4â??â??"
         </long> 
       </locale> 
     </schema>
     <schema>
-      <applyto>/apps/gcalctool/mode</applyto>
-      <key>/schemas/apps/gcalctool/mode</key>
+      <applyto>/apps/gcalctool/button_layout</applyto>
+      <key>/schemas/apps/gcalctool/button_layout</key>
       <owner>gcalctool</owner>
       <type>string</type>
-      <default>BASIC</default>
+      <default>basic</default>
       <locale name="C"> 
-        <short>Mode</short>
+        <short>Button layout for calculator</short>
         <long> 
-          The initial calculator mode. Valid values are
-            BASIC
-            FINANCIAL
-            LOGICAL 
-            SCIENTIFIC
-            PROGRAMMING
+          The visible buttons for the calculator.  Valid values:
+            "basic" - Show only basic buttons
+            "scientific" - Show advanced buttons
+            "programming" - Show programming buttons
+            "financial" - Show financial buttons
         </long>
       </locale>
     </schema>
@@ -121,18 +105,18 @@ To change the gconftool target use the - -config-source=blah option to gconftool
       </locale>
     </schema>
     <schema> 
-      <applyto>/apps/gcalctool/trigtype</applyto> 
-      <key>/schemas/apps/gcalctool/trigtype</key> 
+      <applyto>/apps/gcalctool/angle_units</applyto> 
+      <key>/schemas/apps/gcalctool/angle_units</key> 
       <owner>gcalctool</owner> 
       <type>string</type>
-      <default>DEG</default> 
+      <default>degrees</default>
       <locale name="C"> 
-        <short>Trigonometric type</short> 
-        <long> 
-          The initial trigonometric type. Valid values are
-            DEG (degrees)
-            GRAD (grads)
-            RAD (radians).
+        <short>Angle units to use</short>
+        <long>
+          The units used for trigonometric operations.  Valid values:
+            "degrees" - degrees, i.e 180
+            "radians" - ?
+            "gradians" - ?
         </long>
       </locale>
     </schema>
diff --git a/data/gcalctool.ui b/data/gcalctool.ui
index c74cf77..7f67575 100644
--- a/data/gcalctool.ui
+++ b/data/gcalctool.ui
@@ -4977,7 +4977,7 @@
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">Word _size:</property>
                 <property name="use_underline">True</property>
-                <property name="mnemonic_widget">combobox4</property>
+                <property name="mnemonic_widget">word_size_combobox</property>
               </object>
               <packing>
                 <property name="right_attach">2</property>
@@ -4987,7 +4987,7 @@
               </packing>
             </child>
             <child>
-              <object class="GtkComboBox" id="combobox4">
+              <object class="GtkComboBox" id="word_size_combobox">
                 <property name="visible">True</property>
                 <property name="model">word_size_model</property>
               </object>
diff --git a/src/calctool.c b/src/calctool.c
index daffe2f..230b7d0 100644
--- a/src/calctool.c
+++ b/src/calctool.c
@@ -238,11 +238,6 @@ init_state(void)
        v->accuracy = DEFAULT_ACCURACY;
     }
 
-    if (get_int_resource(R_BASE, &i))
-       v->base = i;
-    else
-       v->base = 10;
-
     if (get_enumerated_resource(R_TRIG, Rtstr, &i))
        v->ttype = (MPAngleUnit) i;
     else
diff --git a/src/functions.c b/src/functions.c
index 48ff9da..d434a2e 100644
--- a/src/functions.c
+++ b/src/functions.c
@@ -60,35 +60,12 @@ static Function functions[NFUNCTIONS] = {
 { FN_SHIFT,             NULL, 0 },
 { FN_STORE,             NULL, 0 },
 { FN_RECALL,            NULL, 0 },
-{ FN_SET_ACCURACY,      NULL, 0 },
-{ FN_SET_BASE,          NULL, 0 },
-{ FN_SET_NUMBERTYPE,    NULL, 0 },
-{ FN_SET_TRIG_TYPE,     NULL, 0 },
-{ FN_SET_WORDLEN,       NULL, 0 },
 { FN_UNDO,              NULL, 0 },
 { FN_REDO,              NULL, 0 },
 { FN_PASTE,             NULL, 0 },
 { FN_INSERT_CHARACTER,  NULL, 0 }
 };
 
-static void
-clear_undo_history(void)
-{
-    display_clear_stack(&v->display);
-}
-
-
-/* Set display accuracy. */
-static void
-do_accuracy(int value)
-{
-    v->accuracy = value;
-    set_int_resource(R_ACCURACY, v->accuracy);
-    display_set_accuracy(&v->display, value);
-    ui_set_accuracy(v->accuracy);
-    clear_undo_history();
-}
-
 
 static void
 do_paste(int cursor_start, int cursor_end, const char *text)
@@ -182,65 +159,6 @@ do_shift(int count)
 }
 
 
-/* Change the current base setting. */
-static void
-do_base(int b)
-{
-    int ret;
-    MPNumber MP;
-
-    if (!display_is_empty(&v->display))
-    {   
-        ret = display_is_usable_number(&v->display, &MP);
-        if (ret) {
-            ui_set_statusbar(_("No sane value to convert"),
-                             "gtk-dialog-error");
-        } else {
-            mp_set_from_mp(&MP, display_get_answer(&v->display));
-            display_set_answer(&v->display);
-            clear_undo_history();
-        }
-    }
-    v->base = b;
-    set_int_resource(R_BASE, v->base);
-    display_set_base(&v->display, v->base);
-    ui_set_base(v->base);
-}
-
-
-/* Set word size for bitwise operations. */
-static void
-do_wordlen(int len)
-{
-    v->wordlen = len;
-    set_int_resource(R_WORDLEN, len);
-}
-
-
-static void
-do_numtype(DisplayFormat n)   /* Set number display type. */
-{
-    int ret;
-    MPNumber MP;
-
-    /* Convert display if it contains a number */
-    if (!display_is_empty(&v->display))
-    {
-        ret = display_is_usable_number(&v->display, &MP);
-        if (ret) {
-            ui_set_statusbar(_("No sane value to convert"),
-                             "gtk-dialog-error");
-        } else {
-            mp_set_from_mp(&MP, display_get_answer(&v->display));
-            display_set_answer(&v->display);
-            clear_undo_history();
-        }
-    }
-   
-    display_set_format(&v->display, n);
-}
-
-
 static void
 do_sto(int index)
 {
@@ -300,27 +218,6 @@ do_expression(int function, int arg, int cursor_start, int cursor_end)
             do_shift(arg);
             break;
 
-        case FN_SET_ACCURACY:
-            do_accuracy(arg);
-            return;
-
-        case FN_SET_BASE:
-            do_base(arg);
-            return;
-        
-        case FN_SET_TRIG_TYPE:
-            v->ttype = arg;
-            set_enumerated_resource(R_TRIG, Rtstr, arg);
-            return;
-
-        case FN_SET_NUMBERTYPE:
-            do_numtype(arg);
-            return;
-
-        case FN_SET_WORDLEN:
-            do_wordlen(arg);
-            return;
-        
         case FN_PASTE:
             do_paste(cursor_start, cursor_end, (const char *)arg); // FIXME: Probably not 64 bit safe
             return;
diff --git a/src/functions.h b/src/functions.h
index 5cd4a4f..16e6a5f 100644
--- a/src/functions.h
+++ b/src/functions.h
@@ -35,11 +35,6 @@ enum
     FN_SHIFT,
     FN_STORE,
     FN_RECALL,
-    FN_SET_ACCURACY,
-    FN_SET_BASE,
-    FN_SET_NUMBERTYPE,
-    FN_SET_TRIG_TYPE,
-    FN_SET_WORDLEN,
     FN_UNDO,
     FN_REDO,
     FN_PASTE,
diff --git a/src/get.h b/src/get.h
index 41975bf..06ce096 100644
--- a/src/get.h
+++ b/src/get.h
@@ -25,11 +25,10 @@
 #include "calctool.h"
 
 #define R_ACCURACY "accuracy"
-#define R_BASE     "base"
-#define R_DISPLAY  "display"
-#define R_MODE     "mode"
+#define R_DISPLAY  "result_format"
+#define R_MODE     "button_layout"
 #define R_REGS     "showregisters"
-#define R_TRIG     "trigtype"
+#define R_TRIG     "angle_units"
 #define R_ZEROES   "showzeroes"
 #define R_TSEP     "showthousands"
 #define R_WORDLEN  "wordlen"
diff --git a/src/gtk.c b/src/gtk.c
index bb51f8e..b518cbc 100644
--- a/src/gtk.c
+++ b/src/gtk.c
@@ -333,54 +333,6 @@ position_popup(GtkWidget *base, GtkWidget *popup,
     gtk_window_move(GTK_WINDOW(popup), popup_x, popup_y);
 }
 
-void
-ui_set_accuracy(int accuracy)
-{
-    //FIXME: Obsolete
-}
-
-
-void
-ui_set_trigonometric_mode(MPAngleUnit units)
-{
-    //FIXME: Obsolete
-}
-
-
-void
-ui_set_numeric_mode(DisplayFormat mode)
-{
-    //FIXME: Obsolete
-}
-
-
-void
-ui_set_show_thousands_separator(gboolean visible)
-{
-    // FIXME: Obsolete
-}
-
-
-void
-ui_set_show_trailing_zeroes(gboolean visible)
-{
-    // FIXME: Obsolete
-}
-
-
-void
-ui_set_base(int base)
-{
-    //FIXME: Obsolete
-}
-
-
-void
-ui_set_wordlen(int len)
-{
-    //FIXME: Obsolete
-}
-
 
 void 
 ui_set_undo_enabled(gboolean undo, gboolean redo)
@@ -494,20 +446,8 @@ ui_set_mode(ModeType mode)
     char *hostname, title[MAXLINE];
     GtkWidget *menu;
 
-    if (X.mode != mode) {
-        X.mode = mode;
+    X.mode = mode;
 
-        // FIXME: These should affect display but not the actual UI settings
-        if (mode != PROGRAMMING)
-            ui_set_base(10);
-        if (mode != SCIENTIFIC) {
-            ui_set_numeric_mode(FIX);
-            do_button(FN_SET_ACCURACY, DEFAULT_ACCURACY);
-        }
-        if (mode == BASIC)
-            ui_set_show_trailing_zeroes(FALSE);
-    }
-    
     /* Save mode */
     set_enumerated_resource(R_MODE, mode_names, (int)mode);
     
@@ -647,9 +587,6 @@ ui_set_error_state(gboolean error)
 {
     v->error = error;
 
-    if (!v->error)
-        ui_set_base(v->base);
-
     gtk_widget_set_sensitive(GET_WIDGET("copy_menu"),            !v->error);
     gtk_widget_set_sensitive(GET_WIDGET("paste_menu"),           !v->error); 
     gtk_widget_set_sensitive(GET_WIDGET("undo_menu"),            !v->error);
@@ -673,8 +610,8 @@ ui_beep()
 }
 
 
-void
-ui_set_registers_visible(gboolean visible)
+static void
+set_registers_visible(gboolean visible)
 {
     GtkWidget *menu;
 
@@ -836,37 +773,6 @@ ascii_dialog_activate_cb(GtkWidget *entry)
 }
 
 
-G_MODULE_EXPORT
-void
-disp_cb(GtkWidget *widget)
-{
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
-        do_button(FN_SET_NUMBERTYPE, GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "numeric_mode")));
-}
-
-
-G_MODULE_EXPORT
-void
-base_cb(GtkWidget *widget)
-{
-    int base;
-
-    base = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "base"));
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
-        do_button(FN_SET_BASE, base);
-}
-
-G_MODULE_EXPORT
-void
-word_cb(GtkWidget *widget)
-{
-    int wordlen;
-
-    wordlen = (int) g_object_get_data(G_OBJECT(widget), "wordlen_mode");
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
-        do_button(FN_SET_WORDLEN, wordlen);
-}
-
 static void
 help_display(void)
 {
@@ -1005,7 +911,7 @@ edit_register_names_response_cb(GtkDialog *dialog, gint id)
         help_display();
     else {
         gtk_widget_hide(GTK_WIDGET(dialog));
-        ui_set_registers_visible(FALSE);
+        set_registers_visible(FALSE);
     }
 }
 
@@ -1014,7 +920,7 @@ G_MODULE_EXPORT
 gboolean
 edit_register_names_delete_cb(GtkDialog *dialog)
 {
-    ui_set_registers_visible(FALSE);    
+    set_registers_visible(FALSE);    
     return TRUE;
 }
 
@@ -1183,15 +1089,6 @@ help_cb(GtkWidget *widget)
 }
 
 
-G_MODULE_EXPORT
-void
-trig_cb(GtkWidget *widget)
-{
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
-        do_button(FN_SET_TRIG_TYPE, (int)g_object_get_data(G_OBJECT(widget), "trig_mode"));
-}
-
-
 static void
 menu_pos_func(GtkMenu *menu, gint *x, gint *y,
               gboolean *push_in, gpointer user_data)
@@ -1391,21 +1288,6 @@ main_window_key_press_cb(GtkWidget *widget, GdkEventKey *event)
         case GDK_9:
             do_text("â??");
             return TRUE;
-        case GDK_u:
-            do_text("µ");
-            return TRUE;            
-        case GDK_e:
-            do_text("Ã?10^");
-            return TRUE;
-        case GDK_r:
-            do_text("â??");
-            return TRUE;
-        case GDK_i:
-            do_text("�¹");
-            return TRUE;
-        case GDK_p:
-            do_text("Ï?");
-            return TRUE;
         }
     }
     
@@ -1623,7 +1505,7 @@ G_MODULE_EXPORT
 void
 edit_register_names_cb(GtkMenuItem *item)
 {
-    ui_set_registers_visible(TRUE);
+    set_registers_visible(TRUE);
 }
 
 
@@ -1659,7 +1541,7 @@ create_main_window()
     char name[MAXLINE];
     GtkWidget *widget;
     PangoFontDescription *font_desc;
-    GtkWidget *treeview;
+    GtkCellRenderer *renderer;
    
     X.ui = gtk_builder_new();
     load_ui(X.ui, UI_FILE);
@@ -1757,16 +1639,16 @@ create_main_window()
 
     /* Make register tree model */
     X.register_model = create_register_model();
-    treeview = GET_WIDGET("edit_register_names_treeview");
-    gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), X.register_model);
-    gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)),
+    widget = GET_WIDGET("edit_register_names_treeview");
+    gtk_tree_view_set_model(GTK_TREE_VIEW(widget), X.register_model);
+    gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)),
                                 GTK_SELECTION_SINGLE);
     /* Translators: Edit Register Names Dialog: Register number column title */
-    add_cf_column(GTK_TREE_VIEW(treeview), _("No."), COLUMN_NUMBER, FALSE);
+    add_cf_column(GTK_TREE_VIEW(widget), _("No."), COLUMN_NUMBER, FALSE);
     /* Translators: Edit Register Names Dialog: Register value column title */
-    add_cf_column(GTK_TREE_VIEW(treeview), _("Value"), COLUMN_VALUE, TRUE);
+    add_cf_column(GTK_TREE_VIEW(widget), _("Value"), COLUMN_VALUE, TRUE);
     /* Translators: Edit Register Names Dialog: Register description column title */    
-    add_cf_column(GTK_TREE_VIEW(treeview), _("Description"), COLUMN_DESCRIPTION, TRUE);
+    add_cf_column(GTK_TREE_VIEW(widget), _("Description"), COLUMN_DESCRIPTION, TRUE);
 
     X.display_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(X.display_item));
     gtk_widget_ensure_style(X.display_item);
@@ -1806,6 +1688,23 @@ create_main_window()
     set_data(X.ui, "calc_finc_straight_line_depreciation_button", "finc_dialog", "sln_dialog");
     set_data(X.ui, "calc_finc_sum_of_the_years_digits_depreciation_button", "finc_dialog", "syd_dialog");
     set_data(X.ui, "calc_finc_term_button", "finc_dialog", "term_dialog");
+    
+    /* Configuration dialog */
+    
+    widget = GET_WIDGET("angle_unit_combobox");
+    renderer = gtk_cell_renderer_text_new();
+    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE);
+    gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(widget), renderer, "text", 0);
+
+    widget = GET_WIDGET("display_format_combobox");
+    renderer = gtk_cell_renderer_text_new();
+    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE);
+    gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(widget), renderer, "text", 0);
+    
+    widget = GET_WIDGET("word_size_combobox");
+    renderer = gtk_cell_renderer_text_new();
+    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE);
+    gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(widget), renderer, "text", 0);
 }
 
 
@@ -1834,6 +1733,42 @@ ui_init(int *argc, char ***argv)
 }
 
 
+static void
+set_combo_box_from_config(const gchar *name, const gchar *key_name)
+{
+    GtkWidget *combo;
+    GtkTreeModel *model;
+    gchar *key_value;
+    GtkTreeIter iter;
+    gboolean valid;
+    
+    combo = GET_WIDGET(name);
+    model = gtk_combo_box_get_model(GTK_COMBO_BOX(combo));
+    
+    key_value = get_resource(key_name);
+    valid = gtk_tree_model_get_iter_first(model, &iter);
+    while (valid) {
+        GValue value = {0};
+        
+        gtk_tree_model_get_value(model, &iter, 1, &value);
+        printf("'%s' '%s'\n", g_value_get_string(&value), key_value);
+        if (strcmp(g_value_get_string(&value), key_value) == 0) {
+            printf("%s->%s\n", name, key_value);
+            g_value_unset(&value);
+            break;
+        }
+        g_value_unset(&value);
+        valid = gtk_tree_model_iter_next(model, &iter);
+    }
+    if (!valid)
+        valid = gtk_tree_model_get_iter_first(model, &iter);
+        
+    gtk_combo_box_set_active_iter(GTK_COMBO_BOX(combo), &iter);
+
+    g_free(key_value);
+}
+
+
 void
 ui_load(void)
 {
@@ -1841,21 +1776,13 @@ ui_load(void)
 
     /* Create main gcalctool window. */
     create_main_window();
-    
-    /* Load configuration */
-    ui_set_show_thousands_separator(v->display.show_tsep);
-    ui_set_show_trailing_zeroes(v->display.show_zeroes);
-    
-    ui_set_mode(X.mode);
-    ui_set_numeric_mode(v->display.format);
-    ui_set_base(v->base);
-    ui_set_wordlen(v->wordlen);
-    ui_set_accuracy(v->accuracy);
     ui_set_undo_enabled(FALSE, FALSE);
     
+    set_combo_box_from_config("display_format_combobox", R_DISPLAY);
+    
     /* Show the memory register window? */
     if (get_boolean_resource(R_REGS, &boolval))
-        ui_set_registers_visible(boolval);
+        set_registers_visible(boolval);
 }
 
 
@@ -1960,11 +1887,6 @@ add_buttons_to_size_group()
 void
 ui_start(void)
 {
-    ui_set_base(v->base);
-    ui_set_wordlen(v->wordlen);
-    ui_set_trigonometric_mode(v->ttype);
-    ui_set_numeric_mode(v->display.format);
-    
     gtk_widget_show(X.main_window);
 
     /* Add buttons to size group so they are all the same size.
diff --git a/src/ui.h b/src/ui.h
index f84e105..d66470c 100644
--- a/src/ui.h
+++ b/src/ui.h
@@ -44,16 +44,6 @@ void ui_set_display(char *, int);
 void ui_set_bitfield(int enabled, guint64 bits);
 gchar *ui_get_display(void);
 
-void ui_set_registers_visible(gboolean);
-void ui_set_accuracy(int);
-void ui_set_mode(ModeType);
-void ui_set_base(int);
-void ui_set_trigonometric_mode(MPAngleUnit unit);
-void ui_set_numeric_mode(DisplayFormat mode);
-void ui_set_show_thousands_separator(gboolean);
-void ui_set_show_trailing_zeroes(gboolean);
-void ui_set_wordlen(int);
-
 void ui_set_error_state(gboolean);
 void ui_set_statusbar(const gchar *, const gchar *);
 



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