39 #include "dialog-utils.h"
41 #include "dialog-sx-since-last-run.h"
47 #include "gnc-ledger-display.h"
50 #include "gnc-ledger-display2.h"
51 #include "gnc-plugin-page-register2.h"
54 #include "gnc-component-manager.h"
55 #include "gnc-gui-query.h"
56 #include "gnc-session.h"
59 #define G_LOG_DOMAIN "gnc.gui.sx.slr"
61 G_GNUC_UNUSED
static QofLogModule log_module = GNC_MOD_GUI_SX;
63 #define DIALOG_SX_SINCE_LAST_RUN_CM_CLASS "dialog-sx-since-last-run"
70 GtkTreeView *instance_view;
71 GtkToggleButton *review_created_txns_toggle;
77 static GObjectClass *parent_class = NULL;
96 GType gnc_sx_slr_tree_model_adapter_get_type(
void);
98 static void gnc_sx_slr_tree_model_adapter_interface_init(gpointer g_iface, gpointer iface_data);
99 static void gnc_sx_slr_tree_model_adapter_init(GTypeInstance *instance, gpointer klass);
101 static void gnc_sx_slr_tree_model_adapter_dispose(GObject *obj);
102 static void gnc_sx_slr_tree_model_adapter_finalize(GObject *obj);
113 void gnc_sx_slr_model_effect_change(
GncSxSlrTreeModelAdapter *model, gboolean auto_create_only, GList **created_transaction_guids, GList **creation_errors);
115 GtkTreeModel* gnc_sx_get_slr_state_model(
void);
117 #define GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER (gnc_sx_slr_tree_model_adapter_get_type ())
118 #define GNC_SX_SLR_TREE_MODEL_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER, GncSxSlrTreeModelAdapter))
119 #define GNC_SX_SLR_TREE_MODEL_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER, GncSxSlrTreeModelAdapterClass))
120 #define GNC_IS_SX_SLR_TREE_MODEL_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER))
121 #define GNC_IS_SX_SLR_TREE_MODEL_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER))
122 #define GNC_SX_SLR_TREE_MODEL_ADAPTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER, GncSxSlrTreeModelAdapterClass))
128 static void close_handler(gpointer user_data);
135 _var_numeric_to_string(
gnc_numeric *value, GString **str)
137 *str = g_string_sized_new(5);
144 gnc_sx_slr_tree_model_adapter_get_type(
void)
146 static GType gsstma_type = 0;
147 if (gsstma_type == 0)
149 static const GTypeInfo info =
154 (GClassInitFunc)gnc_sx_slr_tree_model_adapter_class_init,
159 (GInstanceInitFunc)gnc_sx_slr_tree_model_adapter_init
161 static const GInterfaceInfo itreeModel_info =
163 (GInterfaceInitFunc) gnc_sx_slr_tree_model_adapter_interface_init,
168 gsstma_type = g_type_register_static (G_TYPE_OBJECT,
169 "GncSxSlrTreeModelAdapterType",
171 g_type_add_interface_static(gsstma_type,
181 GObjectClass *obj_class;
183 parent_class = g_type_class_peek_parent(klass);
185 obj_class = G_OBJECT_CLASS(klass);
187 obj_class->dispose = gnc_sx_slr_tree_model_adapter_dispose;
188 obj_class->finalize = gnc_sx_slr_tree_model_adapter_finalize;
191 static GtkTreeModelFlags
192 gsslrtma_get_flags(GtkTreeModel *tree_model)
194 return gtk_tree_model_get_flags(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real));
198 gsslrtma_get_n_columns(GtkTreeModel *tree_model)
200 return gtk_tree_model_get_n_columns(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real));
204 gsslrtma_get_column_type(GtkTreeModel *tree_model, gint index)
206 return gtk_tree_model_get_column_type(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), index);
210 gsslrtma_get_iter(GtkTreeModel *tree_model,
214 return gtk_tree_model_get_iter(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter, path);
218 gsslrtma_get_path(GtkTreeModel *tree_model,
221 return gtk_tree_model_get_path(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter);
225 gsslrtma_get_value(GtkTreeModel *tree_model,
230 gtk_tree_model_get_value(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter, column, value);
234 gsslrtma_iter_next(GtkTreeModel *tree_model,
237 return gtk_tree_model_iter_next(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter);
241 gsslrtma_iter_children(GtkTreeModel *tree_model,
245 return gtk_tree_model_iter_children(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter, parent);
249 gsslrtma_iter_has_child(GtkTreeModel *tree_model,
252 return gtk_tree_model_iter_has_child(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter);
256 gsslrtma_iter_n_children(GtkTreeModel *tree_model,
259 return gtk_tree_model_iter_n_children(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter);
263 gsslrtma_iter_nth_child(GtkTreeModel *tree_model,
268 return gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter, parent, n);
272 gsslrtma_iter_parent(GtkTreeModel *tree_model,
276 return gtk_tree_model_iter_parent(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter, child);
280 gsslrtma_ref_node(GtkTreeModel *tree_model,
283 gtk_tree_model_ref_node(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter);
287 gsslrtma_unref_node(GtkTreeModel *tree_model,
290 gtk_tree_model_unref_node(GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter);
294 gnc_sx_slr_tree_model_adapter_interface_init(gpointer g_iface, gpointer iface_data)
296 GtkTreeModelIface *tree_model = (GtkTreeModelIface*)g_iface;
297 tree_model->get_flags = gsslrtma_get_flags;
298 tree_model->get_n_columns = gsslrtma_get_n_columns;
299 tree_model->get_column_type = gsslrtma_get_column_type;
300 tree_model->get_iter = gsslrtma_get_iter;
301 tree_model->get_path = gsslrtma_get_path;
302 tree_model->get_value = gsslrtma_get_value;
303 tree_model->iter_next = gsslrtma_iter_next;
304 tree_model->iter_children = gsslrtma_iter_children;
305 tree_model->iter_has_child = gsslrtma_iter_has_child;
306 tree_model->iter_n_children = gsslrtma_iter_n_children;
307 tree_model->iter_nth_child = gsslrtma_iter_nth_child;
308 tree_model->iter_parent = gsslrtma_iter_parent;
309 tree_model->ref_node = gsslrtma_ref_node;
310 tree_model->unref_node = gsslrtma_unref_node;
314 gsslrtma_proxy_row_changed(GtkTreeModel *treemodel,
319 g_signal_emit_by_name(user_data,
"row-changed", arg1, arg2);
323 gsslrtma_proxy_row_deleted(GtkTreeModel *treemodel,
327 g_signal_emit_by_name(user_data,
"row-deleted", arg1);
331 gsslrtma_proxy_row_has_child_toggled(GtkTreeModel *treemodel,
336 g_signal_emit_by_name(user_data,
"row-has-child-toggled", arg1, arg2);
340 gsslrtma_proxy_row_inserted(GtkTreeModel *treemodel,
345 g_signal_emit_by_name(user_data,
"row-inserted", arg1, arg2);
349 gsslrtma_proxy_rows_reordered(GtkTreeModel *treemodel,
355 g_signal_emit_by_name(user_data,
"rows-reordered", arg1, arg2, arg3);
361 SLR_MODEL_COL_NAME = 0,
362 SLR_MODEL_COL_INSTANCE_STATE,
363 SLR_MODEL_COL_VARAIBLE_VALUE,
364 SLR_MODEL_COL_INSTANCE_VISIBILITY,
365 SLR_MODEL_COL_VARIABLE_VISIBILITY,
366 SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY,
370 gnc_sx_slr_tree_model_adapter_init(GTypeInstance *instance, gpointer klass)
377 adapter->real = gtk_tree_store_new(6, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
379 g_signal_connect(adapter->real,
"row-changed", G_CALLBACK(gsslrtma_proxy_row_changed), adapter);
380 g_signal_connect(adapter->real,
"row-deleted", G_CALLBACK(gsslrtma_proxy_row_deleted), adapter);
381 g_signal_connect(adapter->real,
"row-has-child-toggled", G_CALLBACK(gsslrtma_proxy_row_has_child_toggled), adapter);
382 g_signal_connect(adapter->real,
"row-inserted", G_CALLBACK(gsslrtma_proxy_row_inserted), adapter);
383 g_signal_connect(adapter->real,
"rows-reordered", G_CALLBACK(gsslrtma_proxy_rows_reordered), adapter);
386 static char* gnc_sx_instance_state_names[] =
396 static GtkTreeModel* _singleton_slr_state_model = NULL;
399 gnc_sx_get_slr_state_model(
void)
401 if (_singleton_slr_state_model == NULL)
406 _singleton_slr_state_model = GTK_TREE_MODEL(gtk_list_store_new(1, G_TYPE_STRING));
407 for (i = 0; i != SX_INSTANCE_STATE_CREATED; i++)
409 gtk_list_store_insert_with_values(GTK_LIST_STORE(_singleton_slr_state_model),
411 SX_INSTANCE_STATE_MAX_STATE + 1,
412 0, _(gnc_sx_instance_state_names[i]), -1);
415 return _singleton_slr_state_model;
419 _consume_excess_rows(GtkTreeStore *store,
int last_index, GtkTreeIter *parent_iter, GtkTreeIter *maybe_invalid_iter)
421 if (last_index == -1)
424 if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(store), maybe_invalid_iter, parent_iter))
430 if (!gtk_tree_model_iter_next(GTK_TREE_MODEL(store), maybe_invalid_iter))
435 while (gtk_tree_store_remove(store, maybe_invalid_iter));
442 GtkTreeIter sx_tree_iter;
444 int instances_index = -1;
446 for (sx_iter = model->instances->sx_instance_list; sx_iter != NULL; sx_iter = sx_iter->next)
452 const GDate *last_occur = xaccSchedXactionGetLastOccurDate(instances->sx);
453 if (last_occur == NULL || !g_date_valid(last_occur))
455 g_stpcpy(last_occur_date_buf, _(
"Never"));
465 if (!gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(model->real), &sx_tree_iter, NULL, ++instances_index))
467 gtk_tree_store_append(model->real, &sx_tree_iter, NULL);
470 gtk_tree_store_set(model->real, &sx_tree_iter,
471 SLR_MODEL_COL_NAME, xaccSchedXactionGetName(instances->sx),
472 SLR_MODEL_COL_INSTANCE_STATE, NULL,
473 SLR_MODEL_COL_VARAIBLE_VALUE, NULL,
474 SLR_MODEL_COL_INSTANCE_VISIBILITY, FALSE,
475 SLR_MODEL_COL_VARIABLE_VISIBILITY, FALSE,
476 SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY, FALSE,
482 GtkTreeIter inst_tree_iter;
484 int instance_index = -1;
486 for (inst_iter = instances->
instance_list; inst_iter != NULL; inst_iter = inst_iter->next)
491 if (!gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(model->real), &inst_tree_iter, &sx_tree_iter, ++instance_index))
493 gtk_tree_store_append(model->real, &inst_tree_iter, &sx_tree_iter);
495 gtk_tree_store_set(model->real, &inst_tree_iter,
496 SLR_MODEL_COL_NAME, instance_date_buf,
497 SLR_MODEL_COL_INSTANCE_STATE, _(gnc_sx_instance_state_names[inst->
state]),
498 SLR_MODEL_COL_VARAIBLE_VALUE, NULL,
499 SLR_MODEL_COL_INSTANCE_VISIBILITY, TRUE,
500 SLR_MODEL_COL_VARIABLE_VISIBILITY, FALSE,
501 SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY, inst->
state != SX_INSTANCE_STATE_CREATED,
506 GList *vars = NULL, *var_iter;
507 GtkTreeIter var_tree_iter;
508 gint visible_variable_index = -1;
511 for (var_iter = vars; var_iter != NULL; var_iter = var_iter->next)
521 _var_numeric_to_string(&var->
value, &tmp_str);
525 tmp_str = g_string_new(_(
"(Need Value)"));
528 if (!gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(model->real),
529 &var_tree_iter, &inst_tree_iter,
530 ++visible_variable_index))
532 gtk_tree_store_append(model->real, &var_tree_iter, &inst_tree_iter);
534 gtk_tree_store_set(model->real, &var_tree_iter,
535 SLR_MODEL_COL_NAME, var->name,
536 SLR_MODEL_COL_INSTANCE_STATE, NULL,
537 SLR_MODEL_COL_VARAIBLE_VALUE, tmp_str->str,
538 SLR_MODEL_COL_INSTANCE_VISIBILITY, FALSE,
539 SLR_MODEL_COL_VARIABLE_VISIBILITY, TRUE,
540 SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY, FALSE,
542 g_string_free(tmp_str, TRUE);
546 _consume_excess_rows(model->real, visible_variable_index, &inst_tree_iter, &var_tree_iter);
551 _consume_excess_rows(model->real, instance_index, &sx_tree_iter, &inst_tree_iter);
554 _consume_excess_rows(model->real, instances_index, NULL, &sx_tree_iter);
560 return slr_model->instances;
566 return _gnc_sx_slr_tree_model_adapter_get_sx_instances(model, iter, TRUE);
570 _gnc_sx_slr_tree_model_adapter_get_sx_instances(
GncSxSlrTreeModelAdapter *model, GtkTreeIter *iter, gboolean check_depth)
573 gint *indices, index;
574 path = gtk_tree_model_get_path(GTK_TREE_MODEL(model), iter);
575 if (check_depth && gtk_tree_path_get_depth(path) != 1)
577 gtk_tree_path_free(path);
580 indices = gtk_tree_path_get_indices(path);
582 gtk_tree_path_free(path);
584 return (
GncSxInstances*)g_list_nth_data(model->instances->sx_instance_list, index);
590 return _gnc_sx_slr_model_get_instance(model, iter, TRUE);
597 gint *indices, instances_index, instance_index;
599 path = gtk_tree_model_get_path(GTK_TREE_MODEL(model), iter);
600 if (check_depth && gtk_tree_path_get_depth(path) != 2)
602 gtk_tree_path_free(path);
605 indices = gtk_tree_path_get_indices(path);
606 instances_index = indices[0];
607 instance_index = indices[1];
608 gtk_tree_path_free(path);
610 instances = (
GncSxInstances*)g_list_nth_data(model->instances->sx_instance_list, instances_index);
611 if (instance_index < 0 || instance_index >= g_list_length(instances->
instance_list))
623 gint *indices, variable_index;
627 instance = _gnc_sx_slr_model_get_instance(model, iter, FALSE);
628 if (instance == NULL)
634 path = gtk_tree_model_get_path(GTK_TREE_MODEL(model), iter);
635 if (gtk_tree_path_get_depth(path) != 3)
637 gtk_tree_path_free(path);
640 indices = gtk_tree_path_get_indices(path);
641 variable_index = indices[2];
642 gtk_tree_path_free(path);
644 if (variable_index < 0 || variable_index >= g_list_length(variables))
646 g_list_free(variables);
650 if (instance_loc != NULL)
652 *instance_loc = instance;
658 GList *list_iter = variables;
659 for (; list_iter != NULL; list_iter = list_iter->next)
664 if (variable_index-- == 0)
672 g_list_free(variables);
680 _variable_list_index(GList *variables,
GncSxVariable *variable)
683 for (; variables != NULL; variables = variables->next)
702 indices[0] = g_list_index(model->instances->sx_instance_list, instance->
parent);
703 if (indices[0] == -1)
706 if (indices[1] == -1)
709 indices[2] = _variable_list_index(variables, variable);
710 g_list_free(variables);
711 if (indices[2] == -1)
713 path = gtk_tree_path_new_from_indices(indices[0], indices[1], indices[2], -1);
722 gsslrtma_populate_tree_store(model);
730 gsslrtma_populate_tree_store(model);
737 GtkTreeIter tree_iter;
741 for (iter = instances->sx_instance_list; iter != NULL; iter = iter->next, index++)
744 if (instances->sx == to_remove_sx)
749 if (!gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(model->real), &tree_iter, NULL, index))
751 gtk_tree_store_remove(model->real, &tree_iter);
753 gnc_sx_instance_model_remove_sx_instances(instances, to_remove_sx);
757 gnc_sx_slr_tree_model_adapter_dispose(GObject *obj)
760 g_return_if_fail(obj != NULL);
761 adapter = GNC_SX_SLR_TREE_MODEL_ADAPTER(obj);
762 g_return_if_fail(!adapter->disposed);
763 adapter->disposed = TRUE;
765 g_object_unref(G_OBJECT(adapter->instances));
766 adapter->instances = NULL;
767 g_object_unref(G_OBJECT(adapter->real));
768 adapter->real = NULL;
770 G_OBJECT_CLASS(parent_class)->dispose(obj);
774 gnc_sx_slr_tree_model_adapter_finalize(GObject *obj)
776 g_return_if_fail(obj != NULL);
777 G_OBJECT_CLASS(parent_class)->finalize(obj);
784 rtn = GNC_SX_SLR_TREE_MODEL_ADAPTER(g_object_new(GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER, NULL));
785 rtn->instances = instances;
786 g_object_ref(G_OBJECT(rtn->instances));
787 gsslrtma_populate_tree_store(rtn);
788 g_signal_connect(G_OBJECT(rtn->instances),
"added", (GCallback)gsslrtma_added_cb, (gpointer)rtn);
789 rtn->updated_cb_id = g_signal_connect(G_OBJECT(rtn->instances),
"updated", (GCallback)gsslrtma_updated_cb, (gpointer)rtn);
790 g_signal_connect(G_OBJECT(rtn->instances),
"removing", (GCallback)gsslrtma_removing_cb, (gpointer)rtn);
795 gnc_sx_sxsincelast_book_opened(
void)
797 GList *auto_created_txns = NULL;
817 gnc_ui_sx_since_last_run_dialog(inst_model, auto_created_txns);
818 auto_created_txns = NULL;
830 (
"There are no Scheduled Transactions to be entered at this time. "
831 "(One transaction automatically created)",
832 "There are no Scheduled Transactions to be entered at this time. "
833 "(%d transactions automatically created)",
838 g_list_free(auto_created_txns);
839 g_object_unref(G_OBJECT(inst_model));
843 instance_state_changed_cb(GtkCellRendererText *cell,
848 GtkTreeIter tree_iter;
851 GncSxInstanceState new_state;
853 for (i = 0; i < SX_INSTANCE_STATE_CREATED; i++)
855 if (strcmp(value, _(gnc_sx_instance_state_names[i])) == 0)
858 if (i == SX_INSTANCE_STATE_CREATED)
860 g_warning(
"unknown value [%s]", value);
865 if (!gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(dialog->editing_model), &tree_iter, path))
867 g_warning(
"unknown path [%s]", path);
871 inst = gnc_sx_slr_model_get_instance(dialog->editing_model, &tree_iter);
874 g_warning(
"invalid path [%s]", path);
882 variable_value_changed_cb(GtkCellRendererText *cell,
889 GtkTreeIter tree_iter;
893 g_debug(
"variable to [%s] at path [%s]", value, path);
894 if (!gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(dialog->editing_model), &tree_iter, path))
896 g_warning(
"invalid path [%s]", path);
900 if (!gnc_sx_slr_model_get_instance_and_variable(dialog->editing_model, &tree_iter, &inst, &var))
902 g_critical(
"path [%s] doesn't correspond to a valid variable", path);
906 if (!xaccParseAmount(value, TRUE, &parsed_num, &endStr)
909 gchar *value_copy = g_strdup(value);
910 g_debug(
"value=[%s] endStr[%s]", value, endStr);
911 if (strlen(g_strstrip(value_copy)) == 0)
914 gnc_sx_instance_model_set_variable(dialog->editing_model->instances, inst, var, &invalid_num);
918 g_warning(
"error parsing value [%s]", value);
923 gnc_sx_instance_model_set_variable(dialog->editing_model->instances, inst, var, &parsed_num);
927 gnc_ui_sx_since_last_run_dialog(
GncSxInstanceModel *sx_instances, GList *auto_created_txn_guids)
934 builder = gtk_builder_new();
935 gnc_builder_add_from_file (builder,
"dialog-sx.glade",
"since-last-run-dialog");
937 dialog->dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"since-last-run-dialog"));
939 dialog->editing_model = gnc_sx_slr_tree_model_adapter_new(sx_instances);
940 dialog->review_created_txns_toggle = GTK_TOGGLE_BUTTON(gtk_builder_get_object (builder,
"review_txn_toggle"));
942 dialog->created_txns = auto_created_txn_guids;
945 GtkCellRenderer *renderer;
946 GtkTreeViewColumn *col;
948 dialog->instance_view = GTK_TREE_VIEW(gtk_builder_get_object (builder,
"instance_view"));
949 gtk_tree_view_set_model(dialog->instance_view, GTK_TREE_MODEL(dialog->editing_model));
951 renderer = gtk_cell_renderer_text_new();
952 col = gtk_tree_view_column_new_with_attributes(_(
"Transaction"), renderer,
953 "text", SLR_MODEL_COL_NAME,
955 gtk_tree_view_append_column(dialog->instance_view, col);
957 renderer = gtk_cell_renderer_combo_new();
958 g_object_set(G_OBJECT(renderer),
959 "model", gnc_sx_get_slr_state_model(),
964 g_signal_connect(G_OBJECT(renderer),
966 G_CALLBACK(instance_state_changed_cb),
968 col = gtk_tree_view_column_new_with_attributes(_(
"Status"), renderer,
969 "text", SLR_MODEL_COL_INSTANCE_STATE,
970 "visible", SLR_MODEL_COL_INSTANCE_VISIBILITY,
974 "editable", SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY,
975 "sensitive", SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY,
977 gtk_tree_view_append_column(dialog->instance_view, col);
978 gtk_tree_view_column_set_resizable(col, TRUE);
980 renderer = gtk_cell_renderer_text_new();
981 g_object_set(G_OBJECT(renderer),
984 g_signal_connect(G_OBJECT(renderer),
986 G_CALLBACK(variable_value_changed_cb),
988 col = gtk_tree_view_column_new_with_attributes(_(
"Value"), renderer,
989 "text", SLR_MODEL_COL_VARAIBLE_VALUE,
990 "visible", SLR_MODEL_COL_VARIABLE_VISIBILITY,
992 gtk_tree_view_append_column(dialog->instance_view, col);
994 gtk_tree_view_expand_all(dialog->instance_view);
997 g_signal_connect(G_OBJECT(dialog->dialog),
"response", G_CALLBACK(dialog_response_cb), dialog);
998 g_signal_connect(G_OBJECT(dialog->dialog),
"destroy", G_CALLBACK(dialog_destroy_cb), dialog);
1000 gnc_restore_window_size(GNC_PREFS_GROUP_STARTUP, GTK_WINDOW(dialog->dialog));
1002 dialog->component_id = gnc_register_gui_component
1003 (DIALOG_SX_SINCE_LAST_RUN_CM_CLASS, NULL, close_handler, dialog);
1004 gnc_gui_component_set_session(dialog->component_id,
1005 gnc_get_current_session());
1007 gtk_widget_show_all(dialog->dialog);
1009 gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, dialog);
1011 g_object_unref(G_OBJECT(builder));
1019 #ifdef REGISTER2_ENABLED
1025 Query *book_query, *guid_query, *query;
1028 book_query = qof_query_create_for(GNC_ID_SPLIT);
1029 guid_query = qof_query_create_for(GNC_ID_SPLIT);
1031 for (guid_iter = created_txn_guids; guid_iter != NULL; guid_iter = guid_iter->next)
1033 xaccQueryAddGUIDMatch(guid_query, (
GncGUID*)guid_iter->data, GNC_ID_TRANS, QOF_QUERY_OR);
1036 #ifdef REGISTER2_ENABLED
1039 ledger = gnc_ledger_display2_query(query, SEARCH_LEDGER2, REG2_STYLE_JOURNAL);
1040 gnc_ledger_display2_refresh(ledger);
1045 ledger = gnc_ledger_display_query(query, SEARCH_LEDGER, REG_STYLE_JOURNAL);
1046 gnc_ledger_display_refresh(ledger);
1049 g_object_set(G_OBJECT(page),
"page-name", _(
"Created Transactions"), NULL);
1058 close_handler(gpointer user_data)
1062 gnc_save_window_size(GNC_PREFS_GROUP_STARTUP, GTK_WINDOW(app_dialog->dialog));
1063 gtk_widget_destroy(app_dialog->dialog);
1069 gnc_unregister_gui_component(app_dialog->component_id);
1071 g_object_unref(G_OBJECT(app_dialog->editing_model));
1072 app_dialog->editing_model = NULL;
1078 switch (response_id)
1080 case GTK_RESPONSE_OK:
1086 GList *unbound_variables;
1088 g_message(
"%d variables unbound", g_list_length(unbound_variables));
1089 if (g_list_length(unbound_variables) > 0)
1093 GtkTreePath *variable_path;
1094 GtkTreeViewColumn *variable_col;
1095 gint variable_view_column = 2;
1096 gboolean start_editing = TRUE;
1099 variable_path = _get_path_for_variable(app_dialog->editing_model, first_unbound->instance, first_unbound->variable);
1100 variable_col = gtk_tree_view_get_column(app_dialog->instance_view, variable_view_column);
1102 gtk_tree_view_set_cursor(app_dialog->instance_view, variable_path, variable_col, start_editing);
1104 gtk_tree_path_free(variable_path);
1105 g_list_foreach(unbound_variables, (GFunc)g_free, NULL);
1106 g_list_free(unbound_variables);
1110 gnc_suspend_gui_refresh();
1111 gnc_sx_slr_model_effect_change(app_dialog->editing_model, FALSE, &app_dialog->created_txns, NULL);
1112 gnc_resume_gui_refresh();
1113 if (gtk_toggle_button_get_active(app_dialog->review_created_txns_toggle)
1114 && g_list_length(app_dialog->created_txns) > 0)
1116 _show_created_transactions(app_dialog, app_dialog->created_txns);
1118 g_list_free(app_dialog->created_txns);
1119 app_dialog->created_txns = NULL;
1122 case GTK_RESPONSE_CANCEL:
1123 case GTK_RESPONSE_DELETE_EVENT:
1124 gnc_close_gui_component(app_dialog->component_id);
1127 g_error(
"unknown response id [%d]", response_id);
1138 gboolean auto_create_only,
1139 GList **created_transaction_guids,
1140 GList **creation_errors)
1148 g_signal_handler_block(model->instances, model->updated_cb_id);
1150 g_signal_handler_unblock(model->instances, model->updated_cb_id);
gint num_auto_create_no_notify_instances
void gnc_sx_instance_model_change_instance_state(GncSxInstanceModel *model, GncSxInstance *instance, GncSxInstanceState new_state)
utility functions for the GnuCash UI
void gnc_sx_instance_model_summarize(GncSxInstanceModel *model, GncSxSummary *summary)
void gnc_sx_instance_model_update_sx_instances(GncSxInstanceModel *model, SchedXaction *sx)
void gnc_sx_instance_model_effect_change(GncSxInstanceModel *model, gboolean auto_create_only, GList **created_transaction_guids, GList **creation_errors)
void gnc_main_window_open_page(GncMainWindow *window, GncPluginPage *page)
Functions for adding content to a window.
GncPluginPage * gnc_plugin_page_register_new_ledger(GNCLedgerDisplay *ledger)
void gnc_sx_summary_print(const GncSxSummary *summary)
gdouble gnc_numeric_to_double(gnc_numeric n)
Functions providing a register page for the GnuCash UI.
void qof_query_destroy(QofQuery *q)
GncPluginPage * gnc_plugin_page_register2_new_ledger(GNCLedgerDisplay2 *ledger)
gnc_numeric gnc_numeric_error(GNCNumericErrorCode error_code)
void qof_query_set_book(QofQuery *q, QofBook *book)
QofQuery * qof_query_merge(QofQuery *q1, QofQuery *q2, QofQueryOp op)
GList * gnc_sx_instance_get_variables(GncSxInstance *inst)
Generic api to store and retrieve preferences.
gboolean qof_book_is_readonly(const QofBook *book)
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
GncSxInstanceModel * gnc_sx_get_current_instances(void)
GNCNumericErrorCode gnc_numeric_check(gnc_numeric a)
size_t qof_print_gdate(char *buf, size_t bufflen, const GDate *gd)
const gchar * QofLogModule
GList * gnc_sx_instance_model_check_variables(GncSxInstanceModel *model)