GncSxInstanceModel* gnc_sx_get_instances(GDate *range_end, gboolean include_disabled) { GList *all_sxes = gnc_book_get_schedxactions(gnc_get_current_book())->sx_list; GncSxInstanceModel *instances; g_assert(range_end != NULL); g_assert(g_date_valid(range_end)); instances = gnc_sx_instance_model_new(); instances->include_disabled = include_disabled; instances->range_end = *range_end; if (include_disabled) { instances->sx_instance_list = gnc_g_list_map(all_sxes, (GncGMapFunc)_gnc_sx_gen_instances, range_end); } else { GList *sx_iter = g_list_first(all_sxes); GList *enabled_sxes = NULL; for (; sx_iter != NULL; sx_iter = sx_iter->next) { SchedXaction *sx = (SchedXaction*)sx_iter->data; if (xaccSchedXactionGetEnabled(sx)) { enabled_sxes = g_list_append(enabled_sxes, sx); } } instances->sx_instance_list = gnc_g_list_map(enabled_sxes, (GncGMapFunc)_gnc_sx_gen_instances, range_end); g_list_free(enabled_sxes); } return instances; }
static void gnc_plugin_page_sx_list_cmd_delete(GtkAction *action, GncPluginPageSxList *page) { GncPluginPageSxListPrivate *priv = GNC_PLUGIN_PAGE_SX_LIST_GET_PRIVATE(page); GtkTreeSelection *selection; GList *selected_paths, *to_delete = NULL; GtkTreeModel *model; selection = gtk_tree_view_get_selection(priv->tree_view); selected_paths = gtk_tree_selection_get_selected_rows(selection, &model); if (g_list_length(selected_paths) == 0) { g_warning("no selection for delete."); return; } to_delete = gnc_g_list_map(selected_paths, (GncGMapFunc)_argument_reorder_fn, priv->tree_view); { GList *list; for (list = to_delete; list != NULL; list = list->next) { g_debug("to-delete [%s]\n", xaccSchedXactionGetName((SchedXaction*)list->data)); } } /* FIXME: Does this always refer to only one transaction? Or could multiple SXs be deleted as well? Ideally, the number of to-be-deleted SXs should be mentioned here; see dialog-sx-since-last-run.cpp:807 */ if (gnc_verify_dialog(NULL, FALSE, "%s", _("Do you really want to delete this scheduled transaction?"))) { g_list_foreach(to_delete, (GFunc)_destroy_sx, NULL); } g_list_free(to_delete); g_list_foreach(selected_paths, (GFunc)gtk_tree_path_free, NULL); g_list_free(selected_paths); }
static void gnc_plugin_page_sx_list_cmd_edit(GtkAction *action, GncPluginPageSxList *page) { GncPluginPageSxListPrivate *priv = GNC_PLUGIN_PAGE_SX_LIST_GET_PRIVATE(page); GtkTreeSelection *selection; GList *selected_paths, *to_edit; GtkTreeModel *model; selection = gtk_tree_view_get_selection(priv->tree_view); selected_paths = gtk_tree_selection_get_selected_rows(selection, &model); if (g_list_length(selected_paths) == 0) { g_warning("no selection edit."); return; } to_edit = gnc_g_list_map(selected_paths, (GncGMapFunc)_argument_reorder_fn, priv->tree_view); g_list_foreach(to_edit, (GFunc)_edit_sx, NULL); g_list_free(to_edit); g_list_foreach(selected_paths, (GFunc)gtk_tree_path_free, NULL); g_list_free(selected_paths); }