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