1 /*
2     Qalculate (GTK+ UI)
3 
4     Copyright (C) 2003-2007, 2008, 2016-2020  Hanna Knutsson (hanna.knutsson@protonmail.com)
5 
6     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10 */
11 
12 #ifndef CALLBACKS_H
13 #define CALLBACKS_H
14 
15 #include <gtk/gtk.h>
16 
17 #define EXPAND_TO_ITER(model, view, iter)		GtkTreePath *path = gtk_tree_model_get_path(model, &iter); \
18 							gtk_tree_view_expand_to_path(GTK_TREE_VIEW(view), path); \
19 							gtk_tree_path_free(path);
20 #define SCROLL_TO_ITER(model, view, iter)		GtkTreePath *path2 = gtk_tree_model_get_path(model, &iter); \
21 							gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(view), path2, NULL, FALSE, 0, 0); \
22 							gtk_tree_path_free(path2);
23 #define EXPAND_ITER(model, view, iter)			GtkTreePath *path = gtk_tree_model_get_path(model, &iter); \
24 							gtk_tree_view_expand_row(GTK_TREE_VIEW(view), path, FALSE); \
25 							gtk_tree_path_free(path);
26 
27 #include "main.h"
28 
29 enum {
30 	PROGRAMMING_KEYPAD = 1,
31 	HIDE_LEFT_KEYPAD = 2,
32 	HIDE_RIGHT_KEYPAD = 4
33 };
34 
35 struct mode_struct {
36 	PrintOptions po;
37 	EvaluationOptions eo;
38 	AssumptionType at;
39 	AssumptionSign as;
40 	Number custom_output_base;
41 	Number custom_input_base;
42 	int precision;
43 	std::string name;
44 	bool rpn_mode;
45 	bool interval;
46 	bool adaptive_interval_display;
47 	bool variable_units_enabled;
48 	int keypad;
49 	bool autocalc;
50 	bool chain_mode;
51 	bool complex_angle_form;
52 };
53 
54 enum {
55 	QALCULATE_HISTORY_EXPRESSION,
56 	QALCULATE_HISTORY_TRANSFORMATION,
57 	QALCULATE_HISTORY_RESULT,
58 	QALCULATE_HISTORY_RESULT_APPROXIMATE,
59 	QALCULATE_HISTORY_PARSE_WITHEQUALS,
60 	QALCULATE_HISTORY_PARSE,
61 	QALCULATE_HISTORY_PARSE_APPROXIMATE,
62 	QALCULATE_HISTORY_WARNING,
63 	QALCULATE_HISTORY_ERROR,
64 	QALCULATE_HISTORY_OLD,
65 	QALCULATE_HISTORY_REGISTER_MOVED,
66 	QALCULATE_HISTORY_RPN_OPERATION,
67 	QALCULATE_HISTORY_BOOKMARK,
68 	QALCULATE_HISTORY_MESSAGE
69 };
70 
71 enum {
72 	SHORTCUT_TYPE_FUNCTION,
73 	SHORTCUT_TYPE_FUNCTION_WITH_DIALOG,
74 	SHORTCUT_TYPE_VARIABLE,
75 	SHORTCUT_TYPE_UNIT,
76 	SHORTCUT_TYPE_TEXT,
77 	SHORTCUT_TYPE_DATE,
78 	SHORTCUT_TYPE_VECTOR,
79 	SHORTCUT_TYPE_MATRIX,
80 	SHORTCUT_TYPE_SMART_PARENTHESES,
81 	SHORTCUT_TYPE_CONVERT,
82 	SHORTCUT_TYPE_CONVERT_ENTRY,
83 	SHORTCUT_TYPE_OPTIMAL_UNIT,
84 	SHORTCUT_TYPE_BASE_UNITS,
85 	SHORTCUT_TYPE_OPTIMAL_PREFIX,
86 	SHORTCUT_TYPE_TO_NUMBER_BASE,
87 	SHORTCUT_TYPE_FACTORIZE,
88 	SHORTCUT_TYPE_EXPAND,
89 	SHORTCUT_TYPE_PARTIAL_FRACTIONS,
90 	SHORTCUT_TYPE_SET_UNKNOWNS,
91 	SHORTCUT_TYPE_RPN_UP,
92 	SHORTCUT_TYPE_RPN_DOWN,
93 	SHORTCUT_TYPE_RPN_SWAP,
94 	SHORTCUT_TYPE_RPN_COPY,
95 	SHORTCUT_TYPE_RPN_LASTX,
96 	SHORTCUT_TYPE_RPN_DELETE,
97 	SHORTCUT_TYPE_RPN_CLEAR,
98 	SHORTCUT_TYPE_META_MODE,
99 	SHORTCUT_TYPE_OUTPUT_BASE,
100 	SHORTCUT_TYPE_INPUT_BASE,
101 	SHORTCUT_TYPE_EXACT_MODE,
102 	SHORTCUT_TYPE_DEGREES,
103 	SHORTCUT_TYPE_RADIANS,
104 	SHORTCUT_TYPE_GRADIANS,
105 	SHORTCUT_TYPE_FRACTIONS,
106 	SHORTCUT_TYPE_MIXED_FRACTIONS,
107 	SHORTCUT_TYPE_SCIENTIFIC_NOTATION,
108 	SHORTCUT_TYPE_SIMPLE_NOTATION,
109 	SHORTCUT_TYPE_RPN_MODE,
110 	SHORTCUT_TYPE_AUTOCALC,
111 	SHORTCUT_TYPE_PROGRAMMING,
112 	SHORTCUT_TYPE_KEYPAD,
113 	SHORTCUT_TYPE_HISTORY,
114 	SHORTCUT_TYPE_HISTORY_SEARCH,
115 	SHORTCUT_TYPE_CONVERSION,
116 	SHORTCUT_TYPE_STACK,
117 	SHORTCUT_TYPE_MINIMAL,
118 	SHORTCUT_TYPE_MANAGE_VARIABLES,
119 	SHORTCUT_TYPE_MANAGE_FUNCTIONS,
120 	SHORTCUT_TYPE_MANAGE_UNITS,
121 	SHORTCUT_TYPE_MANAGE_DATA_SETS,
122 	SHORTCUT_TYPE_STORE,
123 	SHORTCUT_TYPE_MEMORY_CLEAR,
124 	SHORTCUT_TYPE_MEMORY_RECALL,
125 	SHORTCUT_TYPE_MEMORY_STORE,
126 	SHORTCUT_TYPE_MEMORY_ADD,
127 	SHORTCUT_TYPE_MEMORY_SUBTRACT,
128 	SHORTCUT_TYPE_NEW_VARIABLE,
129 	SHORTCUT_TYPE_NEW_FUNCTION,
130 	SHORTCUT_TYPE_PLOT,
131 	SHORTCUT_TYPE_NUMBER_BASES,
132 	SHORTCUT_TYPE_FLOATING_POINT,
133 	SHORTCUT_TYPE_CALENDARS,
134 	SHORTCUT_TYPE_PERCENTAGE_TOOL,
135 	SHORTCUT_TYPE_PERIODIC_TABLE,
136 	SHORTCUT_TYPE_UPDATE_EXRATES,
137 	SHORTCUT_TYPE_COPY_RESULT,
138 	SHORTCUT_TYPE_SAVE_IMAGE,
139 	SHORTCUT_TYPE_HELP,
140 	SHORTCUT_TYPE_QUIT,
141 	SHORTCUT_TYPE_CHAIN_MODE
142 };
143 
144 struct keyboard_shortcut {
145 	guint key;
146 	guint modifier;
147 	int type;
148 	std::string value;
149 };
150 
151 struct custom_button {
152 	int type[3];
153 	std::string value[3], text;
custom_buttoncustom_button154 	custom_button() {type[0] = -1; type[1] = -1; type[2] = -1;}
155 };
156 
157 std::string shortcut_to_text(guint key, guint state);
158 const gchar *shortcut_type_text(int type, bool return_null = false);
159 void update_accels();
160 
161 DECLARE_BUILTIN_FUNCTION(AnswerFunction, 0)
162 DECLARE_BUILTIN_FUNCTION(ExpressionFunction, 0)
163 DECLARE_BUILTIN_FUNCTION(SetTitleFunction, 0)
164 
165 class ViewThread : public Thread {
166 protected:
167 	virtual void run();
168 };
169 
170 class CommandThread : public Thread {
171 protected:
172 	virtual void run();
173 };
174 
175 class FetchExchangeRatesThread : public Thread {
176 protected:
177 	virtual void run();
178 };
179 
180 bool string_is_less(std::string str1, std::string str2);
181 
182 bool can_display_unicode_string_function(const char *str, void *w);
183 bool can_display_unicode_string_function_exact(const char *str, void *w);
184 void set_unicode_buttons();
185 void set_operator_symbols();
186 
187 bool update_window_title(const char *str = NULL, bool is_result = false);
188 
189 cairo_surface_t *draw_structure(MathStructure &m, PrintOptions po = default_print_options, bool caf = false, InternalPrintStruct ips = top_ips, gint *point_central = NULL, int scaledown = 0, GdkRGBA *color = NULL, gint *x_offset = NULL, gint *w_offset = NULL, gint max_width = -1);
190 
191 void update_status_text();
192 
193 void clearresult();
194 
195 void set_result_size_request();
196 void set_expression_size_request();
197 
198 void create_umenu(void);
199 void create_umenu2(void);
200 void create_vmenu(void);
201 void create_fmenu(void);
202 void create_pmenu(GtkWidget *item);
203 void create_pmenu2(void);
204 
205 void update_vmenu();
206 void update_fmenu();
207 void update_umenu();
208 
209 void update_completion();
210 
211 void generate_functions_tree_struct();
212 void generate_variables_tree_struct();
213 void generate_units_tree_struct();
214 
215 gboolean on_display_errors_timeout(gpointer data);
216 gboolean on_check_version_idle(gpointer data);
217 
218 void update_functions_tree();
219 void update_variables_tree();
220 void update_units_tree();
221 void update_unit_selector_tree();
222 void update_datasets_tree();
223 void on_tFunctions_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
224 void on_tFunctionCategories_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
225 void on_tVariables_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
226 void on_tVariableCategories_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
227 void on_tUnits_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
228 void on_tUnitCategories_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
229 void on_tDataObjects_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
230 void on_tDatasets_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
231 void on_tDataProperties_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
232 void on_tUnitSelector_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
233 void on_tUnitSelectorCategories_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
234 
235 void execute_expression(bool force = true, bool do_mathoperation = false, MathOperation op = OPERATION_ADD, MathFunction *f = NULL, bool do_stack = false, size_t stack_index = 0, std::string execute_str = std::string(), std::string str = std::string(), bool check_exrates = true);
236 void setResult(Prefix *prefix = NULL, bool update_history = true, bool update_parse = false, bool force = false, std::string transformation = "", size_t stack_index = 0, bool register_moved = false, bool supress_dialog = false);
237 void execute_from_file(std::string file_name);
238 
239 void set_rpn_mode(bool b);
240 void calculateRPN(int op);
241 void calculateRPN(MathFunction *f);
242 void RPNRegisterAdded(std::string text, gint index = 0);
243 void RPNRegisterRemoved(gint index);
244 void RPNRegisterChanged(std::string text, gint index);
245 
246 void result_display_updated();
247 void result_format_updated();
248 void result_action_executed();
249 void result_prefix_changed(Prefix *prefix = NULL);
250 void expression_calculation_updated();
251 void expression_format_updated(bool recalculate = false);
252 
253 
254 void insert_text(const gchar *name);
255 
256 void recreate_recent_functions();
257 void recreate_recent_variables();
258 void recreate_recent_units();
259 void function_inserted(MathFunction *object);
260 void variable_inserted(Variable *object);
261 void unit_inserted(Unit *object);
262 
263 void on_tPlotFunctions_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
264 
265 void on_tSubfunctions_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
266 void on_tFunctionArguments_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
267 void update_function_arguments_list(MathFunction *f);
268 
269 void on_tNames_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
270 
271 void convert_in_wUnits(int toFrom = -1);
272 
273 void convert_to_unit(GtkMenuItem *w, gpointer user_data);
274 
275 void save_defs();
276 void save_mode();
277 
278 void load_preferences();
279 void save_preferences(bool mode = false);
280 void edit_preferences();
281 
282 gint completion_sort_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data);
283 gint string_sort_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data);
284 gint int_string_sort_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data);
285 
286 void set_prefix(GtkMenuItem *w, gpointer user_data);
287 
288 void manage_variables();
289 void manage_functions();
290 void manage_units();
291 
292 void set_clean_mode(GtkMenuItem *w, gpointer user_data);
293 void set_functions_enabled(GtkMenuItem *w, gpointer user_data);
294 void set_variables_enabled(GtkMenuItem *w, gpointer user_data);
295 void set_donot_calcvars(GtkMenuItem *w, gpointer user_data);
296 void set_unknownvariables_enabled(GtkMenuItem *w, gpointer user_data);
297 void set_units_enabled(GtkMenuItem *w, gpointer user_data);
298 void apply_function(GtkMenuItem *w, gpointer user_data);
299 void insert_function(GtkMenuItem *w, gpointer user_data);
300 void insert_variable(GtkMenuItem *w, gpointer user_data);
301 void insert_prefix(GtkMenuItem *w, gpointer user_data);
302 void insert_unit(GtkMenuItem *w, gpointer user_data);
303 
304 void insert_button_function(GtkMenuItem *w, gpointer user_data);
305 void insert_function_operator(GtkMenuItem *w, gpointer user_data);
306 void insert_button_function_norpn(GtkMenuItem *w, gpointer user_data);
307 void insert_button_variable(GtkWidget *w, gpointer user_data);
308 void insert_button_unit(GtkMenuItem *w, gpointer user_data);
309 void insert_button_currency(GtkMenuItem *w, gpointer user_data);
310 
311 void new_function(GtkMenuItem *w, gpointer user_data);
312 void new_unknown(GtkMenuItem *w, gpointer user_data);
313 void new_variable(GtkMenuItem *w, gpointer user_data);
314 void new_matrix(GtkMenuItem *w, gpointer user_data);
315 void new_vector(GtkMenuItem *w, gpointer user_data);
316 void new_unit(GtkMenuItem *w, gpointer user_data);
317 void add_as_variable();
318 
319 void fetch_exchange_rates(int timeout, int n = -1);
320 
321 bool edit_argument(Argument *arg = NULL);
322 
323 void edit_unknown(const char *category = "", Variable *v = NULL, GtkWidget *win = NULL);
324 void edit_variable(const char *category = "", Variable *v = NULL, MathStructure *mstruct_ = NULL, GtkWidget *win = NULL);
325 void edit_matrix(const char *category = "", Variable *v = NULL, MathStructure *mstruct_ = NULL, GtkWidget *win = NULL, gboolean create_vector = FALSE);
326 void insert_matrix(const MathStructure *initial_value = NULL, GtkWidget *win = NULL, gboolean create_vector = FALSE, bool is_text_struct = false, bool is_result = false, GtkEntry *entry = NULL);
327 void import_csv_file(GtkWidget *win = NULL);
328 void export_csv_file(KnownVariable *v = NULL, GtkWidget *win = NULL);
329 
330 void edit_dataobject(DataSet *ds, DataObject *o = NULL, GtkWidget *win = NULL);
331 void edit_dataset(DataSet *ds = NULL, GtkWidget *win = NULL);
332 
333 void edit_names(ExpressionItem *item = NULL, const gchar *namestr = NULL, GtkWidget *win = NULL, bool is_dp = false, DataProperty *dp = NULL);
334 
335 gchar *font_name_to_css(const char *font_name, const char *w = "*");
336 
337 void reload_history(gint from_index = -1);
338 void set_status_bottom_border_visible(bool);
339 
340 #ifdef __cplusplus
341 extern "C" {
342 #endif
343 
344 void update_menu_base();
345 
346 void memory_recall();
347 void memory_store();
348 void memory_add();
349 void memory_subtract();
350 void memory_clear();
351 
352 gboolean on_math_entry_key_press_event(GtkWidget *o, GdkEventKey *event, gpointer);
353 
354 void hide_tooltip(GtkWidget*);
355 
356 void on_tShortcuts_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
357 void on_tShortcutsType_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
358 
359 void on_tButtonsEdit_selection_changed(GtkTreeSelection *treeselection, gpointer);
360 void on_tButtonsEdit_update_selection(GtkTreeSelection *treeselection, bool update_label_entry);
361 void on_tButtonsEditType_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
362 void on_buttonsedit_button_clicked(GtkButton *w, gpointer user_data);
363 void on_buttonsedit_defaults_clicked(GtkButton *w, gpointer user_data);
364 void on_buttonsedit_label_changed(GtkEditable *w, gpointer user_data);
365 
366 void insert_left_shift();
367 void insert_right_shift();
368 void insert_bitwise_and();
369 void insert_bitwise_or();
370 void insert_bitwise_xor();
371 void insert_bitwise_not();
372 void insert_angle_symbol();
373 
374 void update_mb_fx_menu();
375 void update_mb_sto_menu();
376 void update_mb_units_menu();
377 void update_mb_pi_menu();
378 void update_mb_to_menu();
379 void update_mb_angles(AngleUnit angle_unit);
380 
381 void on_completion_match_selected(GtkTreeView*, GtkTreePath *path, GtkTreeViewColumn*, gpointer);
382 void on_units_convert_view_row_activated(GtkTreeView*, GtkTreePath *path, GtkTreeViewColumn*, gpointer);
383 void units_convert_resize_popup();
384 
385 void *view_proc(void*);
386 void *command_proc(void*);
387 void on_history_resize(GtkWidget*, GdkRectangle*, gpointer);
388 void on_message_bar_response(GtkInfoBar *w, gint response_id, gpointer);
389 void on_expressiontext_populate_popup(GtkTextView *w, GtkMenu *menu, gpointer user_data);
390 void on_combobox_base_changed(GtkComboBox *w, gpointer user_data);
391 void on_combobox_numerical_display_changed(GtkComboBox *w, gpointer user_data);
392 void on_button_fraction_toggled(GtkToggleButton *w, gpointer user_data);
393 void on_button_exact_toggled(GtkToggleButton *w, gpointer user_data);
394 void on_expander_keypad_expanded(GObject *o, GParamSpec *param_spec, gpointer user_data);
395 void on_expander_history_expanded(GObject *o, GParamSpec *param_spec, gpointer user_data);
396 void on_expander_stack_expanded(GObject *o, GParamSpec *param_spec, gpointer user_data);
397 void on_expander_convert_expanded(GObject *o, GParamSpec *param_spec, gpointer user_data);
398 gboolean on_menu_item_meta_mode_popup_menu(GtkWidget*, gpointer data);
399 gboolean on_menu_item_meta_mode_button_press(GtkWidget *widget, GdkEventButton *event, gpointer data);
400 void on_menu_item_meta_mode_activate(GtkMenuItem *w, gpointer user_data);
401 void on_menu_item_meta_mode_save_activate(GtkMenuItem *w, gpointer user_data);
402 void on_menu_item_meta_mode_delete_activate(GtkMenuItem *w, gpointer user_data);
403 void on_menu_item_quit_activate(GtkMenuItem *w, gpointer user_data);
404 void on_colorbutton_status_error_color_color_set(GtkColorButton *w, gpointer user_data);
405 void on_colorbutton_status_warning_color_color_set(GtkColorButton *w, gpointer user_data);
406 void on_preferences_checkbutton_persistent_keypad_toggled(GtkToggleButton *w, gpointer user_data);
407 void on_preferences_checkbutton_copy_separator_toggled(GtkToggleButton *w, gpointer user_data);
408 void on_preferences_checkbutton_lower_case_numbers_toggled(GtkToggleButton *w, gpointer user_data);
409 void on_preferences_checkbutton_e_notation_toggled(GtkToggleButton *w, gpointer user_data);
410 void on_preferences_checkbutton_lower_case_e_toggled(GtkToggleButton *w, gpointer user_data);
411 void on_preferences_checkbutton_alternative_base_prefixes_toggled(GtkToggleButton *w, gpointer user_data);
412 void on_preferences_checkbutton_spell_out_logical_operators_toggled(GtkToggleButton *w, gpointer user_data);
413 void on_preferences_checkbutton_unicode_signs_toggled(GtkToggleButton *w, gpointer user_data);
414 void on_preferences_checkbutton_display_expression_status_toggled(GtkToggleButton *w, gpointer user_data);
415 void on_preferences_checkbutton_fetch_exchange_rates_toggled(GtkToggleButton *w, gpointer user_data);
416 void on_preferences_checkbutton_save_defs_toggled(GtkToggleButton *w, gpointer user_data);
417 void on_preferences_checkbutton_save_mode_toggled(GtkToggleButton *w, gpointer user_data);
418 void on_preferences_checkbutton_rpn_keys_only_toggled(GtkToggleButton *w, gpointer);
419 void on_preferences_checkbutton_dot_as_separator_toggled(GtkToggleButton *w, gpointer);
420 void on_preferences_checkbutton_load_defs_toggled(GtkToggleButton *w, gpointer user_data);
421 void on_preferences_checkbutton_custom_result_font_toggled(GtkToggleButton *w, gpointer user_data);
422 void on_preferences_checkbutton_custom_expression_font_toggled(GtkToggleButton *w, gpointer user_data);
423 void on_preferences_checkbutton_custom_status_font_toggled(GtkToggleButton *w, gpointer user_data);
424 void on_preferences_radiobutton_dot_toggled(GtkToggleButton *w, gpointer user_data);
425 void on_preferences_radiobutton_ex_toggled(GtkToggleButton *w, gpointer user_data);
426 void on_preferences_radiobutton_asterisk_toggled(GtkToggleButton *w, gpointer user_data);
427 void on_preferences_radiobutton_slash_toggled(GtkToggleButton *w, gpointer user_data);
428 void on_preferences_radiobutton_division_slash_toggled(GtkToggleButton *w, gpointer user_data);
429 void on_preferences_radiobutton_division_toggled(GtkToggleButton *w, gpointer user_data);
430 void on_preferences_radiobutton_digit_grouping_none_toggled(GtkToggleButton *w, gpointer user_data);
431 void on_preferences_radiobutton_digit_grouping_standard_toggled(GtkToggleButton *w, gpointer user_data);
432 void on_preferences_radiobutton_digit_grouping_locale_toggled(GtkToggleButton *w, gpointer user_data);
433 void on_preferences_button_result_font_toggled(GtkButton *w, gpointer user_data);
434 void on_preferences_button_expression_font_toggled(GtkButton *w, gpointer user_data);
435 void on_preferences_button_status_font_toggled(GtkButton *w, gpointer user_data);
436 void on_units_togglebutton_from_toggled(GtkToggleButton *togglebutton, gpointer user_data);
437 void on_units_button_convert_clicked(GtkButton *button, gpointer user_data);
438 void on_units_togglebutton_to_toggled(GtkToggleButton *togglebutton, gpointer user_data);
439 void on_units_entry_from_val_activate(GtkEntry *entry, gpointer user_data);
440 void on_units_entry_to_val_activate(GtkEntry *entry, gpointer user_data);
441 gboolean on_units_entry_from_val_focus_out_event(GtkEntry *entry, GdkEventFocus *event, gpointer user_data);
442 gboolean on_units_entry_to_val_focus_out_event(GtkEntry *entry, GdkEventFocus *event, gpointer user_data);
443 void on_units_button_close_clicked(GtkButton *button, gpointer user_data);
444 void on_radiobutton_radians_toggled(GtkToggleButton *togglebutton, gpointer user_data);
445 void on_radiobutton_degrees_toggled(GtkToggleButton *togglebutton, gpointer user_data);
446 void on_radiobutton_gradians_toggled(GtkToggleButton *togglebutton, gpointer user_data);
447 void on_radiobutton_no_default_angle_unit_toggled(GtkToggleButton *togglebutton, gpointer user_data);
448 gboolean on_gcalc_exit(GtkWidget *widget, GdkEvent *event, gpointer user_data);
449 void on_expression_activate(GtkEntry *entry, gpointer user_data);
450 void on_button_execute_clicked(GtkButton *button, gpointer user_data);
451 void on_button_del_clicked(GtkButton *w, gpointer user_data);
452 void on_button_ac_clicked(GtkButton *w, gpointer user_data);
453 void on_button_hyp_toggled(GtkToggleButton *w, gpointer user_data);
454 void on_button_inv_toggled(GtkToggleButton *w, gpointer user_data);
455 void on_button_tan_clicked(GtkButton *w, gpointer user_data);
456 void on_button_sine_clicked(GtkButton *w, gpointer user_data);
457 void on_button_cosine_clicked(GtkButton *w, gpointer user_data);
458 void on_button_store_clicked(GtkButton *w, gpointer user_data);
459 void on_button_mod_clicked(GtkButton *w, gpointer user_data);
460 void on_button_reciprocal_clicked(GtkButton *w, gpointer user_data);
461 void on_togglebutton_expression_toggled(GtkToggleButton *togglebutton, gpointer user_data);
462 void on_togglebutton_result_toggled(GtkToggleButton *togglebutton, gpointer user_data);
463 void on_expression_changed(GtkEditable *w, gpointer user_data);
464 void on_expression_move_cursor(GtkEntry*, GtkMovementStep, gint, gboolean, gpointer);
465 void on_button_zero_clicked(GtkButton *w, gpointer user_data);
466 void on_button_one_clicked(GtkButton *w, gpointer user_data);
467 void on_button_two_clicked(GtkButton *w, gpointer user_data);
468 void on_button_three_clicked(GtkButton *w, gpointer user_data);
469 void on_button_four_clicked(GtkButton *w, gpointer user_data);
470 void on_button_five_clicked(GtkButton *w, gpointer user_data);
471 void on_button_six_clicked(GtkButton *w, gpointer user_data);
472 void on_button_seven_clicked(GtkButton *w, gpointer user_data);
473 void on_button_eight_clicked(GtkButton *w, gpointer user_data);
474 void on_button_nine_clicked(GtkButton *w, gpointer user_data);
475 void on_button_dot_clicked(GtkButton *w, gpointer user_data);
476 void on_button_brace_open_clicked(GtkButton *w, gpointer user_data);
477 void on_button_brace_close_clicked(GtkButton *w, gpointer user_data);
478 void on_button_times_clicked(GtkButton *w, gpointer user_data);
479 void on_button_add_clicked(GtkButton *w, gpointer user_data);
480 void on_button_sub_clicked(GtkButton *w, gpointer user_data);
481 void on_button_divide_clicked(GtkButton *w, gpointer user_data);
482 void on_button_ans_clicked(GtkButton *w, gpointer user_data);
483 void on_button_exp_clicked(GtkButton *w, gpointer user_data);
484 void on_button_xy_clicked(GtkButton *w, gpointer user_data);
485 void on_button_square_clicked();
486 void on_button_sqrt_clicked(GtkButton *w, gpointer user_data);
487 void on_button_log_clicked(GtkButton *w, gpointer user_data);
488 void on_button_ln_clicked(GtkButton *w, gpointer user_data);
489 void on_menu_item_manage_variables_activate(GtkMenuItem *w, gpointer user_data);
490 void on_menu_item_manage_functions_activate(GtkMenuItem *w, gpointer user_data);
491 void on_menu_item_manage_units_activate(GtkMenuItem *w, gpointer user_data);
492 void on_menu_item_datasets_activate(GtkMenuItem *w, gpointer user_data);
493 void on_menu_item_import_csv_file_activate(GtkMenuItem *w, gpointer user_data);
494 void on_menu_item_export_csv_file_activate(GtkMenuItem *w, gpointer user_data);
495 void on_menu_item_convert_to_unit_expression_activate(GtkMenuItem *w, gpointer user_data);
496 void on_menu_item_convert_to_base_units_activate(GtkMenuItem *w, gpointer user_data);
497 void on_menu_item_convert_to_best_unit_activate(GtkMenuItem *w, gpointer user_data);
498 void on_menu_item_set_prefix_activate(GtkMenuItem*, gpointer user_data);
499 void on_menu_item_insert_date_activate(GtkMenuItem *w, gpointer user_data);
500 void on_menu_item_insert_matrix_activate(GtkMenuItem *w, gpointer user_data);
501 void on_menu_item_insert_vector_activate(GtkMenuItem *w, gpointer user_data);
502 void on_menu_item_enable_variables_activate(GtkMenuItem *w, gpointer user_data);
503 void on_menu_item_enable_functions_activate(GtkMenuItem *w, gpointer user_data);
504 void on_menu_item_enable_units_activate(GtkMenuItem *w, gpointer user_data);
505 void on_menu_item_enable_unknown_variables_activate(GtkMenuItem *w, gpointer user_data);
506 void on_menu_item_calculate_variables_activate(GtkMenuItem *w, gpointer user_data);
507 void on_menu_item_enable_variable_units_activate(GtkMenuItem *w, gpointer user_data);
508 void on_menu_item_allow_complex_activate(GtkMenuItem *w, gpointer user_data);
509 void on_menu_item_allow_infinite_activate(GtkMenuItem *w, gpointer user_data);
510 void on_menu_item_new_unknown_activate(GtkMenuItem *w, gpointer user_data);
511 void on_menu_item_new_variable_activate(GtkMenuItem *w, gpointer user_data);
512 void on_menu_item_new_matrix_activate(GtkMenuItem *w, gpointer user_data);
513 void on_menu_item_new_vector_activate(GtkMenuItem *w, gpointer user_data);
514 void on_menu_item_new_function_activate(GtkMenuItem *w, gpointer user_data);
515 void on_menu_item_new_dataset_activate(GtkMenuItem *w, gpointer user_data);
516 void on_menu_item_new_unit_activate(GtkMenuItem *w, gpointer user_data);
517 void on_menu_item_autocalc_activate(GtkMenuItem *w, gpointer user_data);
518 void on_menu_item_chain_mode_activate(GtkMenuItem *w, gpointer user_data);
519 void on_menu_item_rpn_mode_activate(GtkMenuItem *w, gpointer user_data);
520 void on_menu_item_rpn_syntax_activate(GtkMenuItem *w, gpointer user_data);
521 void on_menu_item_limit_implicit_multiplication_activate(GtkMenuItem *w, gpointer user_data);
522 void on_menu_item_adaptive_parsing_activate(GtkMenuItem *w, gpointer user_data);
523 void on_menu_item_ignore_whitespace_activate(GtkMenuItem *w, gpointer user_data);
524 void on_menu_item_no_special_implicit_multiplication_activate(GtkMenuItem *w, gpointer user_data);
525 void on_menu_item_fetch_exchange_rates_activate(GtkMenuItem *w, gpointer user_data);
526 void on_menu_item_save_defs_activate(GtkMenuItem *w, gpointer user_data);
527 void on_menu_item_save_mode_activate(GtkMenuItem *w, gpointer user_data);
528 void on_menu_item_edit_prefs_activate(GtkMenuItem *w, gpointer user_data);
529 void on_menu_item_degrees_activate(GtkMenuItem *w, gpointer user_data);
530 void on_menu_item_radians_activate(GtkMenuItem *w, gpointer user_data);
531 void on_menu_item_gradians_activate(GtkMenuItem *w, gpointer user_data);
532 void on_menu_item_no_default_angle_unit_activate(GtkMenuItem *w, gpointer user_data);
533 void on_menu_item_read_precision_activate(GtkMenuItem *w, gpointer user_data);
534 void on_menu_item_rpn_syntax_activate(GtkMenuItem *w, gpointer user_data);
535 void set_output_base_from_dialog(int base);
536 void output_base_updated_from_menu();
537 void input_base_updated_from_menu();
538 void update_keypad_bases();
539 void on_menu_item_binary_activate(GtkMenuItem *w, gpointer user_data);
540 void on_menu_item_octal_activate(GtkMenuItem *w, gpointer user_data);
541 void on_menu_item_decimal_activate(GtkMenuItem *w, gpointer user_data);
542 void on_menu_item_duodecimal_activate(GtkMenuItem *w, gpointer user_data);
543 void on_menu_item_hexadecimal_activate(GtkMenuItem *w, gpointer user_data);
544 void on_number_base_spinbutton_base_value_changed(GtkSpinButton *w, gpointer user_data);
545 void on_menu_item_custom_base_activate(GtkMenuItem *w, gpointer user_data);
546 void on_menu_item_roman_activate(GtkMenuItem *w, gpointer user_data);
547 void on_menu_item_sexagesimal_activate(GtkMenuItem *w, gpointer user_data);
548 void on_menu_item_time_format_activate(GtkMenuItem *w, gpointer user_data);
549 void on_menu_item_set_base_activate(GtkMenuItem *w, gpointer user_data);
550 void on_set_base_radiobutton_output_binary_toggled(GtkToggleButton *w, gpointer user_data);
551 void on_set_base_radiobutton_output_octal_toggled(GtkToggleButton *w, gpointer user_data);
552 void on_set_base_radiobutton_output_decimal_toggled(GtkToggleButton *w, gpointer user_data);
553 void on_set_base_radiobutton_output_duodecimal_toggled(GtkToggleButton *w, gpointer user_data);
554 void on_set_base_radiobutton_output_hexadecimal_toggled(GtkToggleButton *w, gpointer user_data);
555 void on_set_base_radiobutton_output_other_toggled(GtkToggleButton *w, gpointer user_data);
556 void on_set_base_radiobutton_output_sexagesimal_toggled(GtkToggleButton *w, gpointer user_data);
557 void on_set_base_radiobutton_output_time_toggled(GtkToggleButton *w, gpointer user_data);
558 void on_set_base_radiobutton_output_roman_toggled(GtkToggleButton *w, gpointer user_data);
559 void on_set_base_combo_output_other_changed(GtkComboBox *w, gpointer user_data);
560 void on_set_base_entry_output_other_activate(GtkEntry *w, gpointer user_data);
561 void on_set_base_radiobutton_input_binary_toggled(GtkToggleButton *w, gpointer user_data);
562 void on_set_base_radiobutton_input_octal_toggled(GtkToggleButton *w, gpointer user_data);
563 void on_set_base_radiobutton_input_decimal_toggled(GtkToggleButton *w, gpointer user_data);
564 void on_set_base_radiobutton_input_duodecimal_toggled(GtkToggleButton *w, gpointer user_data);
565 void on_set_base_radiobutton_input_hexadecimal_toggled(GtkToggleButton *w, gpointer user_data);
566 void on_set_base_radiobutton_input_other_toggled(GtkToggleButton *w, gpointer user_data);
567 void on_set_base_radiobutton_input_roman_toggled(GtkToggleButton *w, gpointer user_data);
568 void on_set_base_combo_input_other_changed(GtkComboBox *w, gpointer user_data);
569 void on_set_base_entry_input_other_activate(GtkEntry *w, gpointer user_data);
570 void convert_number_bases(const gchar *initial_expression, bool b_result = false);
571 void on_menu_item_convert_number_bases_activate(GtkMenuItem *w, gpointer user_data);
572 void on_menu_item_periodic_table_activate(GtkMenuItem *w, gpointer user_data);
573 void on_menu_item_assumptions_integer_activate(GtkMenuItem *w, gpointer user_data);
574 void on_menu_item_assumptions_rational_activate(GtkMenuItem *w, gpointer user_data);
575 void on_menu_item_assumptions_real_activate(GtkMenuItem *w, gpointer user_data);
576 void on_menu_item_assumptions_complex_activate(GtkMenuItem *w, gpointer user_data);
577 void on_menu_item_assumptions_number_activate(GtkMenuItem *w, gpointer user_data);
578 void on_menu_item_assumptions_nonmatrix_activate(GtkMenuItem *w, gpointer user_data);
579 void on_menu_item_assumptions_none_activate(GtkMenuItem *w, gpointer user_data);
580 void on_menu_item_assumptions_nonzero_activate(GtkMenuItem *w, gpointer user_data);
581 void on_menu_item_assumptions_positive_activate(GtkMenuItem *w, gpointer user_data);
582 void on_menu_item_assumptions_nonnegative_activate(GtkMenuItem *w, gpointer user_data);
583 void on_menu_item_assumptions_negative_activate(GtkMenuItem *w, gpointer user_data);
584 void on_menu_item_assumptions_nonpositive_activate(GtkMenuItem *w, gpointer user_data);
585 void on_menu_item_assumptions_unknown_activate(GtkMenuItem *w, gpointer user_data);
586 void on_popup_menu_item_exact_activate(GtkMenuItem *w, gpointer user_data);
587 void on_popup_menu_item_assume_nonzero_denominators_activate(GtkMenuItem *w, gpointer user_data);
588 void on_popup_menu_item_abort_activate(GtkMenuItem *w, gpointer user_data);
589 void on_popup_menu_item_clear_activate(GtkMenuItem *w, gpointer user_data);
590 void on_popup_menu_item_display_normal_activate(GtkMenuItem *w, gpointer user_data);
591 void on_popup_menu_item_display_engineering_activate(GtkMenuItem *w, gpointer user_data);
592 void on_popup_menu_item_display_scientific_activate(GtkMenuItem *w, gpointer user_data);
593 void on_popup_menu_item_display_purely_scientific_activate(GtkMenuItem *w, gpointer user_data);
594 void on_popup_menu_item_display_non_scientific_activate(GtkMenuItem *w, gpointer user_data);
595 void on_popup_menu_item_display_no_prefixes_activate(GtkMenuItem *w, gpointer user_data);
596 void on_popup_menu_item_display_prefixes_for_selected_units_activate(GtkMenuItem *w, gpointer user_data);
597 void on_popup_menu_item_display_prefixes_for_currencies_activate(GtkMenuItem *w, gpointer user_data);
598 void on_popup_menu_item_display_prefixes_for_all_units_activate(GtkMenuItem *w, gpointer user_data);
599 void on_popup_menu_item_mixed_units_conversion_activate(GtkMenuItem *w, gpointer user_data);
600 void on_popup_menu_item_fraction_decimal_activate(GtkMenuItem *w, gpointer user_data);
601 void on_popup_menu_item_fraction_decimal_exact_activate(GtkMenuItem *w, gpointer user_data);
602 void on_popup_menu_item_fraction_combined_activate(GtkMenuItem *w, gpointer user_data);
603 void on_popup_menu_item_fraction_fraction_activate(GtkMenuItem *w, gpointer user_data);
604 void on_popup_menu_item_binary_activate(GtkMenuItem *w, gpointer user_data);
605 void on_popup_menu_item_roman_activate(GtkMenuItem *w, gpointer user_data);
606 void on_popup_menu_item_sexagesimal_activate(GtkMenuItem *w, gpointer user_data);
607 void on_popup_menu_item_time_format_activate(GtkMenuItem *w, gpointer user_data);
608 void on_popup_menu_item_octal_activate(GtkMenuItem *w, gpointer user_data);
609 void on_popup_menu_item_decimal_activate(GtkMenuItem *w, gpointer user_data);
610 void on_popup_menu_item_duodecimal_activate(GtkMenuItem *w, gpointer user_data);
611 void on_popup_menu_item_hexadecimal_activate(GtkMenuItem *w, gpointer user_data);
612 void on_popup_menu_item_custom_base_activate(GtkMenuItem *w, gpointer user_data);
613 void on_popup_menu_item_abbreviate_names_activate(GtkMenuItem *w, gpointer user_data);
614 void on_popup_menu_item_all_prefixes_activate(GtkMenuItem *w, gpointer user_data);
615 void on_popup_menu_item_denominator_prefixes_activate(GtkMenuItem *w, gpointer user_data);
616 void on_popup_menu_item_view_matrix_activate(GtkMenuItem *w, gpointer user_data);
617 void on_popup_menu_item_view_vector_activate(GtkMenuItem *w, gpointer user_data);
618 void on_popup_menu_item_complex_rectangular_activate(GtkMenuItem *w, gpointer user_data);
619 void on_popup_menu_item_complex_exponential_activate(GtkMenuItem *w, gpointer user_data);
620 void on_popup_menu_item_complex_polar_activate(GtkMenuItem *w, gpointer user_data);
621 void on_popup_menu_item_complex_angle_activate(GtkMenuItem *w, gpointer user_data);
622 void on_popup_menu_item_persistent_keypad_toggled(GtkCheckMenuItem *w, gpointer user_data);
623 void on_menu_item_complex_rectangular_activate(GtkMenuItem *w, gpointer user_data);
624 void on_menu_item_complex_exponential_activate(GtkMenuItem *w, gpointer user_data);
625 void on_menu_item_complex_polar_activate(GtkMenuItem *w, gpointer user_data);
626 void on_menu_item_complex_angle_activate(GtkMenuItem *w, gpointer user_data);
627 void on_menu_item_display_normal_activate(GtkMenuItem *w, gpointer user_data);
628 void on_menu_item_display_engineering_activate(GtkMenuItem *w, gpointer user_data);
629 void on_menu_item_display_scientific_activate(GtkMenuItem *w, gpointer user_data);
630 void on_menu_item_display_purely_scientific_activate(GtkMenuItem *w, gpointer user_data);
631 void on_menu_item_display_non_scientific_activate(GtkMenuItem *w, gpointer user_data);
632 void on_menu_item_display_no_prefixes_activate(GtkMenuItem *w, gpointer user_data);
633 void on_menu_item_display_prefixes_for_selected_activate(GtkMenuItem *w, gpointer user_data);
634 void on_menu_item_display_prefixes_for_currencies_activate(GtkMenuItem *w, gpointer user_data);
635 void on_menu_item_display_prefixes_for_all_units_activate(GtkMenuItem *w, gpointer user_data);
636 void on_menu_item_indicate_infinite_series_activate(GtkMenuItem *w, gpointer user_data);
637 void on_menu_item_show_ending_zeroes_activate(GtkMenuItem *w, gpointer user_data);
638 void on_menu_item_round_halfway_to_even_activate(GtkMenuItem *w, gpointer user_data);
639 void on_menu_item_negative_exponents_activate(GtkMenuItem *w, gpointer user_data);
640 void on_menu_item_sort_minus_last_activate(GtkMenuItem *w, gpointer user_data);
641 void on_menu_item_fraction_decimal_activate(GtkMenuItem *w, gpointer user_data);
642 void on_menu_item_fraction_decimal_exact_activate(GtkMenuItem *w, gpointer user_data);
643 void on_menu_item_fraction_combined_activate(GtkMenuItem *w, gpointer user_data);
644 void on_menu_item_fraction_fraction_activate(GtkMenuItem *w, gpointer user_data);
645 void on_menu_item_interval_adaptive_activate(GtkMenuItem *w, gpointer user_data);
646 void on_menu_item_interval_significant_activate(GtkMenuItem *w, gpointer user_data);
647 void on_menu_item_interval_interval_activate(GtkMenuItem *w, gpointer user_data);
648 void on_menu_item_interval_plusminus_activate(GtkMenuItem *w, gpointer user_data);
649 void on_menu_item_interval_midpoint_activate(GtkMenuItem *w, gpointer user_data);
650 void on_menu_item_all_prefixes_activate(GtkMenuItem *w, gpointer user_data);
651 void on_menu_item_denominator_prefixes_activate(GtkMenuItem *w, gpointer user_data);
652 void on_menu_item_place_units_separately_activate(GtkMenuItem *w, gpointer user_data);
653 void on_menu_item_post_conversion_none_activate(GtkMenuItem *w, gpointer user_data);
654 void on_menu_item_post_conversion_base_activate(GtkMenuItem *w, gpointer user_data);
655 void on_menu_item_post_conversion_optimal_activate(GtkMenuItem *w, gpointer user_data);
656 void on_menu_item_post_conversion_optimal_si_activate(GtkMenuItem *w, gpointer user_data);
657 void on_menu_item_abbreviate_names_activate(GtkMenuItem *w, gpointer user_data);
658 void on_menu_item_always_exact_activate(GtkMenuItem *w, gpointer user_data);
659 void on_menu_item_try_exact_activate(GtkMenuItem *w, gpointer user_data);
660 void on_menu_item_approximate_activate(GtkMenuItem *w, gpointer user_data);
661 void on_menu_item_interval_arithmetic_activate(GtkMenuItem *w, gpointer user_data);
662 void on_menu_item_ic_none(GtkMenuItem *w, gpointer user_data);
663 void on_menu_item_ic_variance_activate(GtkMenuItem *w, gpointer user_data);
664 void on_menu_item_ic_interval_arithmetic_activate(GtkMenuItem *w, gpointer user_data);
665 void on_menu_item_ic_simple(GtkMenuItem *w, gpointer user_data);
666 void on_menu_item_save_activate(GtkMenuItem *w, gpointer user_data);
667 void on_menu_item_save_image_activate(GtkMenuItem *w, gpointer user_data);
668 void on_menu_item_copy_activate(GtkMenuItem *w, gpointer user_data);
669 void on_menu_item_precision_activate(GtkMenuItem *w, gpointer user_data);
670 void on_menu_item_decimals_activate(GtkMenuItem *w, gpointer user_data);
671 void on_menu_item_plot_functions_activate(GtkMenuItem *w, gpointer user_data);
672 void on_menu_item_factorize_activate(GtkMenuItem *w, gpointer user_data);
673 void on_menu_item_simplify_activate(GtkMenuItem *w, gpointer user_data);
674 void on_menu_item_expand_partial_fractions_activate(GtkMenuItem *w, gpointer user_data);
675 void on_menu_item_set_unknowns_activate(GtkMenuItem *w, gpointer user_data);
676 void on_menu_item_assume_nonzero_denominators_activate(GtkMenuItem *w, gpointer user_data);
677 void on_menu_item_algebraic_mode_simplify_activate(GtkMenuItem *w, gpointer user_data);
678 void on_menu_item_algebraic_mode_factorize_activate(GtkMenuItem *w, gpointer user_data);
679 void on_menu_item_algebraic_mode_hybrid_activate(GtkMenuItem *w, gpointer user_data);
680 gboolean on_main_window_focus_in_event(GtkWidget *w, GdkEventFocus *e, gpointer user_data);
681 
682 void on_button_registerup_clicked(GtkButton *button, gpointer user_data);
683 void on_button_registerdown_clicked(GtkButton *button, gpointer user_data);
684 void on_button_registerswap_clicked(GtkButton *button, gpointer user_data);
685 void on_button_editregister_clicked(GtkButton *button, gpointer user_data);
686 void on_button_deleteregister_clicked(GtkButton *button, gpointer user_data);
687 void on_button_copyregister_clicked(GtkButton *button, gpointer user_data);
688 void on_button_clearstack_clicked(GtkButton *button, gpointer user_data);
689 void on_stackview_selection_changed(GtkTreeSelection *treeselection, gpointer user_data);
690 void on_stackview_item_edited(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data);
691 void on_stackview_item_editing_started(GtkCellRenderer *renderer, GtkCellEditable *editable, gchar *path, gpointer user_data);
692 void on_stackview_item_editing_canceled(GtkCellRenderer *renderer, gpointer user_data);
693 void on_stackstore_row_inserted(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data);
694 void on_stackstore_row_deleted(GtkTreeModel *model, GtkTreePath *path, gpointer user_data);
695 
696 void on_historyview_selection_changed(GtkTreeSelection *select, gpointer);
697 
698 void on_unit_edit_entry_name_changed(GtkEditable *editable, gpointer user_data);
699 void on_unit_edit_combobox_class_changed(GtkComboBox *om, gpointer user_data);
700 void on_unit_edit_checkbutton_mix_toggled(GtkToggleButton *w, gpointer);
701 void on_unit_edit_combo_system_changed(GtkComboBox *om, gpointer user_data);
702 void on_units_button_new_clicked(GtkButton *button, gpointer user_data);
703 void on_units_button_edit_clicked(GtkButton *button, gpointer user_data);
704 void on_units_button_insert_clicked(GtkButton *button, gpointer user_data);
705 void on_units_button_convert_to_clicked(GtkButton *button, gpointer user_data);
706 void on_units_button_delete_clicked(GtkButton *button, gpointer user_data);
707 void on_units_combobox_to_unit_changed(GtkComboBox *w, gpointer user_data);
708 void on_variables_button_new_clicked(GtkButton *button, gpointer user_data);
709 void on_variables_button_edit_clicked(GtkButton *button, gpointer user_data);
710 void on_variables_button_insert_clicked(GtkButton *button, gpointer user_data);
711 void on_variables_button_delete_clicked(GtkButton *button, gpointer user_data);
712 void on_variables_button_export_clicked(GtkButton *button, gpointer user_data);
713 void on_variables_button_close_clicked(GtkButton *button, gpointer user_data);
714 void on_functions_button_new_clicked(GtkButton *button, gpointer user_data);
715 void on_functions_button_edit_clicked(GtkButton *button, gpointer user_data);
716 void on_functions_button_insert_clicked(GtkButton *button, gpointer user_data);
717 void on_functions_button_apply_clicked(GtkButton *button, gpointer user_data);
718 void on_functions_button_delete_clicked(GtkButton *button, gpointer user_data);
719 void on_functions_button_close_clicked(GtkButton *button, gpointer user_data);
720 void on_datasets_button_close_clicked(GtkButton *button, gpointer user_data);
721 void on_function_edit_entry_name_changed(GtkEditable *editable, gpointer user_data);
722 void on_variable_edit_entry_name_changed(GtkEditable *editable, gpointer user_data);
723 void on_unknown_edit_checkbutton_custom_assumptions_toggled(GtkToggleButton *w, gpointer user_data);
724 void on_unknown_edit_combobox_type_changed(GtkComboBox *om, gpointer user_data);
725 void on_unknown_edit_combobox_sign_changed(GtkComboBox *om, gpointer user_data);
726 
727 void on_function_changed();
728 void on_simple_function_changed();
729 void on_argument_changed();
730 void on_unit_changed();
731 void on_variable_changed();
732 void on_dataset_changed();
733 void on_dataobject_changed();
734 void on_dataproperty_changed();
735 void on_matrix_changed();
736 void on_unknown_changed();
737 void on_name_changed();
738 
739 void on_dataset_edit_entry_name_changed(GtkEditable *editable, gpointer user_data);
740 void on_dataset_edit_button_new_property_clicked(GtkButton *button, gpointer user_data);
741 void on_dataset_edit_button_edit_property_clicked(GtkButton *button, gpointer user_data);
742 void on_dataset_edit_button_del_property_clicked(GtkButton *button, gpointer user_data);
743 void on_dataset_edit_button_names_clicked(GtkButton *button, gpointer user_data);
744 
745 void on_datasets_button_newset_clicked(GtkButton *button, gpointer user_data);
746 void on_datasets_button_editset_clicked(GtkButton *button, gpointer user_data);
747 void on_datasets_button_delset_clicked(GtkButton *button, gpointer user_data);
748 void on_datasets_button_newobject_clicked(GtkButton *button, gpointer user_data);
749 void on_datasets_button_editobject_clicked(GtkButton *button, gpointer user_data);
750 void on_datasets_button_delobject_clicked(GtkButton *button, gpointer user_data);
751 
752 void on_nbases_button_close_clicked(GtkButton *button, gpointer user_data);
753 void on_nbases_entry_decimal_changed(GtkEditable *editable, gpointer user_data);
754 void on_nbases_entry_binary_changed(GtkEditable *editable, gpointer user_data);
755 void on_nbases_entry_octal_changed(GtkEditable *editable, gpointer user_data);
756 void on_nbases_entry_hexadecimal_changed(GtkEditable *editable, gpointer user_data);
757 void on_nbases_entry_duo_changed(GtkEditable *editable, gpointer user_data);
758 void on_nbases_entry_roman_changed(GtkEditable *editable, gpointer user_data);
759 void on_nbases_entry_sexa_changed(GtkEditable *editable, gpointer user_data);
760 
761 void on_fp_entry_dec_changed(GtkEditable *editable, gpointer user_data);
762 void on_fp_buffer_bin_changed(GtkTextBuffer *w, gpointer user_data);
763 void on_fp_entry_hex_changed(GtkEditable *editable, gpointer user_data);
764 
765 void on_percentage_button_clear_clicked(GtkWidget*, gpointer);
766 
767 void on_menu_item_show_percentage_dialog_activate(GtkMenuItem *w, gpointer user_data);
768 
769 void on_menu_item_show_calendarconversion_dialog_activate(GtkMenuItem *w, gpointer user_data);
770 void on_popup_menu_item_calendarconversion_activate(GtkMenuItem *w, gpointer user_data);
771 void on_popup_menu_item_to_utc_activate(GtkMenuItem *w, gpointer user_data);
772 
773 void calendar_changed(GtkWidget*, gpointer);
774 
775 void on_button_functions_clicked(GtkButton *button, gpointer user_data);
776 void on_button_variables_clicked(GtkButton *button, gpointer user_data);
777 void on_button_units_clicked(GtkButton *button, gpointer user_data);
778 void on_button_convert_clicked(GtkButton *button, gpointer user_data);
779 
780 void on_menu_item_about_activate(GtkMenuItem *w, gpointer user_data);
781 void on_menu_item_help_activate(GtkMenuItem *w, gpointer user_data);
782 
783 void on_precision_dialog_spinbutton_precision_value_changed(GtkSpinButton *w, gpointer user_data);
784 void on_precision_dialog_button_recalculate_clicked(GtkButton *w, gpointer user_data);
785 void on_decimals_dialog_spinbutton_max_value_changed(GtkSpinButton *w, gpointer user_data);
786 void on_decimals_dialog_spinbutton_min_value_changed(GtkSpinButton *w, gpointer user_data);
787 void on_decimals_dialog_checkbutton_max_toggled(GtkToggleButton *w, gpointer user_data);
788 void on_decimals_dialog_checkbutton_min_toggled(GtkToggleButton *w, gpointer user_data);
789 
790 gboolean on_expressiontext_button_press_event(GtkWidget *w, GdkEventButton *event, gpointer user_data);
791 
792 gboolean on_resultview_button_press_event(GtkWidget *w, GdkEventButton *event, gpointer user_data);
793 gboolean on_resultview_popup_menu(GtkWidget *w, gpointer user_data);
794 
795 gboolean on_expressiontext_key_press_event(GtkWidget *w, GdkEventKey *event, gpointer user_data);
796 
797 void on_expressionbuffer_cursor_position_notify();
798 
799 gboolean on_resultview_draw(GtkWidget *w, cairo_t *cr, gpointer user_data);
800 
801 gboolean on_tMatrixEdit_key_press_event(GtkWidget *w, GdkEventKey *event, gpointer user_data);
802 gboolean on_tMatrixEdit_button_press_event(GtkWidget *w, GdkEventButton *event, gpointer user_data);
803 gboolean on_tMatrixEdit_cursor_changed(GtkTreeView *w, gpointer user_data);
804 
805 void on_matrix_edit_spinbutton_columns_value_changed(GtkSpinButton *w, gpointer user_data);
806 void on_matrix_edit_spinbutton_rows_value_changed(GtkSpinButton *w, gpointer user_data);
807 
808 void on_matrix_edit_radiobutton_matrix_toggled(GtkToggleButton *w, gpointer user_data);
809 void on_matrix_edit_radiobutton_vector_toggled(GtkToggleButton *w, gpointer user_data);
810 
811 gboolean on_tMatrix_key_press_event(GtkWidget *w, GdkEventKey *event, gpointer user_data);
812 gboolean on_tMatrix_button_press_event(GtkWidget *w, GdkEventButton *event, gpointer user_data);
813 gboolean on_tMatrix_cursor_changed(GtkTreeView *w, gpointer user_data);
814 
815 void on_matrix_spinbutton_columns_value_changed(GtkSpinButton *w, gpointer user_data);
816 void on_matrix_spinbutton_rows_value_changed(GtkSpinButton *w, gpointer user_data);
817 
818 void on_matrix_radiobutton_matrix_toggled(GtkToggleButton *w, gpointer user_data);
819 void on_matrix_radiobutton_vector_toggled(GtkToggleButton *w, gpointer user_data);
820 
821 void on_csv_import_radiobutton_matrix_toggled(GtkToggleButton *w, gpointer user_data);
822 void on_csv_import_radiobutton_vectors_toggled(GtkToggleButton *w, gpointer user_data);
823 void on_csv_import_combobox_delimiter_changed(GtkComboBox *w, gpointer user_data);
824 void on_csv_import_button_file_clicked(GtkButton *button, gpointer user_data);
825 
826 void on_csv_export_combobox_delimiter_changed(GtkComboBox *w, gpointer user_data);
827 void on_csv_export_button_file_clicked(GtkButton *button, gpointer user_data);
828 void on_csv_export_radiobutton_current_toggled(GtkToggleButton *w, gpointer user_data);
829 void on_csv_export_radiobutton_matrix_toggled(GtkToggleButton *w, gpointer user_data);
830 
831 void on_type_label_date_clicked(GtkButton *w, gpointer user_data);
832 void on_type_label_file_clicked(GtkButton *w, gpointer user_data);
833 void on_type_label_vector_clicked(GtkButton *w, gpointer user_data);
834 void on_type_label_matrix_clicked(GtkButton *w, gpointer user_data);
835 
836 void on_functions_button_deactivate_clicked(GtkButton *w, gpointer user_data);
837 void on_variables_button_deactivate_clicked(GtkButton *w, gpointer user_data);
838 void on_units_button_deactivate_clicked(GtkButton *w, gpointer user_data);
839 
840 void on_function_edit_button_subfunctions_clicked(GtkButton *w, gpointer user_data);
841 void on_function_edit_button_add_subfunction_clicked(GtkButton *w, gpointer user_data);
842 void on_function_edit_button_modify_subfunction_clicked(GtkButton *w, gpointer user_data);
843 void on_function_edit_button_remove_subfunction_clicked(GtkButton *w, gpointer user_data);
844 void on_function_edit_entry_subexpression_activate(GtkEntry *entry, gpointer user_data);
845 void on_function_edit_button_add_argument_clicked(GtkButton *w, gpointer user_data);
846 void on_function_edit_button_remove_argument_clicked(GtkButton *w, gpointer user_data);
847 void on_function_edit_button_modify_argument_clicked(GtkButton *w, gpointer user_data);
848 void on_function_edit_entry_argument_name_activate(GtkEntry *entry, gpointer user_data);
849 void on_function_edit_button_rules_clicked(GtkButton *w, gpointer user_data);
850 void on_argument_rules_checkbutton_enable_min_toggled(GtkToggleButton *w, gpointer user_data);
851 void on_argument_rules_checkbutton_enable_max_toggled(GtkToggleButton *w, gpointer user_data);
852 void on_argument_rules_checkbutton_enable_condition_toggled(GtkToggleButton *w, gpointer user_data);
853 
854 void on_variable_edit_button_names_clicked(GtkButton *w, gpointer user_data);
855 void on_unknown_edit_button_names_clicked(GtkButton *w, gpointer user_data);
856 void on_matrix_edit_button_names_clicked(GtkButton *w, gpointer user_data);
857 void on_function_edit_button_names_clicked(GtkButton *w, gpointer user_data);
858 void on_unit_edit_button_names_clicked(GtkButton *w, gpointer user_data);
859 
860 void on_names_edit_checkbutton_abbreviation_toggled(GtkToggleButton *w, gpointer user_data);
861 void on_names_edit_button_add_clicked(GtkButton *w, gpointer user_data);
862 void on_names_edit_button_modify_clicked(GtkButton *w, gpointer user_data);
863 void on_names_edit_button_remove_clicked(GtkButton *w, gpointer user_data);
864 void on_names_edit_entry_name_activate(GtkEntry *w, gpointer user_data);
865 void on_names_edit_entry_name_changed(GtkEditable *editable, gpointer user_data);
866 
867 void on_plot_button_save_clicked(GtkButton *w, gpointer user_data);
868 void on_plot_button_add_clicked(GtkButton *w, gpointer user_data);
869 void on_plot_button_modify_clicked(GtkButton *w, gpointer user_data);
870 void on_plot_button_remove_clicked(GtkButton *w, gpointer user_data);
871 void on_plot_checkbutton_xlog_toggled(GtkToggleButton *w, gpointer user_data);
872 void on_plot_checkbutton_ylog_toggled(GtkToggleButton *w, gpointer user_data);
873 void on_plot_radiobutton_step_toggled(GtkToggleButton *w, gpointer user_data);
874 void on_plot_radiobutton_steps_toggled(GtkToggleButton *w, gpointer user_data);
875 void on_plot_entry_expression_activate(GtkEntry *entry, gpointer user_data);
876 
877 void on_unit_dialog_button_apply_clicked(GtkButton *w, gpointer user_data);
878 void on_unit_dialog_button_ok_clicked(GtkButton *w, gpointer user_data);
879 void on_unit_dialog_entry_unit_activate(GtkEntry *entry, gpointer user_data);
880 
881 void convert_from_convert_entry_unit();
882 void on_convert_button_convert_clicked(GtkButton *w, gpointer user_data);
883 void on_convert_entry_unit_activate(GtkEntry *entry, gpointer user_data);
884 
885 void on_element_button_clicked(GtkButton *w, gpointer user_data);
886 
887 void on_convert_entry_search_changed(GtkEntry *w, gpointer user_data);
888 void on_units_entry_search_changed(GtkEntry *w, gpointer user_data);
889 void on_units_convert_search_changed(GtkEntry *w, gpointer user_data);
890 void on_functions_entry_search_changed(GtkEntry *w, gpointer user_data);
891 void on_variables_entry_search_changed(GtkEntry *w, gpointer user_data);
892 
893 gboolean on_menu_key_press(GtkWidget *widget, GdkEventKey *event);
894 
895 #ifdef __cplusplus
896 }
897 #endif
898 
899 #endif
900 
901