24 #include <glib/gi18n.h> 26 #include "gnc-exp-parser.h" 36 #define G_LOG_DOMAIN "gnc.register.core.formulacell" 39 static void gnc_formula_cell_init(
FormulaCell *fc );
41 static gboolean gnc_formula_cell_enter( BasicCell *_cell,
46 static void gnc_formula_cell_leave( BasicCell *_cell );
48 static void gnc_formula_cell_modify_verify( BasicCell *_cell,
57 static void gnc_formula_cell_set_value_internal( BasicCell *_cell,
63 gnc_formula_cell_new(
void)
66 gnc_formula_cell_init( fc );
74 gnc_basic_cell_init (&(fc->cell));
76 fc->
print_info = gnc_default_print_info (FALSE);
78 fc->cell.enter_cell = gnc_formula_cell_enter;
79 fc->cell.modify_verify = gnc_formula_cell_modify_verify;
80 fc->cell.set_value = gnc_formula_cell_set_value_internal;
81 fc->cell.leave_cell = gnc_formula_cell_leave;
88 DEBUG(
"got value [%s]", newVal);
89 gnc_formula_cell_set_value_internal( &fc->cell, newVal );
94 gnc_formula_cell_enter( BasicCell *_cell,
99 DEBUG(
"%d, %d, %d", *cursor_position, *start_selection, *end_selection);
100 *cursor_position = -1;
101 *start_selection = 0;
107 gnc_formula_cell_leave(BasicCell *_cell)
111 str = fc->cell.value;
113 char *error_location = NULL;
117 && !gnc_exp_parser_parse(str, &amount, &error_location))
119 gint error_position = error_location - str;
121 _(
"An error occurred while processing '%s' at position %d"),
122 str, error_position);
126 gnc_basic_cell_set_value_internal( &fc->cell, str );
131 gnc_formula_cell_modify_verify( BasicCell *_cell,
136 int *cursor_position,
137 int *start_selection,
141 const char *toks =
"+-*/=()_:";
142 char *validated_newval = NULL;
144 DEBUG(
"%s, %d, %s, %d, %d, %d, %d",
145 change ? (gchar *)change :
"(null)", change_len,
146 newval ? (gchar *)newval :
"(null)", newval_len,
147 *cursor_position, *start_selection, *end_selection);
152 gnc_basic_cell_set_value_internal (&fc->cell, newval);
154 *end_selection = *start_selection = *cursor_position;
158 validated_newval = gnc_basic_cell_validate (_cell, fc->
print_info,
159 change, newval, toks,
162 if (!validated_newval)
165 gnc_basic_cell_set_value_internal (_cell, validated_newval);
166 g_free (validated_newval);
171 gnc_formula_cell_set_value_internal( BasicCell *_cell,
175 DEBUG(
"internal string: [%s]", str);
176 gnc_basic_cell_set_value_internal( &fc->cell, str );
GtkWindow * gnc_ui_get_main_window(GtkWidget *widget)
Get a pointer to the final GncMainWindow widget is rooted in.
utility functions for the GnuCash UI
#define G_LOG_DOMAIN
Functions providing the SX List as a plugin page.
#define DEBUG(format, args...)
Print a debugging message.
All type declarations for the whole Gnucash engine.