]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/matita/matita.ml
snapshot
[helm.git] / helm / matita / matita.ml
index dd813debeff745fa449ab42f57a396a1664a7ca2..8f34f5bf728c141b88fe12cc8f97c3303cc45756 100644 (file)
@@ -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} *)
@@ -53,18 +52,32 @@ let disambiguator =
     ~chooseUris:(interactive_user_uri_choice ~gui)
     ~chooseInterp:(interactive_interp_choice ~gui)
     ()
+
 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 proof
-let interpreter =
-  new MatitaInterpreter.interpreter
-    ~disambiguator ~console:gui#console ~get_proof ~new_proof ()
+  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 ()
 
-  (** quit program, possibly asking for confirmation *)
-let quit () = 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;
@@ -73,9 +86,8 @@ let _ =
   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
@@ -84,8 +96,7 @@ let _ =
         disambiguator#disambiguateTerm (Stream.of_string input)
       in
       let proof = MatitaProof.proof ~typ:term ~metasenv () in
-      new_proof proof;
-      debug_print ("new proof, goal is: " ^ CicPp.ppterm term)))
+      new_proof proof))
 
   (** <DEBUGGING> *)
 let _ =