X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2Fmatita.ml;h=8f34f5bf728c141b88fe12cc8f97c3303cc45756;hb=e89486cad653803954662a5e543537acd49a866f;hp=b71463860148a98b08c587d57d65dbcaed067ef8;hpb=481992ea591bf53cba758a96e7d42e9cdce7e129;p=helm.git diff --git a/helm/matita/matita.ml b/helm/matita/matita.ml index b71463860..8f34f5bf7 100644 --- a/helm/matita/matita.ml +++ b/helm/matita/matita.ml @@ -27,14 +27,13 @@ open MatitaGtkMisc (** {2 Internal status} *) - (* TODO Zack: may be current_proofs if we want an MDI interface *) let (get_proof, set_proof, has_proof) = let (current_proof: MatitaTypes.proof option ref) = ref None in ((fun () -> match !current_proof with | Some proof -> proof - | None -> assert false), - (fun proof -> current_proof := Some proof), + | None -> failwith "No current proof"), + (fun proof -> current_proof := proof), (fun () -> !current_proof <> None)) (** {2 Settings} *) @@ -54,18 +53,41 @@ let disambiguator = ~chooseInterp:(interactive_interp_choice ~gui) () - (** quit program, possibly asking for confirmation *) -let quit () = GMain.Main.quit () +let new_proof proof = + (* TODO Zack: high level function which create a new proof object and register + * to it the widgets which must be refreshed upon status changes *) +(* proof#status#attach ... *) + proof#status#notify (); + set_proof (Some proof) + +let quit () = (* quit program, asking for confirmation if needed *) + if not (has_proof ()) || + (ask_confirmation ~gui + ~msg:("Proof in progress, are you sure you want to quit?") ()) + then + GMain.Main.quit () + +let proof_handler = + { MatitaTypes.get_proof = get_proof; + MatitaTypes.set_proof = set_proof; + MatitaTypes.has_proof = has_proof; + MatitaTypes.new_proof = new_proof; + MatitaTypes.quit = quit; + } + +let interpreter = + let console = gui#console in + new MatitaInterpreter.interpreter ~disambiguator ~proof_handler ~console () let _ = gui#setQuitCallback quit; + gui#setPhraseCallback interpreter#evalPhrase; gui#main#debugMenu#misc#hide (); ignore (gui#main#newProofMenuItem#connect#activate (fun _ -> if has_proof () && not (ask_confirmation ~gui - ~msg:("Starting a new proof will abort current one,\n" ^ - "are you sure you want to continue?") - ()) + ~msg:("Proof in progress, are you sure you want to start a new one?") + ()) then () (* abort new proof process *) else @@ -74,10 +96,7 @@ let _ = disambiguator#disambiguateTerm (Stream.of_string input) in let proof = MatitaProof.proof ~typ:term ~metasenv () in -(* proof#status#attach ... FINQUI *) - proof#status#notify (); - set_proof proof; - debug_print ("new proof, goal is: " ^ CicPp.ppterm term))) + new_proof proof)) (** *) let _ =