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