static void gnc_recurrence_init( GncRecurrence *gr ) { GtkVBox *vb; GtkHBox *hb; GtkWidget *w; GtkBuilder *builder; recurrenceSet(&gr->recurrence, 1, PERIOD_MONTH, NULL, WEEKEND_ADJ_NONE); /* Open up the builder file */ builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "gnc-recurrence.glade", "GCB_PeriodType_liststore"); gnc_builder_add_from_file (builder, "gnc-recurrence.glade", "GSB_Mult_Adj"); gnc_builder_add_from_file (builder, "gnc-recurrence.glade", "RecurrenceEntryVBox"); vb = GTK_VBOX(gtk_builder_get_object (builder, "RecurrenceEntryVBox")); hb = GTK_HBOX(gtk_builder_get_object (builder, "Startdate_hbox")); w = gnc_date_edit_new (gnc_time (NULL), FALSE, FALSE); gr->gde_start = w; gtk_box_pack_start (GTK_BOX (hb), w, TRUE, TRUE, 0); gtk_widget_show (w); gtk_widget_set_no_show_all(GTK_WIDGET(gr->gde_start), TRUE); gr->gcb_period = GTK_COMBO_BOX(gtk_builder_get_object (builder, "GCB_PeriodType")); gr->gsb_mult = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "GSB_Mult")); gr->gcb_eom = GTK_CHECK_BUTTON(gtk_builder_get_object (builder, "GCB_EndOfMonth")); gr->nth_weekday = GTK_CHECK_BUTTON(gtk_builder_get_object (builder, "GCB_NthWeekday")); gtk_widget_set_no_show_all(GTK_WIDGET(gr->gcb_eom), TRUE); gtk_widget_set_no_show_all(GTK_WIDGET(gr->nth_weekday), TRUE); gtk_container_add( GTK_CONTAINER(&gr->widget), GTK_WIDGET(vb) ); gnc_recurrence_set(gr, &gr->recurrence); something_changed( GTK_WIDGET(gr), gr); /* Setup the signals */ g_signal_connect( G_OBJECT(gr->gde_start), "date_changed", G_CALLBACK(something_changed), gr ); g_signal_connect( G_OBJECT(gr->gcb_period), "changed", G_CALLBACK(something_changed), gr ); g_signal_connect( G_OBJECT(gr->gsb_mult), "value-changed", G_CALLBACK(something_changed), gr ); g_signal_connect( G_OBJECT(gr->gcb_eom), "toggled", G_CALLBACK(something_changed), gr ); g_signal_connect( G_OBJECT(gr->nth_weekday), "toggled", G_CALLBACK(something_changed), gr ); gtk_widget_show_all( GTK_WIDGET(&gr->widget) ); gtk_builder_connect_signals(builder, gr); g_object_unref(G_OBJECT(builder)); }
/* * Create a new GncDateEdit widget from a glade file. The widget * generated is set to today's date, and will not show a time as part * of the date. This function does not use any of the arguments * passed by glade. */ GtkWidget * gnc_date_edit_new_glade (gchar *widget_name, gchar *string1, gchar *string2, gint int1, gint int2) { GtkWidget *widget; /* None of the standard glade arguments are used. */ widget = gnc_date_edit_new(time(NULL), FALSE, FALSE); gtk_widget_show(widget); return widget; }
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(" "); }
void gnc_frequency_init(GncFrequency *gf) { int i; GtkVBox* vb; GtkWidget* o; GtkAdjustment* adj; static const struct comboBoxTuple { char *name; void (*fn)(); } comboBoxes[] = { { "freq_combobox", freq_combo_changed }, { "semimonthly_first", semimonthly_sel_changed }, { "semimonthly_first_weekend", semimonthly_sel_changed }, { "semimonthly_second", semimonthly_sel_changed }, { "semimonthly_second_weekend", semimonthly_sel_changed }, { "monthly_day", monthly_sel_changed }, { "monthly_weekend", monthly_sel_changed }, { NULL, NULL } }; static const struct spinvalTuple { char *name; void (*fn)(); } spinVals[] = { { "daily_spin", spin_changed_helper }, { "weekly_spin", spin_changed_helper }, { "semimonthly_spin", spin_changed_helper }, { "monthly_spin", spin_changed_helper }, { NULL, NULL } }; gf->gxml = gnc_glade_xml_new("sched-xact.glade", "gncfreq_vbox"); o = glade_xml_get_widget(gf->gxml, "gncfreq_nb"); gf->nb = GTK_NOTEBOOK(o); o = glade_xml_get_widget(gf->gxml, "freq_combobox"); gf->freqComboBox = GTK_COMBO_BOX(o); gf->startDate = GNC_DATE_EDIT(gnc_date_edit_new(time(NULL), FALSE, FALSE)); /* Add the new widget to the table. */ { gint dont_expand_or_fill = 0; GtkWidget *table = glade_xml_get_widget(gf->gxml, "gncfreq_table"); gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(gf->startDate), 1, 2, 1, 2, dont_expand_or_fill, 0, 0, 0); } vb = GTK_VBOX(glade_xml_get_widget(gf->gxml, "gncfreq_vbox")); gf->vb = vb; gtk_container_add(GTK_CONTAINER(&gf->widget), GTK_WIDGET(gf->vb)); /* initialize the combo boxes */ for (i = 0; comboBoxes[i].name != NULL; i++) { o = glade_xml_get_widget(gf->gxml, comboBoxes[i].name); gtk_combo_box_set_active(GTK_COMBO_BOX(o), 0); if (comboBoxes[i].fn != NULL) { g_signal_connect(o, "changed", G_CALLBACK(comboBoxes[i].fn), gf); } } /* initialize the spin buttons */ for (i = 0; spinVals[i].name != NULL; i++) { if (spinVals[i].fn != NULL) { o = glade_xml_get_widget(gf->gxml, spinVals[i].name); adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(o)); g_signal_connect(adj, "value_changed", G_CALLBACK(spinVals[i].fn), gf); } } /* initialize the weekly::day-of-week checkbox-selection hooks */ for (i = 0; i < 7; i++) { o = glade_xml_get_widget(gf->gxml, CHECKBOX_NAMES[i]); g_signal_connect(o, "clicked", G_CALLBACK(weekly_days_changed), gf); } gtk_widget_show_all(GTK_WIDGET(&gf->widget)); /* respond to start date changes */ g_signal_connect(gf->startDate, "date_changed", G_CALLBACK(start_date_changed), gf); }
static gint sxftd_init( SXFromTransInfo *sxfti ) { GtkWidget *w; const char *transName; gint pos; GList *schedule = NULL; time64 start_tt; struct tm *tmpTm; GDate date, nextDate; if ( ! sxfti->sx ) { return -1; } if ( ! sxfti->trans ) { return -2; } if ( xaccTransIsOpen( sxfti->trans ) ) { return SXFTD_ERRNO_OPEN_XACTION; } /* Setup Widgets */ { sxfti->ne_but = GTK_TOGGLE_BUTTON(gtk_builder_get_object(sxfti->builder, "never_end_button")); sxfti->ed_but = GTK_TOGGLE_BUTTON(gtk_builder_get_object(sxfti->builder, "end_on_date_button")); sxfti->oc_but = GTK_TOGGLE_BUTTON(gtk_builder_get_object(sxfti->builder, "n_occurrences_button")); sxfti->n_occurences = GTK_ENTRY(gtk_builder_get_object(sxfti->builder, "n_occurrences_entry")); } /* Get the name from the transaction, try that as the initial SX name. */ transName = xaccTransGetDescription( sxfti->trans ); xaccSchedXactionSetName( sxfti->sx, transName ); sxfti->name = GTK_ENTRY(gtk_builder_get_object(sxfti->builder, "name_entry" )); pos = 0; gtk_editable_insert_text( GTK_EDITABLE(sxfti->name), transName, (strlen(transName) * sizeof(char)), &pos ); sxfti_attach_callbacks(sxfti); /* Setup the example calendar and related data structures. */ { int num_marks = SXFTD_EXCAL_NUM_MONTHS * 31; w = GTK_WIDGET(gtk_builder_get_object(sxfti->builder, "ex_cal_frame" )); sxfti->dense_cal_model = gnc_dense_cal_store_new(num_marks); sxfti->example_cal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model(GNC_DENSE_CAL_MODEL(sxfti->dense_cal_model))); g_object_ref_sink(sxfti->example_cal); g_assert(sxfti->example_cal); gnc_dense_cal_set_num_months( sxfti->example_cal, SXFTD_EXCAL_NUM_MONTHS ); gnc_dense_cal_set_months_per_col( sxfti->example_cal, SXFTD_EXCAL_MONTHS_PER_COL ); gtk_container_add( GTK_CONTAINER(w), GTK_WIDGET(sxfti->example_cal) ); } /* Setup the start and end dates as GNCDateEdits */ { GtkWidget *paramTable = GTK_WIDGET(gtk_builder_get_object(sxfti->builder, "param_table" )); sxfti->startDateGDE = GNC_DATE_EDIT( gnc_date_edit_new (gnc_time (NULL), FALSE, FALSE)); gtk_table_attach( GTK_TABLE(paramTable), GTK_WIDGET( sxfti->startDateGDE ), 1, 2, 2, 3, (GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0 ); g_signal_connect( sxfti->startDateGDE, "date-changed", G_CALLBACK( sxftd_update_excal_adapt ), sxfti ); } { GtkWidget *endDateBox = GTK_WIDGET(gtk_builder_get_object(sxfti->builder, "end_date_hbox" )); sxfti->endDateGDE = GNC_DATE_EDIT( gnc_date_edit_new (gnc_time (NULL), FALSE, FALSE)); gtk_box_pack_start( GTK_BOX( endDateBox ), GTK_WIDGET( sxfti->endDateGDE ), TRUE, TRUE, 0 ); g_signal_connect( sxfti->endDateGDE, "date-changed", G_CALLBACK( sxftd_update_excal_adapt ), sxfti ); } /* Setup the initial start date for user display/confirmation */ /* compute good initial date. */ start_tt = xaccTransGetDate( sxfti->trans ); gnc_gdate_set_time64( &date, start_tt ); sxfti->freq_combo = GTK_COMBO_BOX(gtk_builder_get_object(sxfti->builder, "freq_combo_box")); gtk_combo_box_set_active(GTK_COMBO_BOX(sxfti->freq_combo), 0); g_signal_connect( sxfti->freq_combo, "changed", G_CALLBACK(sxftd_freq_combo_changed), sxfti ); sxftd_update_schedule( sxfti, &date, &schedule); recurrenceListNextInstance(schedule, &date, &nextDate); recurrenceListFree(&schedule); start_tt = gnc_time64_get_day_start_gdate (&nextDate); gnc_date_edit_set_time( sxfti->startDateGDE, start_tt ); g_signal_connect( G_OBJECT(sxfti->name), "destroy", G_CALLBACK(sxftd_destroy), sxfti ); sxftd_update_example_cal( sxfti ); return 0; }
/** 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; }
static GtkWidget * gnc_stock_split_assistant_create (StockSplitInfo *info) { GtkBuilder *builder; GtkWidget *window; builder = gtk_builder_new(); gnc_builder_add_from_file (builder , "assistant-stock-split.glade", "stock_split_assistant"); window = GTK_WIDGET(gtk_builder_get_object (builder, "stock_split_assistant")); info->window = window; // Set the style context for this assistant so it can be easily manipulated with css gnc_widget_set_style_context (GTK_WIDGET(window), "GncAssistStockSplit"); /* Enable buttons on first, second, fourth and last page. */ gtk_assistant_set_page_complete (GTK_ASSISTANT (window), GTK_WIDGET(gtk_builder_get_object(builder, "intro_page_label")), TRUE); gtk_assistant_set_page_complete (GTK_ASSISTANT (window), GTK_WIDGET(gtk_builder_get_object(builder, "stock_account_page")), TRUE); gtk_assistant_set_page_complete (GTK_ASSISTANT (window), GTK_WIDGET(gtk_builder_get_object(builder, "stock_cash_page")), TRUE); gtk_assistant_set_page_complete (GTK_ASSISTANT (window), GTK_WIDGET(gtk_builder_get_object(builder, "finish_page_label")), TRUE); /* Account page Widgets */ { GtkTreeView *view; GtkListStore *store; GtkTreeSelection *selection; GtkCellRenderer *renderer; GtkTreeViewColumn *column; info->account_view = GTK_WIDGET(gtk_builder_get_object(builder, "account_view")); view = GTK_TREE_VIEW(info->account_view); // Set grid lines option to preference gtk_tree_view_set_grid_lines (GTK_TREE_VIEW(view), gnc_tree_view_get_grid_lines_pref ()); store = gtk_list_store_new(NUM_SPLIT_COLS, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING, 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(_("Account"), renderer, "text", SPLIT_COL_FULLNAME, NULL); gtk_tree_view_append_column(view, column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Symbol"), renderer, "text", SPLIT_COL_MNEMONIC, NULL); gtk_tree_view_append_column(view, column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Shares"), renderer, "text", SPLIT_COL_SHARES, NULL); gtk_tree_view_append_column(view, column); selection = gtk_tree_view_get_selection(view); gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE); g_signal_connect (selection, "changed", G_CALLBACK (selection_changed_cb), info); } /* Details Page Widgets */ { GtkWidget *table; GtkWidget *amount; GtkWidget *date; GtkWidget *label; table = GTK_WIDGET(gtk_builder_get_object(builder, "stock_details_table")); info->description_entry = GTK_WIDGET(gtk_builder_get_object(builder, "description_entry")); date = gnc_date_edit_new (gnc_time (NULL), FALSE, FALSE); gtk_grid_attach (GTK_GRID(table), date, 1, 0, 1, 1); gtk_widget_show (date); info->date_edit = date; label = GTK_WIDGET(gtk_builder_get_object(builder, "date_label")); gnc_date_make_mnemonic_target (GNC_DATE_EDIT(date), label); amount = gnc_amount_edit_new (); g_signal_connect (amount, "changed", G_CALLBACK (gnc_stock_split_details_valid_cb), info); gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT (amount), TRUE); gtk_grid_attach (GTK_GRID(table), amount, 1, 1, 1, 1); gtk_widget_show (amount); info->distribution_edit = amount; label = GTK_WIDGET(gtk_builder_get_object(builder, "distribution_label")); gtk_label_set_mnemonic_widget(GTK_LABEL(label), amount); amount = gnc_amount_edit_new (); gnc_amount_edit_set_print_info (GNC_AMOUNT_EDIT (amount), gnc_default_price_print_info ()); g_signal_connect (amount, "changed", G_CALLBACK (gnc_stock_split_details_valid_cb), info); gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT (amount), TRUE); gtk_grid_attach (GTK_GRID(table), amount, 1, 5, 1, 1); gtk_widget_show (amount); info->price_edit = amount; label = GTK_WIDGET(gtk_builder_get_object(builder, "price_label")); gtk_label_set_mnemonic_widget(GTK_LABEL(label), amount); info->price_currency_edit = gnc_currency_edit_new(); gnc_currency_edit_set_currency (GNC_CURRENCY_EDIT(info->price_currency_edit), gnc_default_currency()); gtk_widget_show (info->price_currency_edit); gtk_grid_attach (GTK_GRID(table), info->price_currency_edit, 1, 6, 1, 1); } /* Cash page Widgets */ { GtkWidget *box; GtkWidget *tree; GtkWidget *amount; GtkWidget *label; GtkWidget *scroll; GtkTreeSelection *selection; box = GTK_WIDGET(gtk_builder_get_object(builder, "cash_box")); amount = gnc_amount_edit_new (); g_signal_connect (amount, "changed", G_CALLBACK (gnc_stock_split_cash_valid_cb), info); gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT (amount), TRUE); gtk_box_pack_start (GTK_BOX (box), amount, TRUE, TRUE, 0); info->cash_edit = amount; label = GTK_WIDGET(gtk_builder_get_object(builder, "cash_label")); gtk_label_set_mnemonic_widget(GTK_LABEL(label), amount); info->memo_entry = GTK_WIDGET(gtk_builder_get_object(builder, "memo_entry")); /* income tree */ tree = GTK_WIDGET(gnc_tree_view_account_new (FALSE)); info->income_tree = tree; gnc_tree_view_account_set_filter (GNC_TREE_VIEW_ACCOUNT (tree), gnc_stock_split_assistant_view_filter_income, NULL, /* user data */ NULL /* destroy callback */); gtk_widget_show (tree); gtk_tree_view_expand_all (GTK_TREE_VIEW(tree)); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(tree)); gtk_tree_selection_unselect_all (selection); g_signal_connect (selection, "changed", G_CALLBACK (gnc_stock_split_cash_valid_cb), info); label = GTK_WIDGET(gtk_builder_get_object(builder, "income_label")); gtk_label_set_mnemonic_widget (GTK_LABEL(label), tree); scroll = GTK_WIDGET(gtk_builder_get_object(builder, "income_scroll")); gtk_container_add (GTK_CONTAINER (scroll), tree); /* asset tree */ tree = GTK_WIDGET(gnc_tree_view_account_new (FALSE)); info->asset_tree = tree; gnc_tree_view_account_set_filter (GNC_TREE_VIEW_ACCOUNT (tree), gnc_stock_split_assistant_view_filter_asset, NULL /* user data */, NULL /* destroy callback */); gtk_widget_show (tree); label = GTK_WIDGET(gtk_builder_get_object(builder, "asset_label")); gtk_label_set_mnemonic_widget (GTK_LABEL(label), tree); scroll = GTK_WIDGET(gtk_builder_get_object(builder, "asset_scroll")); gtk_container_add (GTK_CONTAINER (scroll), tree); gtk_tree_view_expand_all (GTK_TREE_VIEW(tree)); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(tree)); gtk_tree_selection_unselect_all (selection); g_signal_connect (selection, "changed", G_CALLBACK (gnc_stock_split_cash_valid_cb), info); } g_signal_connect (G_OBJECT(window), "destroy", G_CALLBACK (gnc_stock_split_assistant_window_destroy_cb), info); gtk_builder_connect_signals(builder, info); g_object_unref(G_OBJECT(builder)); return window; }
/******************************************************* * Create the Assistant *******************************************************/ static GtkWidget * csv_export_assistant_create (CsvExportInfo *info) { GtkBuilder *builder; GtkWidget *window; GtkWidget *box, *h_box; GtkWidget *button; GtkWidget *table, *hbox; time64 start_time, end_time; builder = gtk_builder_new(); gnc_builder_add_from_file (builder , "assistant-csv-export.glade", "CSV Export Assistant"); window = GTK_WIDGET(gtk_builder_get_object (builder, "CSV Export Assistant")); info->window = window; /* Set the assistant colors */ gnc_assistant_set_colors (GTK_ASSISTANT (info->window)); /* Load default settings */ load_settings (info); /* Start Page */ info->start_page = GTK_WIDGET(gtk_builder_get_object(builder, "start_page")); info->start_label = GTK_WIDGET(gtk_builder_get_object(builder, "start_label")); info->custom_entry = GTK_WIDGET(gtk_builder_get_object(builder, "custom_entry")); gtk_widget_set_sensitive (info->custom_entry, FALSE); /* Account Page */ info->account_page = GTK_WIDGET(gtk_builder_get_object(builder, "account_page")); if (info->export_type == XML_EXPORT_TREE) gtk_widget_destroy (info->account_page); else { GtkTreeView *tree_view; GtkTreeSelection *selection; GtkWidget *box, *label; info->csva.acct_info = GTK_WIDGET(gtk_builder_get_object (builder, "acct_info_vbox")); info->csva.num_acct_label = GTK_WIDGET(gtk_builder_get_object (builder, "num_accounts_label")); tree_view = gnc_tree_view_account_new (FALSE); info->csva.account_treeview = GTK_WIDGET(tree_view); selection = gtk_tree_view_get_selection (tree_view); gtk_tree_selection_set_mode (selection, GTK_SELECTION_EXTENDED); g_signal_connect (G_OBJECT(selection), "changed", G_CALLBACK(csv_export_account_changed_cb), info); gtk_widget_show (info->csva.account_treeview); box = GTK_WIDGET(gtk_builder_get_object (builder, "account_scroll")); gtk_container_add (GTK_CONTAINER(box), info->csva.account_treeview); label = GTK_WIDGET(gtk_builder_get_object (builder, "accounts_label")); gtk_label_set_mnemonic_widget (GTK_LABEL(label), GTK_WIDGET(tree_view)); /* select subaccounts button */ button = GTK_WIDGET(gtk_builder_get_object (builder, "select_subaccounts_button")); info->csva.select_button = button; g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(csv_export_select_subaccounts_clicked_cb), info); g_signal_connect (G_OBJECT(info->csva.account_treeview), "cursor_changed", G_CALLBACK(csv_export_cursor_changed_cb), info); /* Set the date info */ button = GTK_WIDGET(gtk_builder_get_object (builder, "show_range")); /* Earliest and Latest in Book */ start_time = get_earliest_in_book (gnc_get_current_book()); end_time = gnc_time (NULL); info->csvd.start_time = start_time; info->csvd.end_time = end_time; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), FALSE); table = GTK_WIDGET(gtk_builder_get_object (builder, "select_range_table")); info->csvd.table = table; gtk_widget_set_sensitive (GTK_WIDGET(table), FALSE); info->csvd.start_date_choose = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_choose")); info->csvd.start_date_today = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_today")); info->csvd.end_date_choose = GTK_WIDGET(gtk_builder_get_object (builder, "end_date_choose")); info->csvd.end_date_today = GTK_WIDGET(gtk_builder_get_object (builder, "end_date_today")); /* Start date info */ info->csvd.start_date = gnc_date_edit_new (gnc_time (NULL), FALSE, FALSE); hbox = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_hbox")); gtk_box_pack_start (GTK_BOX(hbox), info->csvd.start_date, TRUE, TRUE, 0); gtk_widget_show (info->csvd.start_date); gnc_date_edit_set_time (GNC_DATE_EDIT(info->csvd.start_date), start_time); g_signal_connect (G_OBJECT(info->csvd.start_date), "date-changed", G_CALLBACK(csv_export_date_changed_cb), info); /* End date info */ info->csvd.end_date = gnc_date_edit_new (gnc_time (NULL), FALSE, FALSE); hbox = GTK_WIDGET(gtk_builder_get_object (builder, "end_date_hbox")); gtk_box_pack_start (GTK_BOX(hbox), info->csvd.end_date, TRUE, TRUE, 0); gtk_widget_show (info->csvd.end_date); gnc_date_edit_set_time (GNC_DATE_EDIT(info->csvd.end_date), end_time); g_signal_connect (G_OBJECT (info->csvd.end_date), "date-changed", G_CALLBACK (csv_export_date_changed_cb), info); /* Load Accounts */ show_acct_type_accounts (info); update_accounts_tree (info); } /* File chooser Page */ info->file_page = GTK_WIDGET(gtk_builder_get_object(builder, "file_page")); info->file_chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_SAVE); button = gtk_button_new_from_stock (GTK_STOCK_OK); gtk_widget_set_size_request (button, 100, -1); gtk_widget_show (button); h_box = gtk_hbox_new (TRUE, 0); gtk_box_pack_start(GTK_BOX(h_box), button, FALSE, FALSE, 0); gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(info->file_chooser), h_box); g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(csv_export_file_chooser_confirm_cb), info); box = GTK_WIDGET(gtk_builder_get_object (builder, "file_page")); gtk_box_pack_start (GTK_BOX (box), info->file_chooser, TRUE, TRUE, 6); gtk_widget_show (info->file_chooser); /* Finish Page */ info->finish_label = GTK_WIDGET(gtk_builder_get_object (builder, "end_page")); /* Summary Page */ info->summary_label = GTK_WIDGET(gtk_builder_get_object (builder, "summary_page")); g_signal_connect (G_OBJECT(window), "destroy", G_CALLBACK(csv_export_assistant_destroy_cb), info); gnc_restore_window_size (GNC_PREFS_GROUP, GTK_WINDOW(info->window)); if (gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_SAVE_GEOMETRY)) { GObject *object = gtk_builder_get_object (builder, "paned"); gnc_prefs_bind (GNC_PREFS_GROUP, GNC_PREF_PANED_POS, object, "position"); } gtk_builder_connect_signals (builder, info); g_object_unref (G_OBJECT(builder)); return window; }
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; }
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_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; }
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; }
static gint sxftd_init( SXFromTransInfo *sxfti ) { GtkWidget *w; const char *transName; gint pos; GList *schedule = NULL; time_t start_tt; struct tm *tmpTm; GDate date, nextDate; if ( ! sxfti->sx ) { return -1; } if ( ! sxfti->trans ) { return -2; } if ( xaccTransIsOpen( sxfti->trans ) ) { return SXFTD_ERRNO_OPEN_XACTION; } sxfti_attach_callbacks(sxfti); /* Setup the example calendar and related data structures. */ { int num_marks = SXFTD_EXCAL_NUM_MONTHS * 31; w = GTK_WIDGET(glade_xml_get_widget( sxfti->gxml, SXFTD_EX_CAL_FRAME )); sxfti->dense_cal_model = gnc_dense_cal_store_new(num_marks); sxfti->example_cal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model(GNC_DENSE_CAL_MODEL(sxfti->dense_cal_model))); g_object_ref_sink(sxfti->example_cal); g_assert(sxfti->example_cal); gnc_dense_cal_set_num_months( sxfti->example_cal, SXFTD_EXCAL_NUM_MONTHS ); gnc_dense_cal_set_months_per_col( sxfti->example_cal, SXFTD_EXCAL_MONTHS_PER_COL ); gtk_container_add( GTK_CONTAINER(w), GTK_WIDGET(sxfti->example_cal) ); } /* Setup the start and end dates as GNCDateEdits */ { GtkWidget *paramTable = glade_xml_get_widget( sxfti->gxml, SXFTD_PARAM_TABLE ); sxfti->startDateGDE = GNC_DATE_EDIT( gnc_date_edit_new( time( NULL ), FALSE, FALSE ) ); gtk_table_attach( GTK_TABLE(paramTable), GTK_WIDGET( sxfti->startDateGDE ), 1, 2, 2, 3, (GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0 ); g_signal_connect( sxfti->startDateGDE, "date-changed", G_CALLBACK( sxftd_update_excal_adapt ), sxfti ); } { GtkWidget *endDateBox = glade_xml_get_widget( sxfti->gxml, SXFTD_END_DATE_BOX ); sxfti->endDateGDE = GNC_DATE_EDIT( gnc_date_edit_new( time( NULL ), FALSE, FALSE ) ); gtk_box_pack_start( GTK_BOX( endDateBox ), GTK_WIDGET( sxfti->endDateGDE ), FALSE, TRUE, 0 ); g_signal_connect( sxfti->endDateGDE, "date-changed", G_CALLBACK( sxftd_update_excal_adapt ), sxfti ); } /* Get the name from the transaction, try that as the initial SX name. */ transName = xaccTransGetDescription( sxfti->trans ); xaccSchedXactionSetName( sxfti->sx, transName ); /* Setup the initial start date for user display/confirmation */ /* compute good initial date. */ start_tt = xaccTransGetDate( sxfti->trans ); g_date_set_time_t( &date, start_tt ); w = glade_xml_get_widget(sxfti->gxml, SXFTD_FREQ_COMBO_BOX); gtk_combo_box_set_active(GTK_COMBO_BOX(w), 0); g_signal_connect( w, "changed", G_CALLBACK(sxftd_freq_combo_changed), sxfti ); sxftd_update_schedule( sxfti, &date, &schedule); recurrenceListNextInstance(schedule, &date, &nextDate); recurrenceListFree(&schedule); tmpTm = g_new0( struct tm, 1 ); g_date_to_struct_tm( &nextDate, tmpTm ); start_tt = mktime( tmpTm ); g_free( tmpTm ); gnc_date_edit_set_time( sxfti->startDateGDE, start_tt ); w = glade_xml_get_widget( sxfti->gxml, SXFTD_NAME_ENTRY ); pos = 0; gtk_editable_insert_text( GTK_EDITABLE(w), transName, (strlen(transName) * sizeof(char)), &pos ); g_signal_connect( GTK_OBJECT(w), "destroy", G_CALLBACK(sxftd_destroy), sxfti ); sxftd_update_example_cal( sxfti ); return 0; }
GtkWidget * gnc_date_edit_new_ts (Timespec the_time, int show_time, int use_24_format) { return gnc_date_edit_new (the_time.tv_sec, show_time, use_24_format); }