SeedValue seed_gtk_builder_connect_signals(SeedContext ctx, SeedObject function, SeedObject this_object, gsize argument_count, const SeedValue arguments[], SeedException *exception) { builder_ud ud; GtkBuilder *b; CHECK_ARG_COUNT("GtkBuilder.connect_signals", 1); if (!seed_value_is_object (ctx, arguments[0])) { seed_make_exception (ctx, exception, "TypeError", "connect_signals expects one object as the first argument"); return seed_make_undefined (ctx); } b = GTK_BUILDER (seed_value_to_object (ctx, this_object, exception)); ud.ctx = ctx; ud.obj = arguments[0]; if (argument_count == 2) ud.user_data = arguments[1]; else ud.user_data = NULL; gtk_builder_connect_signals_full(b, seed_builder_connect_func, &ud); return seed_make_undefined (ctx); }
void on_matcher_help_clicked (GtkButton *button, gpointer user_data) { GNCImportMainMatcher *info = user_data; GtkBuilder *builder; GtkWidget *help_dialog, *box; builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-import.glade", "textbuffer2"); gnc_builder_add_from_file (builder, "dialog-import.glade", "textbuffer3"); gnc_builder_add_from_file (builder, "dialog-import.glade", "textbuffer4"); gnc_builder_add_from_file (builder, "dialog-import.glade", "textbuffer5"); gnc_builder_add_from_file (builder, "dialog-import.glade", "matcher_help"); box = GTK_WIDGET(gtk_builder_get_object (builder, "red")); gtk_widget_modify_bg(box, GTK_STATE_NORMAL, &info->color_back_red); box = GTK_WIDGET(gtk_builder_get_object (builder, "yellow")); gtk_widget_modify_bg(box, GTK_STATE_NORMAL, &info->color_back_yellow); box = GTK_WIDGET(gtk_builder_get_object (builder, "green")); gtk_widget_modify_bg(box, GTK_STATE_NORMAL, &info->color_back_green); help_dialog = GTK_WIDGET(gtk_builder_get_object (builder, "matcher_help")); gtk_window_set_transient_for(GTK_WINDOW(help_dialog), GTK_WINDOW(info->dialog)); /* Connect the signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, help_dialog); g_object_unref(G_OBJECT(builder)); gtk_widget_show(help_dialog); }
static JSBool gjs_gtkbuilder_connect_signals (JSContext *context, uintN argc, jsval *vp) { jsval *argv = JS_ARGV (context, vp); JSObject *obj = JS_THIS_OBJECT (context, vp); GtkBuilder *builder; builder_ud ud; builder = GTK_BUILDER (gjs_g_object_from_object (context, obj)); if (NULL == builder) { gjs_throw (context, "Gtk.Builder.connect_signals () invalid this"); return JS_FALSE; } if (argc < 1) { gjs_throw (context, "Gtk.Builder.connect_signals () takes arguments"); return JS_FALSE; } ud.ctx = context; ud.obj = JSVAL_TO_OBJECT (argv[0]); gtk_builder_connect_signals_full (builder, _gjs_builder_connect_func, &ud); JS_SET_RVAL(context, vp, JSVAL_VOID); return JS_TRUE; }
void gnc_totd_dialog (GtkWindow *parent, gboolean startup) { TotdDialog *totd_dialog; GtkBuilder *builder; GtkWidget *dialog, *button; GtkTextView *textview; gboolean show_tips; totd_dialog = g_new0 (TotdDialog, 1); show_tips = gnc_prefs_get_bool(GNC_PREFS_GROUP, GNC_PREF_SHOW_TIPS); if (startup && !show_tips) return; if (tip_count == -1) { if (!gnc_totd_initialize()) return; current_tip_number = gnc_prefs_get_int(GNC_PREFS_GROUP, GNC_PREF_CURRENT_TIP); } if (gnc_forall_gui_components(DIALOG_TOTD_CM_CLASS, show_handler, NULL)) { return; } builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-totd.glade", "totd_dialog"); dialog = GTK_WIDGET(gtk_builder_get_object (builder, "totd_dialog")); gtk_window_set_transient_for(GTK_WINDOW (dialog), parent); totd_dialog->dialog = dialog; ENTER("totd_dialog %p, dialog %p", totd_dialog, dialog); gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, totd_dialog); button = GTK_WIDGET(gtk_builder_get_object (builder, "show_checkbutton")); totd_dialog->showcheck_button = button; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (button), show_tips); textview = GTK_TEXT_VIEW(gtk_builder_get_object (builder, "tip_textview")); totd_dialog->textview = textview; gnc_new_tip_number(totd_dialog, 1); gnc_restore_window_size(GNC_PREFS_GROUP, GTK_WINDOW(totd_dialog->dialog)); gtk_widget_show(GTK_WIDGET (totd_dialog->dialog)); gnc_register_gui_component(DIALOG_TOTD_CM_CLASS, NULL, close_handler, totd_dialog); g_object_unref(G_OBJECT(builder)); LEAVE(""); }
GNCImportMainMatcher * gnc_gen_trans_assist_new (GtkWidget *parent, const gchar* heading, gboolean all_from_same_account, gint match_date_hardlimit) { GNCImportMainMatcher *info; GtkBuilder *builder; GtkWidget *heading_label; GtkWidget *box; gboolean show_update; info = g_new0 (GNCImportMainMatcher, 1); /* Initialize user Settings. */ info->user_settings = gnc_import_Settings_new (); gnc_import_Settings_set_match_date_hardlimit (info->user_settings, match_date_hardlimit); /* load the interface */ builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-import.glade", "transaction_matcher_content"); if (builder == NULL) { PERR("Error opening the glade builder interface"); } /* Pack content into Assistant page widget */ box = GTK_WIDGET(gtk_builder_get_object (builder, "transaction_matcher_content")); gtk_box_pack_start( GTK_BOX(parent), box, TRUE, TRUE, 6); /* Get the view */ info->view = GTK_TREE_VIEW(gtk_builder_get_object (builder, "downloaded_view")); g_assert (info->view != NULL); show_update = gnc_import_Settings_get_action_update_enabled(info->user_settings); gnc_gen_trans_init_view(info, all_from_same_account, show_update); heading_label = GTK_WIDGET(gtk_builder_get_object (builder, "heading_label")); g_assert (heading_label != NULL); /*Initialise the colors */ gdk_color_parse(COLOR_RED, &info->color_back_red); gdk_color_parse(COLOR_YELLOW, &info->color_back_yellow); gdk_color_parse(COLOR_GREEN, &info->color_back_green); if (heading) gtk_label_set_text (GTK_LABEL (heading_label), heading); info->transaction_processed_cb = NULL; /* Connect the signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, info); g_object_unref(G_OBJECT(builder)); return info; }
static void gnc_date_format_init (GNCDateFormat *gdf) { GNCDateFormatPriv *priv; GtkBuilder *builder; GtkWidget *dialog, *table; g_return_if_fail(gdf); g_return_if_fail(GNC_IS_DATE_FORMAT(gdf)); /* Open up the Glade and set the signals */ builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "gnc-date-format.glade", "format-liststore"); gnc_builder_add_from_file (builder, "gnc-date-format.glade", "GNC Date Format"); gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, gdf); /* pull in all the child widgets */ priv = GNC_DATE_FORMAT_GET_PRIVATE(gdf); priv->label = GTK_WIDGET(gtk_builder_get_object (builder, "widget_label")); priv->format_combobox = GTK_WIDGET(gtk_builder_get_object (builder, "format_combobox")); priv->months_label = GTK_WIDGET(gtk_builder_get_object (builder, "months_label")); priv->months_number = GTK_WIDGET(gtk_builder_get_object (builder, "month_number_button")); priv->months_abbrev = GTK_WIDGET(gtk_builder_get_object (builder, "month_abbrev_button")); priv->months_name = GTK_WIDGET(gtk_builder_get_object (builder, "month_name_button")); priv->years_label = GTK_WIDGET(gtk_builder_get_object (builder, "years_label")); priv->years_button = GTK_WIDGET(gtk_builder_get_object (builder, "years_button")); priv->custom_label = GTK_WIDGET(gtk_builder_get_object (builder, "format_label")); priv->custom_entry = GTK_WIDGET(gtk_builder_get_object (builder, "format_entry")); priv->sample_label = GTK_WIDGET(gtk_builder_get_object (builder, "sample_label")); /* Set initial format to gnucash default */ gnc_date_format_set_format(gdf, QOF_DATE_FORMAT_UNSET); /* pull in the dialog and table widgets and play the reconnect game */ dialog = GTK_WIDGET(gtk_builder_get_object (builder, "GNC Date Format")); table = GTK_WIDGET(gtk_builder_get_object (builder, "date_format_table")); g_object_ref(G_OBJECT(table)); gtk_container_remove(GTK_CONTAINER(dialog), table); gtk_container_add(GTK_CONTAINER(gdf), table); g_object_unref(G_OBJECT(table)); g_object_unref(G_OBJECT(builder)); /* Destroy the now empty window */ gtk_widget_destroy(dialog); }
static void gst_editor_palette_init (GstEditorPalette * palette) { connect_struct data; GModule *symbols; gchar *path; GError *error = NULL; static const gchar *object_ids[] = {"utility_palette", NULL}; symbols = g_module_open (NULL, 0); data.palette = palette; data.symbols = symbols; path = gste_get_ui_file ("editor.ui"); if (!path) g_error ("GStreamer Editor user interface file 'editor.ui' not found."); palette->builder = gtk_builder_new (); if (!gtk_builder_add_objects_from_file (palette->builder, path, (gchar **) object_ids, &error)) { g_error ( "GStreamer Editor could not load utility_palette from builder file: %s", error->message); g_error_free (error); } g_free (path); gtk_builder_connect_signals_full (palette->builder, gst_editor_palette_connect_func, &data); palette->window = GTK_WIDGET (gtk_builder_get_object (palette->builder, "utility_palette")); palette->element_tree = g_object_new (gst_element_browser_element_tree_get_type (), NULL); gtk_box_pack_start (GTK_BOX (gtk_builder_get_object (palette->builder, "element-browser-vbox")), palette->element_tree, TRUE, TRUE, 0); g_signal_connect (palette->element_tree, "element-activated", G_CALLBACK (on_element_tree_select), palette); #ifndef _MSC_VER palette->debug_ui = gst_debug_ui_new (); gtk_box_pack_start (GTK_BOX (gtk_builder_get_object (palette->builder, "debug-vbox")), palette->debug_ui, TRUE, TRUE, 0); #endif g_signal_connect (palette->window, "delete-event", G_CALLBACK (on_delete_event), palette); gtk_widget_show_all (palette->window); }
void gnc_prices_dialog_remove_old_clicked (GtkWidget *widget, gpointer data) { PricesDialog *pdb_dialog = data; GtkBuilder *builder; GtkWidget *dialog, *button, *date, *label, *box; gint result; gboolean delete_user, delete_last; ENTER(" "); builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-price.glade", "Deletion Date"); dialog = GTK_WIDGET(gtk_builder_get_object (builder, "Deletion Date")); box = GTK_WIDGET(gtk_builder_get_object (builder, "date_hbox")); date = gnc_date_edit_new (time (NULL), FALSE, FALSE); gtk_box_pack_start (GTK_BOX (box), date, TRUE, TRUE, 0); gtk_widget_show (date); gtk_entry_set_activates_default(GTK_ENTRY(GNC_DATE_EDIT(date)->date_entry), TRUE); label = GTK_WIDGET(gtk_builder_get_object (builder, "date_label")); gnc_date_make_mnemonic_target (GNC_DATE_EDIT(date), label); gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, pdb_dialog); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (pdb_dialog->dialog)); result = gtk_dialog_run (GTK_DIALOG (dialog)); if (result == GTK_RESPONSE_OK) { Timespec ts; DEBUG("deleting prices"); ts.tv_sec = gnc_date_edit_get_date (GNC_DATE_EDIT (date)); ts.tv_nsec = 0; button = GTK_WIDGET(gtk_builder_get_object (builder, "delete_manual")); delete_user = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); button = GTK_WIDGET(gtk_builder_get_object (builder, "delete_last")); delete_last = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); gnc_pricedb_remove_old_prices(pdb_dialog->price_db, ts, delete_user, delete_last); } gtk_widget_destroy(dialog); LEAVE(" "); }
/* Internal function that builds the dialog */ static CustomReportDialog *gnc_ui_custom_report_internal(GncMainWindow * window) { GtkBuilder *builder; CustomReportDialog *crd; GtkTreeIter iter; GtkTreeModel *model; GtkWidget *no_report_notification; crd = g_new0(CustomReportDialog, 1); builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-custom-report.glade", "custom_report_dialog"); crd->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "custom_report_dialog")); crd->reportview = GTK_WIDGET(gtk_builder_get_object (builder, "custom_report_list_view")); no_report_notification = GTK_WIDGET(gtk_builder_get_object (builder, "label2")); set_reports_view_and_model(crd); crd->window = window; gnc_restore_window_size (GNC_PREFS_GROUP_REPORT_SAVED_CONFIGS, GTK_WINDOW(crd->dialog)); /* connect the signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, crd); gtk_widget_show_all(crd->dialog); /* check if there are currently saved reports available * by checking if there is a first element */ model = gtk_tree_view_get_model (GTK_TREE_VIEW (crd->reportview)); if (gtk_tree_model_get_iter_first (model, &iter)) { /* saved reports available -> hide the "no reports available" notification */ gtk_widget_hide(no_report_notification); } else { /* hide the scrolled window of the report list */ gtk_widget_hide(crd->reportview); } g_object_unref(G_OBJECT(builder)); return crd; }
GncSxSinceLastRunDialog* gnc_ui_sx_since_last_run_dialog(GncSxInstanceModel *sx_instances, GList *auto_created_txn_guids) { GncSxSinceLastRunDialog *dialog; GtkBuilder *builder; dialog = g_new0(GncSxSinceLastRunDialog, 1); builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-sx.glade", "since-last-run-dialog"); dialog->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "since-last-run-dialog")); dialog->editing_model = gnc_sx_slr_tree_model_adapter_new(sx_instances); dialog->review_created_txns_toggle = GTK_TOGGLE_BUTTON(gtk_builder_get_object (builder, "review_txn_toggle")); dialog->created_txns = auto_created_txn_guids; { GtkCellRenderer *renderer; GtkTreeViewColumn *col; dialog->instance_view = GTK_TREE_VIEW(gtk_builder_get_object (builder, "instance_view")); gtk_tree_view_set_model(dialog->instance_view, GTK_TREE_MODEL(dialog->editing_model)); renderer = gtk_cell_renderer_text_new(); col = gtk_tree_view_column_new_with_attributes(_("Transaction"), renderer, "text", SLR_MODEL_COL_NAME, NULL); gtk_tree_view_append_column(dialog->instance_view, col); renderer = gtk_cell_renderer_combo_new(); g_object_set(G_OBJECT(renderer), "model", gnc_sx_get_slr_state_model(), "text-column", 0, "has-entry", FALSE, "editable", TRUE, NULL); g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(instance_state_changed_cb), dialog); col = gtk_tree_view_column_new_with_attributes(_("Status"), renderer, "text", SLR_MODEL_COL_INSTANCE_STATE, "visible", SLR_MODEL_COL_INSTANCE_VISIBILITY, // you might think only "sensitive" is required to // control the ability of the combo box to select // a new state, but you'd be wrong. "editable", SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY, "sensitive", SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY, NULL); gtk_tree_view_append_column(dialog->instance_view, col); renderer = gtk_cell_renderer_text_new(); g_object_set(G_OBJECT(renderer), "editable", TRUE, NULL); g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(variable_value_changed_cb), dialog); col = gtk_tree_view_column_new_with_attributes(_("Value"), renderer, "text", SLR_MODEL_COL_VARAIBLE_VALUE, "visible", SLR_MODEL_COL_VARIABLE_VISIBILITY, NULL); gtk_tree_view_append_column(dialog->instance_view, col); gtk_tree_view_expand_all(dialog->instance_view); } g_signal_connect(G_OBJECT(dialog->dialog), "response", G_CALLBACK(dialog_response_cb), dialog); g_signal_connect(G_OBJECT(dialog->dialog), "destroy", G_CALLBACK(dialog_destroy_cb), dialog); gnc_restore_window_size(GNC_PREFS_GROUP_STARTUP, GTK_WINDOW(dialog->dialog)); dialog->component_id = gnc_register_gui_component (DIALOG_SX_SINCE_LAST_RUN_CM_CLASS, NULL, close_handler, dialog); gnc_gui_component_set_session(dialog->component_id, gnc_get_current_session()); gtk_widget_show_all(dialog->dialog); gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, dialog); g_object_unref(G_OBJECT(builder)); return dialog; }
static CustomerWindow * gnc_customer_new_window (QofBook *bookp, GncCustomer *cust) { CustomerWindow *cw; GtkBuilder *builder; GtkWidget *hbox, *edit; gnc_commodity *currency; GNCPrintAmountInfo print_info; /* * Find an existing window for this customer. If found, bring it to * the front. */ if (cust) { GncGUID customer_guid; customer_guid = *gncCustomerGetGUID(cust); cw = gnc_find_first_gui_component (DIALOG_EDIT_CUSTOMER_CM_CLASS, find_handler, &customer_guid); if (cw) { gtk_window_present (GTK_WINDOW(cw->dialog)); return(cw); } } /* Find the default currency */ if (cust) currency = gncCustomerGetCurrency (cust); else currency = gnc_default_currency (); /* * No existing customer window found. Build a new one. */ cw = g_new0 (CustomerWindow, 1); cw->book = bookp; /* Find the dialog */ builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-customer.glade", "terms_store"); gnc_builder_add_from_file (builder, "dialog-customer.glade", "tax_included_store"); gnc_builder_add_from_file (builder, "dialog-customer.glade", "taxtable_store"); gnc_builder_add_from_file (builder, "dialog-customer.glade", "Customer Dialog"); cw->dialog = GTK_WIDGET (gtk_builder_get_object (builder, "Customer Dialog")); g_object_set_data (G_OBJECT (cw->dialog), "dialog_info", cw); /* Get entry points */ cw->id_entry = GTK_WIDGET (gtk_builder_get_object (builder, "id_entry")); cw->company_entry = GTK_WIDGET (gtk_builder_get_object (builder, "company_entry")); cw->name_entry = GTK_WIDGET (gtk_builder_get_object (builder, "name_entry")); cw->addr1_entry = GTK_WIDGET (gtk_builder_get_object (builder, "addr1_entry")); cw->addr2_entry = GTK_WIDGET (gtk_builder_get_object (builder, "addr2_entry")); cw->addr3_entry = GTK_WIDGET (gtk_builder_get_object (builder, "addr3_entry")); cw->addr4_entry = GTK_WIDGET (gtk_builder_get_object (builder, "addr4_entry")); cw->phone_entry = GTK_WIDGET (gtk_builder_get_object (builder, "phone_entry")); cw->fax_entry = GTK_WIDGET (gtk_builder_get_object (builder, "fax_entry")); cw->email_entry = GTK_WIDGET (gtk_builder_get_object (builder, "email_entry")); cw->shipname_entry = GTK_WIDGET (gtk_builder_get_object (builder, "shipname_entry")); cw->shipaddr1_entry = GTK_WIDGET (gtk_builder_get_object (builder, "shipaddr1_entry")); cw->shipaddr2_entry = GTK_WIDGET (gtk_builder_get_object (builder, "shipaddr2_entry")); cw->shipaddr3_entry = GTK_WIDGET (gtk_builder_get_object (builder, "shipaddr3_entry")); cw->shipaddr4_entry = GTK_WIDGET (gtk_builder_get_object (builder, "shipaddr4_entry")); cw->shipphone_entry = GTK_WIDGET (gtk_builder_get_object (builder, "shipphone_entry")); cw->shipfax_entry = GTK_WIDGET (gtk_builder_get_object (builder, "shipfax_entry")); cw->shipemail_entry = GTK_WIDGET (gtk_builder_get_object (builder, "shipemail_entry")); cw->active_check = GTK_WIDGET (gtk_builder_get_object (builder, "active_check")); cw->taxincluded_menu = GTK_WIDGET (gtk_builder_get_object (builder, "tax_included_menu")); cw->notes_text = GTK_WIDGET (gtk_builder_get_object (builder, "notes_text")); cw->terms_menu = GTK_WIDGET (gtk_builder_get_object (builder, "terms_menu")); cw->taxtable_check = GTK_WIDGET (gtk_builder_get_object (builder, "taxtable_button")); cw->taxtable_menu = GTK_WIDGET (gtk_builder_get_object (builder, "taxtable_menu")); /* Currency */ edit = gnc_currency_edit_new(); gnc_currency_edit_set_currency (GNC_CURRENCY_EDIT(edit), currency); cw->currency_edit = edit; hbox = GTK_WIDGET (gtk_builder_get_object (builder, "currency_box")); gtk_box_pack_start (GTK_BOX (hbox), edit, TRUE, TRUE, 0); /* DISCOUNT: Percentage Value */ edit = gnc_amount_edit_new(); gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT (edit), TRUE); print_info = gnc_integral_print_info (); print_info.max_decimal_places = 5; gnc_amount_edit_set_print_info (GNC_AMOUNT_EDIT (edit), print_info); gnc_amount_edit_set_fraction (GNC_AMOUNT_EDIT (edit), 100000); cw->discount_amount = edit; gtk_widget_show (edit); hbox = GTK_WIDGET (gtk_builder_get_object (builder, "discount_box")); gtk_box_pack_start (GTK_BOX (hbox), edit, TRUE, TRUE, 0); /* CREDIT: Monetary Value */ edit = gnc_amount_edit_new(); print_info = gnc_commodity_print_info (currency, FALSE); gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT (edit), TRUE); gnc_amount_edit_set_print_info (GNC_AMOUNT_EDIT (edit), print_info); gnc_amount_edit_set_fraction (GNC_AMOUNT_EDIT (edit), gnc_commodity_get_fraction (currency)); cw->credit_amount = edit; gtk_widget_show (edit); hbox = GTK_WIDGET (gtk_builder_get_object (builder, "credit_box")); gtk_box_pack_start (GTK_BOX (hbox), edit, TRUE, TRUE, 0); /* Setup signals */ gtk_builder_connect_signals_full( builder, gnc_builder_connect_full_func, cw); /* Setup initial values */ if (cust != NULL) { GtkTextBuffer* text_buffer; GncAddress *addr, *shipaddr; const char *string; cw->dialog_type = EDIT_CUSTOMER; cw->customer_guid = *gncCustomerGetGUID (cust); addr = gncCustomerGetAddr (cust); shipaddr = gncCustomerGetShipAddr (cust); gtk_entry_set_text (GTK_ENTRY (cw->id_entry), gncCustomerGetID (cust)); gtk_entry_set_text (GTK_ENTRY (cw->company_entry), gncCustomerGetName (cust)); /* Setup Address */ gtk_entry_set_text (GTK_ENTRY (cw->name_entry), gncAddressGetName (addr)); gtk_entry_set_text (GTK_ENTRY (cw->addr1_entry), gncAddressGetAddr1 (addr)); gtk_entry_set_text (GTK_ENTRY (cw->addr2_entry), gncAddressGetAddr2 (addr)); gtk_entry_set_text (GTK_ENTRY (cw->addr3_entry), gncAddressGetAddr3 (addr)); gtk_entry_set_text (GTK_ENTRY (cw->addr4_entry), gncAddressGetAddr4 (addr)); gtk_entry_set_text (GTK_ENTRY (cw->phone_entry), gncAddressGetPhone (addr)); gtk_entry_set_text (GTK_ENTRY (cw->fax_entry), gncAddressGetFax (addr)); gtk_entry_set_text (GTK_ENTRY (cw->email_entry), gncAddressGetEmail (addr)); /* Setup Ship-to Address */ gtk_entry_set_text (GTK_ENTRY (cw->shipname_entry), gncAddressGetName (shipaddr)); gtk_entry_set_text (GTK_ENTRY (cw->shipaddr1_entry), gncAddressGetAddr1 (shipaddr)); gtk_entry_set_text (GTK_ENTRY (cw->shipaddr2_entry), gncAddressGetAddr2 (shipaddr)); gtk_entry_set_text (GTK_ENTRY (cw->shipaddr3_entry), gncAddressGetAddr3 (shipaddr)); gtk_entry_set_text (GTK_ENTRY (cw->shipaddr4_entry), gncAddressGetAddr4 (shipaddr)); gtk_entry_set_text (GTK_ENTRY (cw->shipphone_entry), gncAddressGetPhone (shipaddr)); gtk_entry_set_text (GTK_ENTRY (cw->shipfax_entry), gncAddressGetFax (shipaddr)); gtk_entry_set_text (GTK_ENTRY (cw->shipemail_entry), gncAddressGetEmail (shipaddr)); /* Set toggle buttons */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw->active_check), gncCustomerGetActive (cust)); string = gncCustomerGetNotes (cust); text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(cw->notes_text)); gtk_text_buffer_set_text (text_buffer, string, -1); cw->component_id = gnc_register_gui_component (DIALOG_EDIT_CUSTOMER_CM_CLASS, gnc_customer_window_refresh_handler, gnc_customer_window_close_handler, cw); cw->terms = gncCustomerGetTerms (cust); } else { cust = gncCustomerCreate (bookp); cw->customer_guid = *gncCustomerGetGUID (cust); cw->dialog_type = NEW_CUSTOMER; cw->component_id = gnc_register_gui_component (DIALOG_NEW_CUSTOMER_CM_CLASS, gnc_customer_window_refresh_handler, gnc_customer_window_close_handler, cw); /* XXX: get the global-default terms */ cw->terms = NULL; } /* I know that cust exists here -- either passed in or just created */ cw->taxincluded = gncCustomerGetTaxIncluded (cust); gnc_taxincluded_combo (GTK_COMBO_BOX(cw->taxincluded_menu), cw->taxincluded); gnc_billterms_combo (GTK_COMBO_BOX(cw->terms_menu), bookp, TRUE, cw->terms); cw->taxtable = gncCustomerGetTaxTable (cust); gnc_taxtables_combo (GTK_COMBO_BOX(cw->taxtable_menu), bookp, TRUE, cw->taxtable); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw->taxtable_check), gncCustomerGetTaxTableOverride (cust)); gnc_customer_taxtable_check_cb (GTK_TOGGLE_BUTTON (cw->taxtable_check), cw); /* Set up the addr line quickfill */ cw->addr2_quickfill = gnc_get_shared_address_addr2_quickfill(cw->book, ADDR_QUICKFILL); cw->addr3_quickfill = gnc_get_shared_address_addr3_quickfill(cw->book, ADDR_QUICKFILL); cw->addr4_quickfill = gnc_get_shared_address_addr4_quickfill(cw->book, ADDR_QUICKFILL); /* Set the Discount, and Credit amounts */ gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT (cw->discount_amount), gncCustomerGetDiscount (cust)); gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT (cw->credit_amount), gncCustomerGetCredit (cust)); gnc_gui_component_watch_entity_type (cw->component_id, GNC_CUSTOMER_MODULE_NAME, QOF_EVENT_MODIFY | QOF_EVENT_DESTROY); gtk_widget_show_all (cw->dialog); g_object_unref(G_OBJECT(builder)); return cw; }
/*************************** * * * Encodings dialog window * * * **************************/ void gxi_edit_encodings_clicked_cb (GtkButton *button, GncXmlImportData *data) { GtkBuilder *builder; GtkWidget *dialog; GtkListStore *list_store; GtkTreeStore *tree_store; GtkTreeIter iter, parent, *parent_ptr; GList *encodings_bak, *enc_iter; const gchar *encoding; system_encoding_type *system_enc; gpointer enc_ptr; gint i, j; builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "assistant-xml-encoding.glade", "Encodings Dialog"); dialog = GTK_WIDGET(gtk_builder_get_object (builder, "Encodings Dialog")); data->encodings_dialog = dialog; gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, data); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (data->assistant)); data->available_encs_view = GTK_TREE_VIEW (gtk_builder_get_object (builder, "available_encs_view")); data->custom_enc_entry = GTK_WIDGET(gtk_builder_get_object (builder, "custom_enc_entry")); /* set up selected encodings list */ data->selected_encs_view = GTK_TREE_VIEW (gtk_builder_get_object (builder, "selected_encs_view")); list_store = gtk_list_store_new (ENC_NUM_COLS, G_TYPE_STRING, G_TYPE_POINTER); for (enc_iter = data->encodings; enc_iter; enc_iter = enc_iter->next) { encoding = g_quark_to_string (GPOINTER_TO_UINT (enc_iter->data)); gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, ENC_COL_STRING, encoding, ENC_COL_QUARK, enc_iter->data, -1); } gtk_tree_view_insert_column_with_attributes ( data->selected_encs_view, -1, NULL, gtk_cell_renderer_text_new (), "text", ENC_COL_STRING, NULL); gtk_tree_view_set_model (data->selected_encs_view, GTK_TREE_MODEL (list_store)); g_object_unref (list_store); /* set up system encodings list */ data->available_encs_view = GTK_TREE_VIEW (gtk_builder_get_object (builder, "available_encs_view")); tree_store = gtk_tree_store_new (ENC_NUM_COLS, G_TYPE_STRING, G_TYPE_POINTER); for (i = 0, system_enc = system_encodings; i < n_system_encodings; i++, system_enc++) { if (i == 0) { /* first system encoding */ parent_ptr = NULL; } else { parent_ptr = &iter; for (j = 0; j < system_enc->parent; j++) if (gtk_tree_model_iter_parent (GTK_TREE_MODEL (tree_store), &parent, &iter)) { /* go up one level */ iter = parent; } else { /* no parent to toplevel element */ parent_ptr = NULL; } } if (system_enc->encoding) enc_ptr = GUINT_TO_POINTER (g_quark_from_string (system_enc->encoding)); else enc_ptr = NULL; gtk_tree_store_append (tree_store, &iter, parent_ptr); gtk_tree_store_set (tree_store, &iter, ENC_COL_STRING, gettext (system_enc->text), ENC_COL_QUARK, enc_ptr, -1); } gtk_tree_view_insert_column_with_attributes ( data->available_encs_view, -1, NULL, gtk_cell_renderer_text_new (), "text", ENC_COL_STRING, NULL); gtk_tree_view_set_model (data->available_encs_view, GTK_TREE_MODEL (tree_store)); g_object_unref (tree_store); /* run the dialog */ encodings_bak = g_list_copy (data->encodings); if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { g_list_free (encodings_bak); if (!g_list_find (data->encodings, GUINT_TO_POINTER (data->default_encoding))) { /* choose top level encoding then */ data->default_encoding = GPOINTER_TO_UINT (data->encodings->data); } /* update whole page */ gxi_check_file (data); gxi_update_default_enc_combo (data); gxi_update_string_box (data); gxi_update_conversion_forward (data); } else { g_list_free (data->encodings); data->encodings = encodings_bak; } g_object_unref(G_OBJECT(builder)); gtk_widget_destroy (dialog); data->encodings_dialog = NULL; }
int main (int argc, char *argv[]) { signal_user_data_t *ud; GValue *preset; GError *error = NULL; GOptionContext *context; #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #endif if (!g_thread_supported()) g_thread_init(NULL); context = g_option_context_new ("- Transcode media formats"); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); g_option_context_add_group (context, gtk_get_option_group (TRUE)); #if defined(_ENABLE_GST) g_option_context_add_group (context, gst_init_get_option_group ()); #endif g_option_context_parse (context, &argc, &argv, &error); g_option_context_free(context); if (argc > 1 && dvd_device == NULL && argv[1][0] != '-') { dvd_device = argv[1]; } gtk_init (&argc, &argv); gtk_rc_parse_string(hud_rcstyle); g_type_class_unref(g_type_class_ref(GTK_TYPE_BUTTON)); g_object_set(gtk_settings_get_default(), "gtk-button-images", TRUE, NULL); #if !defined(_WIN32) notify_init("HandBrake"); #endif ghb_register_transforms(); ghb_resource_init(); ghb_load_icons(); #if !defined(_WIN32) dbus_g_thread_init(); #endif ghb_udev_init(); ghb_write_pid_file(); ud = g_malloc0(sizeof(signal_user_data_t)); ud->debug = ghb_debug; g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, debug_log_handler, ud); g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, warn_log_handler, ud); //g_log_set_handler ("Gtk", G_LOG_LEVEL_CRITICAL, warn_log_handler, ud); ud->settings = ghb_settings_new(); ud->builder = create_builder_or_die (BUILDER_NAME); // Enable events that alert us to media change events watch_volumes (ud); //GtkWidget *widget = GHB_WIDGET(ud->builder, "PictureDetelecineCustom"); //gtk_entry_set_inner_border(widget, 2); // Since GtkBuilder no longer assigns object ids to widget names // Assign a few that are necessary for style overrides to work GtkWidget *widget; #if defined(_NO_UPDATE_CHECK) widget = GHB_WIDGET(ud->builder, "check_updates_box"); gtk_widget_hide(widget); #endif widget = GHB_WIDGET(ud->builder, "preview_hud"); gtk_widget_set_name(widget, "preview_hud"); widget = GHB_WIDGET(ud->builder, "preview_window"); gtk_widget_set_name(widget, "preview_window"); // Set up the "hud" control overlay for the preview window GtkWidget *draw, *hud, *blender, *align; align = GHB_WIDGET(ud->builder, "preview_window_alignment"); draw = GHB_WIDGET(ud->builder, "preview_image_align"); hud = GHB_WIDGET(ud->builder, "preview_hud"); // Set up compositing for hud blender = ghb_compositor_new(); gtk_container_add(GTK_CONTAINER(align), blender); ghb_compositor_zlist_insert(GHB_COMPOSITOR(blender), draw, 1, 1); ghb_compositor_zlist_insert(GHB_COMPOSITOR(blender), hud, 2, .85); gtk_widget_show(blender); // Redirect stderr to the activity window ghb_preview_init(ud); IoRedirect(ud); ghb_log( "%s - %s - %s", HB_PROJECT_TITLE, HB_PROJECT_BUILD_TITLE, HB_PROJECT_URL_WEBSITE ); ghb_init_dep_map(); // Need to connect x264_options textview buffer to the changed signal // since it can't be done automatically GtkTextView *textview; GtkTextBuffer *buffer; textview = GTK_TEXT_VIEW(GHB_WIDGET (ud->builder, "x264Option")); buffer = gtk_text_view_get_buffer (textview); g_signal_connect(buffer, "changed", (GCallback)x264_entry_changed_cb, ud); ghb_combo_init(ud); g_debug("ud %p\n", ud); g_debug("ud->builder %p\n", ud->builder); bind_audio_tree_model(ud); bind_subtitle_tree_model(ud); bind_presets_tree_model(ud); bind_queue_tree_model(ud); bind_chapter_tree_model(ud); // Connect up the signals to their callbacks // I wrote my own connector so that I could pass user data // to the callbacks. Builder's standard autoconnect doesn't all this. gtk_builder_connect_signals_full (ud->builder, MyConnect, ud); // Load all internal settings ghb_settings_init(ud); // Load the presets files ghb_presets_load(ud); ghb_prefs_load(ud); ghb_prefs_to_ui(ud); gint logLevel; logLevel = ghb_settings_get_int(ud->settings, "LoggingLevel"); ghb_backend_init(logLevel); if (ghb_settings_get_boolean(ud->settings, "hbfd")) { ghb_hbfd(ud, TRUE); } gchar *source = ghb_settings_get_string(ud->settings, "default_source"); ghb_dvd_set_current(source, ud); g_free(source); // Parsing x264 options "" initializes x264 widgets to proper defaults ghb_x264_parse_options(ud, ""); // Populate the presets tree view ghb_presets_list_init(ud, NULL, 0); // Get the first preset name if (arg_preset != NULL) { preset = ghb_parse_preset_path(arg_preset); if (preset) { ghb_select_preset(ud->builder, preset); ghb_value_free(preset); } } else { ghb_select_default_preset(ud->builder); } // Grey out widgets that are dependent on a disabled feature ghb_check_all_depencencies (ud); if (dvd_device != NULL) { // Source overridden from command line option ghb_settings_set_string(ud->settings, "scan_source", dvd_device); g_idle_add((GSourceFunc)ghb_idle_scan, ud); } // Reload and check status of the last saved queue g_idle_add((GSourceFunc)ghb_reload_queue, ud); // Start timer for monitoring libhb status, 500ms g_timeout_add (500, ghb_timer_cb, (gpointer)ud); // Add dvd devices to File menu ghb_volname_cache_init(); g_thread_create((GThreadFunc)ghb_cache_volnames, ud, FALSE, NULL); #if defined(_USE_APP_IND) GtkUIManager * uim = GTK_UI_MANAGER(GHB_OBJECT(ud->builder, "uimanager1")); GtkMenu *ai_menu = GTK_MENU(gtk_ui_manager_get_widget(uim, "/ui/tray_menu")); ud->ai = app_indicator_new("HandBrake", "hb-icon", APP_INDICATOR_CATEGORY_APPLICATION_STATUS); app_indicator_set_menu( ud->ai, ai_menu ); app_indicator_set_label( ud->ai, "", "99.99%"); if (ghb_settings_get_boolean(ud->settings, "show_status")) { app_indicator_set_status( ud->ai, APP_INDICATOR_STATUS_ACTIVE ); } else { app_indicator_set_status( ud->ai, APP_INDICATOR_STATUS_PASSIVE ); } GtkStatusIcon *si; si = GTK_STATUS_ICON(GHB_OBJECT(ud->builder, "hb_status")); gtk_status_icon_set_visible(si, FALSE ); #else GtkStatusIcon *si; si = GTK_STATUS_ICON(GHB_OBJECT(ud->builder, "hb_status")); gtk_status_icon_set_visible(si, ghb_settings_get_boolean(ud->settings, "show_status")); #if GTK_CHECK_VERSION(2, 16, 0) gtk_status_icon_set_has_tooltip(si, TRUE); g_signal_connect(si, "query-tooltip", status_icon_query_tooltip_cb, ud); #else gtk_status_icon_set_tooltip(si, "HandBrake"); #endif #endif // Ugly hack to keep subtitle table from bouncing around as I change // which set of controls are visible GtkRequisition req; gint width, height; widget = GHB_WIDGET(ud->builder, "SrtCodeset"); gtk_widget_size_request( widget, &req ); height = req.height; widget = GHB_WIDGET(ud->builder, "srt_code_label"); gtk_widget_size_request( widget, &req ); height += req.height; widget = GHB_WIDGET(ud->builder, "subtitle_table"); gtk_widget_set_size_request(widget, -1, height); widget = GHB_WIDGET (ud->builder, "hb_window"); GdkGeometry geo = { -1, -1, 1024, 768, -1, -1, 10, 10, 0, 0, GDK_GRAVITY_NORTH_WEST }; GdkWindowHints geo_mask; geo_mask = GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE | GDK_HINT_BASE_SIZE; gtk_window_set_geometry_hints( GTK_WINDOW(widget), widget, &geo, geo_mask); width = ghb_settings_get_int(ud->settings, "window_width"); height = ghb_settings_get_int(ud->settings, "window_height"); gtk_window_resize(GTK_WINDOW(widget), width, height); gtk_widget_show(widget); /* * Filter objects in GtkBuilder xml * Unfortunately, GtkFilter is poorly supported by GtkBuilder, * so a lot of the setup must happen in code. SourceFilterAll SourceFilterVideo SourceFilterTS SourceFilterMPG SourceFilterEVO SourceFilterVOB SourceFilterMKV SourceFilterMP4 SourceFilterAVI SourceFilterMOV SourceFilterOGG SourceFilterFLV SourceFilterWMV */ // Add filters to source chooser GtkFileFilter *filter; GtkFileChooser *chooser; chooser = GTK_FILE_CHOOSER(GHB_WIDGET(ud->builder, "source_dialog")); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterAll")); gtk_file_filter_set_name(filter, "All"); gtk_file_filter_add_pattern(filter, "*"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterVideo")); gtk_file_filter_set_name(filter, "Video"); gtk_file_filter_add_mime_type(filter, "video/*"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterTS")); gtk_file_filter_set_name(filter, "TS"); gtk_file_filter_add_pattern(filter, "*.ts"); gtk_file_filter_add_pattern(filter, "*.TS"); gtk_file_filter_add_pattern(filter, "*.m2ts"); gtk_file_filter_add_pattern(filter, "*.M2TS"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterMPG")); gtk_file_filter_set_name(filter, "MPG"); gtk_file_filter_add_pattern(filter, "*.mpg"); gtk_file_filter_add_pattern(filter, "*.MPG"); gtk_file_filter_add_pattern(filter, "*.mepg"); gtk_file_filter_add_pattern(filter, "*.MEPG"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterEVO")); gtk_file_filter_set_name(filter, "EVO"); gtk_file_filter_add_pattern(filter, "*.evo"); gtk_file_filter_add_pattern(filter, "*.EVO"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterVOB")); gtk_file_filter_set_name(filter, "VOB"); gtk_file_filter_add_pattern(filter, "*.vob"); gtk_file_filter_add_pattern(filter, "*.VOB"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterMKV")); gtk_file_filter_set_name(filter, "MKV"); gtk_file_filter_add_pattern(filter, "*.mkv"); gtk_file_filter_add_pattern(filter, "*.MKV"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterMP4")); gtk_file_filter_set_name(filter, "MP4"); gtk_file_filter_add_pattern(filter, "*.mp4"); gtk_file_filter_add_pattern(filter, "*.MP4"); gtk_file_filter_add_pattern(filter, "*.m4v"); gtk_file_filter_add_pattern(filter, "*.M4V"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterMOV")); gtk_file_filter_set_name(filter, "MOV"); gtk_file_filter_add_pattern(filter, "*.mov"); gtk_file_filter_add_pattern(filter, "*.MOV"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterAVI")); gtk_file_filter_set_name(filter, "AVI"); gtk_file_filter_add_pattern(filter, "*.avi"); gtk_file_filter_add_pattern(filter, "*.AVI"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterOGG")); gtk_file_filter_set_name(filter, "OGG"); gtk_file_filter_add_pattern(filter, "*.ogg"); gtk_file_filter_add_pattern(filter, "*.OGG"); gtk_file_filter_add_pattern(filter, "*.ogv"); gtk_file_filter_add_pattern(filter, "*.OGV"); gtk_file_filter_add_pattern(filter, "*.ogm"); gtk_file_filter_add_pattern(filter, "*.OGM"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterFLV")); gtk_file_filter_set_name(filter, "FLV"); gtk_file_filter_add_pattern(filter, "*.flv"); gtk_file_filter_add_pattern(filter, "*.FLV"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterWMV")); gtk_file_filter_set_name(filter, "WMV"); gtk_file_filter_add_pattern(filter, "*.wmv"); gtk_file_filter_add_pattern(filter, "*.WMV"); gtk_file_chooser_add_filter(chooser, filter); // Gtk has a really stupid bug. If the file chooser is showing // hidden files AND there is no filter set, it will not select // the filename when gtk_file_chooser_set_filename is called. // So add a completely unnessary filter to prevent this behavior. filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterAll")); gtk_file_chooser_set_filter(chooser, filter); PangoFontDescription *font_desc; font_desc = pango_font_description_from_string ("monospace 10"); textview = GTK_TEXT_VIEW(GHB_WIDGET (ud->builder, "activity_view")); gtk_widget_modify_font(GTK_WIDGET(textview), font_desc); pango_font_description_free (font_desc); // Everything should be go-to-go. Lets rock! gtk_main (); gtk_status_icon_set_visible(si, FALSE); ghb_backend_close(); if (ud->queue) ghb_value_free(ud->queue); ghb_value_free(ud->settings); g_io_channel_unref(ud->activity_log); ghb_settings_close(); #if !defined(_WIN32) notify_uninit(); #endif g_free(ud); return 0; }
static PaymentWindow * new_payment_window (GncOwner *owner, QofBook *book, GncInvoice *invoice) { PaymentWindow *pw; GtkBuilder *builder; GtkWidget *box, *label, *credit_box, *debit_box; GtkTreeSelection *selection; GtkTreeViewColumn *column; GtkCellRenderer *renderer; char * cm_class = (gncOwnerGetType (owner) == GNC_OWNER_CUSTOMER ? DIALOG_PAYMENT_CUSTOMER_CM_CLASS : DIALOG_PAYMENT_VENDOR_CM_CLASS); /* * Find an existing payment window. If found, bring it to * the front. If we have an actual owner, then set it in * the window. */ pw = gnc_find_first_gui_component (cm_class, find_handler, NULL); if (pw) { if (gncOwnerIsValid(owner)) gnc_payment_set_owner (pw, owner); // Reset the setting about the pre-existing TXN pw->pre_existing_txn = NULL; gtk_window_present (GTK_WINDOW(pw->dialog)); return(pw); } /* Ok, we need a new window */ pw = g_new0 (PaymentWindow, 1); pw->book = book; gncOwnerCopy (owner, &(pw->owner)); /* Compute the post-to account types */ pw->acct_types = gncOwnerGetAccountTypesList (owner); if (gncOwnerIsValid(owner)) pw->acct_commodities = gncOwnerGetCommoditiesList (owner); /* Open and read the Glade File */ builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-payment.glade", "docs_list_hor_adj"); gnc_builder_add_from_file (builder, "dialog-payment.glade", "docs_list_vert_adj"); gnc_builder_add_from_file (builder, "dialog-payment.glade", "docs_list_model"); gnc_builder_add_from_file (builder, "dialog-payment.glade", "post_combo_model"); gnc_builder_add_from_file (builder, "dialog-payment.glade", "Payment Dialog"); pw->dialog = GTK_WIDGET (gtk_builder_get_object (builder, "Payment Dialog")); /* Grab the widgets and build the dialog */ pw->payment_warning = GTK_WIDGET (gtk_builder_get_object (builder, "payment_warning")); pw->ok_button = GTK_WIDGET (gtk_builder_get_object (builder, "okbutton")); pw->num_entry = GTK_WIDGET (gtk_builder_get_object (builder, "num_entry")); pw->memo_entry = GTK_WIDGET (gtk_builder_get_object (builder, "memo_entry")); pw->post_combo = GTK_WIDGET (gtk_builder_get_object (builder, "post_combo")); gtk_combo_box_set_entry_text_column( GTK_COMBO_BOX( pw->post_combo ), 0 ); gnc_cbwe_require_list_item(GTK_COMBO_BOX(pw->post_combo)); label = GTK_WIDGET (gtk_builder_get_object (builder, "owner_label")); box = GTK_WIDGET (gtk_builder_get_object (builder, "owner_box")); pw->owner_choice = gnc_owner_select_create (label, box, book, owner); /* Some terminology: * Invoices are paid, credit notes are refunded. * A customer payment is a credit action, paying a vendor is debit * * So depending on the owner the payment amount should be considered * credit (customer) or debit (vendor/employee) and refunds should be * considered debit (customer) or credit (vendor/employee). * For visual consistency, the dialog box will always show a payment and * a refund field. Internally they are treated as credit or debit depending * on the owner type. */ if (gncOwnerGetType (owner) == GNC_OWNER_CUSTOMER) { debit_box = GTK_WIDGET (gtk_builder_get_object (builder, "amount_refund_box")); credit_box = GTK_WIDGET (gtk_builder_get_object (builder, "amount_payment_box")); } else { debit_box = GTK_WIDGET (gtk_builder_get_object (builder, "amount_payment_box")); credit_box = GTK_WIDGET (gtk_builder_get_object (builder, "amount_refund_box")); } pw->amount_debit_edit = gnc_amount_edit_new (); gtk_box_pack_start (GTK_BOX (debit_box), pw->amount_debit_edit, TRUE, TRUE, 0); gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT (pw->amount_debit_edit), TRUE); gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT (pw->amount_debit_edit), gnc_numeric_zero()); g_signal_connect(G_OBJECT(gnc_amount_edit_gtk_entry(GNC_AMOUNT_EDIT(pw->amount_debit_edit))), "focus-out-event", G_CALLBACK(gnc_payment_leave_amount_cb), pw); pw->amount_credit_edit = gnc_amount_edit_new (); gtk_box_pack_start (GTK_BOX (credit_box), pw->amount_credit_edit, TRUE, TRUE, 0); gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT (pw->amount_credit_edit), TRUE); gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT (pw->amount_credit_edit), gnc_numeric_zero()); g_signal_connect(G_OBJECT(gnc_amount_edit_gtk_entry(GNC_AMOUNT_EDIT(pw->amount_credit_edit))), "focus-out-event", G_CALLBACK(gnc_payment_leave_amount_cb), pw); box = GTK_WIDGET (gtk_builder_get_object (builder, "date_box")); pw->date_edit = gnc_date_edit_new (time(NULL), FALSE, FALSE); gtk_box_pack_start (GTK_BOX (box), pw->date_edit, TRUE, TRUE, 0); pw->docs_list_tree_view = GTK_WIDGET (gtk_builder_get_object (builder, "docs_list_tree_view")); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(pw->docs_list_tree_view)); gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE); /* Configure date column */ renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_get_column (GTK_TREE_VIEW (pw->docs_list_tree_view), 0); gtk_tree_view_column_pack_start (column, renderer, TRUE); tree_view_column_set_default_width (GTK_TREE_VIEW (pw->docs_list_tree_view), column, "31-12-2013"); gtk_tree_view_column_set_cell_data_func (column, renderer, (GtkTreeCellDataFunc) print_date, NULL, NULL); /* Configure document number column */ column = gtk_tree_view_get_column (GTK_TREE_VIEW (pw->docs_list_tree_view), 1); tree_view_column_set_default_width (GTK_TREE_VIEW (pw->docs_list_tree_view), column, "INV2013-016"); /* Configure document type column */ column = gtk_tree_view_get_column (GTK_TREE_VIEW (pw->docs_list_tree_view), 2); tree_view_column_set_default_width (GTK_TREE_VIEW (pw->docs_list_tree_view), column, _("Credit Note")); /* Configure debit column */ column = gtk_tree_view_get_column (GTK_TREE_VIEW (pw->docs_list_tree_view), 3); tree_view_column_set_default_width (GTK_TREE_VIEW (pw->docs_list_tree_view), column, "11,999.00"); /* Configure credit column */ column = gtk_tree_view_get_column (GTK_TREE_VIEW (pw->docs_list_tree_view), 4); tree_view_column_set_default_width (GTK_TREE_VIEW (pw->docs_list_tree_view), column, "11,999.00"); gtk_tree_sortable_set_sort_column_id ( GTK_TREE_SORTABLE (gtk_tree_view_get_model (GTK_TREE_VIEW (pw->docs_list_tree_view))), 0, GTK_SORT_ASCENDING); box = GTK_WIDGET (gtk_builder_get_object (builder, "acct_window")); pw->acct_tree = GTK_WIDGET(gnc_tree_view_account_new (FALSE)); gtk_container_add (GTK_CONTAINER (box), pw->acct_tree); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(pw->acct_tree), FALSE); gnc_payment_set_account_types (GNC_TREE_VIEW_ACCOUNT (pw->acct_tree)); /* Set the dialog for the 'new' owner. * Note that this also sets the post account tree. */ gnc_payment_dialog_owner_changed(pw); /* Set the dialog for the 'new' invoice */ pw->invoice = invoice; if (invoice) { Account *postacct = gncInvoiceGetPostedAcc (invoice); if (postacct) { gchar *acct_string = gnc_account_get_full_name (postacct); gnc_cbwe_set_by_string(GTK_COMBO_BOX(pw->post_combo), acct_string); gnc_payment_dialog_post_to_changed_cb (pw->post_combo, pw); g_free(acct_string); } } /* Setup signals */ gtk_builder_connect_signals_full( builder, gnc_builder_connect_full_func, pw); g_signal_connect (G_OBJECT (pw->owner_choice), "changed", G_CALLBACK (gnc_payment_dialog_owner_changed_cb), pw); g_signal_connect (G_OBJECT (pw->acct_tree), "row-activated", G_CALLBACK (gnc_payment_acct_tree_row_activated_cb), pw); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(pw->acct_tree)); g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (gnc_payment_dialog_xfer_acct_changed_cb), pw); /* Register with the component manager */ pw->component_id = gnc_register_gui_component (cm_class, gnc_payment_window_refresh_handler, gnc_payment_window_close_handler, pw); /* Watch for any new or changed accounts */ gnc_gui_component_watch_entity_type (pw->component_id, GNC_ID_ACCOUNT, QOF_EVENT_CREATE | QOF_EVENT_MODIFY | QOF_EVENT_DESTROY); /* Show it all */ gtk_widget_show_all (pw->dialog); g_object_unref(G_OBJECT(builder)); // The customer choice widget should have keyboard focus if (GNC_IS_GENERAL_SEARCH(pw->owner_choice)) { gnc_general_search_grab_focus(GNC_GENERAL_SEARCH(pw->owner_choice)); } /* Reflect if the payment could complete now */ gnc_payment_window_check_payment (pw); /* Warn the user if they have no valid post-to accounts */ { const gchar *text; const char *acct_type; text = gtk_entry_get_text(GTK_ENTRY (gtk_bin_get_child(GTK_BIN (GTK_COMBO_BOX(pw->post_combo))))); if (!text || g_strcmp0 (text, "") == 0) { /* The code below assumes there will only be one account type. * Let's assert this to protect from potential future changes. */ g_assert (g_list_length (pw->acct_types) == 1); acct_type = xaccAccountGetTypeStr(GPOINTER_TO_INT(pw->acct_types->data)); gnc_warning_dialog(pw->dialog, _("You have no valid \"Post To\" accounts. " "Please create an account of type \"%s\" " "before you continue to process this payment. " "Perhaps you want to create an Invoice or " "Bill first?"), acct_type); } } return pw; }
static GncTaxTable * new_tax_table_dialog (TaxTableWindow *ttw, gboolean new_table, GncTaxTableEntry *entry, const char *name) { GncTaxTable *created_table = NULL; NewTaxTable *ntt; GtkBuilder *builder; GtkWidget *box, *widget, *combo; gboolean done; gint response, index; if (!ttw) return NULL; if (new_table && entry) return NULL; ntt = g_new0 (NewTaxTable, 1); ntt->ttw = ttw; ntt->entry = entry; ntt->new_table = new_table; if (entry) ntt->type = gncTaxTableEntryGetType (entry); else ntt->type = GNC_AMT_TYPE_PERCENT; /* Open and read the Glade File */ builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-tax-table.glade", "type_liststore"); gnc_builder_add_from_file (builder, "dialog-tax-table.glade", "New Tax Table Dialog"); ntt->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "New Tax Table Dialog")); ntt->name_entry = GTK_WIDGET(gtk_builder_get_object (builder, "name_entry")); if (name) gtk_entry_set_text (GTK_ENTRY (ntt->name_entry), name); /* Create the menu */ combo = GTK_WIDGET(gtk_builder_get_object (builder, "type_combobox")); index = ntt->type ? ntt->type : GNC_AMT_TYPE_VALUE; gtk_combo_box_set_active(GTK_COMBO_BOX(combo), index - 1); g_signal_connect (combo, "changed", G_CALLBACK (combo_changed), ntt); /* Attach our own widgets */ box = GTK_WIDGET(gtk_builder_get_object (builder, "amount_box")); ntt->amount_entry = widget = gnc_amount_edit_new (); gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT (widget), TRUE); gnc_amount_edit_set_fraction (GNC_AMOUNT_EDIT (widget), 100000); gtk_box_pack_start (GTK_BOX (box), widget, TRUE, TRUE, 0); box = GTK_WIDGET(gtk_builder_get_object (builder, "acct_window")); ntt->acct_tree = GTK_WIDGET(gnc_tree_view_account_new (FALSE)); gtk_container_add (GTK_CONTAINER (box), ntt->acct_tree); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(ntt->acct_tree), FALSE); /* Make 'enter' do the right thing */ gtk_entry_set_activates_default(GTK_ENTRY (gnc_amount_edit_gtk_entry (GNC_AMOUNT_EDIT (ntt->amount_entry))), TRUE); /* Fix mnemonics for generated target widgets */ widget = GTK_WIDGET(gtk_builder_get_object (builder, "value_label")); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), ntt->amount_entry); widget = GTK_WIDGET(gtk_builder_get_object (builder, "account_label")); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), ntt->acct_tree); /* Fill in the widgets appropriately */ if (entry) { gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT (ntt->amount_entry), gncTaxTableEntryGetAmount (entry)); gnc_tree_view_account_set_selected_account (GNC_TREE_VIEW_ACCOUNT (ntt->acct_tree), gncTaxTableEntryGetAccount (entry)); } /* Set our parent */ gtk_window_set_transient_for (GTK_WINDOW(ntt->dialog), GTK_WINDOW(ttw->dialog)); /* Setup signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, ntt); /* Show what we should */ gtk_widget_show_all (ntt->dialog); if (new_table == FALSE) { gtk_widget_hide (GTK_WIDGET(gtk_builder_get_object (builder, "table_title"))); gtk_widget_hide (GTK_WIDGET(gtk_builder_get_object (builder, "table_name"))); gtk_widget_hide (GTK_WIDGET(gtk_builder_get_object (builder, "spacer"))); gtk_widget_hide (ntt->name_entry); /* Tables are great for layout, but a pain when you hide widgets */ widget = GTK_WIDGET(gtk_builder_get_object (builder, "ttd_table")); gtk_table_set_row_spacing (GTK_TABLE(widget), 0, 0); gtk_table_set_row_spacing (GTK_TABLE(widget), 1, 0); gtk_table_set_row_spacing (GTK_TABLE(widget), 2, 0); gtk_widget_grab_focus (gnc_amount_edit_gtk_entry (GNC_AMOUNT_EDIT (ntt->amount_entry))); } else gtk_widget_grab_focus (ntt->name_entry); /* Display the dialog now that we're done manipulating it */ gtk_widget_show (ntt->dialog); done = FALSE; while (!done) { response = gtk_dialog_run (GTK_DIALOG (ntt->dialog)); switch (response) { case GTK_RESPONSE_OK: if (new_tax_table_ok_cb (ntt)) { created_table = ntt->created_table; done = TRUE; } break; default: done = TRUE; break; } } g_object_unref(G_OBJECT(builder)); gtk_widget_destroy(ntt->dialog); g_free(ntt); return created_table; }
/** At dialog creation time, this function will be called once per * adds-in. It performs the work of adding the page into the main * dialog. It handles both the case of a full page being added to * the dialog, and a partial page being added. * * @internal * * @param data A pointer to an addition data structure. * * @param user_data A pointer to the dialog. */ static void gnc_preferences_build_page (gpointer data, gpointer user_data) { GtkBuilder *builder; GtkWidget *dialog, *existing_content, *new_content, *label; GtkNotebook *notebook; addition *add_in; struct copy_data copydata; gint rows, cols; gchar **widgetname; gint i; ENTER("add_in %p, dialog %p", data, user_data); add_in = (addition *)data; dialog = user_data; DEBUG("Opening %s to get %s", add_in->filename, add_in->widgetname); builder = gtk_builder_new(); /* Adjustments etc... must come before dialog information */ widgetname = g_strsplit(add_in->widgetname, ",", -1); for (i = 0; widgetname[i]; i++) { DEBUG("Opening %s to get content %s", add_in->filename, widgetname[i]); gnc_builder_add_from_file (builder, add_in->filename, widgetname[i]); } DEBUG("Widget Content is %s", widgetname[i - 1]); new_content = GTK_WIDGET(gtk_builder_get_object (builder, widgetname[i - 1])); g_strfreev(widgetname); DEBUG("done"); /* Add to the list of interesting widgets */ gnc_prefs_build_widget_table(builder, dialog); /* Connect the signals in this glade file. The dialog is passed in * so the the callback can find "interesting" widgets from other * glade files if necessary (via the GPREFS_WIDGET_HASH hash table). */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, dialog); /* Prepare for recursion */ notebook = g_object_get_data(G_OBJECT(dialog), NOTEBOOK); if (add_in->full_page) { label = gtk_label_new(add_in->tabname); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_notebook_append_page(notebook, new_content, label); g_object_unref(G_OBJECT(builder)); LEAVE("appended page"); return; } /* Copied tables must match the size of the main table */ if (!GTK_IS_TABLE(new_content)) { g_critical("The object name %s in file %s is not a GtkTable. It cannot " "be added to the preferences dialog.", add_in->widgetname, add_in->filename); g_object_unref(G_OBJECT(builder)); LEAVE(""); return; } g_object_get(G_OBJECT(new_content), "n-columns", &cols, NULL); if (cols != 4) { g_critical("The table %s in file %s does not have four columns. It cannot " "be added to the preferences dialog.", add_in->widgetname, add_in->filename); g_object_unref(G_OBJECT(builder)); LEAVE(""); return; } /* Does the page exist or must we create it */ existing_content = gnc_prefs_find_page(notebook, add_in->tabname); if (!existing_content) { /* No existing content with this name. Create a blank page */ rows = 0; existing_content = gtk_table_new(0, 4, FALSE); gtk_container_set_border_width(GTK_CONTAINER(existing_content), 6); label = gtk_label_new(add_in->tabname); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_notebook_append_page(notebook, existing_content, label); gtk_widget_show_all(existing_content); DEBUG("created new page %s, appended it", add_in->tabname); } else { g_object_get(G_OBJECT(existing_content), "n-rows", &rows, NULL); DEBUG("found existing page %s", add_in->tabname); } /* Maybe add a spacer row */ DEBUG("rows is %d", rows); if (rows > 0) { label = gtk_label_new(""); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(existing_content), label, 0, 1, rows, rows + 1, GTK_FILL, GTK_FILL, 0, 0); rows++; } /* Now copy all the entries in the table */ copydata.table_from = GTK_TABLE(new_content); copydata.table_to = GTK_TABLE(existing_content); copydata.row_offset = rows; gtk_container_foreach(GTK_CONTAINER(new_content), gnc_prefs_move_table_entry, ©data); g_object_ref_sink(new_content); g_object_unref(G_OBJECT(builder)); LEAVE("added content to page"); }
gboolean gnc_dialog_date_acct_parented (GtkWidget *parent, const char *message, const char *date_label_message, const char *acct_label_message, gboolean ok_is_default, GList * acct_types, QofBook *book, /* Returned Data... */ Timespec *date, Account **acct) { DialogDateClose *ddc; GtkLabel *label; GtkWidget *date_box; GtkWidget *acct_box; GtkBuilder *builder; gboolean retval; if (!message || !date_label_message || !acct_label_message || !acct_types || !book || !date || !acct) return FALSE; ddc = g_new0 (DialogDateClose, 1); ddc->ts = date; ddc->book = book; ddc->acct_types = acct_types; ddc->acct = *acct; builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-date-close.glade", "date_account_dialog"); ddc->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "date_account_dialog")); // Set the style context for this dialog so it can be easily manipulated with css gnc_widget_set_style_context (GTK_WIDGET(ddc->dialog), "GncDateCloseDialog"); acct_box = GTK_WIDGET(gtk_builder_get_object (builder, "acct_hbox")); ddc->acct_combo = gnc_account_sel_new(); if (*acct) gnc_account_sel_set_account (GNC_ACCOUNT_SEL(ddc->acct_combo), *acct, FALSE); gtk_box_pack_start (GTK_BOX(acct_box), ddc->acct_combo, TRUE, TRUE, 0); date_box = GTK_WIDGET(gtk_builder_get_object (builder, "date_hbox")); ddc->date = gnc_date_edit_new (time(NULL), FALSE, FALSE); gtk_box_pack_start (GTK_BOX(date_box), ddc->date, TRUE, TRUE, 0); if (parent) gtk_window_set_transient_for (GTK_WINDOW(ddc->dialog), GTK_WINDOW(parent)); /* Set the labels */ label = GTK_LABEL (gtk_builder_get_object (builder, "top_msg_label")); gtk_label_set_text (label, message); label = GTK_LABEL (gtk_builder_get_object (builder, "date_label")); gtk_label_set_text (label, date_label_message); label = GTK_LABEL (gtk_builder_get_object (builder, "acct_label")); gtk_label_set_text (label, acct_label_message); /* Set the date widget */ gnc_date_edit_set_time_ts (GNC_DATE_EDIT (ddc->date), *date); /* Setup the account widget */ fill_in_acct_info (ddc, FALSE); /* Setup signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, ddc); gtk_widget_show_all (ddc->dialog); gtk_widget_hide (GTK_WIDGET(gtk_builder_get_object (builder, "postdate_label"))); gtk_widget_hide (GTK_WIDGET(gtk_builder_get_object (builder, "post_date_box"))); gtk_widget_hide (GTK_WIDGET(gtk_builder_get_object (builder, "memo_entry"))); gtk_widget_hide (GTK_WIDGET(gtk_builder_get_object (builder, "memo_label"))); ddc->retval = FALSE; while (gtk_dialog_run (GTK_DIALOG (ddc->dialog)) == GTK_RESPONSE_OK) { /* If response is OK but flag is not set, try again */ if (ddc->retval) break; } g_object_unref(G_OBJECT(builder)); gtk_widget_destroy(ddc->dialog); retval = ddc->retval; *acct = ddc->acct; g_free (ddc); return retval; }
gboolean gnc_ab_enter_daterange(GtkWidget *parent, const char *heading, Timespec *from_date, gboolean *last_retv_date, gboolean *first_possible_date, Timespec *to_date, gboolean *to_now) { GtkBuilder *builder; GtkWidget *dialog; GtkWidget *heading_label; GtkWidget *first_button; GtkWidget *last_retrieval_button; GtkWidget *now_button; DaterangeInfo info; gint result; ENTER(""); builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-ab.glade", "aqbanking_date_range_dialog"); dialog = GTK_WIDGET(gtk_builder_get_object (builder, "aqbanking_date_range_dialog")); /* Connect the signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, &info ); if (parent) gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(parent)); heading_label = GTK_WIDGET(gtk_builder_get_object (builder, "heading_label")); first_button = GTK_WIDGET(gtk_builder_get_object (builder, "first_button")); last_retrieval_button = GTK_WIDGET(gtk_builder_get_object (builder, "last_retrieval_button")); info.enter_from_button = GTK_WIDGET(gtk_builder_get_object (builder, "enter_from_button")); now_button = GTK_WIDGET(gtk_builder_get_object (builder, "now_button")); info.enter_to_button = GTK_WIDGET(gtk_builder_get_object (builder, "enter_to_button")); info.from_dateedit = gnc_date_edit_new_ts(*from_date, FALSE, FALSE); gtk_container_add(GTK_CONTAINER(gtk_builder_get_object (builder, "enter_from_box")), info.from_dateedit); gtk_widget_show(info.from_dateedit); info.to_dateedit = gnc_date_edit_new_ts(*to_date, FALSE, FALSE); gtk_container_add(GTK_CONTAINER(gtk_builder_get_object (builder, "enter_to_box")), info.to_dateedit); gtk_widget_show(info.to_dateedit); if (*last_retv_date) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(last_retrieval_button), TRUE); } else { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(first_button), TRUE); gtk_widget_set_sensitive(last_retrieval_button, FALSE); } gtk_widget_set_sensitive(info.from_dateedit, FALSE); gtk_widget_set_sensitive(info.to_dateedit, FALSE); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); if (heading) gtk_label_set_text(GTK_LABEL(heading_label), heading); gtk_widget_show(dialog); result = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_hide(dialog); if (result == GTK_RESPONSE_OK) { *from_date = gnc_date_edit_get_date_ts( GNC_DATE_EDIT(info.from_dateedit)); *last_retv_date = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(last_retrieval_button)); *first_possible_date = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(first_button)); *to_date = gnc_date_edit_get_date_ts( GNC_DATE_EDIT(info.to_dateedit)); *to_now = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(now_button)); } g_object_unref(G_OBJECT(builder)); gtk_widget_destroy(dialog); LEAVE(""); return result == GTK_RESPONSE_OK; }
static JobWindow * gnc_job_new_window (QofBook *bookp, GncOwner *owner, GncJob *job) { JobWindow *jw; GtkBuilder *builder; GtkWidget *owner_box, *owner_label; /* * Find an existing window for this job. If found, bring it to * the front. */ if (job) { GncGUID job_guid; job_guid = *gncJobGetGUID (job); jw = gnc_find_first_gui_component (DIALOG_EDIT_JOB_CM_CLASS, find_handler, &job_guid); if (jw) { gtk_window_present (GTK_WINDOW(jw->dialog)); return(jw); } } /* * No existing job window found. Build a new one. */ jw = g_new0 (JobWindow, 1); jw->book = bookp; gncOwnerCopy (owner, &(jw->owner)); /* save it off now, we know it's valid */ /* Load the Glade File */ builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-job.glade", "Job Dialog"); /* Find the dialog */ jw->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "Job Dialog")); /* Get entry points */ jw->id_entry = GTK_WIDGET(gtk_builder_get_object (builder, "id_entry")); jw->name_entry = GTK_WIDGET(gtk_builder_get_object (builder, "name_entry")); jw->desc_entry = GTK_WIDGET(gtk_builder_get_object (builder, "desc_entry")); jw->active_check = GTK_WIDGET(gtk_builder_get_object (builder, "active_check")); owner_box = GTK_WIDGET(gtk_builder_get_object (builder, "customer_hbox")); owner_label = GTK_WIDGET(gtk_builder_get_object (builder, "owner_label")); /* Setup signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, jw); /* Set initial entries */ if (job != NULL) { jw->job_guid = *gncJobGetGUID (job); jw->dialog_type = EDIT_JOB; jw->cust_edit = gnc_owner_edit_create (owner_label, owner_box, bookp, owner); gtk_entry_set_text (GTK_ENTRY (jw->id_entry), gncJobGetID (job)); gtk_entry_set_text (GTK_ENTRY (jw->name_entry), gncJobGetName (job)); gtk_entry_set_text (GTK_ENTRY (jw->desc_entry), gncJobGetReference (job)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (jw->active_check), gncJobGetActive (job)); jw->component_id = gnc_register_gui_component (DIALOG_EDIT_JOB_CM_CLASS, gnc_job_window_refresh_handler, gnc_job_window_close_handler, jw); } else { job = gncJobCreate (bookp); gncJobSetOwner (job, owner); jw->job_guid = *gncJobGetGUID (job); jw->dialog_type = NEW_JOB; /* If we are passed a real owner, don't allow the user to change it */ if (owner->owner.undefined) { jw->cust_edit = gnc_owner_edit_create (owner_label, owner_box, bookp, owner); } else { jw->cust_edit = gnc_owner_select_create (owner_label, owner_box, bookp, owner); } jw->component_id = gnc_register_gui_component (DIALOG_NEW_JOB_CM_CLASS, gnc_job_window_refresh_handler, gnc_job_window_close_handler, jw); } gnc_job_name_changed_cb (NULL, jw); gnc_gui_component_watch_entity_type (jw->component_id, GNC_JOB_MODULE_NAME, QOF_EVENT_MODIFY | QOF_EVENT_DESTROY); gtk_widget_show_all (jw->dialog); // The job name should have keyboard focus gtk_widget_grab_focus(jw->name_entry); // Or should the owner field have focus? // if (GNC_IS_GENERAL_SEARCH(jw->cust_edit)) // { // gnc_general_search_grab_focus(GNC_GENERAL_SEARCH(jw->cust_edit)); // } g_object_unref(G_OBJECT(builder)); return jw; }
GncABTransDialog * gnc_ab_trans_dialog_new(GtkWidget *parent, AB_ACCOUNT *ab_acc, gint commodity_scu, GncABTransType trans_type, GList *templates) { GncABTransDialog *td; GtkBuilder *builder; const gchar *ab_ownername; const gchar *ab_accountnumber; const gchar *ab_bankname; const gchar *ab_bankcode; GtkWidget *heading_label; GtkWidget *recp_name_heading; GtkWidget *recp_account_heading; GtkWidget *recp_bankcode_heading; GtkWidget *amount_hbox; GtkWidget *orig_name_heading; GtkWidget *orig_name_label; GtkWidget *orig_account_heading; GtkWidget *orig_account_label; GtkWidget *orig_bankname_heading; GtkWidget *orig_bankname_label; GtkWidget *orig_bankcode_heading; GtkWidget *orig_bankcode_label; GtkCellRenderer *renderer; GtkTreeViewColumn *column; g_return_val_if_fail(ab_acc, NULL); ab_ownername = AB_Account_GetOwnerName(ab_acc); if (!ab_ownername) ab_ownername = ""; ab_accountnumber = AB_Account_GetAccountNumber(ab_acc); ab_bankcode = AB_Account_GetBankCode(ab_acc); ab_bankname = AB_Account_GetBankName(ab_acc); if (!ab_bankname || !*ab_bankname) ab_bankname = _("(unknown)"); td = g_new0(GncABTransDialog, 1); td->parent = parent; td->ab_acc = ab_acc; td->trans_type = trans_type; #if HAVE_KTOBLZCHECK_H td->blzcheck = AccountNumberCheck_new(); #endif builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-ab.glade", "Transaction Dialog"); td->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "Transaction Dialog")); if (parent) gtk_window_set_transient_for(GTK_WINDOW(td->dialog), GTK_WINDOW(parent)); /* Extract widgets */ heading_label = GTK_WIDGET(gtk_builder_get_object (builder, "heading_label")); recp_name_heading = GTK_WIDGET(gtk_builder_get_object (builder, "recp_name_heading")); td->recp_name_entry = GTK_WIDGET(gtk_builder_get_object (builder, "recp_name_entry")); recp_account_heading = GTK_WIDGET(gtk_builder_get_object (builder, "recp_account_heading")); td->recp_account_entry = GTK_WIDGET(gtk_builder_get_object (builder, "recp_account_entry")); recp_bankcode_heading = GTK_WIDGET(gtk_builder_get_object (builder, "recp_bankcode_heading")); td->recp_bankcode_entry = GTK_WIDGET(gtk_builder_get_object (builder, "recp_bankcode_entry")); td->recp_bankname_label = GTK_WIDGET(gtk_builder_get_object (builder, "recp_bankname_label")); amount_hbox = GTK_WIDGET(gtk_builder_get_object (builder, "amount_hbox")); td->purpose_entry = GTK_WIDGET(gtk_builder_get_object (builder, "purpose_entry")); td->purpose_cont_entry = GTK_WIDGET(gtk_builder_get_object (builder, "purpose_cont_entry")); td->purpose_cont2_entry = GTK_WIDGET(gtk_builder_get_object (builder, "purpose_cont2_entry")); td->purpose_cont3_entry = GTK_WIDGET(gtk_builder_get_object (builder, "purpose_cont3_entry")); orig_name_heading = GTK_WIDGET(gtk_builder_get_object (builder, "orig_name_heading")); orig_name_label = GTK_WIDGET(gtk_builder_get_object (builder, "orig_name_label")); orig_account_heading = GTK_WIDGET(gtk_builder_get_object (builder, "orig_account_heading")); orig_account_label = GTK_WIDGET(gtk_builder_get_object (builder, "orig_account_label")); orig_bankname_heading = GTK_WIDGET(gtk_builder_get_object (builder, "orig_bankname_heading")); orig_bankname_label = GTK_WIDGET(gtk_builder_get_object (builder, "orig_bankname_label")); orig_bankcode_heading = GTK_WIDGET(gtk_builder_get_object (builder, "orig_bankcode_heading")); orig_bankcode_label = GTK_WIDGET(gtk_builder_get_object (builder, "orig_bankcode_label")); td->template_gtktreeview = GTK_TREE_VIEW(gtk_builder_get_object (builder, "template_list")); /* Amount edit */ td->amount_edit = gnc_amount_edit_new(); gtk_box_pack_start_defaults(GTK_BOX(amount_hbox), td->amount_edit); gnc_amount_edit_set_evaluate_on_enter(GNC_AMOUNT_EDIT(td->amount_edit), TRUE); gnc_amount_edit_set_fraction(GNC_AMOUNT_EDIT(td->amount_edit), commodity_scu); /* Check for what kind of transaction this should be, and change the * labels accordingly */ switch (trans_type) { case SINGLE_TRANSFER: case SINGLE_INTERNAL_TRANSFER: /* all labels are already set */ break; case SINGLE_DEBITNOTE: gtk_label_set_text(GTK_LABEL (heading_label), /* Translators: Strings from this file are * needed only in countries that have one of * aqbanking's Online Banking techniques * available. This is 'OFX DirectConnect' * (U.S. and others), 'HBCI' (in Germany), * or 'YellowNet' (Switzerland). If none of * these techniques are available in your * country, you may safely ignore strings * from the import-export/hbci * subdirectory. */ _("Enter an Online Direct Debit Note")); gtk_label_set_text(GTK_LABEL(recp_name_heading), _("Debited Account Owner")); gtk_label_set_text(GTK_LABEL(recp_account_heading), _("Debited Account Number")); gtk_label_set_text(GTK_LABEL(recp_bankcode_heading), _("Debited Account Bank Code")); gtk_label_set_text(GTK_LABEL(orig_name_heading), _("Credited Account Owner")); gtk_label_set_text(GTK_LABEL(orig_account_heading), _("Credited Account Number")); gtk_label_set_text(GTK_LABEL(orig_bankcode_heading), _("Credited Account Bank Code")); break; default: g_critical("gnc_ab_trans_dialog_new: Oops, unknown GncABTransType %d", trans_type); break; } gtk_label_set_text(GTK_LABEL(orig_name_label), ab_ownername); gtk_label_set_text(GTK_LABEL(orig_account_label), ab_accountnumber); gtk_label_set_text(GTK_LABEL(orig_bankname_label), ab_bankname); gtk_label_set_text (GTK_LABEL (orig_bankcode_label), ab_bankcode); /* Fill list for choosing a transaction template */ td->template_list_store = gtk_list_store_new(TEMPLATE_NUM_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER); g_list_foreach(templates, fill_templ_helper, td->template_list_store); gtk_tree_view_set_model(td->template_gtktreeview, GTK_TREE_MODEL(td->template_list_store)); td->templ_changed = FALSE; /* Keep a reference to the store */ /* Show this list */ renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( "Template Name", renderer, "text", TEMPLATE_NAME, NULL); gtk_tree_view_append_column(td->template_gtktreeview, column); /* Connect the Signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, td); g_object_unref(G_OBJECT(builder)); return td; }
BillImportGui * gnc_plugin_bi_import_showGUI(void) { BillImportGui *gui; GtkBuilder *builder; GList *glist; GtkCellRenderer *renderer; GtkTreeViewColumn *column; // if window exists already, activate it glist = gnc_find_gui_components ("dialog-bi-import-gui", NULL, NULL); if (glist) { // window found gui = g_list_nth_data (glist, 0); g_list_free (glist); gtk_window_present (GTK_WINDOW(gui->dialog)); return gui; } // create new window gui = g_new0 (BillImportGui, 1); gui->type = "BILL"; // Set default type to match gui. really shouldn't be here TODO change me gui->open_mode = "ALL"; builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-bi-import-gui.glade", "bi-import Dialog"); gui->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "bi-import Dialog")); gui->tree_view = GTK_WIDGET(gtk_builder_get_object (builder, "treeview1")); gui->entryFilename = GTK_WIDGET(gtk_builder_get_object (builder, "entryFilename")); gui->book = gnc_get_current_book(); gui->regexp = g_string_new ( "^(?<id>[^;]*);(?<date_opened>[^;]*);(?<owner_id>[^;]*);(?<billing_id>[^;]*);?(?<notes>[^;]*);?(?<date>[^;]*);?(?<desc>[^;]*);?(?<action>[^;]*);?(?<account>[^;]*);?(?<quantity>[^;]*);?(?<price>[^;]*);?(?<disc_type>[^;]*);?(?<disc_how>[^;]*);?(?<discount>[^;]*);?(?<taxable>[^;]*);?(?<taxincluded>[^;]*);?(?<tax_table>[^;]*);(?<date_posted>[^;]*);(?<due_date>[^;]*);(?<account_posted>[^;]*);(?<memo_posted>[^;]*);(?<accu_splits>[^;]*)$"); // create model and bind to view gui->store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, // invoice settings G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, // entry settings G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); // autopost settings gtk_tree_view_set_model( GTK_TREE_VIEW(gui->tree_view), GTK_TREE_MODEL(gui->store) ); #define CREATE_COLUMN(description,column_id) \ renderer = gtk_cell_renderer_text_new (); \ column = gtk_tree_view_column_new_with_attributes (description, renderer, "text", column_id, NULL); \ gtk_tree_view_column_set_resizable (column, TRUE); \ gtk_tree_view_append_column (GTK_TREE_VIEW (gui->tree_view), column); CREATE_COLUMN ("id", ID); CREATE_COLUMN ("date__opened", DATE_OPENED); CREATE_COLUMN ("owner__id", OWNER_ID); CREATE_COLUMN ("billing__id", BILLING_ID); CREATE_COLUMN ("notes", NOTES); CREATE_COLUMN ("date", DATE); CREATE_COLUMN ("desc", DESC); CREATE_COLUMN ("action", ACTION); CREATE_COLUMN ("account", ACCOUNT); CREATE_COLUMN ("quantity", QUANTITY); CREATE_COLUMN ("price", PRICE); CREATE_COLUMN ("disc__type", DISC_TYPE); CREATE_COLUMN ("disc__how", DISC_HOW); CREATE_COLUMN ("discount", DISCOUNT); CREATE_COLUMN ("taxable", TAXABLE); CREATE_COLUMN ("taxincluded", TAXINCLUDED); CREATE_COLUMN ("tax__table", TAX_TABLE); CREATE_COLUMN ("date__posted", DATE_POSTED); CREATE_COLUMN ("due__date", DUE_DATE); CREATE_COLUMN ("account__posted", ACCOUNT_POSTED); CREATE_COLUMN ("memo__posted", MEMO_POSTED); CREATE_COLUMN ("accu__splits", ACCU_SPLITS); gui->component_id = gnc_register_gui_component ("dialog-bi-import-gui", NULL, gnc_bi_import_gui_close_handler, gui); /* Setup signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, gui); gtk_widget_show_all ( gui->dialog ); g_object_unref(G_OBJECT(builder)); return gui; }
GNCImportMainMatcher *gnc_gen_trans_list_new (GtkWidget *parent, const gchar* heading, gboolean all_from_same_account, gint match_date_hardlimit) { GNCImportMainMatcher *info; GtkBuilder *builder; GtkWidget *heading_label; GtkWidget *box, *pbox; gboolean show_update; info = g_new0 (GNCImportMainMatcher, 1); /* Initialize user Settings. */ info->user_settings = gnc_import_Settings_new (); gnc_import_Settings_set_match_date_hardlimit (info->user_settings, match_date_hardlimit); /* Initialize the GtkDialog. */ builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-import.glade", "transaction_matcher"); gnc_builder_add_from_file (builder, "dialog-import.glade", "transaction_matcher_content"); info->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "transaction_matcher")); g_assert (info->dialog != NULL); /* Pack the content into the dialog vbox */ pbox = GTK_WIDGET(gtk_builder_get_object (builder, "transaction_matcher_vbox")); box = GTK_WIDGET(gtk_builder_get_object (builder, "transaction_matcher_content")); gtk_box_pack_start( GTK_BOX(pbox), box, TRUE, TRUE, 0); /* Get the view */ info->view = GTK_TREE_VIEW(gtk_builder_get_object (builder, "downloaded_view")); g_assert (info->view != NULL); show_update = gnc_import_Settings_get_action_update_enabled(info->user_settings); gnc_gen_trans_init_view(info, all_from_same_account, show_update); heading_label = GTK_WIDGET(gtk_builder_get_object (builder, "heading_label")); g_assert (heading_label != NULL); /* if (parent) gtk_window_set_transient_for (GTK_WINDOW (info->dialog), GTK_WINDOW (parent));*/ /*Initialise the colors */ gdk_color_parse(COLOR_RED, &info->color_back_red); gdk_color_parse(COLOR_YELLOW, &info->color_back_yellow); gdk_color_parse(COLOR_GREEN, &info->color_back_green); if (heading) gtk_label_set_text (GTK_LABEL (heading_label), heading); gnc_restore_window_size(GCONF_SECTION, GTK_WINDOW(info->dialog)); gtk_widget_show_all (GTK_WIDGET (info->dialog)); info->transaction_processed_cb = NULL; /* Connect the signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, info); g_object_unref(G_OBJECT(builder)); return info; }
int main(int argc, char *argv[]) { signal_user_data_t *ud; GError *error = NULL; GOptionContext *context; #if defined(_WIN32) // Tell gdk pixbuf where it's loader config file is. _putenv_s("GDK_PIXBUF_MODULE_FILE", "ghb.exe.local/loaders.cache"); _putenv_s("GST_PLUGIN_PATH", "lib/gstreamer-1.0"); #endif hb_global_init(); #ifdef ENABLE_NLS bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); #endif context = g_option_context_new(_("- Transcode media formats")); g_option_context_add_main_entries(context, entries, GETTEXT_PACKAGE); g_option_context_add_group(context, gtk_get_option_group(TRUE)); #if defined(_ENABLE_GST) g_option_context_add_group(context, gst_init_get_option_group()); #endif g_option_context_parse(context, &argc, &argv, &error); if (error != NULL) { g_warning("%s: %s", G_STRFUNC, error->message); g_clear_error(&error); } g_option_context_free(context); #if defined(_WIN32) if (win32_console) { // Enable console logging if(AttachConsole(ATTACH_PARENT_PROCESS) || AllocConsole()){ close(STDOUT_FILENO); freopen("CONOUT$", "w", stdout); close(STDERR_FILENO); freopen("CONOUT$", "w", stderr); } } else { // Non-console windows apps do not have a stderr->_file // assigned properly stderr->_file = STDERR_FILENO; stdout->_file = STDOUT_FILENO; } #endif if (argc > 1 && dvd_device == NULL && argv[1][0] != '-') { dvd_device = argv[1]; } gtk_init(&argc, &argv); GtkCssProvider *css = gtk_css_provider_new(); error = NULL; gtk_css_provider_load_from_data(css, MyCSS, -1, &error); if (error == NULL) { GdkScreen *ss = gdk_screen_get_default(); gtk_style_context_add_provider_for_screen(ss, GTK_STYLE_PROVIDER(css), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } else { g_warning("%s: %s", G_STRFUNC, error->message); g_clear_error(&error); } #if !defined(_WIN32) notify_init("HandBrake"); #endif ghb_resource_init(); ghb_load_icons(); #if !defined(_WIN32) dbus_g_thread_init(); #endif ghb_udev_init(); ghb_write_pid_file(); ud = g_malloc0(sizeof(signal_user_data_t)); ud->debug = ghb_debug; g_log_set_handler(NULL, G_LOG_LEVEL_DEBUG, debug_log_handler, ud); g_log_set_handler("Gtk", G_LOG_LEVEL_WARNING, warn_log_handler, ud); //g_log_set_handler("Gtk", G_LOG_LEVEL_CRITICAL, warn_log_handler, ud); ud->globals = ghb_dict_new(); ud->prefs = ghb_dict_new(); ud->settings_array = ghb_array_new(); ud->settings = ghb_dict_new(); ghb_array_append(ud->settings_array, ud->settings); ud->builder = create_builder_or_die(BUILDER_NAME); // Enable events that alert us to media change events watch_volumes(ud); //GtkWidget *widget = GHB_WIDGET(ud->builder, "PictureDetelecineCustom"); //gtk_entry_set_inner_border(widget, 2); // Since GtkBuilder no longer assigns object ids to widget names // Assign a few that are necessary for style overrides to work #if defined(_NO_UPDATE_CHECK) GtkWidget *widget; widget = GHB_WIDGET(ud->builder, "check_updates_box"); gtk_widget_hide(widget); #endif // Must set the names of the widgets that I want to modify // style for. gtk_widget_set_name(GHB_WIDGET(ud->builder, "preview_hud"), "preview_hud"); gtk_widget_set_name(GHB_WIDGET(ud->builder, "preview_frame"), "preview_frame"); gtk_widget_set_name(GHB_WIDGET(ud->builder, "live_preview_play"), "live_preview_play"); gtk_widget_set_name(GHB_WIDGET(ud->builder, "live_preview_progress"), "live_preview_progress"); gtk_widget_set_name(GHB_WIDGET(ud->builder, "live_encode_progress"), "live_encode_progress"); gtk_widget_set_name(GHB_WIDGET(ud->builder, "live_duration"), "live_duration"); gtk_widget_set_name(GHB_WIDGET(ud->builder, "preview_show_crop"), "preview_show_crop"); gtk_widget_set_name(GHB_WIDGET(ud->builder, "preview_fullscreen"), "preview_fullscreen"); gtk_widget_set_name(GHB_WIDGET(ud->builder, "activity_view"), "activity_view"); // Redirect stderr to the activity window ghb_preview_init(ud); IoRedirect(ud); ghb_log( "%s - %s - %s", HB_PROJECT_TITLE, HB_PROJECT_BUILD_TITLE, HB_PROJECT_URL_WEBSITE ); ghb_init_dep_map(); // Need to connect x264_options textview buffer to the changed signal // since it can't be done automatically GtkTextView *textview; GtkTextBuffer *buffer; textview = GTK_TEXT_VIEW(GHB_WIDGET(ud->builder, "x264Option")); buffer = gtk_text_view_get_buffer(textview); g_signal_connect(buffer, "changed", (GCallback)x264_entry_changed_cb, ud); textview = GTK_TEXT_VIEW(GHB_WIDGET(ud->builder, "VideoOptionExtra")); buffer = gtk_text_view_get_buffer(textview); g_signal_connect(buffer, "changed", (GCallback)video_option_changed_cb, ud); textview = GTK_TEXT_VIEW(GHB_WIDGET(ud->builder, "MetaLongDescription")); buffer = gtk_text_view_get_buffer(textview); g_signal_connect(buffer, "changed", (GCallback)plot_changed_cb, ud); ghb_combo_init(ud); g_debug("ud %p\n", ud); g_debug("ud->builder %p\n", ud->builder); bind_audio_tree_model(ud); bind_subtitle_tree_model(ud); bind_presets_tree_model(ud); bind_queue_tree_model(ud); bind_chapter_tree_model(ud); // Connect up the signals to their callbacks // I wrote my own connector so that I could pass user data // to the callbacks. Builder's standard autoconnect doesn't all this. gtk_builder_connect_signals_full(ud->builder, MyConnect, ud); ghb_init_audio_defaults_ui(ud); ghb_init_subtitle_defaults_ui(ud); // Parsing x264 options "" initializes x264 widgets to proper defaults ghb_x264_init(ud); // Load prefs before presets. Some preset defaults may depend // on preference settings. // First load default values ghb_settings_init(ud->prefs, "Preferences"); ghb_settings_init(ud->globals, "Globals"); ghb_settings_init(ud->settings, "Initialization"); ghb_settings_init(ud->settings, "OneTimeInitialization"); // Load user preferences file ghb_prefs_load(ud); // Store user preferences into ud->prefs ghb_prefs_to_settings(ud->prefs); int logLevel = ghb_dict_get_int(ud->prefs, "LoggingLevel"); ghb_backend_init(logLevel); // Load the presets files ghb_presets_load(ud); // Note that ghb_preset_to_settings(ud->settings) is called when // the default preset is selected. ghb_settings_to_ui(ud, ud->globals); ghb_settings_to_ui(ud, ud->prefs); // Note that ghb_settings_to_ui(ud->settings) happens when initial // empty title is initialized. if (ghb_dict_get_bool(ud->prefs, "hbfd")) { ghb_hbfd(ud, TRUE); } const gchar *source = ghb_dict_get_string(ud->prefs, "default_source"); ghb_dvd_set_current(source, ud); // Populate the presets tree view ghb_presets_list_init(ud, NULL); // Get the first preset name if (arg_preset != NULL) { ghb_select_preset(ud->builder, arg_preset); } else { ghb_select_default_preset(ud->builder); } // Grey out widgets that are dependent on a disabled feature ghb_check_all_depencencies(ud); if (dvd_device != NULL) { // Source overridden from command line option ghb_dict_set_string(ud->globals, "scan_source", dvd_device); g_idle_add((GSourceFunc)ghb_idle_scan, ud); } else { GhbValue *gval = ghb_dict_get_value(ud->prefs, "default_source"); ghb_dict_set(ud->globals, "scan_source", ghb_value_dup(gval)); } // Reload and check status of the last saved queue g_idle_add((GSourceFunc)ghb_reload_queue, ud); // Start timer for monitoring libhb status, 500ms g_timeout_add(200, ghb_timer_cb, (gpointer)ud); // Add dvd devices to File menu ghb_volname_cache_init(); GHB_THREAD_NEW("Cache Volume Names", (GThreadFunc)ghb_cache_volnames, ud); GtkWidget *ghb_window = GHB_WIDGET(ud->builder, "hb_window"); gint window_width, window_height; GdkGeometry geo = { -1, -1, 1920, 768, -1, -1, 10, 10, 0, 0, GDK_GRAVITY_NORTH_WEST }; GdkWindowHints geo_mask; geo_mask = GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE | GDK_HINT_BASE_SIZE; gtk_window_set_geometry_hints(GTK_WINDOW(ghb_window), ghb_window, &geo, geo_mask); window_width = ghb_dict_get_int(ud->prefs, "window_width"); window_height = ghb_dict_get_int(ud->prefs, "window_height"); /* * Filter objects in GtkBuilder xml * Unfortunately, GtkFilter is poorly supported by GtkBuilder, * so a lot of the setup must happen in code. SourceFilterAll SourceFilterVideo SourceFilterTS SourceFilterMPG SourceFilterEVO SourceFilterVOB SourceFilterMKV SourceFilterMP4 SourceFilterAVI SourceFilterMOV SourceFilterOGG SourceFilterFLV SourceFilterWMV */ // Add filters to source chooser GtkFileFilter *filter; GtkFileChooser *chooser; chooser = GTK_FILE_CHOOSER(GHB_WIDGET(ud->builder, "source_dialog")); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterAll")); gtk_file_filter_set_name(filter, _("All")); gtk_file_filter_add_pattern(filter, "*"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterVideo")); gtk_file_filter_set_name(filter, _("Video")); gtk_file_filter_add_mime_type(filter, "video/*"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterTS")); gtk_file_filter_set_name(filter, "TS"); gtk_file_filter_add_pattern(filter, "*.ts"); gtk_file_filter_add_pattern(filter, "*.TS"); gtk_file_filter_add_pattern(filter, "*.m2ts"); gtk_file_filter_add_pattern(filter, "*.M2TS"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterMPG")); gtk_file_filter_set_name(filter, "MPG"); gtk_file_filter_add_pattern(filter, "*.mpg"); gtk_file_filter_add_pattern(filter, "*.MPG"); gtk_file_filter_add_pattern(filter, "*.mepg"); gtk_file_filter_add_pattern(filter, "*.MEPG"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterEVO")); gtk_file_filter_set_name(filter, "EVO"); gtk_file_filter_add_pattern(filter, "*.evo"); gtk_file_filter_add_pattern(filter, "*.EVO"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterVOB")); gtk_file_filter_set_name(filter, "VOB"); gtk_file_filter_add_pattern(filter, "*.vob"); gtk_file_filter_add_pattern(filter, "*.VOB"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterMKV")); gtk_file_filter_set_name(filter, "MKV"); gtk_file_filter_add_pattern(filter, "*.mkv"); gtk_file_filter_add_pattern(filter, "*.MKV"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterMP4")); gtk_file_filter_set_name(filter, "MP4"); gtk_file_filter_add_pattern(filter, "*.mp4"); gtk_file_filter_add_pattern(filter, "*.MP4"); gtk_file_filter_add_pattern(filter, "*.m4v"); gtk_file_filter_add_pattern(filter, "*.M4V"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterMOV")); gtk_file_filter_set_name(filter, "MOV"); gtk_file_filter_add_pattern(filter, "*.mov"); gtk_file_filter_add_pattern(filter, "*.MOV"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterAVI")); gtk_file_filter_set_name(filter, "AVI"); gtk_file_filter_add_pattern(filter, "*.avi"); gtk_file_filter_add_pattern(filter, "*.AVI"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterOGG")); gtk_file_filter_set_name(filter, "OGG"); gtk_file_filter_add_pattern(filter, "*.ogg"); gtk_file_filter_add_pattern(filter, "*.OGG"); gtk_file_filter_add_pattern(filter, "*.ogv"); gtk_file_filter_add_pattern(filter, "*.OGV"); gtk_file_filter_add_pattern(filter, "*.ogm"); gtk_file_filter_add_pattern(filter, "*.OGM"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterFLV")); gtk_file_filter_set_name(filter, "FLV"); gtk_file_filter_add_pattern(filter, "*.flv"); gtk_file_filter_add_pattern(filter, "*.FLV"); gtk_file_chooser_add_filter(chooser, filter); filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterWMV")); gtk_file_filter_set_name(filter, "WMV"); gtk_file_filter_add_pattern(filter, "*.wmv"); gtk_file_filter_add_pattern(filter, "*.WMV"); gtk_file_chooser_add_filter(chooser, filter); // Gtk has a really stupid bug. If the file chooser is showing // hidden files AND there is no filter set, it will not select // the filename when gtk_file_chooser_set_filename is called. // So add a completely unnessary filter to prevent this behavior. filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "SourceFilterAll")); gtk_file_chooser_set_filter(chooser, filter); #if !GTK_CHECK_VERSION(3, 16, 0) PangoFontDescription *font_desc; font_desc = pango_font_description_from_string("monospace 10"); textview = GTK_TEXT_VIEW(GHB_WIDGET(ud->builder, "activity_view")); gtk_widget_override_font(GTK_WIDGET(textview), font_desc); pango_font_description_free(font_desc); #endif // Grrrr! Gtk developers !!!hard coded!!! the width of the // radio buttons in GtkStackSwitcher to 100!!! // // Thankfully, GtkStackSwitcher is a regular container object // and we can access the buttons to change their width. GList *stack_switcher_children, *link; GtkContainer * stack_switcher = GTK_CONTAINER( GHB_WIDGET(ud->builder, "SettingsStackSwitcher")); link = stack_switcher_children = gtk_container_get_children(stack_switcher); while (link != NULL) { GtkWidget *widget = link->data; gtk_widget_set_size_request(widget, -1, -1); gtk_widget_set_hexpand(widget, TRUE); gtk_widget_set_halign(widget, GTK_ALIGN_FILL); link = link->next; } g_list_free(stack_switcher_children); gtk_window_resize(GTK_WINDOW(ghb_window), window_width, window_height); gtk_widget_show(ghb_window); // Everything should be go-to-go. Lets rock! gtk_main(); ghb_backend_close(); ghb_value_free(&ud->queue); ghb_value_free(&ud->settings_array); ghb_value_free(&ud->prefs); ghb_value_free(&ud->globals); ghb_value_free(&ud->x264_priv); g_io_channel_unref(ud->activity_log); ghb_settings_close(); ghb_resource_free(); #if !defined(_WIN32) notify_uninit(); #endif g_object_unref(ud->builder); g_free(ud->current_dvd_device); g_free(ud); return 0; }
/* Internal function that builds the dialog */ static CustomReportDialog * gnc_ui_custom_report_internal(GncMainWindow * window) { GtkBuilder *builder; CustomReportDialog *crd; GtkTreeIter iter; GtkTreeModel *model; GtkWidget *no_report_notification; GtkWidget *scroll_window; GtkWidget *vscroll; GtkRequisition nat_sb; crd = g_new0(CustomReportDialog, 1); builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-custom-report.glade", "custom_report_dialog"); crd->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "custom_report_dialog")); crd->reportview = GTK_WIDGET(gtk_builder_get_object (builder, "custom_report_list_view")); scroll_window = GTK_WIDGET(gtk_builder_get_object (builder, "custom_report_sw")); no_report_notification = GTK_WIDGET(gtk_builder_get_object (builder, "label2")); set_reports_view_and_model(crd); crd->window = window; // get the vertical scroll bar width vscroll = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (scroll_window)); gtk_widget_get_preferred_size (vscroll, NULL, &nat_sb); // set the width of the dummy column to that of the scrollbar gtk_tree_view_column_set_fixed_width (crd->dummycol, nat_sb.width); gtk_window_set_transient_for (GTK_WINDOW (crd->dialog), GTK_WINDOW(window)); // Set the style context for this dialog so it can be easily manipulated with css gnc_widget_set_style_context (GTK_WIDGET(crd->dialog), "GncCustomReportDialog"); gnc_restore_window_size (GNC_PREFS_GROUP_REPORT_SAVED_CONFIGS, GTK_WINDOW(crd->dialog), GTK_WINDOW(window)); /* connect the signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, crd); gtk_widget_show_all(crd->dialog); /* check if there are currently saved reports available * by checking if there is a first element */ model = gtk_tree_view_get_model (GTK_TREE_VIEW (crd->reportview)); if (gtk_tree_model_get_iter_first (model, &iter)) { /* saved reports available -> hide the "no reports available" notification */ gtk_widget_hide(no_report_notification); } else { /* hide the scrolled window of the report list */ gtk_widget_hide(crd->reportview); } g_object_unref(G_OBJECT(builder)); return crd; }
/** Create the preferences dialog. This function first reads the * dialog-preferences.glade file to obtain the content and then * the dialog is created with a set of common preferences. It then * runs the list of add-ins, calling a helper function to add each full/partial * page to this dialog, Finally it builds the "interesting widgets" * table that is used for connecting the widgets up to callback functions. * * @internal * * @return A pointer to the newly created dialog. */ static GtkWidget * gnc_preferences_dialog_create(void) { GtkBuilder *builder; GtkWidget *dialog, *notebook, *label, *image; GtkWidget *box, *date, *period, *currency; GHashTable *prefs_table; GDate* gdate = NULL; gchar buf[128]; GtkListStore *store; GtkTreePath *path; GtkTreeIter iter; gnc_commodity *locale_currency; const gchar *currency_name; QofBook *book; KvpFrame *book_frame; gint64 month, day; GDate fy_end; gboolean date_is_valid = FALSE; ENTER(""); DEBUG("Opening dialog-preferences.glade:"); builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "auto_decimal_places_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "autosave_interval_minutes_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "save_on_close_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "date_backmonth_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "max_transactions_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "key_length_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "new_search_limit_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "retain_days_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "tab_width_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "date_formats"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "GnuCash Preferences"); dialog = GTK_WIDGET(gtk_builder_get_object (builder, "GnuCash Preferences")); #ifndef REGISTER2_ENABLED /* Hide preferences that are related to register2 */ box = GTK_WIDGET (gtk_builder_get_object (builder, "label14")); gtk_widget_hide (box); box = GTK_WIDGET (gtk_builder_get_object (builder, "pref/general.register/key-length")); gtk_widget_hide (box); box = GTK_WIDGET (gtk_builder_get_object (builder, "pref/general.register/show-extra-dates")); gtk_widget_hide (box); box = GTK_WIDGET (gtk_builder_get_object (builder, "pref/general.register/show-calendar-buttons")); gtk_widget_hide (box); box = GTK_WIDGET (gtk_builder_get_object (builder, "pref/general.register/selection-to-blank-on-expand")); gtk_widget_hide (box); box = GTK_WIDGET (gtk_builder_get_object (builder, "pref/general.register/show-extra-dates-on-selection")); gtk_widget_hide (box); #endif label = GTK_WIDGET(gtk_builder_get_object (builder, "sample_account")); g_object_set_data(G_OBJECT(dialog), "sample_account", label); image = GTK_WIDGET(gtk_builder_get_object (builder, "separator_error")); g_object_set_data(G_OBJECT(dialog), "separator_error", image); DEBUG("autoconnect"); gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, dialog); DEBUG("done"); notebook = GTK_WIDGET(gtk_builder_get_object (builder, "notebook1")); prefs_table = g_hash_table_new(g_str_hash, g_str_equal); g_object_set_data(G_OBJECT(dialog), NOTEBOOK, notebook); g_object_set_data_full(G_OBJECT(dialog), PREFS_WIDGET_HASH, prefs_table, (GDestroyNotify)g_hash_table_destroy); book = gnc_get_current_book(); g_date_clear (&fy_end, 1); qof_instance_get (QOF_INSTANCE (book), "fy-end", &fy_end, NULL); box = GTK_WIDGET(gtk_builder_get_object (builder, "pref/" GNC_PREFS_GROUP_ACCT_SUMMARY "/" GNC_PREF_START_PERIOD)); period = gnc_period_select_new(TRUE); gtk_widget_show (period); gtk_box_pack_start (GTK_BOX (box), period, TRUE, TRUE, 0); if (date_is_valid) gnc_period_select_set_fy_end(GNC_PERIOD_SELECT (period), &fy_end); box = GTK_WIDGET(gtk_builder_get_object (builder, "pref/" GNC_PREFS_GROUP_ACCT_SUMMARY "/" GNC_PREF_END_PERIOD)); period = gnc_period_select_new(FALSE); gtk_widget_show (period); gtk_box_pack_start (GTK_BOX (box), period, TRUE, TRUE, 0); if (date_is_valid) gnc_period_select_set_fy_end(GNC_PERIOD_SELECT (period), &fy_end); box = GTK_WIDGET(gtk_builder_get_object (builder, "pref/" GNC_PREFS_GROUP_ACCT_SUMMARY "/" GNC_PREF_START_DATE)); date = gnc_date_edit_new(gnc_time (NULL), FALSE, FALSE); gtk_widget_show (date); gtk_box_pack_start (GTK_BOX (box), date, TRUE, TRUE, 0); box = GTK_WIDGET(gtk_builder_get_object (builder, "pref/" GNC_PREFS_GROUP_ACCT_SUMMARY "/" GNC_PREF_END_DATE)); date = gnc_date_edit_new(gnc_time (NULL), FALSE, FALSE); gtk_widget_show (date); gtk_box_pack_start (GTK_BOX (box), date, TRUE, TRUE, 0); box = GTK_WIDGET(gtk_builder_get_object (builder, "pref/" GNC_PREFS_GROUP_GENERAL "/" GNC_PREF_CURRENCY_OTHER)); currency = gnc_currency_edit_new(); gnc_currency_edit_set_currency (GNC_CURRENCY_EDIT(currency), gnc_default_currency()); gtk_widget_show (currency); gtk_box_pack_start(GTK_BOX (box), currency, TRUE, TRUE, 0); box = GTK_WIDGET(gtk_builder_get_object (builder, "pref/" GNC_PREFS_GROUP_GENERAL_REPORT "/" GNC_PREF_CURRENCY_OTHER)); currency = gnc_currency_edit_new(); gnc_currency_edit_set_currency (GNC_CURRENCY_EDIT(currency), gnc_default_currency()); gtk_widget_show (currency); gtk_box_pack_start(GTK_BOX (box), currency, TRUE, TRUE, 0); /* Add to the list of interesting widgets */ gnc_prefs_build_widget_table(builder, dialog); g_slist_foreach(add_ins, gnc_preferences_build_page, dialog); /* Sort tabs alphabetically */ gnc_prefs_sort_pages(GTK_NOTEBOOK(notebook)); gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0); DEBUG("We have the following interesting widgets:"); g_hash_table_foreach(prefs_table, (GHFunc)gnc_prefs_connect_one, dialog); DEBUG("Done with interesting widgets."); /* Other stuff */ gdate = g_date_new_dmy(31, G_DATE_JULY, 2013); g_date_strftime(buf, sizeof(buf), "%x", gdate); store = GTK_LIST_STORE(gtk_builder_get_object (builder, "date_formats")); path = gtk_tree_path_new_from_indices (QOF_DATE_FORMAT_LOCALE, -1); if (gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path)) gtk_list_store_set (store, &iter, 1, buf, -1); g_date_free(gdate); locale_currency = gnc_locale_default_currency (); currency_name = gnc_commodity_get_printname(locale_currency); label = GTK_WIDGET(gtk_builder_get_object (builder, "locale_currency")); gtk_label_set_label(GTK_LABEL(label), currency_name); label = GTK_WIDGET(gtk_builder_get_object (builder, "locale_currency2")); gtk_label_set_label(GTK_LABEL(label), currency_name); g_object_unref(G_OBJECT(builder)); LEAVE("dialog %p", dialog); return dialog; }
CustomerImportGui * gnc_plugin_customer_import_showGUI(GtkWindow *parent) { CustomerImportGui *gui; //gktbuilderXML *xml; GtkBuilder *builder; GList *glist; GtkCellRenderer *renderer; GtkTreeViewColumn *column; // if window exists already, activate it glist = gnc_find_gui_components ("dialog-customer-import-gui", NULL, NULL); if (glist) { // window found gui = g_list_nth_data (glist, 0); g_list_free (glist); gtk_window_present (GTK_WINDOW(gui->dialog)); return gui; } // create new window gui = g_new0 (CustomerImportGui, 1); builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-customer-import-gui.glade", "customer_import_dialog"); gui->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "customer_import_dialog")); gui->tree_view = GTK_WIDGET(gtk_builder_get_object (builder, "treeview1")); gui->entryFilename = GTK_WIDGET(gtk_builder_get_object (builder, "entryFilename")); gui->type = "CUSTOMER"; // Set a default type to import // Set the style context for this dialog so it can be easily manipulated with css gnc_widget_set_style_context (GTK_WIDGET(gui->dialog), "GncCustomerImportDialog"); gtk_window_set_transient_for (GTK_WINDOW (gui->dialog), parent); gui->regexp = g_string_new ( "^(?<id>[^;]+);(?<company>[^;]*);(?<name>[^;]+);(?<addr1>[^;]+);?(?<addr2>[^;]*);?(?<addr3>[^;]*);?(?<addr4>[^;]*);?(?<phone>[^;]*);?(?<fax>[^;]*);?(?<email>[^;]*);?(?<shipname>[^;]*);?(?<shipaddr1>[^;]*);?(?<shipaddr2>[^;]*);?(?<shipaddr3>[^;]*);?(?<shipaddr4>[^;]*);?(?<shipphone>[^;]*);?(?<shipfax>[^;]*);?(?<shipemail>[^;]*)"); gui->book = gnc_get_current_book(); // create model and bind to view gui->store = gtk_list_store_new (CI_N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model( GTK_TREE_VIEW(gui->tree_view), GTK_TREE_MODEL(gui->store) ); #define CREATE_COLUMN(description,column_id) \ renderer = gtk_cell_renderer_text_new (); \ column = gtk_tree_view_column_new_with_attributes (description, renderer, "text", column_id, NULL); \ gtk_tree_view_column_set_resizable (column, TRUE); \ gtk_tree_view_append_column (GTK_TREE_VIEW (gui->tree_view), column); CREATE_COLUMN ("id", CI_ID); CREATE_COLUMN ("company", CI_COMPANY); CREATE_COLUMN ("name", CI_NAME); CREATE_COLUMN ("addr1", CI_ADDR1); CREATE_COLUMN ("addr2", CI_ADDR2); CREATE_COLUMN ("addr3", CI_ADDR3); CREATE_COLUMN ("addr4", CI_ADDR4); CREATE_COLUMN ("phone", CI_PHONE); CREATE_COLUMN ("fax", CI_FAX); CREATE_COLUMN ("email", CI_EMAIL); CREATE_COLUMN ("notes", CI_NOTES); CREATE_COLUMN ("shipname", CI_SHIPNAME); CREATE_COLUMN ("shipaddr1", CI_SHIPADDR1); CREATE_COLUMN ("shipaddr2", CI_SHIPADDR2); CREATE_COLUMN ("shipaddr3", CI_SHIPADDR3); CREATE_COLUMN ("shipaddr4", CI_SHIPADDR4); CREATE_COLUMN ("shipphone", CI_SHIPPHONE); CREATE_COLUMN ("shipfax", CI_SHIPFAX); CREATE_COLUMN ("shipemail", CI_SHIPEMAIL); gui->component_id = gnc_register_gui_component ("dialog-customer-import-gui", NULL, gnc_customer_import_gui_close_handler, gui); /* Setup signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, gui); gtk_widget_show_all ( gui->dialog ); return gui; }
gboolean gnc_dialog_date_close_parented (GtkWidget *parent, const char *message, const char *label_message, gboolean ok_is_default, /* Returned data ... */ Timespec *ts) { DialogDateClose *ddc; GtkWidget *date_box; GtkLabel *label; GtkBuilder *builder; gboolean retval; if (!message || !label_message || !ts) return FALSE; ddc = g_new0 (DialogDateClose, 1); ddc->ts = ts; builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-date-close.glade", "date_close_dialog"); ddc->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "date_close_dialog")); // Set the style context for this dialog so it can be easily manipulated with css gnc_widget_set_style_context (GTK_WIDGET(ddc->dialog), "GncDateCloseDialog"); date_box = GTK_WIDGET(gtk_builder_get_object (builder, "date_box")); ddc->date = gnc_date_edit_new (time(NULL), FALSE, FALSE); gtk_box_pack_start (GTK_BOX(date_box), ddc->date, TRUE, TRUE, 0); gnc_date_edit_set_time_ts (GNC_DATE_EDIT (ddc->date), *ts); if (parent) gtk_window_set_transient_for (GTK_WINDOW(ddc->dialog), GTK_WINDOW(parent)); /* Set the labels */ label = GTK_LABEL (gtk_builder_get_object (builder, "msg_label")); gtk_label_set_text (label, message); label = GTK_LABEL (gtk_builder_get_object (builder, "label")); gtk_label_set_text (label, label_message); /* Setup signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, ddc); gtk_widget_show_all (ddc->dialog); ddc->retval = FALSE; while (gtk_dialog_run (GTK_DIALOG (ddc->dialog)) == GTK_RESPONSE_OK) { /* If response is OK but flag is not set, try again */ if (ddc->retval) break; } g_object_unref(G_OBJECT(builder)); gtk_widget_destroy(ddc->dialog); retval = ddc->retval; g_list_free (ddc->acct_types); g_free (ddc); return retval; }
/* Create a tax-table window */ TaxTableWindow * gnc_ui_tax_table_window_new (QofBook *book) { TaxTableWindow *ttw; GtkBuilder *builder; GtkTreeView *view; GtkTreeViewColumn *column; GtkCellRenderer *renderer; GtkListStore *store; GtkTreeSelection *selection; if (!book) return NULL; /* * Find an existing tax-table window. If found, bring it to * the front. If we have an actual owner, then set it in * the window. */ ttw = gnc_find_first_gui_component (DIALOG_TAX_TABLE_CM_CLASS, find_handler, book); if (ttw) { gtk_window_present (GTK_WINDOW(ttw->dialog)); return ttw; } /* Didn't find one -- create a new window */ ttw = g_new0 (TaxTableWindow, 1); ttw->book = book; /* Open and read the Glade File */ builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-tax-table.glade", "Tax Table Window"); ttw->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "Tax Table Window")); ttw->names_view = GTK_WIDGET(gtk_builder_get_object (builder, "tax_tables_view")); ttw->entries_view = GTK_WIDGET(gtk_builder_get_object (builder, "tax_table_entries")); /* Create the tax tables view */ view = GTK_TREE_VIEW(ttw->names_view); store = gtk_list_store_new (NUM_TAX_TABLE_COLS, G_TYPE_STRING, G_TYPE_POINTER); gtk_tree_view_set_model(view, GTK_TREE_MODEL(store)); g_object_unref(store); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("", renderer, "text", TAX_TABLE_COL_NAME, NULL); gtk_tree_view_append_column(view, column); selection = gtk_tree_view_get_selection(view); g_signal_connect(selection, "changed", G_CALLBACK(tax_table_selection_changed), ttw); /* Create the tax table entries view */ view = GTK_TREE_VIEW(ttw->entries_view); store = gtk_list_store_new (NUM_TAX_ENTRY_COLS, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING); gtk_tree_view_set_model(view, GTK_TREE_MODEL(store)); g_object_unref(store); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("", renderer, "text", TAX_ENTRY_COL_NAME, NULL); gtk_tree_view_append_column(view, column); selection = gtk_tree_view_get_selection(view); g_signal_connect(selection, "changed", G_CALLBACK(tax_table_entry_selection_changed), ttw); g_signal_connect(view, "row-activated", G_CALLBACK(tax_table_entry_row_activated), ttw); /* Setup signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, ttw); /* register with component manager */ ttw->component_id = gnc_register_gui_component (DIALOG_TAX_TABLE_CM_CLASS, tax_table_window_refresh_handler, tax_table_window_close_handler, ttw); tax_table_window_refresh (ttw); gnc_restore_window_size (GCONF_SECTION, GTK_WINDOW (ttw->dialog)); gtk_widget_show_all (ttw->dialog); g_object_unref(G_OBJECT(builder)); return ttw; }
gboolean gnc_dialog_dates_acct_question_parented (GtkWidget *parent, const char *message, const char *ddue_label_message, const char *post_label_message, const char *acct_label_message, const char *question_check_message, gboolean ok_is_default, gboolean set_default_acct, GList * acct_types, GList * acct_commodities, QofBook *book, GncBillTerm *terms, /* Returned Data... */ Timespec *ddue, Timespec *post, char **memo, Account **acct, gboolean *answer) { DialogDateClose *ddc; GtkLabel *label; GtkWidget *date_box; GtkWidget *acct_box; GtkBuilder *builder; gboolean retval; if (!message || !ddue_label_message || !post_label_message || !acct_label_message || !acct_types || !book || !ddue || !post || !acct) return FALSE; if (question_check_message && !answer) return FALSE; ddc = g_new0 (DialogDateClose, 1); ddc->ts = ddue; ddc->ts2 = post; ddc->book = book; ddc->acct_types = acct_types; ddc->acct_commodities = acct_commodities; ddc->acct = *acct; ddc->memo = memo; ddc->terms = terms; builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-date-close.glade", "date_account_dialog"); ddc->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "date_account_dialog")); ddc->memo_entry = GTK_WIDGET(gtk_builder_get_object (builder, "memo_entry")); // Set the style context for this dialog so it can be easily manipulated with css gnc_widget_set_style_context (GTK_WIDGET(ddc->dialog), "GncDateCloseDialog"); acct_box = GTK_WIDGET(gtk_builder_get_object (builder, "acct_hbox")); ddc->acct_combo = gnc_account_sel_new(); gtk_box_pack_start (GTK_BOX(acct_box), ddc->acct_combo, TRUE, TRUE, 0); date_box = GTK_WIDGET(gtk_builder_get_object (builder, "date_hbox")); ddc->date = gnc_date_edit_new (time(NULL), FALSE, FALSE); gtk_box_pack_start (GTK_BOX(date_box), ddc->date, TRUE, TRUE, 0); date_box = GTK_WIDGET(gtk_builder_get_object (builder, "post_date_box")); ddc->post_date = gnc_date_edit_new (time(NULL), FALSE, FALSE); gtk_box_pack_start (GTK_BOX(date_box), ddc->post_date, TRUE, TRUE, 0); ddc->question_check = GTK_WIDGET(gtk_builder_get_object (builder, "question_check")); if (parent) gtk_window_set_transient_for (GTK_WINDOW(ddc->dialog), GTK_WINDOW(parent)); /* Set the labels */ label = GTK_LABEL (gtk_builder_get_object (builder, "top_msg_label")); gtk_label_set_text (label, message); label = GTK_LABEL (gtk_builder_get_object (builder, "date_label")); gtk_label_set_text (label, ddue_label_message); label = GTK_LABEL (gtk_builder_get_object (builder, "postdate_label")); gtk_label_set_text (label, post_label_message); label = GTK_LABEL (gtk_builder_get_object (builder, "acct_label")); gtk_label_set_text (label, acct_label_message); if (question_check_message) { gtk_label_set_text(GTK_LABEL(gtk_bin_get_child (GTK_BIN(ddc->question_check))), question_check_message); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ddc->question_check), *answer); } else { gtk_widget_hide(ddc->question_check); gtk_widget_hide(GTK_WIDGET(gtk_builder_get_object (builder, "hide1"))); } /* Set the post date widget */ gnc_date_edit_set_time_ts (GNC_DATE_EDIT (ddc->post_date), *post); /* Deal with the terms handling of the due date */ if (terms) { g_signal_connect (G_OBJECT (ddc->post_date), "date_changed", G_CALLBACK (post_date_changed_cb), ddc); gtk_widget_set_sensitive (ddc->date, FALSE); post_date_changed_cb (GNC_DATE_EDIT (ddc->post_date), ddc); } else gnc_date_edit_set_time_ts (GNC_DATE_EDIT (ddc->date), *ddue); /* Setup the account widget */ fill_in_acct_info (ddc, set_default_acct); /* Setup signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, ddc); gtk_widget_show_all (ddc->dialog); /* Set the focus on the date widget */ gnc_date_grab_focus (GNC_DATE_EDIT (ddc->post_date)); ddc->retval = FALSE; while (gtk_dialog_run (GTK_DIALOG (ddc->dialog)) == GTK_RESPONSE_OK) { /* If response is OK but flag is not set, try again */ if (ddc->retval) break; } g_object_unref(G_OBJECT(builder)); gtk_widget_destroy(ddc->dialog); retval = ddc->retval; *acct = ddc->acct; if (question_check_message) *answer = ddc->answer; g_free (ddc); return retval; }
static EmployeeWindow * gnc_employee_new_window (QofBook *bookp, GncEmployee *employee) { EmployeeWindow *ew; GtkBuilder *builder; GtkWidget *hbox, *edit; gnc_commodity *currency; GNCPrintAmountInfo print_info; GList *acct_types; Account *ccard_acct; /* * Find an existing window for this employee. If found, bring it to * the front. */ if (employee) { GncGUID employee_guid; employee_guid = *gncEmployeeGetGUID (employee); ew = gnc_find_first_gui_component (DIALOG_EDIT_EMPLOYEE_CM_CLASS, find_handler, &employee_guid); if (ew) { gtk_window_present (GTK_WINDOW(ew->dialog)); return(ew); } } /* Find the default currency */ if (employee) currency = gncEmployeeGetCurrency (employee); else currency = gnc_default_currency (); /* * No existing employee window found. Build a new one. */ ew = g_new0 (EmployeeWindow, 1); ew->book = bookp; /* Find the dialog */ builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-employee.glade", "Employee Dialog"); ew->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "Employee Dialog")); g_object_set_data (G_OBJECT (ew->dialog), "dialog_info", ew); /* Get entry points */ ew->id_entry = GTK_WIDGET(gtk_builder_get_object (builder, "id_entry")); ew->username_entry = GTK_WIDGET(gtk_builder_get_object (builder, "username_entry")); ew->name_entry = GTK_WIDGET(gtk_builder_get_object (builder, "name_entry")); ew->addr1_entry = GTK_WIDGET(gtk_builder_get_object (builder, "addr1_entry")); ew->addr2_entry = GTK_WIDGET(gtk_builder_get_object (builder, "addr2_entry")); ew->addr3_entry = GTK_WIDGET(gtk_builder_get_object (builder, "addr3_entry")); ew->addr4_entry = GTK_WIDGET(gtk_builder_get_object (builder, "addr4_entry")); ew->phone_entry = GTK_WIDGET(gtk_builder_get_object (builder, "phone_entry")); ew->fax_entry = GTK_WIDGET(gtk_builder_get_object (builder, "fax_entry")); ew->email_entry = GTK_WIDGET(gtk_builder_get_object (builder, "email_entry")); ew->language_entry = GTK_WIDGET(gtk_builder_get_object (builder, "language_entry")); ew->active_check = GTK_WIDGET(gtk_builder_get_object (builder, "active_check")); /* Currency */ edit = gnc_currency_edit_new(); gnc_currency_edit_set_currency (GNC_CURRENCY_EDIT(edit), currency); ew->currency_edit = edit; hbox = GTK_WIDGET(gtk_builder_get_object (builder, "currency_box")); gtk_box_pack_start (GTK_BOX (hbox), edit, TRUE, TRUE, 0); /* WORKDAY: Value */ edit = gnc_amount_edit_new(); gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT (edit), TRUE); print_info = gnc_integral_print_info (); print_info.max_decimal_places = 5; gnc_amount_edit_set_print_info (GNC_AMOUNT_EDIT (edit), print_info); gnc_amount_edit_set_fraction (GNC_AMOUNT_EDIT (edit), 100000); ew->workday_amount = edit; gtk_widget_show (edit); hbox = GTK_WIDGET(gtk_builder_get_object (builder, "hours_hbox")); gtk_box_pack_start (GTK_BOX (hbox), edit, TRUE, TRUE, 0); /* RATE: Monetary Value */ edit = gnc_amount_edit_new(); print_info = gnc_commodity_print_info (currency, FALSE); gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT (edit), TRUE); gnc_amount_edit_set_print_info (GNC_AMOUNT_EDIT (edit), print_info); gnc_amount_edit_set_fraction (GNC_AMOUNT_EDIT (edit), gnc_commodity_get_fraction (currency)); ew->rate_amount = edit; gtk_widget_show (edit); hbox = GTK_WIDGET(gtk_builder_get_object (builder, "rate_hbox")); gtk_box_pack_start (GTK_BOX (hbox), edit, TRUE, TRUE, 0); /* CCard Account Selection */ ew->ccard_acct_check = GTK_WIDGET(gtk_builder_get_object (builder, "ccard_check")); edit = gnc_account_sel_new(); acct_types = g_list_prepend(NULL, (gpointer)ACCT_TYPE_CREDIT); gnc_account_sel_set_acct_filters (GNC_ACCOUNT_SEL(edit), acct_types, NULL); g_list_free (acct_types); ew->ccard_acct_sel = edit; gtk_widget_show (edit); hbox = GTK_WIDGET(gtk_builder_get_object (builder, "ccard_acct_hbox")); gtk_box_pack_start (GTK_BOX (hbox), edit, TRUE, TRUE, 0); /* Setup signals */ gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, ew); /* Setup initial values */ if (employee != NULL) { GncAddress *addr; ew->dialog_type = EDIT_EMPLOYEE; ew->employee_guid = *gncEmployeeGetGUID (employee); addr = gncEmployeeGetAddr (employee); gtk_entry_set_text (GTK_ENTRY (ew->id_entry), gncEmployeeGetID (employee)); gtk_entry_set_text (GTK_ENTRY (ew->username_entry), gncEmployeeGetUsername (employee)); /* Setup Address */ gtk_entry_set_text (GTK_ENTRY (ew->name_entry), gncAddressGetName (addr)); gtk_entry_set_text (GTK_ENTRY (ew->addr1_entry), gncAddressGetAddr1 (addr)); gtk_entry_set_text (GTK_ENTRY (ew->addr2_entry), gncAddressGetAddr2 (addr)); gtk_entry_set_text (GTK_ENTRY (ew->addr3_entry), gncAddressGetAddr3 (addr)); gtk_entry_set_text (GTK_ENTRY (ew->addr4_entry), gncAddressGetAddr4 (addr)); gtk_entry_set_text (GTK_ENTRY (ew->phone_entry), gncAddressGetPhone (addr)); gtk_entry_set_text (GTK_ENTRY (ew->fax_entry), gncAddressGetFax (addr)); gtk_entry_set_text (GTK_ENTRY (ew->email_entry), gncAddressGetEmail (addr)); gtk_entry_set_text (GTK_ENTRY (ew->language_entry), gncEmployeeGetLanguage (employee)); /* Set toggle buttons */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ew->active_check), gncEmployeeGetActive (employee)); ew->component_id = gnc_register_gui_component (DIALOG_EDIT_EMPLOYEE_CM_CLASS, gnc_employee_window_refresh_handler, gnc_employee_window_close_handler, ew); } else { employee = gncEmployeeCreate (bookp); ew->employee_guid = *gncEmployeeGetGUID (employee); ew->dialog_type = NEW_EMPLOYEE; ew->component_id = gnc_register_gui_component (DIALOG_NEW_EMPLOYEE_CM_CLASS, gnc_employee_window_refresh_handler, gnc_employee_window_close_handler, ew); } /* I know that employee exists here -- either passed in or just created */ /* Set the workday and rate values */ gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT (ew->workday_amount), gncEmployeeGetWorkday (employee)); gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT (ew->rate_amount), gncEmployeeGetRate (employee)); ccard_acct = gncEmployeeGetCCard (employee); if (ccard_acct == NULL) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ew->ccard_acct_check), FALSE); gtk_widget_set_sensitive (ew->ccard_acct_sel, FALSE); } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ew->ccard_acct_check), TRUE); gnc_account_sel_set_account (GNC_ACCOUNT_SEL (ew->ccard_acct_sel), ccard_acct, FALSE); } /* XXX: Set the ACL */ gnc_gui_component_watch_entity_type (ew->component_id, GNC_EMPLOYEE_MODULE_NAME, QOF_EVENT_MODIFY | QOF_EVENT_DESTROY); gtk_widget_show_all (ew->dialog); if (ccard_acct == NULL) gtk_widget_hide (ew->ccard_acct_sel); g_object_unref(G_OBJECT(builder)); return ew; }