]> matita.cs.unibo.it Git - helm.git/commitdiff
added choose_uri method to console, used by the interpreter to implement the
authorEnrico Tassi <enrico.tassi@inria.fr>
Mon, 14 Feb 2005 15:12:24 +0000 (15:12 +0000)
committerEnrico Tassi <enrico.tassi@inria.fr>
Mon, 14 Feb 2005 15:12:24 +0000 (15:12 +0000)
hint command

helm/matita/matitaGui.ml
helm/matita/matitaGui.mli
helm/matita/matitaInterpreter.ml
helm/matita/matitaMisc.ml
helm/matita/matitaTypes.ml
helm/matita/matitaTypes.mli
helm/matita/matitac.ml

index b67b523f46c2db475cfe67c0797ba74a27e04a33..7ac22dc8dd644ef0167b9bd7f59cd5d5c46e7cca 100644 (file)
@@ -29,6 +29,52 @@ open MatitaGeneratedGui
 open MatitaGtkMisc
 open MatitaMisc
 
+let gui_instance = ref None ;;
+
+class console ~evbox ~phrase_sep ~packing ~paned () =
+  let console = MatitaConsole.console ~evbox ~phrase_sep ~packing ~paned () in
+  object 
+    method clear = console#clear
+    method echo_error = console#echo_error
+    method echo_message = console#echo_message
+    method wrap_exn: 'a. (unit -> 'a) -> 'a option = console#wrap_exn
+    method choose_uri uris = 
+      let g = match !gui_instance with None -> assert false | Some g -> g in
+      let ul = g#newUriDialog () in
+      ul#toplevel#show ();
+      let model = new stringListModel ul#uriChoiceTreeView in
+      List.iter model#easy_append uris;
+      ul#uriChoiceDialog#set_title "Hints";
+      ul#uriChoiceLabel#set_text "Suggested uris";
+      ul#uriChoiceAbortButton#misc#hide ();
+      ul#uriChoiceAutoButton#misc#hide ();
+      ul#uriChoiceConstantsButton#misc#hide ();
+      ul#hbox2#misc#hide ();
+      ul#uriChoiceTreeView#selection#set_mode 
+       (`SINGLE :> Gtk.Tags.selection_mode);
+      let _ = ul#uriChoiceTreeView#selection#connect#changed 
+        ~callback:(fun () -> ()) in
+      let _ = ul#toplevel#connect#destroy
+        ~callback:(fun () -> GMain.Main.quit ()) in
+      let choices = ref None in
+      let _ = ul#uriChoiceSelectedButton#connect#clicked 
+        ~callback:(fun () -> 
+          (match model#easy_selection () with
+          | [] -> ()
+          | [uri] -> choices := (Some uri)
+          | _ -> assert false);
+            ul#uriChoiceDialog#destroy ();
+            GMain.Main.quit ()) in
+      GMain.main ();
+      match !choices with 
+      | Some u -> u
+      | None -> raise MatitaTypes.Cancel
+      
+    method show = console#show
+
+    method console = console
+  end
+
 class gui file =
     (* creation order _is_ relevant for windows placement *)
   let toolbar = new toolBarWin ~file () in
@@ -41,7 +87,7 @@ class gui file =
       script#scriptWinEventBox; main#consoleEventBox ]
   in
   let console =
-    MatitaConsole.console ~evbox:main#consoleEventBox
+    new console ~evbox:main#consoleEventBox
       ~phrase_sep:BuildTimeConf.phrase_sep
       ~packing:main#scrolledConsole#add ~paned:main#mainVPanes ()
   in
@@ -64,9 +110,10 @@ class gui file =
 *)
         [ GdkKeysyms._F5,
             toggle_win ~check:main#showScriptMenuItem script#scriptWin;
-          GdkKeysyms._x, (fun () -> console#toggle ());
+          GdkKeysyms._x, (fun () -> console#console#toggle ());
         ];
-      add_key_binding GdkKeysyms._Escape console#hide main#consoleEventBox;
+      add_key_binding GdkKeysyms._Escape console#console#hide
+        main#consoleEventBox;
         (* about win *)
       ignore (about#aboutWin#event#connect#delete (fun _ -> true));
       ignore (main#aboutMenuItem#connect#activate (fun _ ->
@@ -101,17 +148,17 @@ class gui file =
       List.iter (fun w -> w#misc#set_sensitive false)
         [ main#saveMenuItem; main#saveAsMenuItem ];
       main#helpMenu#set_right_justified true;
-      ignore (main#showConsoleMenuItem#connect#activate console#toggle);
+      ignore (main#showConsoleMenuItem#connect#activate console#console#toggle);
         (* main *)
-      connect_button main#hideConsoleButton console#hide;
+      connect_button main#hideConsoleButton console#console#hide;
         (* console *)
       console#echo_message (sprintf "\tMatita version %s\n"
         BuildTimeConf.version);
-      console#echo_prompt ();
-      console#misc#grab_focus ();
+      console#console#echo_prompt ();
+      console#console#misc#grab_focus ();
 
     method about = about
-    method console = console
+    method console = (console :> MatitaTypes.console)
     method fileSel = fileSel
     method main = main
     method script = script
@@ -151,7 +198,7 @@ class gui file =
       ignore (main#quitMenuItem#connect#activate callback);
       self#addKeyBinding GdkKeysyms._q callback
 
-    method setPhraseCallback = console#set_callback
+    method setPhraseCallback = console#console#set_callback
 
     method chooseFile () =
       fileSel#fileSelectionWin#show ();
@@ -179,6 +226,10 @@ class gui file =
 
   end
 
-let gui () = new gui (Helm_registry.get "matita.glade_file")
+let gui () = 
+  let g = new gui (Helm_registry.get "matita.glade_file") in
+  gui_instance := Some g;
+  g
+  
 let instance = singleton gui
 
index b3390d66a9eac279dc51300543727364c9487648..90cb814a14607406fbe16c6d82fa50bdcfa0ad6d 100644 (file)
@@ -41,7 +41,7 @@ class gui :
 
       (** {2 Access to GUI useful components} *)
 
-    method console:       MatitaConsole.console
+    method console:       MatitaTypes.console
 
       (** {2 Dialogs instantiation}
        * methods below create a new window on each invocation. You should
index a231c08919564e482c3f27fd2716392d31b8162a..9440e84665daa25ed676560ce0a999e9b1f58f4d 100644 (file)
@@ -561,6 +561,13 @@ class proofState ~(console: #MatitaTypes.console) ?mathViewer () =
           Tactics.replace ~what:(self#disambiguate what)
             ~with_what:(self#disambiguate with_what)
       | TacticAst.Auto -> Tactics.auto_new ~dbd
+      | TacticAst.Hint -> 
+          let l = List.map fst 
+            (MetadataQuery.experimental_hint ~dbd  
+             (currentProof#proof#proof,currentProof#proof#goal))
+          in
+          let u = console#choose_uri l in
+          Tactics.apply (CicUtil.term_of_uri u) 
       | TacticAst.Change (what, with_what, _) ->
           let what = self#disambiguate what in
           let with_what = self#disambiguate with_what in
@@ -640,6 +647,8 @@ class interpreter ~(console: #MatitaTypes.console) ?mathViewer () =
       | `Proof -> (state <- proofState)
       | `Command -> (state <- commandState)
 
+    method endOffset = state#endOffset
+
     method private updateState = function
       | New_state Command -> (state <- commandState)
       | New_state Proof -> (state <- proofState)
index c9d8ae4a6dbc313a2ede0b2110468afaec6c044d..094f965e0ae20d02aff1ae0130d82899b4d729a3 100644 (file)
@@ -54,7 +54,7 @@ let empty_mathml () =
     ~qualifiedName:(Gdome.domString "math") ~doctype:None
 
 let empty_boxml () =
-  Misc.domImpl#createDocument ~namespaceURI:(Some Misc.boxml_ns)
+  Misc.domImpl#createDocument ~namespaceURI:(Some Misc.boxml_ns) 
     ~qualifiedName:(Gdome.domString "box") ~doctype:None
 
 exception History_failure
index a9e74bf5fdbf1e0bef21d76681dc61481454a85d..73a5da1a1c3bc863df34b0516c9724e0b709c09e 100644 (file)
@@ -75,6 +75,8 @@ class type console =
     method echo_error     : string -> unit
     method clear          : unit -> unit
     method wrap_exn       : 'a. (unit -> 'a) -> 'a option
+    method choose_uri     : string list -> string
+    method show : ?msg:string -> unit -> unit
   end
 
 type choose_uris_callback =
index 538b4b3243406b36039db5b9e7b46e227b0a738e..1db5bb0de04ea2efb8454458d3da9b73d00f8478 100644 (file)
@@ -72,6 +72,8 @@ class type console =
     method echo_error : string -> unit
     method echo_message : string -> unit
     method wrap_exn : 'a. (unit -> 'a) -> 'a option
+    method choose_uri : string list -> string
+    method show : ?msg:string -> unit -> unit
   end
 
 class type disambiguator =
index 2ae1c8d6846b635d1dca96a10121bb4ef0224969..533bbc6a3d46df166290596df4da29ed2a745ae4 100644 (file)
@@ -46,6 +46,8 @@ class tty_console =
       with exn ->
         self#echo_error (explain exn);
         None
+    method show ?(msg = "") () = assert false; ()
+    method choose_uri (uris: string list): string = assert false
   end
 
 (** {2 Initialization} *)