diff --git a/ChangeLog b/ChangeLog index c25bd01e44..77699e83ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,9 @@ * gw-kvp-spec.scm: wrap kvp_slot_set_slot_path_gslist(), kvp_slot_get_slot_path_gslist(), and gnc_book_get_slots() + * kvp-scm: create gnc_kvp_frame_delete_at_path() and wrap it. + This function will clear a sub-tree out of a kvp_frame. + 2002-07-05 Derek Atkins * gw-engine-spec.scm: wrap gnc_lot_get_split_list diff --git a/src/engine/gw-kvp-spec.scm b/src/engine/gw-kvp-spec.scm index bfc931f94e..a6140091e7 100644 --- a/src/engine/gw-kvp-spec.scm +++ b/src/engine/gw-kvp-spec.scm @@ -40,6 +40,15 @@ '(c-var " = gnc_scm_to_kvp_value_ptr(" scm-var ");\n") '(scm-var " = gnc_kvp_value_ptr_to_scm(" c-var ");\n")) + (gw:wrap-function + ws + 'gnc:kvp-frame-delete-at-path + ' + "gnc_kvp_frame_delete_at_path" + '(( f) + ((gw:glist-of ( caller-owned const) caller-owned) key-path)) + "Deletes the kvp_frame at the key-path in frame f") + (gw:wrap-function ws 'gnc:kvp-frame-set-slot diff --git a/src/engine/kvp-scm.c b/src/engine/kvp-scm.c index a4ccac0873..91f334f6ab 100644 --- a/src/engine/kvp-scm.c +++ b/src/engine/kvp-scm.c @@ -95,3 +95,16 @@ gnc_kvp_value_ptr_to_scm(kvp_value* val) } return SCM_BOOL_F; } + +void +gnc_kvp_frame_delete_at_path (kvp_frame *frame, GSList *key_path) +{ + kvp_value *val; + + val = kvp_frame_get_slot_path_gslist (frame, key_path); + if (!val) return; + if (kvp_value_get_type (val) == KVP_TYPE_FRAME) { + frame = kvp_value_get_frame (val); + kvp_frame_delete (frame); + } +} diff --git a/src/engine/kvp-scm.h b/src/engine/kvp-scm.h index 269135ad64..2aa8b21058 100644 --- a/src/engine/kvp-scm.h +++ b/src/engine/kvp-scm.h @@ -7,6 +7,7 @@ int gnc_kvp_value_ptr_p(SCM arg); kvp_value* gnc_scm_to_kvp_value_ptr(SCM kvpval); SCM gnc_kvp_value_ptr_to_scm(kvp_value* val); +void gnc_kvp_frame_delete_at_path(kvp_frame *frame, GSList *key_path); #endif /* KVP_SCM_H */