[gcalctool] Move MathEquation from global variable
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gcalctool] Move MathEquation from global variable
- Date: Mon, 5 Apr 2010 23:53:33 +0000 (UTC)
commit e47f5cba460e1b08c05dd083a80b2e029518c3aa
Author: Robert Ancell <robert ancell gmail com>
Date: Tue Apr 6 09:00:53 2010 +1000
Move MathEquation from global variable
src/calctool.c | 1 -
src/calctool.h | 3 --
src/financial.c | 68 ++++++++++++++++++++--------------------
src/financial.h | 3 +-
src/math-buttons.c | 51 ++++++++++++++++-------------
src/math-display.c | 86 ++++++++++++++++++++++++++++++++++++++++++++------
src/math-display.h | 6 +++-
src/math-equation.c | 16 +++++-----
src/ui-preferences.c | 27 ++++++++-------
src/ui.c | 11 ++++++-
src/ui.h | 3 ++
11 files changed, 180 insertions(+), 95 deletions(-)
---
diff --git a/src/calctool.c b/src/calctool.c
index 80a02e0..61438c3 100644
--- a/src/calctool.c
+++ b/src/calctool.c
@@ -217,7 +217,6 @@ main(int argc, char **argv)
init_state();
register_init();
- v->display = math_equation_new();
ui_gtk_init(&argc, &argv);
get_options(argc, argv);
diff --git a/src/calctool.h b/src/calctool.h
index 100ef14..cc6098d 100644
--- a/src/calctool.h
+++ b/src/calctool.h
@@ -24,7 +24,6 @@
#include "config.h"
#include "mp.h"
-#include "math-equation.h"
#include "ui.h"
/* To make lint happy. */
@@ -51,8 +50,6 @@
typedef struct {
char *progname; /* Name of this program. */
- MathEquation *display; /* Display stack */
-
const char *digits[16]; /* Localized digit values */
const char *radix; /* Locale specific radix string. */
const char *tsep; /* Locale specific thousands separator. */
diff --git a/src/financial.c b/src/financial.c
index 532c580..faf0105 100644
--- a/src/financial.c
+++ b/src/financial.c
@@ -23,8 +23,8 @@
#include <libintl.h>
-void
-calc_ctrm(MPNumber *t, MPNumber *pint, MPNumber *fv, MPNumber *pv)
+static void
+calc_ctrm(MathEquation *equation, MPNumber *t, MPNumber *pint, MPNumber *fv, MPNumber *pv)
{
/* Cterm - pint (periodic interest rate).
@@ -43,8 +43,8 @@ calc_ctrm(MPNumber *t, MPNumber *pint, MPNumber *fv, MPNumber *pv)
}
-void
-calc_ddb(MPNumber *t, MPNumber *cost, MPNumber *life, MPNumber *period)
+static void
+calc_ddb(MathEquation *equation, MPNumber *t, MPNumber *cost, MPNumber *life, MPNumber *period)
{
/* Ddb - cost (amount paid for asset).
@@ -76,15 +76,14 @@ calc_ddb(MPNumber *t, MPNumber *cost, MPNumber *life, MPNumber *period)
}
if (len >= 0) {
- display_set_error (v->display,
- ("Error: the number of periods must be positive"));
+ display_set_error (equation, ("Error: the number of periods must be positive"));
mp_set_from_integer(0, t);
}
}
-void
-calc_fv(MPNumber *t, MPNumber *pmt, MPNumber *pint, MPNumber *n)
+static void
+calc_fv(MathEquation *equation, MPNumber *t, MPNumber *pmt, MPNumber *pint, MPNumber *n)
{
/* Fv - pmt (periodic payment).
@@ -104,8 +103,8 @@ calc_fv(MPNumber *t, MPNumber *pmt, MPNumber *pint, MPNumber *n)
}
-void
-calc_gpm(MPNumber *t, MPNumber *cost, MPNumber *margin)
+static void
+calc_gpm(MathEquation *equation, MPNumber *t, MPNumber *cost, MPNumber *margin)
{
/* Gpm - cost (cost of sale).
@@ -122,8 +121,8 @@ calc_gpm(MPNumber *t, MPNumber *cost, MPNumber *margin)
}
-void
-calc_pmt(MPNumber *t, MPNumber *prin, MPNumber *pint, MPNumber *n)
+static void
+calc_pmt(MathEquation *equation, MPNumber *t, MPNumber *prin, MPNumber *pint, MPNumber *n)
{
/* Pmt - prin (principal).
@@ -145,8 +144,8 @@ calc_pmt(MPNumber *t, MPNumber *prin, MPNumber *pint, MPNumber *n)
}
-void
-calc_pv(MPNumber *t, MPNumber *pmt, MPNumber *pint, MPNumber *n)
+static void
+calc_pv(MathEquation *equation, MPNumber *t, MPNumber *pmt, MPNumber *pint, MPNumber *n)
{
/* Pv - pmt (periodic payment).
@@ -168,8 +167,8 @@ calc_pv(MPNumber *t, MPNumber *pmt, MPNumber *pint, MPNumber *n)
}
-void
-calc_rate(MPNumber *t, MPNumber *fv, MPNumber *pv, MPNumber *n)
+static void
+calc_rate(MathEquation *equation, MPNumber *t, MPNumber *fv, MPNumber *pv, MPNumber *n)
{
/* Rate - fv (future value).
@@ -189,8 +188,8 @@ calc_rate(MPNumber *t, MPNumber *fv, MPNumber *pv, MPNumber *n)
}
-void
-calc_sln(MPNumber *t, MPNumber *cost, MPNumber *salvage, MPNumber *life)
+static void
+calc_sln(MathEquation *equation, MPNumber *t, MPNumber *cost, MPNumber *salvage, MPNumber *life)
{
/* Sln - cost (cost of the asset).
@@ -206,8 +205,8 @@ calc_sln(MPNumber *t, MPNumber *cost, MPNumber *salvage, MPNumber *life)
}
-void
-calc_syd(MPNumber *t, MPNumber *cost, MPNumber *salvage, MPNumber *life, MPNumber *period)
+static void
+calc_syd(MathEquation *equation, MPNumber *t, MPNumber *cost, MPNumber *salvage, MPNumber *life, MPNumber *period)
{
/* Syd - cost (cost of the asset).
@@ -233,8 +232,8 @@ calc_syd(MPNumber *t, MPNumber *cost, MPNumber *salvage, MPNumber *life, MPNumbe
}
-void
-calc_term(MPNumber *t, MPNumber *pmt, MPNumber *fv, MPNumber *pint)
+static void
+calc_term(MathEquation *equation, MPNumber *t, MPNumber *pmt, MPNumber *fv, MPNumber *pint)
{
/* Term - pmt (periodic payment).
@@ -255,41 +254,42 @@ calc_term(MPNumber *t, MPNumber *pmt, MPNumber *fv, MPNumber *pint)
mp_divide(&MP1, &MP2, t);
}
+
void
-do_finc_expression(int function, MPNumber *arg1, MPNumber *arg2, MPNumber *arg3, MPNumber *arg4)
+do_finc_expression(MathEquation *equation, int function, MPNumber *arg1, MPNumber *arg2, MPNumber *arg3, MPNumber *arg4)
{
MPNumber result;
switch (function) {
case FINC_CTRM_DIALOG:
- calc_ctrm(&result, arg1, arg2, arg3);
+ calc_ctrm(equation, &result, arg1, arg2, arg3);
break;
case FINC_DDB_DIALOG:
- calc_ddb(&result, arg1, arg2, arg3);
+ calc_ddb(equation, &result, arg1, arg2, arg3);
break;
case FINC_FV_DIALOG:
- calc_fv(&result, arg1, arg2, arg3);
+ calc_fv(equation, &result, arg1, arg2, arg3);
break;
case FINC_GPM_DIALOG:
- calc_gpm(&result, arg1, arg2);
+ calc_gpm(equation, &result, arg1, arg2);
break;
case FINC_PMT_DIALOG:
- calc_pmt(&result, arg1, arg2, arg3);
+ calc_pmt(equation, &result, arg1, arg2, arg3);
break;
case FINC_PV_DIALOG:
- calc_pv(&result, arg1, arg2, arg3);
+ calc_pv(equation, &result, arg1, arg2, arg3);
break;
case FINC_RATE_DIALOG:
- calc_rate(&result, arg1, arg2, arg3);
+ calc_rate(equation, &result, arg1, arg2, arg3);
break;
case FINC_SLN_DIALOG:
- calc_sln(&result, arg1, arg2, arg3);
+ calc_sln(equation, &result, arg1, arg2, arg3);
break;
case FINC_SYD_DIALOG:
- calc_syd(&result, arg1, arg2, arg3, arg4);
+ calc_syd(equation, &result, arg1, arg2, arg3, arg4);
break;
case FINC_TERM_DIALOG:
- calc_term(&result, arg1, arg2, arg3);
+ calc_term(equation, &result, arg1, arg2, arg3);
break;
}
- display_set_number(v->display, &result);
+ display_set_number(equation, &result);
}
diff --git a/src/financial.h b/src/financial.h
index 7b4a6f4..6aa8f3c 100644
--- a/src/financial.h
+++ b/src/financial.h
@@ -21,8 +21,9 @@
#define FINANCIAL_H
#include "mp.h"
+#include "math-equation.h"
-void do_finc_expression(int function, MPNumber *arg1, MPNumber *arg2, MPNumber *arg3, MPNumber *arg4);
+void do_finc_expression(MathEquation *equation, int function, MPNumber *arg1, MPNumber *arg2, MPNumber *arg3, MPNumber *arg4);
enum finc_dialogs {
FINC_CTRM_DIALOG,
diff --git a/src/math-buttons.c b/src/math-buttons.c
index de31039..213a936 100644
--- a/src/math-buttons.c
+++ b/src/math-buttons.c
@@ -20,7 +20,6 @@
#include "register.h"
#include "financial.h"
#include "currency.h"
-#include "calctool.h" // FIXME: TEMP
enum {
PROP_0,
@@ -32,7 +31,7 @@ enum {
struct MathButtonsPrivate
{
- MathDisplay *display;
+ MathDisplay *display; // FIXME: Change to MathEquation
ButtonMode mode;
GtkBuilder *basic_ui, *advanced_ui, *financial_ui, *programming_ui;
@@ -287,7 +286,7 @@ load_mode(MathButtons *buttons, ButtonMode mode)
{
GtkBuilder *builder, **builder_ptr;
gint i;
- gchar name[MAXLINE];
+ gchar *name;
const gchar *builder_file;
gchar *objects[] = { "button_panel", "character_code_dialog", "currency_dialog",
"ctrm_dialog", "ddb_dialog", "fv_dialog", "gpm_dialog",
@@ -331,18 +330,20 @@ load_mode(MathButtons *buttons, ButtonMode mode)
/* Connect text to buttons */
for (i = 0; button_data[i].widget_name != NULL; i++) {
- snprintf(name, MAXLINE, "calc_%s_button", button_data[i].widget_name);
+ name = g_strdup_printf("calc_%s_button", button_data[i].widget_name);
set_string_data(builder, name, "calc_text", button_data[i].data);
+ g_free(name);
}
/* Localize buttons */
for (i = 0; i < 16; i++) {
GtkWidget *button;
- snprintf(name, MAXLINE, "calc_%d_button", i);
+ name = g_strdup_printf("calc_%d_button", i);
button = GET_WIDGET(builder, name);
if (button)
gtk_button_set_label(GTK_BUTTON(button), math_display_get_digit_text(buttons->priv->display, i));
+ g_free(name);
}
widget = GET_WIDGET(builder, "calc_numeric_point_button");
if (widget)
@@ -350,9 +351,10 @@ load_mode(MathButtons *buttons, ButtonMode mode)
/* Connect super and subscript */
for (i = 0; i < 10; i++) {
- snprintf(name, MAXLINE, "calc_%d_button", i);
+ name = g_strdup_printf("calc_%d_button", i);
set_int_data(builder, name, "calc_digit", i);
set_tint(GET_WIDGET(builder, name), &buttons->priv->colour_numbers, 1);
+ g_free(name);
}
widget = GET_WIDGET(builder, "superscript_togglebutton");
@@ -441,9 +443,10 @@ load_mode(MathButtons *buttons, ButtonMode mode)
buttons->priv->bit_panel = GET_WIDGET(builder, "bit_table");
for (i = 0; i < MAXBITS; i++) {
- snprintf(name, MAXLINE, "bit_label_%d", i);
+ name = g_strdup_printf("bit_label_%d", i);
buttons->priv->bit_labels[i] = GET_WIDGET(builder, name);
- snprintf(name, MAXLINE, "bit_eventbox_%d", i);
+ g_free(name);
+ name = g_strdup_printf("bit_eventbox_%d", i);
set_int_data(builder, name, "bit_index", i);
}
}
@@ -595,14 +598,15 @@ update_store_menu(MathButtons *buttons)
}
for (i = 0; registers[i] != NULL; i++) {
- char value[MAXLINE] = "", mstr[MAXLINE];
+ gchar value[1024] = "", *mstr;
MPNumber *t;
t = register_get_value(registers[i]);
if (t)
- display_make_number(v->display, value, MAXLINE, t);
- snprintf(mstr, MAXLINE, "<span weight=\"bold\">%s</span> = %s", registers[i], value);
+ display_make_number(math_display_get_equation(buttons->priv->display), value, 1024, t);
+ mstr = g_strdup_printf("<span weight=\"bold\">%s</span> = %s", registers[i], value);
gtk_label_set_markup_with_mnemonic(GTK_LABEL(buttons->priv->store_menu_labels[i]), mstr);
+ g_free(mstr);
}
}
@@ -670,14 +674,15 @@ update_recall_menu(MathButtons *buttons)
}
for (i = 0; registers[i] != NULL; i++) {
- char value[MAXLINE] = "", mstr[MAXLINE];
+ gchar value[1024] = "", *mstr;
MPNumber *t;
t = register_get_value(registers[i]);
if (t)
- display_make_number(v->display, value, MAXLINE, t);
- snprintf(mstr, MAXLINE, "<span weight=\"bold\">%s</span> = %s", registers[i], value);
+ display_make_number(math_display_get_equation(buttons->priv->display), value, 1024, t);
+ mstr = g_strdup_printf("<span weight=\"bold\">%s</span> = %s", registers[i], value);
gtk_label_set_markup_with_mnemonic(GTK_LABEL(buttons->priv->recall_menu_labels[i]), mstr);
+ g_free(mstr);
}
}
@@ -873,7 +878,7 @@ finc_response_cb(GtkWidget *widget, gint response_id, MathButtons *buttons)
}
gtk_widget_grab_focus(GET_WIDGET(buttons->priv->financial_ui, finc_dialog_fields[dialog][0]));
- do_finc_expression(dialog, &arg[0], &arg[1], &arg[2], &arg[3]);
+ do_finc_expression(math_display_get_equation(buttons->priv->display), dialog, &arg[0], &arg[1], &arg[2], &arg[3]);
}
@@ -996,7 +1001,7 @@ currency_cb(GtkWidget *widget, MathButtons *buttons)
win = GTK_DIALOG(gtk_builder_get_object(buttons->priv->financial_ui, "currency_dialog"));
c_amount_upper = GTK_SPIN_BUTTON(gtk_builder_get_object(buttons->priv->financial_ui, "currency_amount_upper"));
c_amount_lower = GTK_SPIN_BUTTON(gtk_builder_get_object(buttons->priv->financial_ui, "currency_amount_lower"));
- if (display_is_usable_number(v->display, &display_val)) {
+ if (display_is_usable_number(math_display_get_equation(buttons->priv->display), &display_val)) {
double start_val = mp_cast_to_double(&display_val);
gtk_spin_button_set_value(c_amount_upper, start_val);
}
@@ -1009,7 +1014,7 @@ currency_cb(GtkWidget *widget, MathButtons *buttons)
mp_set_from_string(result, &display_val);
g_free(result);
- display_set_number(v->display, &display_val);
+ display_set_number(math_display_get_equation(buttons->priv->display), &display_val);
}
gtk_widget_hide(GTK_WIDGET(win));
@@ -1123,9 +1128,9 @@ number_mode_changed_cb(MathDisplay *display, MathButtons *buttons)
static void
math_buttons_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
MathButtons *self;
@@ -1145,9 +1150,9 @@ math_buttons_set_property (GObject *object,
static void
math_buttons_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
{
MathButtons *self;
diff --git a/src/math-display.c b/src/math-display.c
index 1686715..bcfa0cf 100644
--- a/src/math-display.c
+++ b/src/math-display.c
@@ -20,10 +20,14 @@
#include <gdk/gdkkeysyms.h>
#include "math-display.h"
-#include "math-equation.h" // FIXME: Move into math-display.h
#include "calctool.h" // FIXME: TEMP
enum {
+ PROP_0,
+ PROP_EQUATION
+};
+
+enum {
NUMBER_MODE_CHANGED,
LAST_SIGNAL
};
@@ -31,6 +35,8 @@ static guint signals[LAST_SIGNAL] = { 0, };
struct MathDisplayPrivate
{
+ MathEquation *equation;
+
NumberMode number_mode;
gboolean can_super_minus;
@@ -51,9 +57,16 @@ G_DEFINE_TYPE (MathDisplay, math_display, GTK_TYPE_VBOX);
#define GET_WIDGET(ui, name) GTK_WIDGET(gtk_builder_get_object(ui, name))
MathDisplay *
-math_display_new()
+math_display_new(MathEquation *equation)
+{
+ return g_object_new (math_display_get_type(), "equation", equation, NULL);
+}
+
+
+MathEquation *
+math_display_get_equation(MathDisplay *display)
{
- return g_object_new (math_display_get_type(), NULL);
+ return display->priv->equation;
}
@@ -134,7 +147,7 @@ do_button(MathDisplay *display, int function, gpointer arg)
do_button(display, FN_TEXT, "^");
}
else {
- display_do_function(v->display, function, arg, cursor_start, cursor_end);
+ display_do_function(display->priv->equation, function, arg, cursor_start, cursor_end);
if (function == FN_TEXT)
display->priv->last_text = (char *)arg;
else
@@ -602,18 +615,18 @@ void
math_display_set_base(MathDisplay *display, gint base)
{
/* If has a number already in a base, then solve and convert it */
- if (!display_is_result(v->display) && display_is_number_with_base(v->display))
+ if (!display_is_result(display->priv->equation) && display_is_number_with_base(display->priv->equation))
math_display_solve(display);
- if (display_is_result(v->display)) {
+ if (display_is_result(display->priv->equation)) {
if (base == 2)
- display_convert (v->display, BIN);
+ display_convert(display->priv->equation, BIN);
else if (base == 8)
- display_convert (v->display, OCT);
+ display_convert(display->priv->equation, OCT);
else if (base == 16)
- display_convert (v->display, HEX);
+ display_convert(display->priv->equation, HEX);
else
- display_convert (v->display, DEC);
+ display_convert(display->priv->equation, DEC);
}
else {
if (base == 2)
@@ -627,12 +640,65 @@ math_display_set_base(MathDisplay *display, gint base)
static void
+math_display_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ MathDisplay *self;
+
+ self = MATH_DISPLAY (object);
+
+ switch (prop_id) {
+ case PROP_EQUATION:
+ self->priv->equation = g_value_get_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static void
+math_display_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ MathDisplay *self;
+
+ self = MATH_DISPLAY (object);
+
+ switch (prop_id) {
+ case PROP_EQUATION:
+ g_value_set_object (value, self->priv->equation);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static void
math_display_class_init (MathDisplayClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->get_property = math_display_get_property;
+ object_class->set_property = math_display_set_property;
+
g_type_class_add_private (klass, sizeof (MathDisplayPrivate));
+ g_object_class_install_property(object_class,
+ PROP_EQUATION,
+ g_param_spec_object("equation",
+ "equation",
+ "Equation being displayed",
+ math_equation_get_type(),
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
signals[NUMBER_MODE_CHANGED] =
g_signal_new ("number-mode-changed",
G_TYPE_FROM_CLASS (klass),
diff --git a/src/math-display.h b/src/math-display.h
index b2088cf..d1872ee 100644
--- a/src/math-display.h
+++ b/src/math-display.h
@@ -22,6 +22,8 @@
#include <glib-object.h>
#include <gtk/gtk.h>
+#include "math-equation.h"
+
G_BEGIN_DECLS
#define MATH_DISPLAY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), math_display_get_type(), MathDisplay))
@@ -48,7 +50,9 @@ typedef enum {
} NumberMode;
GType math_display_get_type();
-MathDisplay *math_display_new();
+MathDisplay *math_display_new(MathEquation *equation);
+
+MathEquation *math_display_get_equation(MathDisplay *display);
void math_display_set_base(MathDisplay *display, gint base);
void math_display_set_number_mode(MathDisplay *display, NumberMode mode);
diff --git a/src/math-equation.c b/src/math-equation.c
index 9cea6c4..612ed72 100644
--- a/src/math-equation.c
+++ b/src/math-equation.c
@@ -914,27 +914,27 @@ do_shift(MathEquation *display, int count)
}
-void
-do_factorize()
+static void
+do_factorize(MathEquation *equation)
{
MPNumber value;
- if (!display_is_usable_number(v->display, &value)) {
+ if (!display_is_usable_number(equation, &value)) {
/* Translators: Error displayed when trying to factorize a non-integer value */
math_display_set_status(ui_get_display(X), _("Need an integer to factorize"));
return;
}
- display_clear(v->display);
+ display_clear(equation);
GList *factors = mp_factorize(&value);
- display_insert_number(v->display, -1, -1, factors->data);
+ display_insert_number(equation, -1, -1, factors->data);
g_slice_free(MPNumber, factors->data);
GList *list = factors->next;
for (; list != NULL; list = list->next) {
- display_insert(v->display, -1, -1, "Ã?");
- display_insert_number(v->display, -1, -1, list->data);
+ display_insert(equation, -1, -1, "Ã?");
+ display_insert_number(equation, -1, -1, list->data);
g_slice_free(MPNumber, list->data);
}
g_list_free(factors);
@@ -990,7 +990,7 @@ display_do_function(MathEquation *display, int function, gpointer arg, int curso
break;
case FN_FACTORIZE:
- do_factorize(display, GPOINTER_TO_INT (arg));
+ do_factorize(display);
break;
case FN_PASTE:
diff --git a/src/ui-preferences.c b/src/ui-preferences.c
index f3a8d80..f732c1f 100644
--- a/src/ui-preferences.c
+++ b/src/ui-preferences.c
@@ -26,7 +26,8 @@
GTK_WIDGET(gtk_builder_get_object(ui, name))
-PreferencesDialog *ui_preferences_dialog_new(GCalctoolUI *ui)
+PreferencesDialog *
+ui_preferences_dialog_new(GCalctoolUI *ui)
{
PreferencesDialog *dialog;
@@ -55,7 +56,7 @@ preferences_dialog_delete_cb(GtkWidget *widget, GdkEvent *event, PreferencesDial
G_MODULE_EXPORT
void
-angle_unit_combobox_changed_cb(GtkWidget *combo)
+angle_unit_combobox_changed_cb(GtkWidget *combo, PreferencesDialog *dialog)
{
int i;
const gchar *value;
@@ -77,7 +78,7 @@ angle_unit_combobox_changed_cb(GtkWidget *combo)
gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combo), &iter);
gtk_tree_model_get(model, &iter, 1, &value, -1);
for (i = 0; unit_map[i].value != NULL && strcmp(unit_map[i].value, value) != 0; i++);
- display_set_angle_unit(v->display, unit_map[i].units);
+ display_set_angle_unit(ui_get_equation(dialog->ui), unit_map[i].units);
set_resource(R_TRIG, value);
}
@@ -85,7 +86,7 @@ angle_unit_combobox_changed_cb(GtkWidget *combo)
G_MODULE_EXPORT
void
-display_format_combobox_changed_cb(GtkWidget *combo)
+display_format_combobox_changed_cb(GtkWidget *combo, PreferencesDialog *dialog)
{
int i;
const gchar *value;
@@ -110,7 +111,7 @@ display_format_combobox_changed_cb(GtkWidget *combo)
gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combo), &iter);
gtk_tree_model_get(model, &iter, 1, &value, -1);
for (i = 0; mode_map[i].value != NULL && strcmp(mode_map[i].value, value) != 0; i++);
- display_set_format(v->display, mode_map[i].format);
+ display_set_format(ui_get_equation(dialog->ui), mode_map[i].format);
set_resource(R_DISPLAY, value);
}
@@ -118,7 +119,7 @@ display_format_combobox_changed_cb(GtkWidget *combo)
G_MODULE_EXPORT
void
-word_size_combobox_changed_cb(GtkWidget *combo)
+word_size_combobox_changed_cb(GtkWidget *combo, PreferencesDialog *dialog)
{
gint value;
GtkTreeModel *model;
@@ -127,7 +128,7 @@ word_size_combobox_changed_cb(GtkWidget *combo)
model = gtk_combo_box_get_model(GTK_COMBO_BOX(combo));
gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combo), &iter);
gtk_tree_model_get(model, &iter, 1, &value, -1);
- display_set_word_size(v->display, value);
+ display_set_word_size(ui_get_equation(dialog->ui), value);
set_int_resource(R_WORDLEN, value);
}
@@ -135,12 +136,12 @@ word_size_combobox_changed_cb(GtkWidget *combo)
G_MODULE_EXPORT
void
-decimal_places_spin_change_value_cb(GtkWidget *spin)
+decimal_places_spin_change_value_cb(GtkWidget *spin, PreferencesDialog *dialog)
{
gint value = 0;
value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin));
- display_set_accuracy(v->display, value);
+ display_set_accuracy(ui_get_equation(dialog->ui), value);
set_int_resource(R_ACCURACY, value);
}
@@ -148,24 +149,24 @@ decimal_places_spin_change_value_cb(GtkWidget *spin)
G_MODULE_EXPORT
void
-thousands_separator_check_toggled_cb(GtkWidget *check)
+thousands_separator_check_toggled_cb(GtkWidget *check, PreferencesDialog *dialog)
{
gboolean value;
value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check));
- display_set_show_thousands_separator(v->display, value);
+ display_set_show_thousands_separator(ui_get_equation(dialog->ui), value);
set_boolean_resource(R_TSEP, value);
}
G_MODULE_EXPORT
void
-trailing_zeroes_check_toggled_cb(GtkWidget *check)
+trailing_zeroes_check_toggled_cb(GtkWidget *check, PreferencesDialog *dialog)
{
gboolean value;
value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check));
- display_set_show_trailing_zeroes(v->display, value);
+ display_set_show_trailing_zeroes(ui_get_equation(dialog->ui), value);
set_boolean_resource(R_ZEROES, value);
}
diff --git a/src/ui.c b/src/ui.c
index e279b72..c8cb834 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -28,6 +28,7 @@ struct GCalctoolUIPrivate
{
GtkBuilder *ui;
GtkWidget *main_window;
+ MathEquation *equation;
MathDisplay *display;
MathButtons *buttons;
PreferencesDialog *preferences_dialog;
@@ -56,6 +57,12 @@ ui_new()
}
+MathEquation *ui_get_equation(GCalctoolUI *ui)
+{
+ return ui->priv->equation;
+}
+
+
MathDisplay *
ui_get_display(GCalctoolUI *ui)
{
@@ -301,6 +308,8 @@ ui_init(GCalctoolUI *ui)
int i;
ui->priv = G_TYPE_INSTANCE_GET_PRIVATE (ui, ui_get_type(), GCalctoolUIPrivate);
+
+ ui->priv->equation = math_equation_new();
ui->priv->ui = gtk_builder_new();
gtk_builder_add_from_file(ui->priv->ui, UI_FILE, &error);
@@ -333,7 +342,7 @@ ui_init(GCalctoolUI *ui)
ui->priv->right_aligned = TRUE;
gtk_widget_show(scrolled_window);
- ui->priv->display = math_display_new();
+ ui->priv->display = math_display_new(ui->priv->equation);
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window), GTK_WIDGET(ui->priv->display));
gtk_widget_show(GTK_WIDGET(ui->priv->display));
diff --git a/src/ui.h b/src/ui.h
index 2bdbf15..e591828 100644
--- a/src/ui.h
+++ b/src/ui.h
@@ -21,6 +21,7 @@
#define UI_H
#include <glib-object.h>
+#include "math-equation.h"
#include "math-display.h"
#include "math-buttons.h"
@@ -47,6 +48,8 @@ GType ui_get_type();
GCalctoolUI *ui_new(void);
+MathEquation *ui_get_equation(GCalctoolUI *ui);
+
MathDisplay *ui_get_display(GCalctoolUI *ui);
MathButtons *ui_get_buttons(GCalctoolUI *ui);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]