method up_selected =
let rec iter n selrows l =
match selrows with
[] -> (l, [])
| m :: qrows ->
match l with
[] -> ([],[])
| [_] -> (l,[])
| e1 :: e2 :: q when m = n + 1 ->
let newl, newrows = iter (n+1) qrows (e1 :: q) in
(e2 :: newl, n :: newrows)
| e1 :: q ->
let newl, newrows = iter (n+1) selrows q in
(e1 :: newl, newrows)
in
let sorted_select = List.sort compare list_select in
let new_list, new_rows = iter 0 sorted_select !listref in
self#update new_list;
List.iter (fun n -> wlist#select n 0) new_rows