diff options
Diffstat (limited to 'src/math-equation.c')
-rw-r--r-- | src/math-equation.c | 114 |
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) { |