summaryrefslogtreecommitdiff
path: root/src/math-equation.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/math-equation.c')
-rw-r--r--src/math-equation.c114
1 files changed, 21 insertions, 93 deletions
diff --git a/src/math-equation.c b/src/math-equation.c
index 8f8c1c1..2ce3ab8 100644
--- a/src/math-equation.c
+++ b/src/math-equation.c
@@ -103,21 +103,18 @@ typedef struct {
G_DEFINE_TYPE_WITH_PRIVATE (MathEquation, math_equation, GTK_TYPE_TEXT_BUFFER);
-
MathEquation *
math_equation_new()
{
return g_object_new(math_equation_get_type(), NULL);
}
-
MathVariables *
math_equation_get_variables(MathEquation *equation)
{
return equation->priv->variables;
}
-
static void
get_ans_offsets(MathEquation *equation, gint *start, gint *end)
{
@@ -134,7 +131,6 @@ get_ans_offsets(MathEquation *equation, gint *start, gint *end)
*end = gtk_text_iter_get_offset(&iter);
}
-
static void
reformat_ans(MathEquation *equation)
{
@@ -173,7 +169,6 @@ reformat_ans(MathEquation *equation)
g_free(ans_text);
}
-
static gint
count_digits(MathEquation *equation, const gchar *text)
{
@@ -200,7 +195,6 @@ count_digits(MathEquation *equation, const gchar *text)
return count;
}
-
static void
reformat_separators(MathEquation *equation)
{
@@ -279,7 +273,6 @@ reformat_separators(MathEquation *equation)
equation->priv->in_undo_operation = FALSE;
}
-
static void
reformat_display(MathEquation *equation)
{
@@ -288,8 +281,9 @@ reformat_display(MathEquation *equation)
/* Add/remove thousands separators */
reformat_separators(equation);
-}
+ g_signal_emit_by_name(equation, "display-changed");
+}
static MathEquationState *
get_current_state(MathEquation *equation)
@@ -322,7 +316,6 @@ get_current_state(MathEquation *equation)
return state;
}
-
static void
free_state(MathEquationState *state)
{
@@ -331,7 +324,6 @@ free_state(MathEquationState *state)
g_free(state);
}
-
static void
math_equation_push_undo_stack(MathEquation *equation)
{
@@ -355,7 +347,6 @@ math_equation_push_undo_stack(MathEquation *equation)
equation->priv->undo_stack = g_list_prepend(equation->priv->undo_stack, state);
}
-
static void
clear_ans(MathEquation *equation, gboolean remove_tag)
{
@@ -376,7 +367,6 @@ clear_ans(MathEquation *equation, gboolean remove_tag)
equation->priv->ans_end = NULL;
}
-
static void
apply_state(MathEquation *equation, MathEquationState *state)
{
@@ -409,7 +399,6 @@ apply_state(MathEquation *equation, MathEquationState *state)
equation->priv->in_undo_operation = FALSE;
}
-
void
math_equation_copy(MathEquation *equation)
{
@@ -426,7 +415,6 @@ math_equation_copy(MathEquation *equation)
g_free(text);
}
-
static void
on_paste(GtkClipboard *clipboard, const gchar *text, gpointer data)
{
@@ -435,7 +423,6 @@ on_paste(GtkClipboard *clipboard, const gchar *text, gpointer data)
math_equation_insert(equation, text);
}
-
void
math_equation_paste(MathEquation *equation)
{
@@ -443,7 +430,6 @@ math_equation_paste(MathEquation *equation)
gtk_clipboard_request_text(gtk_clipboard_get(GDK_NONE), on_paste, equation);
}
-
void
math_equation_undo(MathEquation *equation)
{
@@ -470,7 +456,6 @@ math_equation_undo(MathEquation *equation)
free_state(state);
}
-
void
math_equation_redo(MathEquation *equation)
{
@@ -497,7 +482,6 @@ math_equation_redo(MathEquation *equation)
free_state(state);
}
-
gunichar
math_equation_get_digit_text(MathEquation *equation, guint digit)
{
@@ -507,7 +491,6 @@ math_equation_get_digit_text(MathEquation *equation, guint digit)
return equation->priv->digits[digit];
}
-
void
math_equation_set_accuracy(MathEquation *equation, gint accuracy)
{
@@ -520,7 +503,6 @@ math_equation_set_accuracy(MathEquation *equation, gint accuracy)
g_object_notify(G_OBJECT(equation), "accuracy");
}
-
gint
math_equation_get_accuracy(MathEquation *equation)
{
@@ -529,7 +511,6 @@ math_equation_get_accuracy(MathEquation *equation)
return mp_serializer_get_trailing_digits(equation->priv->serializer);
}
-
void
math_equation_set_show_thousands_separators(MathEquation *equation, gboolean visible)
{
@@ -543,7 +524,6 @@ math_equation_set_show_thousands_separators(MathEquation *equation, gboolean vis
g_object_notify(G_OBJECT(equation), "show-thousands-separators");
}
-
gboolean
math_equation_get_show_thousands_separators(MathEquation *equation)
{
@@ -551,7 +531,6 @@ math_equation_get_show_thousands_separators(MathEquation *equation)
return mp_serializer_get_show_thousands_separators(equation->priv->serializer);
}
-
void
math_equation_set_show_trailing_zeroes(MathEquation *equation, gboolean visible)
{
@@ -565,7 +544,6 @@ math_equation_set_show_trailing_zeroes(MathEquation *equation, gboolean visible)
g_object_notify(G_OBJECT(equation), "show-trailing-zeroes");
}
-
gboolean
math_equation_get_show_trailing_zeroes(MathEquation *equation)
{
@@ -573,7 +551,6 @@ math_equation_get_show_trailing_zeroes(MathEquation *equation)
return mp_serializer_get_show_trailing_zeroes(equation->priv->serializer);
}
-
void
math_equation_set_number_format(MathEquation *equation, MpDisplayFormat format)
{
@@ -587,7 +564,6 @@ math_equation_set_number_format(MathEquation *equation, MpDisplayFormat format)
g_object_notify(G_OBJECT(equation), "number-format");
}
-
MpDisplayFormat
math_equation_get_number_format(MathEquation *equation)
{
@@ -595,7 +571,6 @@ math_equation_get_number_format(MathEquation *equation)
return mp_serializer_get_number_format(equation->priv->serializer);
}
-
void
math_equation_set_base(MathEquation *equation, gint base)
{
@@ -609,7 +584,6 @@ math_equation_set_base(MathEquation *equation, gint base)
g_object_notify(G_OBJECT(equation), "base");
}
-
gint
math_equation_get_base(MathEquation *equation)
{
@@ -617,7 +591,6 @@ math_equation_get_base(MathEquation *equation)
return mp_serializer_get_base(equation->priv->serializer);
}
-
void
math_equation_set_word_size(MathEquation *equation, gint word_size)
{
@@ -630,7 +603,6 @@ math_equation_set_word_size(MathEquation *equation, gint word_size)
g_object_notify(G_OBJECT(equation), "word-size");
}
-
gint
math_equation_get_word_size(MathEquation *equation)
{
@@ -638,7 +610,6 @@ math_equation_get_word_size(MathEquation *equation)
return equation->priv->word_size;
}
-
void
math_equation_set_angle_units(MathEquation *equation, MPAngleUnit angle_units)
{
@@ -651,7 +622,6 @@ math_equation_set_angle_units(MathEquation *equation, MPAngleUnit angle_units)
g_object_notify(G_OBJECT(equation), "angle-units");
}
-
MPAngleUnit
math_equation_get_angle_units(MathEquation *equation)
{
@@ -659,7 +629,6 @@ math_equation_get_angle_units(MathEquation *equation)
return equation->priv->angle_units;
}
-
void
math_equation_set_source_currency(MathEquation *equation, const gchar *currency)
{
@@ -674,7 +643,6 @@ math_equation_set_source_currency(MathEquation *equation, const gchar *currency)
math_equation_get_source_currency(equation));
}
-
const gchar *
math_equation_get_source_currency(MathEquation *equation)
{
@@ -682,7 +650,6 @@ math_equation_get_source_currency(MathEquation *equation)
return equation->priv->source_currency;
}
-
void
math_equation_set_target_currency(MathEquation *equation, const gchar *currency)
{
@@ -697,7 +664,6 @@ math_equation_set_target_currency(MathEquation *equation, const gchar *currency)
math_equation_get_target_currency(equation));
}
-
const gchar *
math_equation_get_target_currency(MathEquation *equation)
{
@@ -705,7 +671,6 @@ math_equation_get_target_currency(MathEquation *equation)
return equation->priv->target_currency;
}
-
void
math_equation_set_source_units(MathEquation *equation, const gchar *units)
{
@@ -728,7 +693,6 @@ math_equation_get_source_units(MathEquation *equation)
return equation->priv->source_units;
}
-
void
math_equation_set_target_units(MathEquation *equation, const gchar *units)
{
@@ -744,7 +708,6 @@ math_equation_set_target_units(MathEquation *equation, const gchar *units)
math_equation_get_target_units(equation));
}
-
const gchar *
math_equation_get_target_units(MathEquation *equation)
{
@@ -752,7 +715,6 @@ math_equation_get_target_units(MathEquation *equation)
return equation->priv->target_units;
}
-
void
math_equation_set_status(MathEquation *equation, const gchar *status)
{
@@ -767,7 +729,6 @@ math_equation_set_status(MathEquation *equation, const gchar *status)
g_object_notify(G_OBJECT(equation), "status");
}
-
const gchar *
math_equation_get_status(MathEquation *equation)
{
@@ -775,7 +736,6 @@ math_equation_get_status(MathEquation *equation)
return equation->priv->state.status;
}
-
gboolean
math_equation_is_empty(MathEquation *equation)
{
@@ -783,7 +743,6 @@ math_equation_is_empty(MathEquation *equation)
return gtk_text_buffer_get_char_count(GTK_TEXT_BUFFER(equation)) == 0;
}
-
gboolean
math_equation_is_result(MathEquation *equation)
{
@@ -799,7 +758,6 @@ math_equation_is_result(MathEquation *equation)
return result;
}
-
gchar *
math_equation_get_display(MathEquation *equation)
{
@@ -811,7 +769,6 @@ math_equation_get_display(MathEquation *equation)
return gtk_text_buffer_get_text(GTK_TEXT_BUFFER(equation), &start, &end, FALSE);
}
-
gchar *
math_equation_get_equation(MathEquation *equation)
{
@@ -865,7 +822,6 @@ math_equation_get_equation(MathEquation *equation)
return text;
}
-
gboolean
math_equation_get_number(MathEquation *equation, MPNumber *z)
{
@@ -887,7 +843,6 @@ math_equation_get_number(MathEquation *equation, MPNumber *z)
}
}
-
MpSerializer *
math_equation_get_serializer(MathEquation *equation)
{
@@ -895,7 +850,6 @@ math_equation_get_serializer(MathEquation *equation)
return equation->priv->serializer;
}
-
void
math_equation_set_number_mode(MathEquation *equation, NumberMode mode)
{
@@ -910,7 +864,6 @@ math_equation_set_number_mode(MathEquation *equation, NumberMode mode)
g_object_notify(G_OBJECT(equation), "number-mode");
}
-
NumberMode
math_equation_get_number_mode(MathEquation *equation)
{
@@ -918,7 +871,6 @@ math_equation_get_number_mode(MathEquation *equation)
return equation->priv->number_mode;
}
-
gboolean
math_equation_in_solve(MathEquation *equation)
{
@@ -926,7 +878,6 @@ math_equation_in_solve(MathEquation *equation)
return equation->priv->in_solve;
}
-
const MPNumber *
math_equation_get_answer(MathEquation *equation)
{
@@ -934,7 +885,6 @@ math_equation_get_answer(MathEquation *equation)
return &equation->priv->state.ans;
}
-
void
math_equation_store(MathEquation *equation, const gchar *name)
{
@@ -950,7 +900,6 @@ math_equation_store(MathEquation *equation, const gchar *name)
mp_clear(&t);
}
-
void
math_equation_recall(MathEquation *equation, const gchar *name)
{
@@ -959,7 +908,6 @@ math_equation_recall(MathEquation *equation, const gchar *name)
math_equation_insert(equation, name);
}
-
void
math_equation_set(MathEquation *equation, const gchar *text)
{
@@ -980,14 +928,12 @@ math_equation_set_with_history(MathEquation *equation, const gchar *text)
/* Notify history */
state = get_current_state(equation);
- g_signal_emit_by_name(equation, "history", state->expression, &x,
- mp_serializer_get_base(equation->priv->serializer));
+ g_signal_emit_by_name(equation, "history", state->expression, &x);
free_state(state);
mp_clear(&x);
}
-
void
math_equation_set_number(MathEquation *equation, const MPNumber *x)
{
@@ -1000,7 +946,7 @@ math_equation_set_number(MathEquation *equation, const MPNumber *x)
/* Notify history */
state = get_current_state(equation);
- g_signal_emit_by_name(equation, "history", state->expression, x, mp_serializer_get_base(equation->priv->serializer));
+ g_signal_emit_by_name(equation, "history", state->expression, x);
/* Show the number in the user chosen format */
text = mp_serializer_to_string(equation->priv->serializer, x);
@@ -1020,7 +966,6 @@ math_equation_set_number(MathEquation *equation, const MPNumber *x)
free_state(state);
}
-
void
math_equation_insert(MathEquation *equation, const gchar *text)
{
@@ -1050,7 +995,6 @@ math_equation_insert(MathEquation *equation, const gchar *text)
gtk_text_buffer_insert_at_cursor(GTK_TEXT_BUFFER(equation), text, -1);
}
-
void
math_equation_insert_digit(MathEquation *equation, guint digit)
{
@@ -1073,7 +1017,6 @@ math_equation_insert_digit(MathEquation *equation, guint digit)
math_equation_insert(equation, subscript_digits[digit]);
}
-
void
math_equation_insert_numeric_point(MathEquation *equation)
{
@@ -1087,7 +1030,6 @@ math_equation_insert_numeric_point(MathEquation *equation)
math_equation_insert(equation, buffer);
}
-
void
math_equation_insert_number(MathEquation *equation, const MPNumber *x)
{
@@ -1101,7 +1043,6 @@ math_equation_insert_number(MathEquation *equation, const MPNumber *x)
g_free(text);
}
-
void
math_equation_insert_exponent(MathEquation *equation)
{
@@ -1110,7 +1051,6 @@ math_equation_insert_exponent(MathEquation *equation)
math_equation_set_number_mode(equation, SUPERSCRIPT);
}
-
void
math_equation_insert_subtract(MathEquation *equation)
{
@@ -1125,7 +1065,6 @@ math_equation_insert_subtract(MathEquation *equation)
}
}
-
static int
variable_is_defined(const char *name, void *data)
{
@@ -1146,7 +1085,6 @@ variable_is_defined(const char *name, void *data)
return math_variables_get(equation->priv->variables, name) != NULL;
}
-
static int
get_variable(const char *name, MPNumber *z, void *data)
{
@@ -1175,7 +1113,6 @@ get_variable(const char *name, MPNumber *z, void *data)
return result;
}
-
static void
set_variable(const char *name, const MPNumber *x, void *data)
{
@@ -1184,14 +1121,12 @@ set_variable(const char *name, const MPNumber *x, void *data)
math_variables_set(equation->priv->variables, name, x);
}
-
static int
convert(const MPNumber *x, const char *x_units, const char *z_units, MPNumber *z, void *data)
{
return unit_manager_convert_by_symbol(unit_manager_get_default(), x, x_units, z_units, z);
}
-
static int
parse(MathEquation *equation, const char *text, MPNumber *z, char **error_token)
{
@@ -1210,7 +1145,6 @@ parse(MathEquation *equation, const char *text, MPNumber *z, char **error_token)
return mp_equation_parse(text, &options, z, error_token);
}
-
/*
* Executed in separate thread. It is thus not a good idea to write to anything
* in MathEquation but the async queue from here.
@@ -1241,7 +1175,6 @@ math_equation_solve_real(gpointer data)
n_brackets--;
}
-
result = parse(equation, equation_text->str, &z, &error_token);
g_string_free(equation_text, TRUE);
@@ -1294,7 +1227,6 @@ math_equation_solve_real(gpointer data)
return NULL;
}
-
static gboolean
math_equation_show_in_progress(gpointer data)
{
@@ -1304,7 +1236,6 @@ math_equation_show_in_progress(gpointer data)
return false;
}
-
static gboolean
math_equation_look_for_answer(gpointer data)
{
@@ -1337,7 +1268,6 @@ math_equation_look_for_answer(gpointer data)
return false;
}
-
void
math_equation_solve(MathEquation *equation)
{
@@ -1366,7 +1296,6 @@ math_equation_solve(MathEquation *equation)
g_timeout_add(100, math_equation_show_in_progress, equation);
}
-
static gpointer
math_equation_factorize_real(gpointer data)
{
@@ -1375,7 +1304,9 @@ math_equation_factorize_real(gpointer data)
MPNumber x = mp_new();
MathEquation *equation = MATH_EQUATION(data);
SolveData *result = g_slice_new0(SolveData);
+ MpDisplayFormat format = mp_serializer_get_number_format(equation->priv->serializer);
+ mp_serializer_set_number_format(equation->priv->serializer, MP_DISPLAY_FORMAT_FIXED);
math_equation_get_number(equation, &x);
factors = mp_factorize(&x);
@@ -1418,10 +1349,11 @@ math_equation_factorize_real(gpointer data)
g_string_free(text, TRUE);
mp_clear(&x);
+ mp_serializer_set_number_format(equation->priv->serializer, format);
+
return NULL;
}
-
void
math_equation_factorize(MathEquation *equation)
{
@@ -1448,7 +1380,6 @@ math_equation_factorize(MathEquation *equation)
g_timeout_add(100, math_equation_show_in_progress, equation);
}
-
void
math_equation_delete(MathEquation *equation)
{
@@ -1466,7 +1397,6 @@ math_equation_delete(MathEquation *equation)
gtk_text_buffer_delete(GTK_TEXT_BUFFER(equation), &start, &end);
}
-
void
math_equation_backspace(MathEquation *equation)
{
@@ -1485,7 +1415,6 @@ math_equation_backspace(MathEquation *equation)
}
}
-
void
math_equation_clear(MathEquation *equation)
{
@@ -1496,7 +1425,6 @@ math_equation_clear(MathEquation *equation)
clear_ans(equation, FALSE);
}
-
void
math_equation_shift(MathEquation *equation, gint count)
{
@@ -1517,7 +1445,6 @@ math_equation_shift(MathEquation *equation, gint count)
mp_clear(&z);
}
-
void
math_equation_toggle_bit(MathEquation *equation, guint bit)
{
@@ -1555,7 +1482,6 @@ math_equation_toggle_bit(MathEquation *equation, guint bit)
mp_clear(&x);
}
-
static void
math_equation_set_property(GObject *object,
guint prop_id,
@@ -1615,7 +1541,6 @@ math_equation_set_property(GObject *object,
}
}
-
static void
math_equation_get_property(GObject *object,
guint prop_id,
@@ -1686,7 +1611,6 @@ math_equation_get_property(GObject *object,
}
}
-
static void
math_equation_constructed(GObject *object)
{
@@ -1698,7 +1622,6 @@ math_equation_constructed(GObject *object)
MATH_EQUATION(object)->priv->ans_tag = gtk_text_buffer_create_tag(GTK_TEXT_BUFFER(object), NULL, "weight", PANGO_WEIGHT_BOLD, NULL);
}
-
static void
math_equation_class_init(MathEquationClass *klass)
{
@@ -1842,7 +1765,7 @@ math_equation_class_init(MathEquationClass *klass)
MP_TYPE_SERIALIZER,
G_PARAM_READABLE));
- GType param_types[3] = {G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_INT};
+ GType param_types[2] = {G_TYPE_STRING, G_TYPE_POINTER};
g_signal_newv("history",
G_TYPE_FROM_CLASS(klass),
G_SIGNAL_RUN_LAST,
@@ -1851,10 +1774,20 @@ math_equation_class_init(MathEquationClass *klass)
NULL,
NULL,
G_TYPE_NONE,
- 3,
+ 2,
param_types);
-}
+ g_signal_new ("display-changed",
+ G_TYPE_FROM_CLASS(klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ G_TYPE_NONE,
+ 0,
+ NULL);
+}
static void
pre_insert_text_cb(MathEquation *equation,
@@ -1898,7 +1831,6 @@ pre_insert_text_cb(MathEquation *equation,
}
}
-
static gboolean
on_delete(MathEquation *equation)
{
@@ -1906,7 +1838,6 @@ on_delete(MathEquation *equation)
return FALSE;
}
-
static void
pre_delete_range_cb(MathEquation *equation,
GtkTextIter *start,
@@ -1935,7 +1866,6 @@ pre_delete_range_cb(MathEquation *equation,
}
}
-
static void
insert_text_cb(MathEquation *equation,
GtkTextIter *location,
@@ -1954,7 +1884,6 @@ insert_text_cb(MathEquation *equation,
g_object_notify(G_OBJECT(equation), "display");
}
-
static void
delete_range_cb(MathEquation *equation,
GtkTextIter *start,
@@ -1973,7 +1902,6 @@ delete_range_cb(MathEquation *equation,
g_object_notify(G_OBJECT(equation), "display");
}
-
static void
math_equation_init(MathEquation *equation)
{