let create_or_update_list_window doc_modules =
let (window, wlist, wcombo) =
match !modules_window with
None ->
let window = GWindow.window ~kind: `TOPLEVEL
~title: Cam_messages.doc_box
~width: 120
~height:
(
let n = 80 + 20 * (List.length !doc_modules) in
let h_limit = (Gdk.Screen.height ()) - 30 in
if n > h_limit then h_limit else n
)
()
in
window#move ~x: 0 ~y: 0;
let vbox = GPack.vbox ~packing: window#add () in
let wcombo = GEdit.combo
~enable_arrow_keys: true
~case_sensitive: true
~value_in_list: false
~allow_empty: true
~packing: (vbox#pack ~expand: false)
()
in
let wb_search = GButton.button
~label: Cam_messages.search_exact
~packing: (vbox#pack ~expand: false)
()
in
let wscroll = GBin.scrolled_window
~hpolicy: `NEVER
~vpolicy: `AUTOMATIC
~packing: (vbox#pack ~expand: true)
()
in
let wlist = GList.clist
~titles_show: false
~titles: [""]
~selection_mode: `SINGLE
~packing: wscroll#add
()
in
wlist_key_stroke doc_modules wlist ;
let wb_close = GButton.button ~label: Cam_messages.close
~packing: (vbox#pack ~expand: false ~padding: 3) ()
in
let _ = window#connect#destroy
(fun () -> modules_window := None)
in
ignore (wb_close#connect#clicked window#destroy);
ignore (wb_search#connect#clicked
(fun () ->
match wcombo#entry#text with
"" -> ()
| s -> !f_search_exact doc_modules s
));
window#show () ;
(window, wlist, wcombo)
| Some (win, wlist, wcombo, _) -> (win, wlist, wcombo)
in
let _ = wlist#clear () in
selected_line := None ;
let _ = List.iter
(fun m -> let _ = wlist#append [ m.m_name ] in ())
!doc_modules
in
GToolbox.autosize_clist wlist;
wcombo#set_popdown_strings Cam_doc.doc_bookmarks#get;
modules_window := Some (window, wlist, wcombo, List.map (fun m -> m.m_name) !doc_modules) ;
wlist#misc#grab_focus ()