39 #include "dialog-utils.h" 41 #include "dialog-sx-since-last-run.h" 52 #include "gnc-component-manager.h" 53 #include "gnc-gui-query.h" 54 #include "gnc-session.h" 57 #define G_LOG_DOMAIN "gnc.gui.sx.slr" 59 G_GNUC_UNUSED
static QofLogModule log_module = GNC_MOD_GUI_SX;
61 #define DIALOG_SX_SINCE_LAST_RUN_CM_CLASS "dialog-sx-since-last-run" 63 #define GNC_PREF_SET_REVIEW "review-transactions" 64 #define GNC_PREF_SLR_SORT_COL "sort-column" 65 #define GNC_PREF_SLR_SORT_ASC "sort-ascending" 66 #define GNC_PREF_SLR_SORT_DEPTH "sort-depth" 72 GncSxSlrTreeModelAdapter *editing_model;
73 GtkTreeView *instance_view;
74 GtkToggleButton *review_created_txns_toggle;
77 GtkCellEditable *temp_ce;
78 gint sort_selection_depth;
92 GncSxInstanceModel *instances;
96 typedef struct _GncSxSlrTreeModelAdapterClass
101 GType gnc_sx_slr_tree_model_adapter_get_type (
void);
102 static void gnc_sx_slr_tree_model_adapter_interface_init (GtkTreeModelIface *tree_model);
103 GncSxSlrTreeModelAdapter* gnc_sx_slr_tree_model_adapter_new (GncSxInstanceModel *instances);
104 static void gnc_sx_slr_tree_model_adapter_dispose (GObject *obj);
105 static void gnc_sx_slr_tree_model_adapter_finalize (GObject *obj);
107 GncSxInstanceModel* gnc_sx_slr_tree_model_adapter_get_instance_model (GncSxSlrTreeModelAdapter *slr_model);
110 GncSxInstance* gnc_sx_slr_model_get_instance (GncSxSlrTreeModelAdapter *model, GtkTreeIter *iter);
111 static GncSxInstance* _gnc_sx_slr_model_get_instance (GncSxSlrTreeModelAdapter *model,
113 gboolean check_depth);
116 gboolean gnc_sx_slr_model_get_instance_and_variable (GncSxSlrTreeModelAdapter *model,
121 void gnc_sx_slr_model_effect_change (GncSxSlrTreeModelAdapter *model,
122 gboolean auto_create_only,
123 GList **created_transaction_guids,
124 GList **creation_errors);
126 GtkTreeModel* gnc_sx_get_slr_state_model (
void);
128 #define GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER (gnc_sx_slr_tree_model_adapter_get_type ()) 129 #define GNC_SX_SLR_TREE_MODEL_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER, GncSxSlrTreeModelAdapter)) 130 #define GNC_SX_SLR_TREE_MODEL_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER, GncSxSlrTreeModelAdapterClass)) 131 #define GNC_IS_SX_SLR_TREE_MODEL_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER)) 132 #define GNC_IS_SX_SLR_TREE_MODEL_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER)) 133 #define GNC_SX_SLR_TREE_MODEL_ADAPTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER, GncSxSlrTreeModelAdapterClass)) 137 static void _show_created_transactions (GncSxSinceLastRunDialog *app_dialog, GList *created_txn_guids);
139 static void close_handler (gpointer user_data);
140 static void dialog_destroy_cb (GtkWidget *
object, GncSxSinceLastRunDialog *app_dialog);
141 static void dialog_response_cb (GtkDialog *dialog, gint response_id, GncSxSinceLastRunDialog *app_dialog);
143 #define debug_path(fn, text, path) {\ 144 gchar *path_string = gtk_tree_path_to_string (path);\ 145 fn("%s %s", text, path_string? path_string : "NULL");\ 146 g_free (path_string);\ 152 _var_numeric_to_string (gnc_numeric *value, GString **str)
154 *str = g_string_sized_new (5);
161 G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL, gnc_sx_slr_tree_model_adapter_interface_init))
166 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
168 obj_class->dispose = gnc_sx_slr_tree_model_adapter_dispose;
169 obj_class->finalize = gnc_sx_slr_tree_model_adapter_finalize;
172 static GtkTreeModelFlags
173 gsslrtma_get_flags (GtkTreeModel *tree_model)
175 return gtk_tree_model_get_flags (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real));
179 gsslrtma_get_n_columns (GtkTreeModel *tree_model)
181 return gtk_tree_model_get_n_columns (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real));
185 gsslrtma_get_column_type (GtkTreeModel *tree_model, gint index)
187 return gtk_tree_model_get_column_type (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), index);
191 gsslrtma_get_iter (GtkTreeModel *tree_model,
195 return gtk_tree_model_get_iter (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter, path);
199 gsslrtma_get_path (GtkTreeModel *tree_model,
202 return gtk_tree_model_get_path (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter);
206 gsslrtma_get_value (GtkTreeModel *tree_model,
211 gtk_tree_model_get_value (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter, column, value);
215 gsslrtma_iter_next (GtkTreeModel *tree_model,
218 return gtk_tree_model_iter_next (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter);
222 gsslrtma_iter_children (GtkTreeModel *tree_model,
226 return gtk_tree_model_iter_children (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter, parent);
230 gsslrtma_iter_has_child (GtkTreeModel *tree_model,
233 return gtk_tree_model_iter_has_child (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter);
237 gsslrtma_iter_n_children (GtkTreeModel *tree_model,
240 return gtk_tree_model_iter_n_children (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter);
244 gsslrtma_iter_nth_child (GtkTreeModel *tree_model,
249 return gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter, parent, n);
253 gsslrtma_iter_parent (GtkTreeModel *tree_model,
257 return gtk_tree_model_iter_parent (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter, child);
261 gsslrtma_ref_node (GtkTreeModel *tree_model,
264 gtk_tree_model_ref_node (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter);
268 gsslrtma_unref_node (GtkTreeModel *tree_model,
271 gtk_tree_model_unref_node (GTK_TREE_MODEL(GNC_SX_SLR_TREE_MODEL_ADAPTER(tree_model)->real), iter);
275 gnc_sx_slr_tree_model_adapter_interface_init (GtkTreeModelIface *tree_model)
277 tree_model->get_flags = gsslrtma_get_flags;
278 tree_model->get_n_columns = gsslrtma_get_n_columns;
279 tree_model->get_column_type = gsslrtma_get_column_type;
280 tree_model->get_iter = gsslrtma_get_iter;
281 tree_model->get_path = gsslrtma_get_path;
282 tree_model->get_value = gsslrtma_get_value;
283 tree_model->iter_next = gsslrtma_iter_next;
284 tree_model->iter_children = gsslrtma_iter_children;
285 tree_model->iter_has_child = gsslrtma_iter_has_child;
286 tree_model->iter_n_children = gsslrtma_iter_n_children;
287 tree_model->iter_nth_child = gsslrtma_iter_nth_child;
288 tree_model->iter_parent = gsslrtma_iter_parent;
289 tree_model->ref_node = gsslrtma_ref_node;
290 tree_model->unref_node = gsslrtma_unref_node;
294 gsslrtma_proxy_row_changed (GtkTreeModel *treemodel,
299 g_signal_emit_by_name (user_data,
"row-changed", arg1, arg2);
303 gsslrtma_proxy_row_deleted (GtkTreeModel *treemodel,
307 g_signal_emit_by_name (user_data,
"row-deleted", arg1);
311 gsslrtma_proxy_row_has_child_toggled (GtkTreeModel *treemodel,
316 g_signal_emit_by_name (user_data,
"row-has-child-toggled", arg1, arg2);
320 gsslrtma_proxy_row_inserted (GtkTreeModel *treemodel,
325 g_signal_emit_by_name (user_data,
"row-inserted", arg1, arg2);
329 gsslrtma_proxy_rows_reordered (GtkTreeModel *treemodel,
335 g_signal_emit_by_name (user_data,
"rows-reordered", arg1, arg2, arg3);
341 SLR_MODEL_COL_NAME = 0,
342 SLR_MODEL_COL_INSTANCE_PTR,
343 SLR_MODEL_COL_INSTANCE_STATE,
344 SLR_MODEL_COL_VARAIBLE_VALUE,
345 SLR_MODEL_COL_INSTANCE_VISIBILITY,
346 SLR_MODEL_COL_VARIABLE_VISIBILITY,
347 SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY,
348 SLR_MODEL_COL_INSTANCE_DATE,
352 gnc_sx_slr_tree_model_adapter_init (GncSxSlrTreeModelAdapter *adapter)
358 adapter->real = gtk_tree_store_new (8, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT64);
360 g_signal_connect (adapter->real,
"row-changed", G_CALLBACK(gsslrtma_proxy_row_changed), adapter);
361 g_signal_connect (adapter->real,
"row-deleted", G_CALLBACK(gsslrtma_proxy_row_deleted), adapter);
362 g_signal_connect (adapter->real,
"row-has-child-toggled", G_CALLBACK(gsslrtma_proxy_row_has_child_toggled), adapter);
363 g_signal_connect (adapter->real,
"row-inserted", G_CALLBACK(gsslrtma_proxy_row_inserted), adapter);
364 g_signal_connect (adapter->real,
"rows-reordered", G_CALLBACK(gsslrtma_proxy_rows_reordered), adapter);
367 static char* gnc_sx_instance_state_names[] =
377 static GtkTreeModel* _singleton_slr_state_model = NULL;
380 gnc_sx_get_slr_state_model (
void)
382 if (_singleton_slr_state_model == NULL)
387 _singleton_slr_state_model = GTK_TREE_MODEL(gtk_list_store_new (1, G_TYPE_STRING));
388 for (i = 0; i != SX_INSTANCE_STATE_CREATED; i++)
390 gtk_list_store_insert_with_values (GTK_LIST_STORE(_singleton_slr_state_model),
392 SX_INSTANCE_STATE_MAX_STATE + 1,
393 0, _(gnc_sx_instance_state_names[i]), -1);
396 return _singleton_slr_state_model;
400 _consume_excess_rows (GtkTreeStore *store,
int last_index, GtkTreeIter *parent_iter, GtkTreeIter *maybe_invalid_iter)
402 if (last_index == -1)
405 if (!gtk_tree_model_iter_children (GTK_TREE_MODEL(store), maybe_invalid_iter, parent_iter))
411 if (!gtk_tree_model_iter_next (GTK_TREE_MODEL(store), maybe_invalid_iter))
416 while (gtk_tree_store_remove (store, maybe_invalid_iter));
421 gsslrtma_populate_tree_store (GncSxSlrTreeModelAdapter *model)
423 GtkTreeIter sx_tree_iter;
425 int instances_index = -1;
433 const GDate *last_occur = xaccSchedXactionGetLastOccurDate (instances->sx);
434 if (last_occur == NULL || !g_date_valid (last_occur))
436 g_stpcpy (last_occur_date_buf, _(
"Never"));
450 if (!gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(model->real), &sx_tree_iter, NULL, ++instances_index))
452 gtk_tree_store_append (model->real, &sx_tree_iter, NULL);
455 gtk_tree_store_set (model->real, &sx_tree_iter,
456 SLR_MODEL_COL_NAME, xaccSchedXactionGetName (instances->sx),
457 SLR_MODEL_COL_INSTANCE_STATE, NULL,
458 SLR_MODEL_COL_VARAIBLE_VALUE, NULL,
459 SLR_MODEL_COL_INSTANCE_VISIBILITY, FALSE,
460 SLR_MODEL_COL_VARIABLE_VISIBILITY, FALSE,
461 SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY, FALSE,
462 SLR_MODEL_COL_INSTANCE_DATE, INT64_MAX,
463 SLR_MODEL_COL_INSTANCE_PTR, instances,
468 gchar *path_str = gtk_tree_path_to_string (gtk_tree_model_get_path (GTK_TREE_MODEL(model->real), &sx_tree_iter));
469 DEBUG(
"Add schedule [%s], instances %p at path [%s]", xaccSchedXactionGetName (instances->sx), instances, path_str);
476 GtkTreeIter inst_tree_iter;
478 int instance_index = -1;
480 for (inst_iter = instances->
instance_list; inst_iter != NULL; inst_iter = inst_iter->next)
486 if (!gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(model->real), &inst_tree_iter, &sx_tree_iter, ++instance_index))
488 gtk_tree_store_append (model->real, &inst_tree_iter, &sx_tree_iter);
490 gtk_tree_store_set (model->real, &inst_tree_iter,
491 SLR_MODEL_COL_NAME, instance_date_buf,
492 SLR_MODEL_COL_INSTANCE_STATE, _(gnc_sx_instance_state_names[inst->
state]),
493 SLR_MODEL_COL_VARAIBLE_VALUE, NULL,
494 SLR_MODEL_COL_INSTANCE_VISIBILITY, TRUE,
495 SLR_MODEL_COL_VARIABLE_VISIBILITY, FALSE,
496 SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY, inst->
state != SX_INSTANCE_STATE_CREATED,
497 SLR_MODEL_COL_INSTANCE_DATE, t,
498 SLR_MODEL_COL_INSTANCE_PTR, inst,
503 GList *vars = NULL, *var_iter;
504 GtkTreeIter var_tree_iter;
505 gint visible_variable_index = -1;
508 for (var_iter = vars; var_iter != NULL; var_iter = var_iter->next)
518 _var_numeric_to_string (&var->
value, &tmp_str);
522 tmp_str = g_string_new (_(
"(Need Value)"));
525 if (!gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(model->real),
526 &var_tree_iter, &inst_tree_iter,
527 ++visible_variable_index))
529 gtk_tree_store_append (model->real, &var_tree_iter, &inst_tree_iter);
531 gtk_tree_store_set (model->real, &var_tree_iter,
532 SLR_MODEL_COL_NAME, var->name,
533 SLR_MODEL_COL_INSTANCE_STATE, NULL,
534 SLR_MODEL_COL_VARAIBLE_VALUE, tmp_str->str,
535 SLR_MODEL_COL_INSTANCE_VISIBILITY, FALSE,
536 SLR_MODEL_COL_VARIABLE_VISIBILITY, TRUE,
537 SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY, FALSE,
538 SLR_MODEL_COL_INSTANCE_DATE, INT64_MAX,
539 SLR_MODEL_COL_INSTANCE_PTR, var,
541 g_string_free (tmp_str, TRUE);
545 _consume_excess_rows (model->real, visible_variable_index, &inst_tree_iter, &var_tree_iter);
550 _consume_excess_rows (model->real, instance_index, &sx_tree_iter, &inst_tree_iter);
553 _consume_excess_rows (model->real, instances_index, NULL, &sx_tree_iter);
557 gnc_sx_slr_tree_model_adapter_get_instance_model (GncSxSlrTreeModelAdapter *slr_model)
559 return slr_model->instances;
563 gnc_sx_slr_model_get_instance (GncSxSlrTreeModelAdapter *model, GtkTreeIter *iter)
565 return _gnc_sx_slr_model_get_instance (model, iter, TRUE);
569 _gnc_sx_slr_model_get_instance (GncSxSlrTreeModelAdapter *model, GtkTreeIter *iter, gboolean check_depth)
571 GtkTreePath *model_path = gtk_tree_model_get_path (GTK_TREE_MODEL(model), iter);
572 gint *indices, instances_index, instance_index;
574 GtkTreeIter new_iter;
576 debug_path (
DEBUG,
"model path is:", model_path);
578 if (check_depth && gtk_tree_path_get_depth (model_path) != 2)
580 PWARN(
"path depth not equal to 2");
581 gtk_tree_path_free (model_path);
585 if (gtk_tree_path_get_depth (model_path) == 1)
587 PWARN(
"path depth equal to 1");
588 gtk_tree_path_free (model_path);
592 indices = gtk_tree_path_get_indices (model_path);
593 instances_index = indices[0];
594 instance_index = indices[1];
596 gtk_tree_path_free (model_path);
598 model_path = gtk_tree_path_new_from_indices (instances_index, instance_index, -1);
600 debug_path (
DEBUG,
"new model path is:", model_path);
602 if (gtk_tree_model_get_iter (GTK_TREE_MODEL(model), &new_iter, model_path))
603 gtk_tree_model_get (GTK_TREE_MODEL(model), &new_iter, SLR_MODEL_COL_INSTANCE_PTR, &instance, -1);
605 gtk_tree_path_free (model_path);
607 DEBUG(
"instance is %p", instance);
613 gnc_sx_slr_model_get_instance_and_variable (GncSxSlrTreeModelAdapter *model, GtkTreeIter *iter,
GncSxInstance **instance_loc,
GncSxVariable **var_loc)
615 GtkTreePath *model_path;
616 gint *indices, variable_index;
620 instance = _gnc_sx_slr_model_get_instance (model, iter, FALSE);
621 if (instance == NULL)
623 gchar *iter_str = gtk_tree_model_get_string_from_iter (GTK_TREE_MODEL(model), iter);
624 PWARN(
"instance is NULL for iter %s", iter_str);
630 model_path = gtk_tree_model_get_path (GTK_TREE_MODEL(model), iter);
631 if (gtk_tree_path_get_depth (model_path) != 3)
633 gchar *path_str = gtk_tree_path_to_string (model_path);
634 PWARN(
"invalid path [%s] for variable, not at depth 3", path_str);
635 gtk_tree_path_free (model_path);
640 debug_path (
DEBUG,
"model path is:", model_path);
642 indices = gtk_tree_path_get_indices (model_path);
643 variable_index = indices[2];
645 gtk_tree_path_free (model_path);
647 if (variable_index < 0 || variable_index >= g_list_length (variables))
649 PWARN(
"variable index %d out of range", variable_index);
650 g_list_free (variables);
654 if (instance_loc != NULL)
656 *instance_loc = instance;
663 gtk_tree_model_get (GTK_TREE_MODEL(model), iter, SLR_MODEL_COL_INSTANCE_PTR, &var, -1);
667 g_list_free (variables);
675 _variable_list_index (GList *variables,
GncSxVariable *variable)
678 for (; variables != NULL; variables = variables->next)
690 typedef struct _findInstanceData
693 GtkTreePath *found_path;
697 for_each_find_item (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data)
702 gtk_tree_model_get (model, iter, SLR_MODEL_COL_INSTANCE_PTR, &item, -1);
704 if (item == to_find->find_item)
706 to_find->found_path = gtk_tree_path_copy (path);
713 _get_model_path_for_item (GtkTreeModel *model, gpointer find_item)
715 GtkTreePath *model_path = NULL;
719 to_find_data->find_item = find_item;
720 to_find_data->found_path = NULL;
722 gtk_tree_model_foreach (model, (GtkTreeModelForeachFunc)for_each_find_item, to_find_data);
724 if (to_find_data->found_path)
726 model_path = gtk_tree_path_copy (to_find_data->found_path);
727 gtk_tree_path_free (to_find_data->found_path);
729 g_free (to_find_data);
735 _get_model_path_for_instance (GtkTreeModel *model,
GncSxInstance *instance)
737 return _get_model_path_for_item (model, instance);
741 _get_model_path_for_instances (GtkTreeModel *model,
GncSxInstances *instances)
743 return _get_model_path_for_item (model, instances);
749 GncSxSlrTreeModelAdapter *model = app_dialog->editing_model;
750 GtkTreeModel *sort_model = gtk_tree_view_get_model (app_dialog->instance_view);
751 gint *indices, instances_index, instance_index, variable_index;
752 GtkTreePath *view_path, *model_path;
755 model_path = _get_model_path_for_instance (GTK_TREE_MODEL(model), instance);
759 PWARN(
"model path is NULL for instance %p", instance);
763 debug_path (
DEBUG,
"instance model path is:", model_path);
765 indices = gtk_tree_path_get_indices (model_path);
766 instances_index = indices[0];
767 instance_index = indices[1];
769 gtk_tree_path_free (model_path);
772 variable_index = _variable_list_index (variables, variable);
773 g_list_free (variables);
774 if (variable_index == -1)
777 model_path = gtk_tree_path_new_from_indices (instances_index, instance_index, variable_index, -1);
778 debug_path (
DEBUG,
"model variable path is:", model_path);
780 view_path = gtk_tree_model_sort_convert_child_path_to_path (GTK_TREE_MODEL_SORT(sort_model), model_path);
781 gtk_tree_path_free (model_path);
783 debug_path (
DEBUG,
"return view variable path is:", view_path);
789 gsslrtma_added_cb (GncSxInstanceModel *instances, SchedXaction *added_sx, gpointer user_data)
791 GncSxSlrTreeModelAdapter *model = GNC_SX_SLR_TREE_MODEL_ADAPTER(user_data);
793 gsslrtma_populate_tree_store (model);
797 gsslrtma_updated_cb (GncSxInstanceModel *instances, SchedXaction *updated_sx, gpointer user_data)
799 GncSxSlrTreeModelAdapter *model = GNC_SX_SLR_TREE_MODEL_ADAPTER(user_data);
801 gsslrtma_populate_tree_store (model);
805 gsslrtma_removing_cb (GncSxInstanceModel *inst_model, SchedXaction *to_remove_sx, gpointer user_data)
807 GncSxSlrTreeModelAdapter *model = GNC_SX_SLR_TREE_MODEL_ADAPTER(user_data);
808 GtkTreePath *model_path;
809 GtkTreeIter tree_iter;
818 if (instances->sx == to_remove_sx)
823 PWARN(
"could not find sx %p in the model", to_remove_sx);
827 model_path = _get_model_path_for_instances (GTK_TREE_MODEL(model), instances);
829 debug_path (
DEBUG,
"remove model_path", model_path);
831 if (!gtk_tree_model_get_iter (GTK_TREE_MODEL(model->real), &tree_iter, model_path))
833 gchar *path_str = gtk_tree_path_to_string (model_path);
834 PWARN(
"invalid path [%s] for instances %p to remove", path_str, instances);
835 gtk_tree_path_free (model_path);
839 gtk_tree_path_free (model_path);
841 gtk_tree_store_remove (model->real, &tree_iter);
843 gnc_sx_instance_model_remove_sx_instances (inst_model, to_remove_sx);
847 gnc_sx_slr_tree_model_adapter_dispose (GObject *obj)
849 GncSxSlrTreeModelAdapter *adapter;
850 g_return_if_fail (obj != NULL);
851 adapter = GNC_SX_SLR_TREE_MODEL_ADAPTER(obj);
852 g_return_if_fail (!adapter->disposed);
853 adapter->disposed = TRUE;
855 g_object_unref (G_OBJECT(adapter->instances));
856 adapter->instances = NULL;
857 g_object_unref (G_OBJECT(adapter->real));
858 adapter->real = NULL;
860 G_OBJECT_CLASS(gnc_sx_slr_tree_model_adapter_parent_class)->dispose (obj);
864 gnc_sx_slr_tree_model_adapter_finalize (GObject *obj)
866 g_return_if_fail (obj != NULL);
867 G_OBJECT_CLASS(gnc_sx_slr_tree_model_adapter_parent_class)->finalize (obj);
870 GncSxSlrTreeModelAdapter*
871 gnc_sx_slr_tree_model_adapter_new (GncSxInstanceModel *instances)
873 GncSxSlrTreeModelAdapter *rtn;
874 rtn = GNC_SX_SLR_TREE_MODEL_ADAPTER(g_object_new (GNC_TYPE_SX_SLR_TREE_MODEL_ADAPTER, NULL));
875 rtn->instances = instances;
876 g_object_ref (G_OBJECT(rtn->instances));
877 gsslrtma_populate_tree_store (rtn);
878 g_signal_connect (G_OBJECT(rtn->instances),
"added", (GCallback)gsslrtma_added_cb, (gpointer)rtn);
879 rtn->updated_cb_id = g_signal_connect (G_OBJECT(rtn->instances),
"updated", (GCallback)gsslrtma_updated_cb, (gpointer)rtn);
880 g_signal_connect (G_OBJECT(rtn->instances),
"removing", (GCallback)gsslrtma_removing_cb, (gpointer)rtn);
885 gnc_ui_sx_creation_error_dialog (GList **creation_errors)
887 GtkWidget *dialog = NULL;
888 gchar *message = NULL;
889 if (*creation_errors == NULL)
return;
891 g_list_free_full (*creation_errors, g_free);
892 creation_errors = NULL;
893 dialog = gtk_message_dialog_new (NULL, 0,
894 GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
895 "\t%s\t", _(
"Invalid Transactions"));
896 gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
898 g_signal_connect_swapped (dialog,
"response",
899 G_CALLBACK(gtk_widget_destroy), dialog);
900 gtk_dialog_run (GTK_DIALOG(dialog));
905 gnc_sx_sxsincelast_book_opened (
void)
907 GList *auto_created_txns = NULL;
908 GList *creation_errors = NULL;
909 GncSxInstanceModel *inst_model;
927 if (auto_created_txns)
928 gnc_gui_refresh_all();
934 auto_created_txns = NULL;
938 g_list_free (auto_created_txns);
946 (
"There are no Scheduled Transactions to be entered at this time. " 947 "(One transaction automatically created)",
948 "There are no Scheduled Transactions to be entered at this time. " 949 "(%d transactions automatically created)",
955 g_object_unref (G_OBJECT(inst_model));
958 gnc_ui_sx_creation_error_dialog (&creation_errors);
962 instance_get_model_path (GtkTreeView *view,
const gchar *path)
964 GtkTreePath *view_path = gtk_tree_path_new_from_string (path);
965 GtkTreeModelSort *sort_model = GTK_TREE_MODEL_SORT(gtk_tree_view_get_model (view));
967 GtkTreePath *model_path = gtk_tree_model_sort_convert_path_to_child_path (sort_model, view_path);
969 gtk_tree_path_free (view_path);
975 instance_state_changed_cb (GtkCellRendererText *cell,
978 GncSxSinceLastRunDialog *dialog)
982 GncSxInstanceState new_state;
983 GtkTreePath *model_path = instance_get_model_path (dialog->instance_view, path);
984 GtkTreeIter tree_iter;
986 DEBUG(
"change instance state to [%s] at path [%s]", value, path);
988 debug_path (
DEBUG,
"instance model path is:", model_path);
990 for (i = 0; i < SX_INSTANCE_STATE_CREATED; i++)
992 if (strcmp (value, _(gnc_sx_instance_state_names[i])) == 0)
995 if (i == SX_INSTANCE_STATE_CREATED)
997 PWARN(
"unknown value [%s]", value);
1002 if (!gtk_tree_model_get_iter (GTK_TREE_MODEL(dialog->editing_model), &tree_iter, model_path))
1004 gtk_tree_path_free (model_path);
1005 PWARN(
"unknown path [%s]", path);
1008 gtk_tree_path_free (model_path);
1010 inst = gnc_sx_slr_model_get_instance (dialog->editing_model, &tree_iter);
1014 PWARN(
"invalid path [%s]", path);
1018 DEBUG(
"instance is %p", inst);
1024 control_scroll_bars (GncSxSinceLastRunDialog *dialog)
1026 GtkWidget *sw = gtk_widget_get_parent (GTK_WIDGET(dialog->instance_view));
1027 GtkWidget *vsbar = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW(sw));
1028 gboolean enable = TRUE;
1030 if (dialog->temp_ce)
1033 gtk_widget_set_sensitive (vsbar, enable);
1034 gtk_widget_set_visible (vsbar, enable);
1038 variable_value_changed_cb (GtkCellRendererText *cell,
1041 GncSxSinceLastRunDialog *dialog)
1045 gnc_numeric parsed_num;
1046 char *endStr = NULL;
1047 GtkTreePath *model_path = instance_get_model_path (dialog->instance_view, path);
1048 GtkTreeIter tree_iter;
1050 DEBUG(
"change variable to [%s] at view path [%s]", value, path);
1052 debug_path (
DEBUG,
"instance model path is:", model_path);
1054 dialog->temp_ce = NULL;
1055 control_scroll_bars (dialog);
1057 if (!gtk_tree_model_get_iter (GTK_TREE_MODEL(dialog->editing_model), &tree_iter, model_path))
1059 gtk_tree_path_free (model_path);
1060 PWARN(
"invalid path [%s]", path);
1063 gtk_tree_path_free (model_path);
1065 if (!gnc_sx_slr_model_get_instance_and_variable (dialog->editing_model, &tree_iter, &inst, &var))
1067 PWARN(
"path [%s] doesn't correspond to a valid variable", path);
1074 gchar *value_copy = g_strdup (value);
1075 DEBUG (
"value=[%s] endStr[%s]", value, endStr);
1076 if (strlen (g_strstrip (value_copy)) == 0)
1079 gnc_sx_instance_model_set_variable (dialog->editing_model->instances, inst, var, &invalid_num);
1083 PWARN(
"error parsing value [%s]", value);
1085 g_free (value_copy);
1089 if (inst->
state == SX_INSTANCE_STATE_REMINDER)
1092 SX_INSTANCE_STATE_TO_CREATE);
1094 gnc_sx_instance_model_set_variable (dialog->editing_model->instances, inst, var, &parsed_num);
1098 variable_value_start_changed_cb (GtkCellRenderer *renderer, GtkCellEditable *editable,
1099 gchar *path, gpointer user_data)
1101 GncSxSinceLastRunDialog *dialog = user_data;
1102 dialog->temp_ce = editable;
1103 control_scroll_bars (dialog);
1107 variable_value_cancel_changed_cb (GtkCellRenderer *renderer, gpointer user_data)
1109 GncSxSinceLastRunDialog *dialog = user_data;
1110 dialog->temp_ce = NULL;
1111 control_scroll_bars (dialog);
1115 _sort_text (
const gchar *text_a,
const gchar *text_b)
1117 gchar *a_caseless, *b_caseless;
1120 if (text_a == NULL && text_b == NULL)
return 0;
1121 if (text_a == NULL)
return 1;
1122 if (text_b == NULL)
return -1;
1124 a_caseless = g_utf8_casefold (text_a, -1);
1125 b_caseless = g_utf8_casefold (text_b, -1);
1126 rtn = g_strcmp0 (a_caseless, b_caseless);
1127 g_free (a_caseless);
1128 g_free (b_caseless);
1134 _transaction_sort_func_date (GtkTreeModel *model, GtkTreeIter *iter_a, GtkTreeIter *iter_b)
1136 GtkTreePath *path_a = gtk_tree_model_get_path (model, iter_a);
1137 gint depth = gtk_tree_path_get_depth (path_a);
1138 gint64 date_a = 0, date_b = 0;
1141 gtk_tree_path_free (path_a);
1149 GtkTreeIter child_iter_a, child_iter_b;
1151 if (gtk_tree_model_iter_nth_child (model, &child_iter_a, iter_a, 0))
1152 gtk_tree_model_get (model, &child_iter_a, SLR_MODEL_COL_INSTANCE_DATE, &date_a, -1);
1154 if (gtk_tree_model_iter_nth_child (model, &child_iter_b, iter_b, 0))
1155 gtk_tree_model_get (model, &child_iter_b, SLR_MODEL_COL_INSTANCE_DATE, &date_b, -1);
1157 if (date_a > date_b)
1159 if (date_b > date_a)
1164 gchar *name_text_a, *name_text_b;
1166 gtk_tree_model_get (model, iter_a, SLR_MODEL_COL_NAME, &name_text_a, -1);
1167 gtk_tree_model_get (model, iter_b, SLR_MODEL_COL_NAME, &name_text_b, -1);
1169 rtn = _sort_text (name_text_a, name_text_b);
1171 g_free (name_text_a);
1172 g_free (name_text_b);
1177 gtk_tree_model_get (model, iter_a, SLR_MODEL_COL_INSTANCE_DATE, &date_a, -1);
1178 gtk_tree_model_get (model, iter_b, SLR_MODEL_COL_INSTANCE_DATE, &date_b, -1);
1180 if (date_a > date_b)
1182 if (date_b > date_a)
1189 _transaction_sort_func_desc (GtkTreeModel *model, GtkTreeIter *iter_a, GtkTreeIter *iter_b)
1191 GtkTreePath *path_a = gtk_tree_model_get_path (model, iter_a);
1192 gint depth = gtk_tree_path_get_depth (path_a);
1193 gchar *name_text_a, *name_text_b;
1196 gtk_tree_path_free (path_a);
1203 gtk_tree_model_get (model, iter_a, SLR_MODEL_COL_NAME, &name_text_a, -1);
1204 gtk_tree_model_get (model, iter_b, SLR_MODEL_COL_NAME, &name_text_b, -1);
1206 rtn = _sort_text (name_text_a, name_text_b);
1208 g_free (name_text_a);
1209 g_free (name_text_b);
1214 gint64 date_a = 0, date_b = 0;
1216 gtk_tree_model_get (model, iter_a, SLR_MODEL_COL_INSTANCE_DATE, &date_a, -1);
1217 gtk_tree_model_get (model, iter_b, SLR_MODEL_COL_INSTANCE_DATE, &date_b, -1);
1219 if (date_a > date_b)
1221 if (date_b > date_a)
1228 _transaction_sort_func (GtkTreeModel *model, GtkTreeIter *iter_a, GtkTreeIter *iter_b, gpointer user_data)
1230 GncSxSinceLastRunDialog *dialog = user_data;
1232 if (dialog->sort_selection_depth == 1)
1233 return _transaction_sort_func_desc (model, iter_a, iter_b);
1235 return _transaction_sort_func_date (model, iter_a, iter_b);
1239 finish_editing_before_ok_cb (GtkWidget *button, GdkEvent *event,
1240 GncSxSinceLastRunDialog *dialog)
1243 if (dialog->temp_ce)
1244 gtk_cell_editable_editing_done (dialog->temp_ce);
1246 dialog->temp_ce = NULL;
1252 scroll_event (GtkWidget *widget, GdkEventScroll *event, gpointer user_data)
1254 GncSxSinceLastRunDialog *dialog = user_data;
1256 if (dialog->temp_ce)
1263 set_transaction_sort_column_tooltip (GncSxSinceLastRunDialog *dialog)
1265 GtkTreeViewColumn *col = gtk_tree_view_get_column (GTK_TREE_VIEW(dialog->instance_view), 0);
1266 const gchar *date_text = _(
"Highlight a date first to sort by occurrence date.");
1267 const gchar *sched_text = _(
"Highlight a schedule first to sort by schedule name.");
1270 if (dialog->sort_selection_depth == 1)
1271 tooltip = g_strconcat (sched_text,
" *\n", date_text, NULL);
1273 tooltip = g_strconcat (sched_text,
"\n", date_text,
" *", NULL);
1275 gtk_widget_set_tooltip_text (gtk_tree_view_column_get_button (col), tooltip);
1280 follow_select_tree_path (GtkTreeView *view)
1282 GtkTreeSelection *selection = gtk_tree_view_get_selection (view);
1283 GtkTreeModel *sort_model;
1286 if (gtk_tree_selection_get_selected (selection, &sort_model, &iter))
1288 GtkTreePath *view_path = gtk_tree_model_get_path (sort_model, &iter);
1290 gtk_tree_view_scroll_to_cell (view, view_path, NULL, TRUE, 0.5, 0.0);
1292 gtk_tree_path_free (view_path);
1298 sort_column_changed (GtkTreeSortable*
self, gpointer user_data)
1301 GncSxSinceLastRunDialog *dialog = user_data;
1303 GtkTreeSelection *selection = gtk_tree_view_get_selection (dialog->instance_view);
1304 GtkTreeModel *sort_model;
1306 if (gtk_tree_selection_get_selected (selection, &sort_model, &iter))
1308 GtkTreePath *view_path = gtk_tree_model_get_path (sort_model, &iter);
1310 dialog->sort_selection_depth = gtk_tree_path_get_depth (view_path);
1312 gtk_tree_path_free (view_path);
1315 dialog->sort_selection_depth = 1;
1317 set_transaction_sort_column_tooltip (dialog);
1319 g_idle_add ((GSourceFunc)follow_select_tree_path, dialog->instance_view);
1322 GncSxSinceLastRunDialog*
1323 gnc_ui_sx_since_last_run_dialog (GtkWindow *parent, GncSxInstanceModel *sx_instances, GList *auto_created_txn_guids)
1325 GncSxSinceLastRunDialog *dialog;
1326 GtkBuilder *builder;
1327 GtkWidget *ok_button;
1329 dialog = g_new0 (GncSxSinceLastRunDialog, 1);
1331 builder = gtk_builder_new ();
1332 gnc_builder_add_from_file (builder,
"dialog-sx.glade",
"since_last_run_dialog");
1334 dialog->dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"since_last_run_dialog"));
1335 gtk_window_set_transient_for (GTK_WINDOW(dialog->dialog), parent);
1338 gtk_widget_set_name (GTK_WIDGET(dialog->dialog),
"gnc-id-sx-since-last-run");
1339 gnc_widget_style_context_add_class (GTK_WIDGET(dialog->dialog),
"gnc-class-sx");
1341 dialog->editing_model = gnc_sx_slr_tree_model_adapter_new (sx_instances);
1342 dialog->review_created_txns_toggle = GTK_TOGGLE_BUTTON(gtk_builder_get_object (builder,
"review_txn_toggle"));
1344 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(dialog->review_created_txns_toggle),
1347 dialog->created_txns = auto_created_txn_guids;
1349 ok_button = GTK_WIDGET(gtk_builder_get_object (builder,
"okbutton2"));
1351 g_signal_connect (G_OBJECT(ok_button),
"button-press-event",
1352 G_CALLBACK(finish_editing_before_ok_cb), dialog);
1355 GtkCellRenderer *renderer;
1356 GtkTreeViewColumn *col;
1357 GtkTreeModel *sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL(dialog->editing_model));
1359 dialog->instance_view = GTK_TREE_VIEW(gtk_builder_get_object (builder,
"instance_view"));
1360 gtk_tree_view_set_model (dialog->instance_view, GTK_TREE_MODEL(sort_model));
1361 g_object_unref (sort_model);
1364 dialog->sort_selection_depth =
gnc_prefs_get_int (GNC_PREFS_GROUP_STARTUP, GNC_PREF_SLR_SORT_DEPTH);
1365 gboolean sort_ascending =
gnc_prefs_get_bool (GNC_PREFS_GROUP_STARTUP, GNC_PREF_SLR_SORT_ASC);
1366 gint sort_column =
gnc_prefs_get_int (GNC_PREFS_GROUP_STARTUP, GNC_PREF_SLR_SORT_COL);
1367 GtkSortType sort_type = sort_ascending ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING;
1369 if (sort_column != 0)
1372 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sort_model),
1373 sort_column, sort_type);
1375 g_signal_connect (G_OBJECT(dialog->instance_view),
"scroll-event",
1376 G_CALLBACK(scroll_event), dialog);
1378 renderer = gtk_cell_renderer_text_new ();
1379 col = gtk_tree_view_column_new_with_attributes (_(
"Transaction"), renderer,
1380 "text", SLR_MODEL_COL_NAME,
1382 gtk_tree_view_append_column (dialog->instance_view, col);
1384 gtk_tree_view_column_set_sort_column_id (col, SLR_MODEL_COL_NAME);
1386 gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE(sort_model), SLR_MODEL_COL_NAME,
1387 _transaction_sort_func, dialog, NULL);
1389 set_transaction_sort_column_tooltip (dialog);
1391 renderer = gtk_cell_renderer_combo_new ();
1392 g_object_set (G_OBJECT(renderer),
1393 "model", gnc_sx_get_slr_state_model (),
1398 g_signal_connect (G_OBJECT(renderer),
1400 G_CALLBACK(instance_state_changed_cb),
1402 col = gtk_tree_view_column_new_with_attributes (_(
"Status"), renderer,
1403 "text", SLR_MODEL_COL_INSTANCE_STATE,
1404 "visible", SLR_MODEL_COL_INSTANCE_VISIBILITY,
1408 "editable", SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY,
1409 "sensitive", SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY,
1412 g_signal_connect (G_OBJECT(sort_model),
"sort-column-changed",
1413 G_CALLBACK(sort_column_changed), dialog);
1415 renderer = gtk_cell_renderer_pixbuf_new ();
1416 g_object_set (G_OBJECT(renderer),
1417 "icon-name",
"pan-down-symbolic",
1419 gtk_tree_view_column_pack_end (col, renderer, FALSE);
1420 gtk_tree_view_column_set_attributes (col, renderer,
1421 "visible", SLR_MODEL_COL_INSTANCE_VISIBILITY,
1422 "sensitive", SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY,
1424 gtk_tree_view_append_column (dialog->instance_view, col);
1425 gtk_tree_view_column_set_resizable (col, FALSE);
1427 renderer = gtk_cell_renderer_text_new ();
1428 g_object_set (G_OBJECT(renderer),
1431 g_signal_connect (G_OBJECT(renderer),
1433 G_CALLBACK(variable_value_changed_cb),
1436 g_signal_connect (G_OBJECT(renderer),
1438 G_CALLBACK(variable_value_start_changed_cb),
1441 g_signal_connect (G_OBJECT(renderer),
1443 (GCallback)variable_value_cancel_changed_cb,
1446 col = gtk_tree_view_column_new_with_attributes (_(
"Value"), renderer,
1447 "text", SLR_MODEL_COL_VARAIBLE_VALUE,
1448 "visible", SLR_MODEL_COL_VARIABLE_VISIBILITY,
1450 gtk_tree_view_append_column (dialog->instance_view, col);
1452 gtk_tree_view_expand_all (dialog->instance_view);
1456 gtk_tree_view_set_grid_lines (GTK_TREE_VIEW(dialog->instance_view), gnc_tree_view_get_grid_lines_pref ());
1458 g_signal_connect (G_OBJECT(dialog->dialog),
"response", G_CALLBACK(dialog_response_cb), dialog);
1459 g_signal_connect (G_OBJECT(dialog->dialog),
"destroy", G_CALLBACK(dialog_destroy_cb), dialog);
1461 gnc_restore_window_size (GNC_PREFS_GROUP_STARTUP, GTK_WINDOW(dialog->dialog), parent);
1463 dialog->component_id = gnc_register_gui_component (DIALOG_SX_SINCE_LAST_RUN_CM_CLASS,
1464 NULL, close_handler, dialog);
1465 gnc_gui_component_set_session (dialog->component_id,
1466 gnc_get_current_session ());
1468 gtk_widget_show_all (dialog->dialog);
1470 gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, dialog);
1472 g_object_unref (G_OBJECT(builder));
1478 _show_created_transactions (GncSxSinceLastRunDialog *app_dialog, GList *created_txn_guids)
1480 GNCLedgerDisplay *ledger;
1482 Query *book_query, *guid_query, *query;
1485 book_query = qof_query_create_for (GNC_ID_SPLIT);
1486 guid_query = qof_query_create_for (GNC_ID_SPLIT);
1488 for (guid_iter = created_txn_guids; guid_iter != NULL; guid_iter = guid_iter->next)
1490 xaccQueryAddGUIDMatch (guid_query, (
GncGUID*)guid_iter->data, GNC_ID_TRANS, QOF_QUERY_OR);
1497 g_object_set (G_OBJECT(page),
"page-name", _(
"Created Transactions"), NULL);
1506 close_handler (gpointer user_data)
1508 GncSxSinceLastRunDialog *app_dialog = user_data;
1512 if (gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE(
1513 gtk_tree_view_get_model (app_dialog->instance_view)),
1516 gboolean sort_ascending = TRUE;
1517 if (order == GTK_SORT_DESCENDING)
1518 sort_ascending = FALSE;
1523 app_dialog->sort_selection_depth);
1526 gnc_save_window_size (GNC_PREFS_GROUP_STARTUP, GTK_WINDOW(app_dialog->dialog));
1527 gtk_widget_destroy (app_dialog->dialog);
1528 g_free (app_dialog);
1532 dialog_destroy_cb (GtkWidget *
object, GncSxSinceLastRunDialog *app_dialog)
1534 gnc_unregister_gui_component (app_dialog->component_id);
1536 g_object_unref (G_OBJECT(app_dialog->editing_model));
1537 app_dialog->editing_model = NULL;
1541 dialog_response_cb (GtkDialog *dialog, gint response_id, GncSxSinceLastRunDialog *app_dialog)
1543 GList* creation_errors = NULL;
1544 switch (response_id)
1546 case GTK_RESPONSE_HELP:
1550 case GTK_RESPONSE_OK:
1556 GList *unbound_variables;
1559 unbound_len = g_list_length (unbound_variables);
1560 PINFO(
"%d variables unbound", unbound_len);
1561 if (unbound_len > 0)
1565 GtkTreePath *variable_path;
1566 GtkTreeViewColumn *variable_col;
1567 gint variable_view_column = 2;
1568 gboolean start_editing = TRUE;
1572 variable_path = _get_path_for_variable (app_dialog, first_unbound->instance, first_unbound->variable);
1573 variable_col = gtk_tree_view_get_column (app_dialog->instance_view, variable_view_column);
1575 gtk_tree_view_set_cursor (app_dialog->instance_view, variable_path, variable_col, start_editing);
1577 gtk_tree_view_scroll_to_cell (app_dialog->instance_view, variable_path, variable_col,
1580 gtk_tree_path_free (variable_path);
1581 g_list_foreach (unbound_variables, (GFunc)g_free, NULL);
1582 g_list_free (unbound_variables);
1586 gnc_suspend_gui_refresh ();
1587 gnc_sx_slr_model_effect_change (app_dialog->editing_model, FALSE, &app_dialog->created_txns, &creation_errors);
1588 gnc_resume_gui_refresh ();
1589 gnc_gui_refresh_all ();
1590 if (creation_errors)
1591 gnc_ui_sx_creation_error_dialog (&creation_errors);
1593 if (gtk_toggle_button_get_active (app_dialog->review_created_txns_toggle)
1594 && g_list_length (app_dialog->created_txns) > 0)
1596 _show_created_transactions (app_dialog, app_dialog->created_txns);
1600 case GTK_RESPONSE_CANCEL:
1601 case GTK_RESPONSE_DELETE_EVENT:
1602 g_list_free (app_dialog->created_txns);
1603 app_dialog->created_txns = NULL;
1604 gnc_close_gui_component (app_dialog->component_id);
1607 PWARN(
"unknown response id [%d]", response_id);
1617 gnc_sx_slr_model_effect_change (GncSxSlrTreeModelAdapter *model,
1618 gboolean auto_create_only,
1619 GList **created_transaction_guids,
1620 GList **creation_errors)
1628 g_signal_handler_block (model->instances, model->updated_cb_id);
1630 g_signal_handler_unblock (model->instances, model->updated_cb_id);
Public declarations for GncLedgerDisplay class.
void gnc_ledger_display_refresh(GNCLedgerDisplay *ld)
redisplay/redraw only the indicated window.
gboolean xaccParseAmount(const char *in_str, gboolean monetary, gnc_numeric *result, char **endstr)
Parses in_str to obtain a numeric result.
The instance data structure for a content plugin.
gchar * gnc_g_list_stringjoin(GList *list_of_strings, const gchar *sep)
Return a string joining a GList whose elements are gchar* strings.
void gnc_sx_instance_model_change_instance_state(GncSxInstanceModel *model, GncSxInstance *instance, GncSxInstanceState new_state)
There is a constraint around a sequence of upcoming instance states.
GtkWindow * gnc_ui_get_main_window(GtkWidget *widget)
Get a pointer to the final GncMainWindow widget is rooted in.
utility functions for the GnuCash UI
#define PINFO(format, args...)
Print an informational note.
gint num_auto_create_no_notify_instances
The number of automatically-created instances that do no request notification.
size_t qof_print_gdate(char *buf, size_t bufflen, const GDate *gd)
Convenience; calls through to qof_print_date_dmy_buff().
#define DEBUG(format, args...)
Print a debugging message.
gboolean gnc_prefs_set_int(const gchar *group, const gchar *pref_name, gint value)
Store an integer value into the preferences backend.
void gnc_sx_instance_model_summarize(GncSxInstanceModel *model, GncSxSummary *summary)
void gnc_sx_instance_model_update_sx_instances(GncSxInstanceModel *model, SchedXaction *sx)
Regenerates and updates the GncSxInstances* for the given SX.
void gnc_sx_instance_model_effect_change(GncSxInstanceModel *model, gboolean auto_create_only, GList **created_transaction_guids, GList **creation_errors)
Really ("effectively") create the transactions from the SX instances in the given model...
void gnc_main_window_open_page(GncMainWindow *window, GncPluginPage *page)
Display a data plugin page in a window.
gint gnc_prefs_get_int(const gchar *group, const gchar *pref_name)
Get an integer value from the preferences backend.
Functions for adding content to a window.
GncPluginPage * gnc_plugin_page_register_new_ledger(GNCLedgerDisplay *ledger)
Create a new "register" plugin page, given a pointer to an already created ledger.
void gnc_sx_summary_print(const GncSxSummary *summary)
Debug output to trace file.
G_DEFINE_TYPE_WITH_CODE(GncMainWindow, gnc_main_window, GTK_TYPE_APPLICATION_WINDOW, G_IMPLEMENT_INTERFACE(GNC_TYPE_WINDOW, gnc_window_main_window_init)) static guint main_window_signals[LAST_SIGNAL]
A holding place for all the signals generated by the main window code.
#define PWARN(format, args...)
Log a warning.
gboolean qof_log_check(QofLogModule domain, QofLogLevel level)
Check to see if the given log_module is configured to log at the given log_level. ...
double gnc_numeric_to_double(gnc_numeric in)
Convert numeric to floating-point value.
Functions providing a register page for the GnuCash UI.
void qof_query_destroy(QofQuery *query)
Frees the resources associate with a Query object.
void gnc_gnome_help(GtkWindow *parent, const char *file_name, const char *anchor)
Launch the systems default help browser, gnome's yelp for linux, and open to a given link within a gi...
gboolean gnc_prefs_set_bool(const gchar *group, const gchar *pref_name, gboolean value)
Store a boolean value into the preferences backend.
gnc_numeric gnc_numeric_error(GNCNumericErrorCode error_code)
Create a gnc_numeric object that signals the error condition noted by error_code, rather than a numbe...
void qof_query_set_book(QofQuery *query, QofBook *book)
Set the book to be searched.
Argument is not a valid number.
time64 gdate_to_time64(GDate d)
Turns a GDate into a time64, returning the first second of the day.
QofQuery * qof_query_merge(QofQuery *q1, QofQuery *q2, QofQueryOp op)
Combine two queries together using the Boolean set (logical) operator 'op'.
#define MAX_DATE_LENGTH
The maximum length of a string created by the date printers.
GDate date
the instance date.
GList * gnc_sx_instance_get_variables(GncSxInstance *inst)
Generic api to store and retrieve preferences.
GList * gnc_sx_instance_model_get_sx_instances_list(GncSxInstanceModel *model)
Returns the list of GncSxInstances in the model (Each element in the list has type GncSxInstances) ...
gboolean qof_book_is_readonly(const QofBook *book)
Return whether the book is read only.
gnc_numeric value
only numeric values are supported.
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
Get a boolean value from the preferences backend.
GncSxInstanceState state
the current state of the instance (during editing)
GncSxInstanceModel * gnc_sx_get_current_instances(void)
Shorthand for get_instances(now, FALSE);.
GNCLedgerDisplay * gnc_ledger_display_query(Query *query, SplitRegisterType type, SplitRegisterStyle style)
display a general ledger for an arbitrary query
GNCNumericErrorCode gnc_numeric_check(gnc_numeric in)
Check for error signal in value.
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
GList * instance_list
GList<GncSxInstance*>
gboolean need_dialog
If the dialog needs to be displayed.
The type used to store guids in C.
GList * gnc_sx_instance_model_check_variables(GncSxInstanceModel *model)