diff --git a/src/gnome-utils/gnc-sx-instance-dense-cal-adapter.c b/src/gnome-utils/gnc-sx-instance-dense-cal-adapter.c index 1c7ecf9344..ef3eb6f038 100644 --- a/src/gnome-utils/gnc-sx-instance-dense-cal-adapter.c +++ b/src/gnome-utils/gnc-sx-instance-dense-cal-adapter.c @@ -82,7 +82,10 @@ gsidca_instances_added_cb(GncSxInstanceModel *model, SchedXaction *sx_added, gpo { GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(user_data); printf("instance added\n"); - g_signal_emit_by_name(adapter, "added", GPOINTER_TO_UINT(sx_added)); + if (xaccSchedXactionGetEnabled(sx_added)) + { + g_signal_emit_by_name(adapter, "added", GPOINTER_TO_UINT(sx_added)); + } } static void @@ -91,7 +94,14 @@ gsidca_instances_updated_cb(GncSxInstanceModel *model, SchedXaction *sx_updated, GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(user_data); gnc_sx_instance_model_update_sx_instances(model, sx_updated); printf("instances updated\n"); - g_signal_emit_by_name(adapter, "update", GPOINTER_TO_UINT((gpointer)sx_updated)); + if (xaccSchedXactionGetEnabled(sx_updated)) + { + g_signal_emit_by_name(adapter, "update", GPOINTER_TO_UINT((gpointer)sx_updated)); + } + else + { + g_signal_emit_by_name(adapter, "removing", GPOINTER_TO_UINT((gpointer)sx_updated)); + } } static void @@ -167,7 +177,10 @@ gsidca_get_contained(GncDenseCalModel *model) for (sxes = adapter->instances->sx_instance_list; sxes != NULL; sxes = sxes->next) { GncSxInstances *sx_instances = (GncSxInstances*)sxes->data; - list = g_list_append(list, GUINT_TO_POINTER(GPOINTER_TO_UINT(sx_instances->sx))); + if (xaccSchedXactionGetEnabled(sx_instances->sx)) + { + list = g_list_append(list, GUINT_TO_POINTER(GPOINTER_TO_UINT(sx_instances->sx))); + } } return list; } diff --git a/src/gnome/gnc-plugin-page-sx-list.c b/src/gnome/gnc-plugin-page-sx-list.c index ccfcb74152..8d7f3f55e1 100644 --- a/src/gnome/gnc-plugin-page-sx-list.c +++ b/src/gnome/gnc-plugin-page-sx-list.c @@ -362,6 +362,11 @@ gnc_plugin_page_sx_list_create_widget (GncPluginPage *plugin_page) gtk_tree_view_column_set_sort_column_id(column, SXLTMA_COL_NAME); gtk_tree_view_append_column(priv->tree_view, column); + renderer = gtk_cell_renderer_toggle_new(); + column = gtk_tree_view_column_new_with_attributes("Enabled", renderer, "active", SXLTMA_COL_ENABLED, NULL); + gtk_tree_view_column_set_sort_column_id(column, SXLTMA_COL_ENABLED); + gtk_tree_view_append_column(priv->tree_view, column); + renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("Frequency", renderer, "text", SXLTMA_COL_FREQUENCY, NULL); gtk_tree_view_column_set_sort_column_id(column, SXLTMA_COL_FREQUENCY); diff --git a/src/gnome/gnc-sx-list-tree-model-adapter.c b/src/gnome/gnc-sx-list-tree-model-adapter.c index 4b48b4e458..61baac8b65 100644 --- a/src/gnome/gnc-sx-list-tree-model-adapter.c +++ b/src/gnome/gnc-sx-list-tree-model-adapter.c @@ -430,15 +430,30 @@ _next_occur_comparator(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpoi &b_inst->next_instance_date); } +static gint +_enabled_comparator(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data) +{ + GncSxListTreeModelAdapter *adapter = GNC_SX_LIST_TREE_MODEL_ADAPTER(user_data); + GncSxInstances *a_inst, *b_inst; + + a_inst = gsltma_get_sx_instances_from_orig_iter(adapter, a); + b_inst = gsltma_get_sx_instances_from_orig_iter(adapter, b); + + if (xaccSchedXactionGetEnabled(a_inst->sx) && !xaccSchedXactionGetEnabled(b_inst->sx)) return 1; + if (!xaccSchedXactionGetEnabled(a_inst->sx) && xaccSchedXactionGetEnabled(b_inst->sx)) return -1; + return 0; +} + static void gnc_sx_list_tree_model_adapter_init(GTypeInstance *instance, gpointer klass) { GncSxListTreeModelAdapter *adapter = GNC_SX_LIST_TREE_MODEL_ADAPTER(instance); - adapter->orig = gtk_tree_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); + adapter->orig = gtk_tree_store_new(5, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); adapter->real = GTK_TREE_MODEL_SORT(gtk_tree_model_sort_new_with_model(GTK_TREE_MODEL(adapter->orig))); // setup sorting gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(adapter->real), SXLTMA_COL_NAME, _name_comparator, adapter, NULL); + gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(adapter->real), SXLTMA_COL_ENABLED, _enabled_comparator, adapter, NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(adapter->real), SXLTMA_COL_FREQUENCY, _freq_comparator, adapter, NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(adapter->real), SXLTMA_COL_LAST_OCCUR, _last_occur_comparator, adapter, NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(adapter->real), SXLTMA_COL_NEXT_OCCUR, _next_occur_comparator, adapter, NULL); @@ -492,6 +507,7 @@ gsltma_populate_tree_store(GncSxListTreeModelAdapter *model) gtk_tree_store_append(model->orig, &iter, NULL); gtk_tree_store_set(model->orig, &iter, SXLTMA_COL_NAME, xaccSchedXactionGetName(instances->sx), + SXLTMA_COL_ENABLED, xaccSchedXactionGetEnabled(instances->sx), SXLTMA_COL_FREQUENCY, frequency_str->str, SXLTMA_COL_LAST_OCCUR, last_occur_date_buf, SXLTMA_COL_NEXT_OCCUR, next_occur_date_buf, diff --git a/src/gnome/gnc-sx-list-tree-model-adapter.h b/src/gnome/gnc-sx-list-tree-model-adapter.h index 9065f24eba..17fb03e834 100644 --- a/src/gnome/gnc-sx-list-tree-model-adapter.h +++ b/src/gnome/gnc-sx-list-tree-model-adapter.h @@ -44,6 +44,7 @@ typedef struct _GncSxListTreeModelAdapterClass GncSxListTreeModelAdapterClass; // model columns enum { SXLTMA_COL_NAME = 0, + SXLTMA_COL_ENABLED, SXLTMA_COL_FREQUENCY, SXLTMA_COL_LAST_OCCUR, SXLTMA_COL_NEXT_OCCUR