/******************************************************* * get_filter_times * * get the start and end times from the dialog *******************************************************/ static void get_filter_times (CsvExportInfo *info) { time64 time_val; if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(info->csvd.start_date_choose))) { time_val = gnc_date_edit_get_date (GNC_DATE_EDIT(info->csvd.start_date)); time_val = gnc_time64_get_day_start (time_val); info->csvd.start_time = time_val; } else { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(info->csvd.start_date_today))) info->csvd.start_time = gnc_time64_get_today_start(); else info->csvd.start_time = 0; } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(info->csvd.end_date_choose))) { time_val = gnc_date_edit_get_date (GNC_DATE_EDIT(info->csvd.end_date)); time_val = gnc_time64_get_day_end (time_val); info->csvd.end_time = time_val; } else { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(info->csvd.end_date_today))) info->csvd.end_time = gnc_time64_get_today_end(); else info->csvd.end_time = gnc_time (NULL); } }
Timespec gnc_date_edit_get_date_ts (GNCDateEdit *gde) { Timespec ts = { 0, 0 }; ts.tv_sec = gnc_date_edit_get_date (gde); return ts; }
void gnc_date_edit_get_gdate (GNCDateEdit *gde, GDate *date) { time64 t; g_return_if_fail (gde && date); g_return_if_fail (GNC_IS_DATE_EDIT (gde)); t = gnc_date_edit_get_date(gde); g_date_clear (date, 1); gnc_gdate_set_time64 (date, t); }
static getEndTuple sxftd_get_end_info(SXFromTransInfo *sxfti) { getEndTuple retval; retval.type = BAD_END; g_date_clear( &(retval.end_date), 1 ); retval.n_occurrences = 0; if (gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(sxfti->ne_but))) { retval.type = NEVER_END; return retval; } if (gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(sxfti->ed_but))) { time64 end_tt; retval.type = END_ON_DATE; g_date_clear( &(retval.end_date), 1 ); end_tt = gnc_date_edit_get_date(sxfti->endDateGDE); gnc_gdate_set_time64( &(retval.end_date), end_tt); return retval; } if (gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(sxfti->oc_but) )) { gchar *text, *endptr; guint n_occs; text = gtk_editable_get_chars(GTK_EDITABLE(sxfti->n_occurences), 0, -1); if (text == NULL || strlen(text) == 0) { n_occs = 0; } else { n_occs = strtoul(text, &endptr, 10); if ( !endptr ) { n_occs = -1; } } g_free(text); retval.type = END_AFTER_N_OCCS; retval.n_occurrences = n_occs; return retval; } return retval; }
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(" "); }
/** Retrieve a property specific to this GncPeriodSelect object. This is * nothing more than a dispatch function for routines that can be * called directly. It has the nice feature of allowing a single * function call to retrieve multiple properties. * * @internal */ static void gnc_date_edit_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GNCDateEdit *date_edit = GNC_DATE_EDIT (object); switch (prop_id) { case PROP_TIME: g_value_set_int64 (value, gnc_date_edit_get_date (date_edit)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } }
void gnc_prices_dialog_remove_old_clicked (GtkWidget *widget, gpointer data) { PricesDialog *pdb_dialog = data; GladeXML *xml; GtkWidget *dialog, *button, *date, *label; gint result; gboolean delete_user, delete_last; ENTER(" "); xml = gnc_glade_xml_new ("price.glade", "Deletion Date"); dialog = glade_xml_get_widget (xml, "Deletion Date"); date = glade_xml_get_widget (xml, "date"); label = glade_xml_get_widget (xml, "date_label"); gnc_date_make_mnemonic_target (GNC_DATE_EDIT(date), label); glade_xml_signal_autoconnect_full(xml, gnc_glade_autoconnect_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 = glade_xml_get_widget (xml, "delete_manual"); delete_user = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); button = glade_xml_get_widget (xml, "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(" "); }
/** * Update the example calendar; make sure to take into account the end * specification. **/ static void sxftd_update_example_cal( SXFromTransInfo *sxfti ) { struct tm *tmpTm; time64 tmp_tt; GDate date, startDate, nextDate; GList *schedule = NULL; getEndTuple get; get = sxftd_get_end_info( sxfti ); tmp_tt = gnc_date_edit_get_date( sxfti->startDateGDE ); gnc_gdate_set_time64 (&date, tmp_tt); sxftd_update_schedule(sxfti, &date, &schedule); /* go one day before what's in the box so we can get the correct start * date. */ startDate = date; g_date_subtract_days(&date, 1); g_date_clear(&nextDate, 1); recurrenceListNextInstance(schedule, &date, &nextDate); { gchar *name; /* get the name */ name = NULL; name = gtk_editable_get_chars(GTK_EDITABLE(sxfti->name), 0, -1); gnc_dense_cal_store_update_name(sxfti->dense_cal_model, name); g_free(name); } { gchar *schedule_desc; schedule_desc = recurrenceListToCompactString(schedule); gnc_dense_cal_store_update_info(sxfti->dense_cal_model, schedule_desc); g_free(schedule_desc); } /* Set End date sensitivity */ gtk_widget_set_sensitive( GTK_WIDGET(sxfti->endDateGDE), (get.type == END_ON_DATE) ); gtk_widget_set_sensitive( GTK_WIDGET(sxfti->n_occurences), (get.type == END_AFTER_N_OCCS) ); /* Use the day preceding the start date for the store to find the correct real start date */ switch (get.type) { case NEVER_END: gnc_dense_cal_store_update_recurrences_no_end(sxfti->dense_cal_model, &date, schedule); break; case END_ON_DATE: gnc_dense_cal_store_update_recurrences_date_end(sxfti->dense_cal_model, &date, schedule, &get.end_date); break; case END_AFTER_N_OCCS: gnc_dense_cal_store_update_recurrences_count_end(sxfti->dense_cal_model, &date, schedule, get.n_occurrences); break; default: g_warning("unknown get.type [%d]\n", get.type); break; } gnc_dense_cal_set_month( sxfti->example_cal, g_date_get_month( &startDate ) ); gnc_dense_cal_set_year( sxfti->example_cal, g_date_get_year( &startDate ) ); recurrenceListFree(&schedule); }
static guint sxftd_compute_sx(SXFromTransInfo *sxfti) { gchar *name; GDate date; GList *schedule = NULL; getEndTuple end_info; guint sxftd_errno = 0; /* 0 == OK, > 0 means dialog needs to be run again */ SchedXaction *sx = sxfti->sx; /* get the name */ name = gtk_editable_get_chars(GTK_EDITABLE(sxfti->name), 0, -1); xaccSchedXactionSetName(sx, name); g_free(name); gnc_gdate_set_time64( &date, gnc_date_edit_get_date( sxfti->startDateGDE ) ); sxftd_update_schedule(sxfti, &date, &schedule); if (sxftd_errno == 0) { gnc_sx_set_schedule(sx, schedule); xaccSchedXactionSetStartDate( sx, &date ); } end_info = sxftd_get_end_info(sxfti); switch (end_info.type) { case NEVER_END: break; case END_ON_DATE: xaccSchedXactionSetEndDate(sx, &(end_info.end_date)); break; case END_AFTER_N_OCCS: xaccSchedXactionSetNumOccur(sx, end_info.n_occurrences); break; default: sxftd_errno = 2; break; } gnc_sx_set_instance_count( sx, 1 ); /* Set the autocreate, days-in-advance and remind-in-advance values from * options. */ { gboolean autoCreateState, notifyState; gint daysInAdvance; autoCreateState = gnc_prefs_get_bool (GNC_PREFS_GROUP_SXED, GNC_PREF_CREATE_AUTO); notifyState = gnc_prefs_get_bool (GNC_PREFS_GROUP_SXED, GNC_PREF_NOTIFY); xaccSchedXactionSetAutoCreate( sx, autoCreateState, (autoCreateState & notifyState) ); daysInAdvance = gnc_prefs_get_float (GNC_PREFS_GROUP_SXED, GNC_PREF_CREATE_DAYS); xaccSchedXactionSetAdvanceCreation( sx, daysInAdvance ); daysInAdvance = gnc_prefs_get_float (GNC_PREFS_GROUP_SXED, GNC_PREF_REMIND_DAYS); xaccSchedXactionSetAdvanceReminder( sx, daysInAdvance ); } if ( sxftd_add_template_trans( sxfti ) != 0 ) { sxftd_errno = SXFTD_ERRNO_UNBALANCED_XACTION; } return sxftd_errno; }
void gnc_stock_split_assistant_finish (GtkAssistant *assistant, gpointer user_data) { StockSplitInfo *info = user_data; GList *account_commits; GList *node; gnc_numeric amount; Transaction *trans; Account *account; Split *split; time64 date; account = info->acct; g_return_if_fail (account != NULL); amount = gnc_amount_edit_get_amount (GNC_AMOUNT_EDIT (info->distribution_edit)); g_return_if_fail (!gnc_numeric_zero_p (amount)); gnc_suspend_gui_refresh (); trans = xaccMallocTransaction (gnc_get_current_book ()); xaccTransBeginEdit (trans); xaccTransSetCurrency (trans, gnc_default_currency ()); date = gnc_date_edit_get_date (GNC_DATE_EDIT (info->date_edit)); xaccTransSetDatePostedSecsNormalized (trans, date); { const char *description; description = gtk_entry_get_text (GTK_ENTRY (info->description_entry)); xaccTransSetDescription (trans, description); } split = xaccMallocSplit (gnc_get_current_book ()); xaccAccountBeginEdit (account); account_commits = g_list_prepend (NULL, account); xaccTransAppendSplit (trans, split); xaccAccountInsertSplit (account, split); xaccSplitSetAmount (split, amount); xaccSplitMakeStockSplit (split); /* Set split-action with gnc_set_num_action which is the same as * xaccSplitSetAction with these arguments */ /* Translators: This string has a disambiguation prefix */ gnc_set_num_action (NULL, split, NULL, Q_("Action Column|Split")); amount = gnc_amount_edit_get_amount (GNC_AMOUNT_EDIT (info->price_edit)); if (gnc_numeric_positive_p (amount)) { QofBook *book; GNCPrice *price; GNCPriceDB *pdb; GNCCurrencyEdit *ce; Timespec ts; ce = GNC_CURRENCY_EDIT (info->price_currency_edit); ts.tv_sec = date; ts.tv_nsec = 0; price = gnc_price_create (gnc_get_current_book ()); gnc_price_begin_edit (price); gnc_price_set_commodity (price, xaccAccountGetCommodity (account)); gnc_price_set_currency (price, gnc_currency_edit_get_currency (ce)); gnc_price_set_time (price, ts); gnc_price_set_source (price, PRICE_SOURCE_STOCK_SPLIT); gnc_price_set_typestr (price, PRICE_TYPE_UNK); gnc_price_set_value (price, amount); gnc_price_commit_edit (price); book = gnc_get_current_book (); pdb = gnc_pricedb_get_db (book); if (!gnc_pricedb_add_price (pdb, price)) gnc_error_dialog (info->window, "%s", _("Error adding price.")); } amount = gnc_amount_edit_get_amount (GNC_AMOUNT_EDIT (info->cash_edit)); if (gnc_numeric_positive_p (amount)) { const char *memo; memo = gtk_entry_get_text (GTK_ENTRY (info->memo_entry)); /* asset split */ account = gnc_tree_view_account_get_selected_account (GNC_TREE_VIEW_ACCOUNT(info->asset_tree)); split = xaccMallocSplit (gnc_get_current_book ()); xaccAccountBeginEdit (account); account_commits = g_list_prepend (account_commits, account); xaccAccountInsertSplit (account, split); xaccTransAppendSplit (trans, split); xaccSplitSetAmount (split, amount); xaccSplitSetValue (split, amount); xaccSplitSetMemo (split, memo); /* income split */ account = gnc_tree_view_account_get_selected_account (GNC_TREE_VIEW_ACCOUNT(info->income_tree)); split = xaccMallocSplit (gnc_get_current_book ()); xaccAccountBeginEdit (account); account_commits = g_list_prepend (account_commits, account); xaccAccountInsertSplit (account, split); xaccTransAppendSplit (trans, split); xaccSplitSetAmount (split, gnc_numeric_neg (amount)); xaccSplitSetValue (split, gnc_numeric_neg (amount)); xaccSplitSetMemo (split, memo); } xaccTransCommitEdit (trans); for (node = account_commits; node; node = node->next) xaccAccountCommitEdit (node->data); g_list_free (account_commits); gnc_resume_gui_refresh (); gnc_close_gui_component_by_data (ASSISTANT_STOCK_SPLIT_CM_CLASS, info); }
/** * Update the example calendar; make sure to take into account the end * specification. **/ static void sxftd_update_example_cal( SXFromTransInfo *sxfti ) { struct tm *tmpTm; time_t tmp_tt; GDate date, startDate, nextDate; GList *schedule = NULL; getEndTuple get; get = sxftd_get_end_info( sxfti ); tmp_tt = gnc_date_edit_get_date( sxfti->startDateGDE ); tmpTm = g_new0( struct tm, 1 ); *tmpTm = *localtime( &tmp_tt ); g_date_clear(&date, 1); g_date_set_day( &date, tmpTm->tm_mday ); g_date_set_month( &date, tmpTm->tm_mon + 1 ); g_date_set_year( &date, tmpTm->tm_year + 1900 ); g_free( tmpTm ); sxftd_update_schedule(sxfti, &date, &schedule); /* go one day before what's in the box so we can get the correct start * date. */ startDate = date; g_date_subtract_days(&date, 1); g_date_clear(&nextDate, 1); recurrenceListNextInstance(schedule, &date, &nextDate); { GtkWidget *w; gchar *name; /* get the name */ w = glade_xml_get_widget(sxfti->gxml, SXFTD_NAME_ENTRY); name = gtk_editable_get_chars(GTK_EDITABLE(w), 0, -1); gnc_dense_cal_store_update_name(sxfti->dense_cal_model, name); g_free(name); } { gchar *schedule_desc; schedule_desc = recurrenceListToCompactString(schedule); gnc_dense_cal_store_update_info(sxfti->dense_cal_model, schedule_desc); g_free(schedule_desc); } switch (get.type) { case NEVER_END: gnc_dense_cal_store_update_recurrences_no_end(sxfti->dense_cal_model, &startDate, schedule); break; case END_ON_DATE: gnc_dense_cal_store_update_recurrences_date_end(sxfti->dense_cal_model, &startDate, schedule, &get.end_date); break; case END_AFTER_N_OCCS: gnc_dense_cal_store_update_recurrences_count_end(sxfti->dense_cal_model, &startDate, schedule, get.n_occurrences); break; default: g_warning("unknown get.type [%d]\n", get.type); break; } gnc_dense_cal_set_month( sxfti->example_cal, g_date_get_month( &startDate ) ); gnc_dense_cal_set_year( sxfti->example_cal, g_date_get_year( &startDate ) ); recurrenceListFree(&schedule); }
static getEndTuple sxftd_get_end_info(SXFromTransInfo *sxfti) { getEndTuple retval; GtkWidget *w; retval.type = BAD_END; g_date_clear( &(retval.end_date), 1 ); retval.n_occurrences = 0; w = glade_xml_get_widget(sxfti->gxml, SXFTD_NEVER_END_BUTTON); if (gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(w))) { retval.type = NEVER_END; return retval; } w = glade_xml_get_widget(sxfti->gxml, SXFTD_END_ON_DATE_BUTTON); if (gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(w))) { time_t end_tt; retval.type = END_ON_DATE; g_date_clear( &(retval.end_date), 1 ); end_tt = gnc_date_edit_get_date(sxfti->endDateGDE); g_date_set_time_t( &(retval.end_date), end_tt); return retval; } w = glade_xml_get_widget(sxfti->gxml, SXFTD_N_OCCURRENCES_BUTTON); if (gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(w) )) { gchar *text, *endptr; guint n_occs; w = glade_xml_get_widget(sxfti->gxml, SXFTD_N_OCCURRENCES_ENTRY); text = gtk_editable_get_chars(GTK_EDITABLE(w), 0, -1); if (text == NULL || strlen(text) == 0) { n_occs = 0; } else { n_occs = strtoul(text, &endptr, 10); if ( !endptr ) { n_occs = -1; } } g_free(text); if (n_occs > 0) { retval.type = END_AFTER_N_OCCS; retval.n_occurrences = n_occs; return retval; } } return retval; }