Connecting the Interface to the Utility Functions

only for RuBoard - do not distribute or recompile

Connecting the Interface to the Utility Functions

The previous two sections concentrated on building the user interface and constructing the functions to do the majority of the work. Now put the two together to produce a final product.

callbacks.c

Listing 7.17 lists all the callbacks from callbacks.c that have any code in them other than what Glade produces. (If you download callbacks.c for this project from the companion Web site, you will see more functions than are in Listing 7.17.)

Listing 7.17 Selected Functions from callbacks.c
 #ifdef HAVE_CONFIG_H  #  include <config.h>  #endif  #include <gtk/gtk.h>  #include <mysql.h>  #include "callbacks.h"  #include "interface.h"  #include "support.h"  #include "sesi_utils.h"  GtkWidget *frm_main;  GtkWidget *frm_items_ordered;  GtkWidget *frm_find_item;  GtkWidget *frm_find_customer;  MYSQL     *conx;  gboolean  need_to_save_edits;  gboolean  on_frm_main_delete_event               (GtkWidget       *widget,                                          GdkEvent        *event,                                          gpointer         user_data)  {    g_print("on_frm_main_delete_event...\n");     gtk_main_quit();  /* The "return FALSE;" call below interrupts the   * delete event. Change it to true to "not delete"   * the form. In this case, terminating the application is   * the desired behavior. So it is left as FALSE (the   * default by Glade).   */  return FALSE;  }  void  on_frm_main_realize                    (GtkWidget       *widget,                                          gpointer         user_data)  {    g_print("on_frm_main_realize event...\n");     connect_to_db();  }  void  on_cmd_search_clicked                  (GtkButton       *button,                                          gpointer         user_data)  {    g_print("on_cmd_search_clicked event...\n");     gtk_widget_show_all (frm_find_customer);  }  void  on_cmd_save_edits_clicked              (GtkButton       *button,                                          gpointer         user_data)  {    g_print("on_cmd_save_edits_clicked event...\n");     update_database();     need_to_save_edits = FALSE;     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), FALSE);  }  void  on_cmd_select_items_clicked            (GtkButton       *button,                                          gpointer         user_data)  {    g_print("on_cmd_select_items_clicked event...\n");     gtk_widget_show_all(frm_items_ordered);  }  void  on_cmd_print_order_clicked             (GtkButton       *button,                                          gpointer         user_data)  {      g_print("on_cmd_print_order_clicked event...\n");     write_order();  }  void  on_cmd_exit_clicked                    (GtkButton       *button,                                          gpointer         user_data)  {    g_print("on_cmd_exit_clicked event...\n");     gtk_widget_destroy(frm_main);     gtk_main_quit();  }  void  on_combo_entry_customer_number_changed (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_combo_entry_customer_number_changed event...\n");     fill_customer_info();  }  gboolean  on_frm_items_ordered_delete_event      (GtkWidget       *widget,                                          GdkEvent        *event,                                          gpointer         user_data)  {    g_print("on_frm_items_ordered_delete_event...\n");  /* If the user clicks the "X" (close window) button in the top   * right of the window, GTK+ will proceed to delete the window.   * This is not the desired behavior; it is preferred that the   * user click the "Done" button,, but since that cannot be   * guaranteed, the software should still react correctly regardless   * of which way the user attempts to close the window. Therefore,   * the "return TRUE" call below halts the delete event for the   * window. The next time the user opens the form, it will be   * in the same state as it was when it was closed, which is   * acceptable.   *   * Instead, hide the form first, then return the TRUE ('halt").   */  gtk_widget_hide(frm_items_ordered);     return TRUE;  }  void  on_frm_items_ordered_realize           (GtkWidget       *widget,                                          gpointer         user_data)  {    g_print("on_frm_items_ordered_realize event...\n");     fill_items_ordered();  }  void  on_frm_items_ordered_show              (GtkWidget       *widget,                                          gpointer         user_data)  {    g_print("on_frm_items_ordered_show event...\n");  /* Here is a bit of an afterthoughtthe numeric   * columns in the CList widgets should be right   * justified. This can, of course, be set from Glade;   * however, that portion of this project is considered   * stable, and it shouldn't be messed with "after the   * fact." Therefore, the justification can be set here,   * and incorporated into the Glade project file for   * the next version.   *  gtk_clist_set_column_justification(GTK_CLIST(lookup_widget(frm_items_ordered,                                     "clist_items")),                                      2, GTK_JUSTIFY_RIGHT);     gtk_clist_set_column_justification(GTK_CLIST(lookup_widget(frm_items_ordered,                                      "clist_items_ordered")),                                      2, GTK_JUSTIFY_RIGHT);     gtk_clist_set_column_justification(GTK_CLIST(lookup_widget(frm_items_ordered,                                      "clist_items_ordered")),                                      3, GTK_JUSTIFY_RIGHT);  }  void  on_cmd_Add_clicked                     (GtkButton       *button,                                          gpointer         user_data)  {    g_print("on_cmd_Add_clicked event...\n");     speed_add();  }    void  on_cmd_search_for_item_clicked         (GtkButton       *button,                                          gpointer         user_data)  {    g_print("on_cmd_search_for_item_clicked event...\n");     gtk_widget_show_all (frm_find_item);  }  void  on_cmd_done_clicked                    (GtkButton       *button,                                          gpointer         user_data)  {    g_print("on_cmd_done_clicked event...\n");     gtk_widget_hide (frm_items_ordered);  }  void  on_cmd_add_down_clicked                (GtkButton       *button,                                          gpointer         user_data)  {    g_print("on_cmd_add_down_clicked event...\n");     slow_add();  }  void  on_cmd_remove_clicked                  (GtkButton       *button,                                          gpointer         user_data)  {    g_print("on_cmd_remove_clicked event...\n");     remove_ordered_item();  }  void  on_clist_items_select_row              (GtkCList        *clist,                                          gint             row,                                          gint             column,                                          GdkEvent        *event,                                          gpointer         user_data)  {    g_print("on_clist_items_select_row event...\n");     g_print("row is %i...\n", row);  }  void  on_clist_items_ordered_select_row      (GtkCList        *clist,                                          gint             row,                                          gint             column,                                          GdkEvent        *event,                                          gpointer         user_data)  {    g_print("on_clist_items_ordered_select_row event...\n");     g_print("Row to remove is %i\n", row);  }  void  on_frm_main_show                       (GtkWidget       *widget,                                          gpointer         user_data)  {    g_print("on_frm_main_show event...\n");     gtk_combo_set_popdown_strings(GTK_COMBO                        (lookup_widget(frm_main, "cbo_customer_number")),                        get_customer_numbers());  }  gboolean  on_frm_find_customer_delete_event      (GtkWidget       *widget,                                          GdkEvent        *event,                                          gpointer         user_data)  {    g_print("on_frm_find_customer_delete_event...\n");  /* Returning true halts the delete event. */  gtk_widget_hide(frm_find_customer);     return TRUE;  }  void  on_cmd_find_customer_clicked           (GtkButton       *button,                                          gpointer         user_data)  {    g_print("on_cmd_find_customer_clicked event...\n");     enter_found_customers((gchar *) gtk_editable_get_chars(GTK_EDITABLE(lookup_widget(frm_find_customer, "entry_find_customer")),                        0, -1));  }    void  on_cmd_find_customer_done_clicked      (GtkButton       *button,                                          gpointer         user_data)  {    gchar      *target_customer;     GtkCList   *clist_target;     gint       row_target;     g_print("on_cmd_find_customer_done_clicked event...\n");  /* Get the customer number of the selected row in   * clist_found_customer, and send it to select_customer().   */  clist_target = GTK_CLIST(lookup_widget(frm_find_customer,                              "clist_found_customer"));     row_target = (gint) g_list_nth_data ((clist_target)->selection, 0);     gtk_clist_get_text(clist_target,                        row_target, 0, &target_customer);     g_print("Target customer is: %s\n", target_customer);     select_customer(target_customer);  /* Hide the form. */  gtk_widget_hide (frm_find_customer);  }  gboolean  on_frm_find_item_delete_event          (GtkWidget       *widget,                                          GdkEvent        *event,                                          gpointer         user_data)  {    g_print("on_frm_find_item_delete_event...\n");  /* Returning true halts the delete event. */  gtk_widget_hide(frm_find_item);     return TRUE;  }  void  on_cmd_find_item_clicked               (GtkButton       *button,                                          gpointer         user_data)  {    g_print("on_cmd_find_item_clicked event...\n");     enter_found_items((gchar *) gtk_editable_get_chars(GTK_EDITABLE(lookup_widget(frm_find_item, "entry_find_item")),                        0, -1));  }  void  on_cmd_find_item_done_clicked      (GtkButton       *button,                                      gpointer         user_data)  {    gchar      *target_item;     GtkCList   *clist_target;     gint       row_target;     g_print("on_cmd_find_item_done_clicked event...\n");  /* Get the item number of the selected row in clist_items_found,   * and send it to select_item().   */  clist_target = GTK_CLIST(lookup_widget(frm_find_item, "clist_found_items"));     row_target = (gint) g_list_nth_data ((clist_target)->selection, 0);     gtk_clist_get_text(clist_target,                        row_target, 0, &target_item);     select_item(target_item);  /* Hide the form. */  gtk_widget_hide (frm_find_item);  }  void  on_entry_customer_name_changed         (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_customer_name_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }  void  on_entry_last_changed                  (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_last_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }    void  on_entry_first_changed                 (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_first_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }  void  on_entry_title_changed                 (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_title_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }  void  on_entry_phone_changed                 (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_phone_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }  void  on_entry_ship_to_addr1_changed         (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_ship_to_addr1_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }  void  on_entry_ship_to_addr2_changed         (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_ship_to_addr2_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }  void  on_entry_bill_to_addr2_changed         (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_bill_to_addr2_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }  void  on_entry_ship_to_city_changed          (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_ship_to_city_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }  void  on_entry_ship_to_st_changed            (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_ship_to_st_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }  void  on_entry_ship_to_zip_changed           (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_ship_to_zip_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }  void  on_entry_bill_to_city_changed         (GtkEditable     *editable,                                         gpointer         user_data)  {    g_print("on_entry_bill_to_city_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }    void  on_entry_bill_to_st_changed            (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_bill_to_st_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }  void  on_entry_bill_to_zip_changed           (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_entry_bill_to_zip_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  }  void  on_txt_customer_comments_changed       (GtkEditable     *editable,                                          gpointer         user_data)  {    g_print("on_txt_customer_comments_changed event...\n");     gtk_widget_set_sensitive(lookup_widget(frm_main, "cmd_save_edits"), TRUE);     need_to_save_edits = TRUE;  } 

