GtkWidget * gnc_main_window_summary_new (void) { GNCMainSummary * retval = g_new0(GNCMainSummary, 1); GtkCellRenderer *textRenderer; int i; retval->datamodel = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); retval->hbox = gtk_hbox_new (FALSE, 5); retval->totals_combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (retval->datamodel)); g_object_unref (retval->datamodel); retval->component_id = gnc_register_gui_component (WINDOW_SUMMARYBAR_CM_CLASS, summarybar_refresh_handler, NULL, retval); gnc_gui_component_watch_entity_type (retval->component_id, GNC_ID_ACCOUNT, QOF_EVENT_DESTROY | GNC_EVENT_ITEM_CHANGED); // Allows you to get when the popup menu is present g_signal_connect (retval->totals_combo, "notify::popup-shown",G_CALLBACK (summary_combo_popped), retval); retval->combo_popped = FALSE; for (i = 0; i <= N_COLUMNS; i += 2) { textRenderer = GTK_CELL_RENDERER(gtk_cell_renderer_text_new()); gtk_cell_renderer_set_fixed_size (textRenderer, 50, -1); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(retval->totals_combo), textRenderer, TRUE); g_object_set_data (G_OBJECT(textRenderer), "view_column", GINT_TO_POINTER (i)); gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT(retval->totals_combo), textRenderer, cdf, retval, NULL); } gtk_container_set_border_width (GTK_CONTAINER (retval->hbox), 2); gtk_box_pack_start (GTK_BOX(retval->hbox), retval->totals_combo, TRUE, TRUE, 5); gtk_widget_show (retval->totals_combo); gtk_widget_show (retval->hbox); g_signal_connect_swapped (G_OBJECT (retval->hbox), "destroy", G_CALLBACK (gnc_main_window_summary_destroy_cb), retval); gnc_main_window_summary_refresh(retval); retval->cnxn_id = gnc_prefs_register_cb (GNC_PREFS_GROUP, NULL, prefs_changed_cb, retval); return retval->hbox; }
static void gconf_client_notify_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data) { GNCMainSummary * summary = user_data; gnc_main_window_summary_refresh(summary); }
GtkWidget * gnc_main_window_summary_new (void) { GNCMainSummary * retval = g_new0(GNCMainSummary, 1); GtkCellRenderer *textRenderer; int i; // These options lead to a better looking layout for the combo-box, where // the "Assets: $####.##" and "Profit: $####.##" values are visually next // to each other. gboolean expandOptions[] = { TRUE, FALSE, TRUE, FALSE, TRUE }; retval->datamodel = gtk_list_store_new( N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING ); retval->hbox = gtk_hbox_new (FALSE, 5); retval->totals_combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (retval->datamodel)); g_object_unref (retval->datamodel); retval->component_id = gnc_register_gui_component (WINDOW_SUMMARYBAR_CM_CLASS, summarybar_refresh_handler, NULL, retval); gnc_gui_component_watch_entity_type (retval->component_id, GNC_ID_ACCOUNT, QOF_EVENT_DESTROY | GNC_EVENT_ITEM_CHANGED); for ( i = 0; i < N_COLUMNS; i++ ) { textRenderer = GTK_CELL_RENDERER(gtk_cell_renderer_text_new()); gtk_cell_layout_pack_start( GTK_CELL_LAYOUT(retval->totals_combo), textRenderer, expandOptions[i] ); gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(retval->totals_combo), textRenderer, "text", i ); } gtk_container_set_border_width (GTK_CONTAINER (retval->hbox), 2); gtk_box_pack_start (GTK_BOX(retval->hbox), retval->totals_combo, TRUE, TRUE, 5); gtk_widget_show (retval->totals_combo); gtk_widget_show (retval->hbox); g_signal_connect_swapped (G_OBJECT (retval->hbox), "destroy", G_CALLBACK (gnc_main_window_summary_destroy_cb), retval); gnc_main_window_summary_refresh(retval); retval->cnxn_id = gnc_gconf_add_anon_notification(GCONF_SECTION, gconf_client_notify_cb, retval); return retval->hbox; }
static void summarybar_refresh_handler(GHashTable * changes, gpointer user_data) { GNCMainSummary * summary = user_data; gnc_main_window_summary_refresh(summary); }
static void prefs_changed_cb (gpointer prefs, gchar *pref, gpointer user_data) { GNCMainSummary * summary = user_data; gnc_main_window_summary_refresh(summary); }