1 /*
2     Qalculate (GTK+ UI)
3 
4     Copyright (C) 2003-2007, 2008, 2016  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 INTERFACE_H
13 #define INTERFACE_H
14 
15 #define MENU_ITEM_WITH_INT(x,y,z)		item = gtk_menu_item_new_with_label(x); gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), GINT_TO_POINTER (z)); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
16 #define MENU_ITEM_WITH_STRING(x,y,z)		item = gtk_menu_item_new_with_label(x); gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), (gpointer) z); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
17 #define MENU_ITEM_WITH_POINTER(x,y,z)		item = gtk_menu_item_new_with_label(x); gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), (gpointer) z); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
18 #define MENU_ITEM_WITH_POINTER_PREPEND(x,y,z)	item = gtk_menu_item_new_with_label(x); gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), (gpointer) z); gtk_menu_shell_prepend(GTK_MENU_SHELL(sub), item);
19 #define MENU_ITEM_WITH_POINTER_AND_FLAG(x,y,z)	{GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); unordered_map<string, GdkPixbuf*>::const_iterator it_flag = flag_images.find(z->referenceName()); if(it_flag != flag_images.end()) {GtkWidget *image_w = gtk_image_new_from_pixbuf(it_flag->second); gtk_widget_set_size_request(image_w, 32, -1); gtk_container_add(GTK_CONTAINER(box), image_w);} gtk_container_add(GTK_CONTAINER(box), gtk_label_new(x)); item = gtk_menu_item_new(); gtk_container_add(GTK_CONTAINER(item), box); gtk_widget_show_all(item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), (gpointer) z); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);}
20 #define MENU_ITEM_MARKUP_WITH_POINTER(x,y,z)	item = gtk_menu_item_new_with_label(""); gtk_label_set_markup(GTK_LABEL(gtk_bin_get_child(GTK_BIN(item))), x); gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), (gpointer) z); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
21 #define MENU_ITEM(x,y)				item = gtk_menu_item_new_with_label(x); gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), NULL); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
22 #define MENU_ITEM_MARKUP(x,y)			item = gtk_menu_item_new_with_label(""); gtk_label_set_markup(GTK_LABEL(gtk_bin_get_child(GTK_BIN(item))), x); gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), NULL); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
23 #define MENU_NO_ITEMS(x)			item = gtk_menu_item_new_with_label(x); gtk_widget_set_sensitive(item, FALSE); gtk_widget_show (item); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
24 #define CHECK_MENU_ITEM(x,y,b)			item = gtk_check_menu_item_new_with_label(x); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), b); gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), NULL); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
25 #define RADIO_MENU_ITEM(x,y,b)			item = gtk_radio_menu_item_new_with_label(group, x); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(item)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), b); gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), NULL); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
26 #define RADIO_MENU_ITEM_WITH_INT(x,y,b,z)	item = gtk_radio_menu_item_new_with_label(group, x); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(item)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), b); gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), GINT_TO_POINTER(z)); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
27 #define POPUP_CHECK_MENU_ITEM_WITH_LABEL(y,w,l)	item = gtk_check_menu_item_new_with_label(l); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w))); gstr = gtk_widget_get_tooltip_text(GTK_WIDGET(w)); if(gstr) {gtk_widget_set_tooltip_text(item, gstr); g_free(gstr);} gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), NULL); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
28 #define POPUP_CHECK_MENU_ITEM(y,w)		item = gtk_check_menu_item_new_with_label(gtk_menu_item_get_label(GTK_MENU_ITEM(w))); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w))); gstr = gtk_widget_get_tooltip_text(GTK_WIDGET(w)); if(gstr) {gtk_widget_set_tooltip_text(item, gstr); g_free(gstr);} gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), NULL); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
29 #define POPUP_RADIO_MENU_ITEM(y,w)		item = gtk_radio_menu_item_new_with_label(group, gtk_menu_item_get_label(GTK_MENU_ITEM(w))); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(item)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w))); gstr = gtk_widget_get_tooltip_text(GTK_WIDGET(w)); if(gstr) {gtk_widget_set_tooltip_text(item, gstr); g_free(gstr);} gtk_widget_show (item); g_signal_connect(G_OBJECT (item), "activate", G_CALLBACK(y), NULL); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
30 #define MENU_ITEM_SET_ACCEL(a)			gtk_widget_add_accelerator(item, "activate", accel_group, a, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
31 #define MENU_TEAROFF				item = gtk_tearoff_menu_item_new(); gtk_widget_show (item); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
32 #define MENU_SEPARATOR				item = gtk_separator_menu_item_new(); gtk_widget_show (item); gtk_menu_shell_append(GTK_MENU_SHELL(sub), item);
33 #define MENU_SEPARATOR_PREPEND			item = gtk_separator_menu_item_new(); gtk_widget_show (item); gtk_menu_shell_prepend(GTK_MENU_SHELL(sub), item);
34 #define SUBMENU_ITEM(x,y)			item = gtk_menu_item_new_with_label(x); gtk_widget_show (item); gtk_menu_shell_append(GTK_MENU_SHELL(y), item); sub = gtk_menu_new(); gtk_widget_show (sub); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), sub);
35 #define SUBMENU_ITEM_PREPEND(x,y)		item = gtk_menu_item_new_with_label(x); gtk_widget_show (item); gtk_menu_shell_prepend(GTK_MENU_SHELL(y), item); sub = gtk_menu_new(); gtk_widget_show (sub); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), sub);
36 #define SUBMENU_ITEM_INSERT(x,y,i)		item = gtk_menu_item_new_with_label(x); gtk_widget_show (item); gtk_menu_shell_insert(GTK_MENU_SHELL(y), item, i); sub = gtk_menu_new(); gtk_widget_show (sub); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), sub);
37 
38 #define EXPRESSION_YPAD 3
39 
40 enum {
41 	UNITS_TITLE_COLUMN,
42 	UNITS_NAMES_COLUMN,
43 	UNITS_BASE_COLUMN,
44 	UNITS_POINTER_COLUMN,
45 	UNITS_FLAG_COLUMN,
46 	UNITS_VISIBLE_COLUMN,
47 	UNITS_VISIBLE_COLUMN_CONVERT,
48 	UNITS_N_COLUMNS
49 };
50 
51 enum {
52 	UNIT_CLASS_BASE_UNIT,
53 	UNIT_CLASS_ALIAS_UNIT,
54 	UNIT_CLASS_COMPOSITE_UNIT
55 };
56 
57 enum {
58 	NAMES_NAME_COLUMN,
59 	NAMES_ABBREVIATION_STRING_COLUMN,
60 	NAMES_PLURAL_STRING_COLUMN,
61 	NAMES_REFERENCE_STRING_COLUMN,
62 	NAMES_ABBREVIATION_COLUMN,
63 	NAMES_SUFFIX_COLUMN,
64 	NAMES_UNICODE_COLUMN,
65 	NAMES_PLURAL_COLUMN,
66 	NAMES_REFERENCE_COLUMN,
67 	NAMES_AVOID_INPUT_COLUMN,
68 	NAMES_COMPLETION_ONLY_COLUMN,
69 	NAMES_CASE_SENSITIVE_COLUMN,
70 	NAMES_N_COLUMNS
71 };
72 
73 enum {
74 	DELIMITER_COMMA,
75 	DELIMITER_TABULATOR,
76 	DELIMITER_SEMICOLON,
77 	DELIMITER_SPACE,
78 	DELIMITER_OTHER
79 };
80 
81 enum {
82 	MENU_ARGUMENT_TYPE_FREE,
83 	MENU_ARGUMENT_TYPE_NUMBER,
84 	MENU_ARGUMENT_TYPE_INTEGER,
85 	MENU_ARGUMENT_TYPE_SYMBOLIC,
86 	MENU_ARGUMENT_TYPE_TEXT,
87 	MENU_ARGUMENT_TYPE_DATE,
88 	MENU_ARGUMENT_TYPE_VECTOR,
89 	MENU_ARGUMENT_TYPE_MATRIX,
90 	MENU_ARGUMENT_TYPE_POSITIVE,
91 	MENU_ARGUMENT_TYPE_NONZERO,
92 	MENU_ARGUMENT_TYPE_NONNEGATIVE,
93 	MENU_ARGUMENT_TYPE_POSITIVE_INTEGER,
94 	MENU_ARGUMENT_TYPE_NONZERO_INTEGER,
95 	MENU_ARGUMENT_TYPE_NONNEGATIVE_INTEGER,
96 	MENU_ARGUMENT_TYPE_BOOLEAN,
97 	MENU_ARGUMENT_TYPE_EXPRESSION_ITEM,
98 	MENU_ARGUMENT_TYPE_FUNCTION,
99 	MENU_ARGUMENT_TYPE_UNIT,
100 	MENU_ARGUMENT_TYPE_VARIABLE,
101 	MENU_ARGUMENT_TYPE_FILE,
102 	MENU_ARGUMENT_TYPE_ANGLE,
103 	MENU_ARGUMENT_TYPE_DATA_OBJECT,
104 	MENU_ARGUMENT_TYPE_DATA_PROPERTY
105 };
106 
107 enum {
108 	SMOOTHING_MENU_NONE,
109 	SMOOTHING_MENU_UNIQUE,
110 	SMOOTHING_MENU_CSPLINES,
111 	SMOOTHING_MENU_BEZIER,
112 	SMOOTHING_MENU_SBEZIER
113 };
114 
115 enum {
116 	PLOTSTYLE_MENU_LINES,
117 	PLOTSTYLE_MENU_POINTS,
118 	PLOTSTYLE_MENU_LINESPOINTS,
119 	PLOTSTYLE_MENU_BOXES,
120 	PLOTSTYLE_MENU_HISTEPS,
121 	PLOTSTYLE_MENU_STEPS,
122 	PLOTSTYLE_MENU_CANDLESTICKS,
123 	PLOTSTYLE_MENU_DOTS
124 };
125 
126 enum {
127 	PLOTLEGEND_MENU_NONE,
128 	PLOTLEGEND_MENU_TOP_LEFT,
129 	PLOTLEGEND_MENU_TOP_RIGHT,
130 	PLOTLEGEND_MENU_BOTTOM_LEFT,
131 	PLOTLEGEND_MENU_BOTTOM_RIGHT,
132 	PLOTLEGEND_MENU_BELOW,
133 	PLOTLEGEND_MENU_OUTSIDE
134 };
135 
136 #ifdef _WIN32
137 void create_systray_icon();
138 void destroy_systray_icon();
139 #endif
140 bool has_systray_icon();
141 void test_border(void);
142 void set_custom_buttons(void);
143 void update_custom_buttons(int index = -1);
144 void update_custom_buttons_edit(int index = -1, bool update_label_entry = true);
145 void create_button_menus(void);
146 void create_main_window(void);
147 GtkWidget* get_functions_dialog(void);
148 GtkWidget* get_variables_dialog(void);
149 GtkWidget* get_units_dialog(void);
150 GtkWidget* get_datasets_dialog(void);
151 GtkWidget* get_preferences_dialog(void);
152 GtkWidget* get_unit_edit_dialog(void);
153 GtkWidget* get_function_edit_dialog(void);
154 GtkWidget* get_simple_function_edit_dialog(void);
155 GtkWidget* get_variable_edit_dialog(void);
156 GtkWidget* get_unknown_edit_dialog(void);
157 GtkWidget* get_matrix_edit_dialog(void);
158 GtkWidget* get_matrix_dialog(void);
159 GtkWidget* get_dataobject_edit_dialog(void);
160 GtkWidget* get_dataset_edit_dialog(void);
161 GtkWidget* get_dataproperty_edit_dialog(void);
162 GtkWidget* get_names_edit_dialog(void);
163 GtkWidget* get_csv_import_dialog(void);
164 GtkWidget* get_csv_export_dialog(void);
165 GtkWidget* get_set_base_dialog(void);
166 GtkWidget* get_nbases_dialog(void);
167 GtkWidget* get_percentage_dialog(void);
168 GtkWidget* get_calendarconversion_dialog(void);
169 GtkWidget* get_argument_rules_dialog(void);
170 GtkWidget* get_decimals_dialog(void);
171 GtkWidget* get_plot_dialog(void);
172 GtkWidget* get_precision_dialog(void);
173 GtkWidget* get_periodic_dialog(void);
174 GtkWidget* get_shortcuts_dialog(void);
175 GtkWidget* get_floatingpoint_dialog(void);
176 GtkWidget* get_buttons_edit_dialog(void);
177 GtkWidget* create_InfoWidget(const gchar *text);
178 
179 #endif /* INTERFACE_H */
180