main.c

In closing, Listing 7.18 is main.c from this application. Once Glade has written this file, it will not overwrite it. That means you can change it, but if you need Glade to create a new one, you will have to delete or rename the existing one.

Listing 7.18 main.c For the SESI Order Application
 /*   * Initial main.c file generated by Glade. Edit as required.   * Glade will not overwrite this file.   */  #ifdef HAVE_CONFIG_H  #  include <config.h>  #endif  #include <gtk/gtk.h>  #include <mysql.h>  #include "interface.h"  #include "support.h"  GtkWidget *frm_main;  GtkWidget *frm_items_ordered;  GtkWidget *frm_find_item;  GtkWidget *frm_find_customer;  MYSQL *conx;  int  main (int argc, char *argv[])  {   gtk_set_locale ();    gtk_init (&argc, &argv);  /*   * The following code was added by Glade to create one of each   * component (except popup menus), just so that you see something   * after building the project. Delete any components you   * don't want shown initially.   */  frm_main = create_frm_main ();    gtk_widget_show (frm_main);    frm_items_ordered = create_frm_items_ordered();    frm_find_item = create_frm_find_item();    frm_find_customer = create_frm_find_customer();    gtk_main ();    return 0;  } 

Notice that all four of the windows are created, but only frm_main is shown at this point.The others are shown and hidden as needed.

only for RuBoard - do not distribute or recompile


MySQL Building User Interfaces
MySQL: Building User Interfaces (Landmark)
ISBN: 073571049X
EAN: 2147483647
Year: 2001
Pages: 119

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net