diff options
Diffstat (limited to 'src/math-window.c')
-rw-r--r-- | src/math-window.c | 696 |
1 files changed, 330 insertions, 366 deletions
diff --git a/src/math-window.c b/src/math-window.c index 2fc010e..d7f0912 100644 --- a/src/math-window.c +++ b/src/math-window.c @@ -29,499 +29,463 @@ enum { PROP_EQUATION }; -struct MathWindowPrivate -{ - GtkWidget *menu_bar; - MathEquation *equation; - MathDisplay *display; - MathButtons *buttons; - MathPreferencesDialog *preferences_dialog; - gboolean right_aligned; - GtkWidget *mode_basic_menu_item, *mode_advanced_menu_item, *mode_financial_menu_item, *mode_programming_menu_item; +struct MathWindowPrivate { + GtkWidget* menu_bar; + MathEquation* equation; + MathDisplay* display; + MathButtons* buttons; + MathPreferencesDialog* preferences_dialog; + gboolean right_aligned; + GtkWidget* mode_basic_menu_item; + GtkWidget* mode_advanced_menu_item; + GtkWidget* mode_financial_menu_item; + GtkWidget* mode_programming_menu_item; }; -G_DEFINE_TYPE (MathWindow, math_window, GTK_TYPE_WINDOW); +G_DEFINE_TYPE(MathWindow, math_window, GTK_TYPE_WINDOW); enum { - QUIT, - LAST_SIGNAL + QUIT, + LAST_SIGNAL }; -static guint signals[LAST_SIGNAL] = { 0, }; + +static guint signals[LAST_SIGNAL] = {0, }; -MathWindow * -math_window_new(MathEquation *equation) +MathWindow* math_window_new(MathEquation* equation) { - return g_object_new (math_window_get_type(), "equation", equation, NULL); + return g_object_new(math_window_get_type(), "equation", equation, NULL); } -GtkWidget * -math_window_get_menu_bar(MathWindow *window) +GtkWidget* math_window_get_menu_bar(MathWindow* window) { - return window->priv->menu_bar; + return window->priv->menu_bar; } -MathEquation *math_window_get_equation(MathWindow *window) +MathEquation* math_window_get_equation(MathWindow* window) { - return window->priv->equation; + return window->priv->equation; } -MathDisplay * -math_window_get_display(MathWindow *window) +MathDisplay* math_window_get_display(MathWindow* window) { - return window->priv->display; + return window->priv->display; } -MathButtons * -math_window_get_buttons(MathWindow *window) +MathButtons* math_window_get_buttons(MathWindow* window) { - return window->priv->buttons; + return window->priv->buttons; } -void -math_window_critical_error(MathWindow *window, const gchar *title, const gchar *contents) +void math_window_critical_error(MathWindow* window, const gchar* title, const gchar* contents) { - GtkWidget *dialog; + GtkWidget* dialog; - dialog = gtk_message_dialog_new(NULL, 0, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_NONE, - "%s", title); - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), - "%s", contents); - gtk_dialog_add_buttons(GTK_DIALOG(dialog), GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT, NULL); + dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_NONE, "%s", title); + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), "%s", contents); + gtk_dialog_add_buttons(GTK_DIALOG(dialog), GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT, NULL); - gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_dialog_run(GTK_DIALOG(dialog)); - g_signal_emit(window, signals[QUIT], 0); + g_signal_emit(window, signals[QUIT], 0); } -static void -copy_cb(GtkWidget *widget, MathWindow *window) +static void copy_cb(GtkWidget* widget, MathWindow* window) { - math_equation_copy (window->priv->equation); + math_equation_copy(window->priv->equation); } -static void -paste_cb(GtkWidget *widget, MathWindow *window) +static void paste_cb(GtkWidget* widget, MathWindow* window) { - math_equation_paste (window->priv->equation); + math_equation_paste(window->priv->equation); } -static void -undo_cb(GtkWidget *widget, MathWindow *window) +static void undo_cb(GtkWidget* widget, MathWindow* window) { - math_equation_undo(window->priv->equation); + math_equation_undo(window->priv->equation); } -static void -redo_cb(GtkWidget *widget, MathWindow *window) +static void redo_cb(GtkWidget* widget, MathWindow* window) { - math_equation_redo(window->priv->equation); + math_equation_redo(window->priv->equation); } -static void -mode_changed_cb(GtkWidget *menu, MathWindow *window) +static void mode_changed_cb(GtkWidget* menu, MathWindow* window) { - int mode; + int mode; - if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menu))) - return; + if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menu))) + { + return; + } - mode = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu), "calcmode")); - math_buttons_set_mode(window->priv->buttons, mode); + mode = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu), "calcmode")); + math_buttons_set_mode(window->priv->buttons, mode); } -static void -show_preferences_cb(GtkMenuItem *menu, MathWindow *window) +static void show_preferences_cb(GtkMenuItem* menu, MathWindow* window) { - if (!window->priv->preferences_dialog) { - window->priv->preferences_dialog = math_preferences_dialog_new(window->priv->equation); - gtk_window_set_transient_for(GTK_WINDOW(window->priv->preferences_dialog), GTK_WINDOW(window)); - } - gtk_window_present(GTK_WINDOW(window->priv->preferences_dialog)); + if (!window->priv->preferences_dialog) + { + window->priv->preferences_dialog = math_preferences_dialog_new(window->priv->equation); + gtk_window_set_transient_for(GTK_WINDOW(window->priv->preferences_dialog), GTK_WINDOW(window)); + } + + gtk_window_present(GTK_WINDOW(window->priv->preferences_dialog)); } -static void -help_cb(GtkWidget *widget, MathWindow *window) +static void help_cb(GtkWidget* widget, MathWindow* window) { - GdkScreen *screen; - GError *error = NULL; - - screen = gtk_widget_get_screen (GTK_WIDGET (window)); - gtk_show_uri (screen, "ghelp:mate-calc", gtk_get_current_event_time (), &error); - - if (error != NULL) - { - GtkWidget *d; - /* Translators: Error message displayed when unable to launch help browser */ - const char *message = _("Unable to open help file"); - - d = gtk_message_dialog_new (GTK_WINDOW (window), - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, - "%s", message); - gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (d), - "%s", error->message); - g_signal_connect (d, "response", G_CALLBACK (gtk_widget_destroy), NULL); - gtk_window_present (GTK_WINDOW (d)); - - g_error_free (error); - } + GdkScreen* screen; + GError* error = NULL; + + screen = gtk_widget_get_screen(GTK_WIDGET(window)); + gtk_show_uri(screen, "ghelp:mate-calc", gtk_get_current_event_time(), &error); + + if (error != NULL) + { + GtkWidget* d; + /* Translators: Error message displayed when unable to launch help browser */ + const char* message = _("Unable to open help file"); + + d = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", message); + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(d), "%s", error->message); + g_signal_connect(d, "response", G_CALLBACK(gtk_widget_destroy), NULL); + gtk_window_present(GTK_WINDOW (d)); + + g_error_free(error); + } } -static void -about_cb(GtkWidget *widget, MathWindow *window) +static void about_cb(GtkWidget* widget, MathWindow* window) { - const gchar *authors[] = { - "Rich Burridge <[email protected]>", - "Robert Ancell <[email protected]>", - "Klaus Niederkrüger <[email protected]>", - NULL - }; - const gchar *documenters[] = { - "Sun Microsystems", - NULL - }; - - /* The translator credits. Please translate this with your name(s). */ - const gchar *translator_credits = _("translator-credits"); - - /* The license this software is under (GPL2+) */ - char *license = _("mate-calc is free software; you can redistribute it and/or modify\n" - "it under the terms of the GNU General Public License as published by\n" - "the Free Software Foundation; either version 2 of the License, or\n" - "(at your option) any later version.\n" - "\n" - "mate-calc is distributed in the hope that it will be useful,\n" - "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" - "GNU General Public License for more details.\n" - "\n" - "You should have received a copy of the GNU General Public License\n" - "along with mate-calc; if not, write to the Free Software Foundation, Inc.,\n" - "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA"); - - gtk_show_about_dialog(GTK_WINDOW(window), - "name", - /* Program name in the about dialog */ - _("mate-calc"), - "version", VERSION, - "copyright", - /* Copyright notice in the about dialog */ - _("\xc2\xa9 1986–2010 The mate-calc authors"), - "license", license, - "comments", - /* Short description in the about dialog */ - _("Calculator with financial and scientific modes."), - "authors", authors, - "documenters", documenters, - "translator_credits", translator_credits, - "logo-icon-name", "accessories-calculator", - NULL); + char* authors[] = { + "Rich Burridge <[email protected]>", + "Robert Ancell <[email protected]>", + "Klaus Niederkrüger <[email protected]>", + NULL + }; + + char* documenters[] = { + "Sun Microsystems", + NULL + }; + + /* The translator credits. Please translate this with your name(s). */ + char* translator_credits = _("translator-credits"); + + char copyright[] = \ + "Copyright \xc2\xa9 1986–2010 The mate-calc authors"; + + /* The license this software is under (GPL2+) */ + char* license = _("mate-calc is free software; you can redistribute it and/or modify\n" + "it under the terms of the GNU General Public License as published by\n" + "the Free Software Foundation; either version 2 of the License, or\n" + "(at your option) any later version.\n" + "\n" + "mate-calc is distributed in the hope that it will be useful,\n" + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" + "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" + "GNU General Public License for more details.\n" + "\n" + "You should have received a copy of the GNU General Public License\n" + "along with mate-calc; if not, write to the Free Software Foundation, Inc.,\n" + "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA"); + + gtk_show_about_dialog(GTK_WINDOW(window), + "name", _("mate-calc"), + "version", VERSION, + "copyright", copyright, + "license", license, + "comments", _("Calculator with financial and scientific modes."), + "authors", authors, + "documenters", documenters, + "translator_credits", translator_credits, + "logo-icon-name", "accessories-calculator", + NULL); } -static void -quit_cb(GtkWidget *widget, MathWindow *window) +static void quit_cb(GtkWidget* widget, MathWindow* window) { - g_signal_emit(window, signals[QUIT], 0); + g_signal_emit(window, signals[QUIT], 0); } -static gboolean -key_press_cb(MathWindow *window, GdkEventKey *event) +static gboolean key_press_cb(MathWindow* window, GdkEventKey* event) { - gboolean result; - g_signal_emit_by_name(window->priv->display, "key-press-event", event, &result); - return result; + gboolean result; + + g_signal_emit_by_name(window->priv->display, "key-press-event", event, &result); + + return result; } -static void -delete_cb(MathWindow *window, GdkEvent *event) +static void delete_cb(MathWindow* window, GdkEvent* event) { - g_signal_emit(window, signals[QUIT], 0); + g_signal_emit(window, signals[QUIT], 0); } -static void -scroll_changed_cb(GtkAdjustment *adjustment, MathWindow *window) +static void scroll_changed_cb(GtkAdjustment* adjustment, MathWindow* window) { - if (window->priv->right_aligned) - gtk_adjustment_set_value(adjustment, gtk_adjustment_get_upper(adjustment) - gtk_adjustment_get_page_size(adjustment)); + if (window->priv->right_aligned) + { + gtk_adjustment_set_value(adjustment, gtk_adjustment_get_upper(adjustment) - gtk_adjustment_get_page_size(adjustment)); + } } -static void -scroll_value_changed_cb(GtkAdjustment *adjustment, MathWindow *window) +static void scroll_value_changed_cb(GtkAdjustment* adjustment, MathWindow* window) { - if (gtk_adjustment_get_value(adjustment) == gtk_adjustment_get_upper(adjustment) - gtk_adjustment_get_page_size(adjustment)) - window->priv->right_aligned = TRUE; - else - window->priv->right_aligned = FALSE; + if (gtk_adjustment_get_value(adjustment) == gtk_adjustment_get_upper(adjustment) - gtk_adjustment_get_page_size(adjustment)) + { + window->priv->right_aligned = TRUE; + } + else + { + window->priv->right_aligned = FALSE; + } } -static void -button_mode_changed_cb(MathButtons *buttons, GParamSpec *spec, MathWindow *window) +static void button_mode_changed_cb(MathButtons* buttons, GParamSpec* spec, MathWindow* window) { - GtkWidget *menu; - - switch(math_buttons_get_mode(buttons)) - { - default: - case BASIC: - menu = window->priv->mode_basic_menu_item; - //FIXME: Should it revert to decimal mode? math_equation_set_number_format(window->priv->equation, DEC); - break; - - case ADVANCED: - menu = window->priv->mode_advanced_menu_item; - break; - - case FINANCIAL: - menu = window->priv->mode_financial_menu_item; - break; - - case PROGRAMMING: - menu = window->priv->mode_programming_menu_item; - break; - } - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE); + GtkWidget* menu; + + switch(math_buttons_get_mode(buttons)) + { + default: + case BASIC: + menu = window->priv->mode_basic_menu_item; + //FIXME: Should it revert to decimal mode? math_equation_set_number_format(window->priv->equation, DEC); + break; + + case ADVANCED: + menu = window->priv->mode_advanced_menu_item; + break; + + case FINANCIAL: + menu = window->priv->mode_financial_menu_item; + break; + + case PROGRAMMING: + menu = window->priv->mode_programming_menu_item; + break; + } + + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE); } -static GtkWidget * -add_menu(GtkWidget *menu_bar, const gchar *name) +static GtkWidget* add_menu(GtkWidget* menu_bar, const gchar* name) { - GtkWidget *menu_item, *menu; + GtkWidget* menu_item; + GtkWidget* menu; - menu_item = gtk_menu_item_new_with_mnemonic(name); - gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item); - gtk_widget_show(menu_item); - menu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu); + menu_item = gtk_menu_item_new_with_mnemonic(name); + gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item); + gtk_widget_show(menu_item); + menu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu); - return menu; + return menu; } -static GtkWidget * -add_menu_item(GtkWidget *menu, GtkWidget *menu_item, GCallback callback, gpointer callback_data) +static GtkWidget* add_menu_item(GtkWidget* menu, GtkWidget* menu_item, GCallback callback, gpointer callback_data) { - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); - gtk_widget_show(menu_item); - if (callback) - g_signal_connect(G_OBJECT(menu_item), "activate", callback, callback_data); - return menu_item; + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); + gtk_widget_show(menu_item); + + if (callback) + { + g_signal_connect(G_OBJECT(menu_item), "activate", callback, callback_data); + } + + return menu_item; } -static GtkWidget * -radio_menu_item_new(GSList **group, const gchar *name) +static GtkWidget* radio_menu_item_new(GSList** group, const gchar* name) { - GtkWidget *menu_item; - menu_item = gtk_radio_menu_item_new_with_mnemonic(*group, name); + GtkWidget* menu_item = gtk_radio_menu_item_new_with_mnemonic(*group, name); + *group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item)); + return menu_item; } -static void -create_menu(MathWindow *window) +static void create_menu(MathWindow* window) { - GtkAccelGroup *accel_group; - GtkWidget *menu, *menu_item; - GSList *group = NULL; - - accel_group = gtk_accel_group_new(); - gtk_window_add_accel_group(GTK_WINDOW(window), accel_group); - - /* Calculator menu */ - #define CALCULATOR_MENU_LABEL _("_Calculator") - /* Mode menu */ - #define MODE_MENU_LABEL _("_Mode") - /* Help menu label */ - #define HELP_MENU_LABEL _("_Help") - /* Basic menu label */ - #define MODE_BASIC_LABEL _("_Basic") - /* Advanced menu label */ - #define MODE_ADVANCED_LABEL _("_Advanced") - /* Financial menu label */ - #define MODE_FINANCIAL_LABEL _("_Financial") - /* Programming menu label */ - #define MODE_PROGRAMMING_LABEL _("_Programming") - /* Help>Contents menu label */ - #define HELP_CONTENTS_LABEL _("_Contents") - - menu = add_menu(window->priv->menu_bar, CALCULATOR_MENU_LABEL); - add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_COPY, accel_group), G_CALLBACK(copy_cb), window); - add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_PASTE, accel_group), G_CALLBACK(paste_cb), window); - menu_item = add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_UNDO, accel_group), G_CALLBACK(undo_cb), window); - gtk_widget_add_accelerator(menu_item, "activate", accel_group, GDK_z, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - menu_item = add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_REDO, accel_group), G_CALLBACK(redo_cb), window); - gtk_widget_add_accelerator(menu_item, "activate", accel_group, GDK_z, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); - add_menu_item(menu, gtk_separator_menu_item_new(), NULL, NULL); - add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, accel_group), G_CALLBACK(show_preferences_cb), window); - add_menu_item(menu, gtk_separator_menu_item_new(), NULL, NULL); - menu_item = add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group), G_CALLBACK(quit_cb), window); - gtk_widget_add_accelerator(menu_item, "activate", accel_group, GDK_w, GDK_CONTROL_MASK, 0); - - menu = add_menu(window->priv->menu_bar, MODE_MENU_LABEL); - window->priv->mode_basic_menu_item = add_menu_item(menu, radio_menu_item_new(&group, MODE_BASIC_LABEL), G_CALLBACK(mode_changed_cb), window); - g_object_set_data(G_OBJECT(window->priv->mode_basic_menu_item), "calcmode", GINT_TO_POINTER(BASIC)); - window->priv->mode_advanced_menu_item = add_menu_item(menu, radio_menu_item_new(&group, MODE_ADVANCED_LABEL), G_CALLBACK(mode_changed_cb), window); - g_object_set_data(G_OBJECT(window->priv->mode_advanced_menu_item), "calcmode", GINT_TO_POINTER(ADVANCED)); - window->priv->mode_financial_menu_item = add_menu_item(menu, radio_menu_item_new(&group, MODE_FINANCIAL_LABEL), G_CALLBACK(mode_changed_cb), window); - g_object_set_data(G_OBJECT(window->priv->mode_financial_menu_item), "calcmode", GINT_TO_POINTER(FINANCIAL)); - window->priv->mode_programming_menu_item = add_menu_item(menu, radio_menu_item_new(&group, MODE_PROGRAMMING_LABEL), G_CALLBACK(mode_changed_cb), window); - g_object_set_data(G_OBJECT(window->priv->mode_programming_menu_item), "calcmode", GINT_TO_POINTER(PROGRAMMING)); - - menu = add_menu(window->priv->menu_bar, HELP_MENU_LABEL); - menu_item = add_menu_item(menu, gtk_menu_item_new_with_mnemonic(HELP_CONTENTS_LABEL), G_CALLBACK(help_cb), window); - gtk_widget_add_accelerator(menu_item, "activate", accel_group, GDK_F1, 0, GTK_ACCEL_VISIBLE); - add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, accel_group), G_CALLBACK(about_cb), window); + GtkAccelGroup* accel_group; + GtkWidget* menu; + GtkWidget* menu_item; + GSList* group = NULL; + + accel_group = gtk_accel_group_new(); + gtk_window_add_accel_group(GTK_WINDOW(window), accel_group); + + /* Calculator menu */ + #define CALCULATOR_MENU_LABEL _("_Calculator") + /* Mode menu */ + #define MODE_MENU_LABEL _("_Mode") + /* Help menu label */ + #define HELP_MENU_LABEL _("_Help") + /* Basic menu label */ + #define MODE_BASIC_LABEL _("_Basic") + /* Advanced menu label */ + #define MODE_ADVANCED_LABEL _("_Advanced") + /* Financial menu label */ + #define MODE_FINANCIAL_LABEL _("_Financial") + /* Programming menu label */ + #define MODE_PROGRAMMING_LABEL _("_Programming") + /* Help>Contents menu label */ + #define HELP_CONTENTS_LABEL _("_Contents") + + menu = add_menu(window->priv->menu_bar, CALCULATOR_MENU_LABEL); + add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_COPY, accel_group), G_CALLBACK(copy_cb), window); + add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_PASTE, accel_group), G_CALLBACK(paste_cb), window); + menu_item = add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_UNDO, accel_group), G_CALLBACK(undo_cb), window); + gtk_widget_add_accelerator(menu_item, "activate", accel_group, GDK_z, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); + menu_item = add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_REDO, accel_group), G_CALLBACK(redo_cb), window); + gtk_widget_add_accelerator(menu_item, "activate", accel_group, GDK_z, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); + add_menu_item(menu, gtk_separator_menu_item_new(), NULL, NULL); + add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, accel_group), G_CALLBACK(show_preferences_cb), window); + add_menu_item(menu, gtk_separator_menu_item_new(), NULL, NULL); + menu_item = add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group), G_CALLBACK(quit_cb), window); + gtk_widget_add_accelerator(menu_item, "activate", accel_group, GDK_w, GDK_CONTROL_MASK, 0); + + menu = add_menu(window->priv->menu_bar, MODE_MENU_LABEL); + window->priv->mode_basic_menu_item = add_menu_item(menu, radio_menu_item_new(&group, MODE_BASIC_LABEL), G_CALLBACK(mode_changed_cb), window); + g_object_set_data(G_OBJECT(window->priv->mode_basic_menu_item), "calcmode", GINT_TO_POINTER(BASIC)); + window->priv->mode_advanced_menu_item = add_menu_item(menu, radio_menu_item_new(&group, MODE_ADVANCED_LABEL), G_CALLBACK(mode_changed_cb), window); + g_object_set_data(G_OBJECT(window->priv->mode_advanced_menu_item), "calcmode", GINT_TO_POINTER(ADVANCED)); + window->priv->mode_financial_menu_item = add_menu_item(menu, radio_menu_item_new(&group, MODE_FINANCIAL_LABEL), G_CALLBACK(mode_changed_cb), window); + g_object_set_data(G_OBJECT(window->priv->mode_financial_menu_item), "calcmode", GINT_TO_POINTER(FINANCIAL)); + window->priv->mode_programming_menu_item = add_menu_item(menu, radio_menu_item_new(&group, MODE_PROGRAMMING_LABEL), G_CALLBACK(mode_changed_cb), window); + g_object_set_data(G_OBJECT(window->priv->mode_programming_menu_item), "calcmode", GINT_TO_POINTER(PROGRAMMING)); + + menu = add_menu(window->priv->menu_bar, HELP_MENU_LABEL); + menu_item = add_menu_item(menu, gtk_menu_item_new_with_mnemonic(HELP_CONTENTS_LABEL), G_CALLBACK(help_cb), window); + gtk_widget_add_accelerator(menu_item, "activate", accel_group, GDK_F1, 0, GTK_ACCEL_VISIBLE); + add_menu_item(menu, gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, accel_group), G_CALLBACK(about_cb), window); } -static void -create_gui(MathWindow *window) +static void create_gui(MathWindow* window) { - GtkWidget *main_vbox, *vbox; - GtkWidget *scrolled_window; - - main_vbox = gtk_vbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(window), main_vbox); - gtk_widget_show(main_vbox); - - window->priv->menu_bar = gtk_menu_bar_new(); - gtk_box_pack_start(GTK_BOX(main_vbox), window->priv->menu_bar, TRUE, TRUE, 0); - gtk_widget_show(window->priv->menu_bar); - - create_menu(window); - - vbox = gtk_vbox_new(FALSE, 6); - gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); - gtk_box_pack_start(GTK_BOX(main_vbox), vbox, TRUE, TRUE, 0); - gtk_widget_show(vbox); - - scrolled_window = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); - gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(scrolled_window), TRUE, TRUE, 0); - g_signal_connect(gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(scrolled_window)), "changed", G_CALLBACK(scroll_changed_cb), window); - g_signal_connect(gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(scrolled_window)), "value-changed", G_CALLBACK(scroll_value_changed_cb), window); - window->priv->right_aligned = TRUE; - gtk_widget_show(scrolled_window); - - window->priv->display = math_display_new_with_equation(window->priv->equation); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window), GTK_WIDGET(window->priv->display)); - gtk_widget_show(GTK_WIDGET(window->priv->display)); - - window->priv->buttons = math_buttons_new(window->priv->equation); - g_signal_connect(window->priv->buttons, "notify::mode", G_CALLBACK(button_mode_changed_cb), window); - button_mode_changed_cb(window->priv->buttons, NULL, window); - gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(window->priv->buttons), TRUE, TRUE, 0); - gtk_widget_show(GTK_WIDGET(window->priv->buttons)); + GtkWidget* main_vbox; + GtkWidget* vbox; + GtkWidget* scrolled_window; + + main_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(window), main_vbox); + gtk_widget_show(main_vbox); + + window->priv->menu_bar = gtk_menu_bar_new(); + gtk_box_pack_start(GTK_BOX(main_vbox), window->priv->menu_bar, TRUE, TRUE, 0); + gtk_widget_show(window->priv->menu_bar); + + create_menu(window); + + vbox = gtk_vbox_new(FALSE, 6); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); + gtk_box_pack_start(GTK_BOX(main_vbox), vbox, TRUE, TRUE, 0); + gtk_widget_show(vbox); + + scrolled_window = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); + gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(scrolled_window), TRUE, TRUE, 0); + g_signal_connect(gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(scrolled_window)), "changed", G_CALLBACK(scroll_changed_cb), window); + g_signal_connect(gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(scrolled_window)), "value-changed", G_CALLBACK(scroll_value_changed_cb), window); + window->priv->right_aligned = TRUE; + gtk_widget_show(scrolled_window); + + window->priv->display = math_display_new_with_equation(window->priv->equation); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window), GTK_WIDGET(window->priv->display)); + gtk_widget_show(GTK_WIDGET(window->priv->display)); + + window->priv->buttons = math_buttons_new(window->priv->equation); + g_signal_connect(window->priv->buttons, "notify::mode", G_CALLBACK(button_mode_changed_cb), window); + button_mode_changed_cb(window->priv->buttons, NULL, window); + gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(window->priv->buttons), TRUE, TRUE, 0); + gtk_widget_show(GTK_WIDGET(window->priv->buttons)); } -static void -math_window_set_property(GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) +static void math_window_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec) { - MathWindow *self; - - self = MATH_WINDOW (object); - - switch (prop_id) { - case PROP_EQUATION: - self->priv->equation = g_value_get_object (value); - create_gui(self); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + MathWindow* self = MATH_WINDOW(object); + + switch (prop_id) + { + case PROP_EQUATION: + self->priv->equation = g_value_get_object(value); + create_gui(self); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } } -static void -math_window_get_property(GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) +static void math_window_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec) { - MathWindow *self; - - self = MATH_WINDOW (object); - - switch (prop_id) { - case PROP_EQUATION: - g_value_set_object (value, self->priv->equation); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + MathWindow* self = MATH_WINDOW(object); + + switch (prop_id) + { + case PROP_EQUATION: + g_value_set_object (value, self->priv->equation); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } -static void -math_window_class_init (MathWindowClass *klass) +static void math_window_class_init(MathWindowClass* klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->get_property = math_window_get_property; - object_class->set_property = math_window_set_property; - - g_type_class_add_private (klass, sizeof (MathWindowPrivate)); - - g_object_class_install_property(object_class, - PROP_EQUATION, - g_param_spec_object("equation", - "equation", - "Equation being calculated", - math_equation_get_type(), - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - signals[QUIT] = - g_signal_new ("quit", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (MathWindowClass, quit), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); + GObjectClass* object_class = G_OBJECT_CLASS(klass); + + object_class->get_property = math_window_get_property; + object_class->set_property = math_window_set_property; + + g_type_class_add_private(klass, sizeof(MathWindowPrivate)); + + g_object_class_install_property(object_class, PROP_EQUATION, g_param_spec_object("equation", "equation", "Equation being calculated", math_equation_get_type(), G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + signals[QUIT] = g_signal_new("quit", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(MathWindowClass, quit), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } -static void -math_window_init(MathWindow *window) +static void math_window_init(MathWindow* window) { - window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window, math_window_get_type(), MathWindowPrivate); - gtk_window_set_title(GTK_WINDOW(window), - /* Title of main window */ - _("Calculator")); - gtk_window_set_icon_name(GTK_WINDOW(window), "accessories-calculator"); - gtk_window_set_role(GTK_WINDOW(window), "mate-calc"); - gtk_window_set_resizable(GTK_WINDOW(window), FALSE); - g_signal_connect_after(G_OBJECT(window), "key-press-event", G_CALLBACK(key_press_cb), NULL); - g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(delete_cb), NULL); + window->priv = G_TYPE_INSTANCE_GET_PRIVATE(window, math_window_get_type(), MathWindowPrivate); + + gtk_window_set_title(GTK_WINDOW(window), _("Calculator")); /* Title of main window */ + gtk_window_set_icon_name(GTK_WINDOW(window), "accessories-calculator"); + gtk_window_set_role(GTK_WINDOW(window), "mate-calc"); + gtk_window_set_resizable(GTK_WINDOW(window), FALSE); + g_signal_connect_after(G_OBJECT(window), "key-press-event", G_CALLBACK(key_press_cb), NULL); + g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(delete_cb), NULL); } |