(* Copyright (C) 2004, HELM Team. * * This file is part of HELM, an Hypertextual, Electronic * Library of Mathematics, developed at the Computer Science * Department, University of Bologna, Italy. * * HELM is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * HELM is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HELM; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. * * For details, see the HELM World-Wide-Web page, * http://helm.cs.unibo.it/ *) exception Not_implemented of string let not_implemented feature = raise (Not_implemented feature) (** exceptions whose content should be presented to the user *) exception Failure of string let error s = raise (Failure s) let _ = Helm_registry.load_from "matita.conf.xml" let _ = GMain.Main.init () let gui = new MatitaGui.gui (Helm_registry.get "matita.glade_file") let interactive_user_uri_choice ~(selection_mode:[`MULTIPLE|`SINGLE]) ?(nonvars_button=false) ~title ~msg uris = let only_constant_choices = lazy (List.filter (fun uri -> not (String.sub uri (String.length uri - 4) 4 = ".var")) uris) in if (selection_mode <> `SINGLE) && (Helm_registry.get_bool "matita.auto_disambiguation") then Lazy.force only_constant_choices else begin let win = gui#uriChoice in let choices = ref [] in let chosen = ref false in let use_only_constants = ref false in win#uriChoiceDialog#set_title title; win#uriChoiceLabel#set_text msg; gui#uriChoices#list_store#clear (); List.iter gui#uriChoices#easy_append uris; win#uriChoiceConstantsButton#misc#set_sensitive nonvars_button; let bye = ref (fun () -> ()) in let id1 = win#uriChoiceConstantsButton#connect#clicked (fun _ -> use_only_constants := true; !bye ()) in let id2 = win#uriChoiceAutoButton#connect#clicked (fun _ -> use_only_constants := true ; Helm_registry.set_bool "matita.auto_disambiguation" true; !bye ()) in let id3 = win#uriChoiceSelectedButton#connect#clicked (fun _ -> choices := gui#uriChoices#easy_selection (); !bye ()) in bye := (fun () -> win#uriChoiceDialog#misc#hide (); win#uriChoiceConstantsButton#misc#disconnect id1; win#uriChoiceAutoButton#misc#disconnect id2; win#uriChoiceSelectedButton#misc#disconnect id3; prerr_endline "quit"; GMain.Main.quit ()); win#uriChoiceDialog#show (); GtkThread.main (); if !use_only_constants then Lazy.force only_constant_choices else match !choices with | [] -> error "No choice" | choices -> choices end (* module DisambiguateCallbacks = struct let interactive_user_uri_choice = assert false (* TODO *) (* interactive_user_uri_choice *) let interactive_interpretation_choice choices = assert false (* TODO *) let input_or_locate_uri ~title = assert false (* TODO *) end *) let debugDialog () = let dialog = new MatitaGeneratedGui.debug ~file:(Helm_registry.get "matita.glade_file") () in let retval = ref None in let return v = retval := Some v; dialog#debug#destroy (); GMain.Main.quit () in ignore (dialog#debug#event#connect#delete (fun _ -> true)); ignore (dialog#okbutton2#connect#clicked (fun _ -> return 1)); ignore (dialog#cancelbutton2#connect#clicked (fun _ -> return 2)); dialog#debug#show (); GtkThread.main (); (match !retval with None -> assert false | Some v -> v) let _ = gui#main#debugMenuItem2#connect#activate (fun _ -> prerr_endline (string_of_int (debugDialog ()))) (** quit program, possibly asking for confirmation *) let quit () = GMain.Main.quit () let _ = gui#setQuitCallback quit let _ = gui#main#debugMenuItem0#connect#activate (fun _ -> let uris = interactive_user_uri_choice ~selection_mode:`MULTIPLE ~nonvars_button:false ~title:"titolo" ~msg:"messaggio" ["cic:/uno.con"; "cic:/due.var"; "cic:/tre.con"; "cic:/quattro.con"; "cic:/cinque.var"] in List.iter prerr_endline uris; print_newline ()) let _ = gui#main#debugMenuItem1#connect#activate (fun _ -> Helm_registry.set_bool "matita.auto_disambiguation" (not (Helm_registry.get_bool "matita.auto_disambiguation"))) let _ = (* gui#uriChoices#easy_append "pippo"; *) (* gui#uriChoices#list_store#clear (); *) GtkThread.main ()