method insert_rep_desc ?parent ?pos ele =
let row =
match pos with
None -> store#append ?parent: (map_opt (fun rr -> rr#iter) parent) ()
| Some pos -> store#insert ?parent: (map_opt (fun rr -> rr#iter) parent) pos
in
let iter_rr rr = store#get_row_reference (store#get_path rr) in
(
match parent with
None -> ()
| Some rr -> tv#expand_row rr#path
);
match ele with
Leaf l ->
store#set row col_display (self#string_of_desc_ele ele);
store#set row col_data (Leaf { leaf = l.leaf })
| Tag t ->
store#set row col_display (self#string_of_desc_ele ele);
store#set row col_data (Tag { t with tag_subs = [] });
List.iter (self#insert_rep_desc ~parent: (iter_rr row)) t.tag_subs
| List l ->
store#set row col_display (self#string_of_desc_ele ele);
store#set row col_data (List { l with list_subs = []});
List.iter (self#insert_rep_desc ~parent: (iter_rr row)) l.list_subs
| Cond c ->
store#set row col_display (self#string_of_desc_ele ele);
store#set row col_data (Cond {c with subs_then = [] ; subs_else = []});
self#insert_rep_desc ~parent: (iter_rr row) (Then c);
self#insert_rep_desc ~parent: (iter_rr row) (Else c)
| Sub s ->
store#set row col_display (self#string_of_desc_ele ele);
store#set row col_data (Sub { sub_code = s.sub_code })
| Mark m ->
store#set row col_display (self#string_of_desc_ele ele);
store#set row col_data (Mark { m with mark_id = m.mark_id })
| Then c ->
store#set row col_display (self#string_of_desc_ele ele);
store#set row col_data (Then {c with subs_then = [] ; subs_else = []});
List.iter (self#insert_rep_desc ~parent: (iter_rr row)) c.subs_then
| Else c ->
store#set row col_display (self#string_of_desc_ele ele);
store#set row col_data (Else {c with subs_then = [] ; subs_else = []});
List.iter (self#insert_rep_desc ~parent: (iter_rr row)) c.subs_else