X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2FmatitaGui.ml;h=7ac22dc8dd644ef0167b9bd7f59cd5d5c46e7cca;hb=ab336f7c09d052c45a09dd49e9b75a39e8b57e5b;hp=04d52cd9e3555a0cdb7c2a1eeec498644d7fdbaa;hpb=7deafec4fd4b2eebf4d4061f21ee5c47bd15b062;p=helm.git diff --git a/helm/matita/matitaGui.ml b/helm/matita/matitaGui.ml index 04d52cd9e..7ac22dc8d 100644 --- a/helm/matita/matitaGui.ml +++ b/helm/matita/matitaGui.ml @@ -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,21 +87,13 @@ 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 - let script_buf = script#scriptTextView#buffer in object (self) val mutable chosen_file = None - (** text mark and tag representing locked part of a script *) - val locked_mark = - script_buf#create_mark ~name:"locked" ~left_gravity:true - script_buf#start_iter - val locked_tag = - script_buf#create_tag [`BACKGROUND "green"; `EDITABLE false] - initializer (* glade's check widgets *) List.iter (fun w -> w#check_widgets ()) @@ -72,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 _ -> @@ -109,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 @@ -159,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 (); @@ -185,17 +224,12 @@ class gui file = GtkThread.main (); !text - method lockScript offset = - let mark = `MARK locked_mark in - script_buf#move_mark mark ~where:(script_buf#get_iter_at_char offset); - script_buf#remove_tag locked_tag ~start:script_buf#start_iter - ~stop:script_buf#end_iter; - script_buf#apply_tag locked_tag ~start:script_buf#start_iter - ~stop:(script_buf#get_iter_at_mark mark) - end -let instance = - let gui = lazy (new gui (Helm_registry.get "matita.glade_file")) in - fun () -> Lazy.force gui +let gui () = + let g = new gui (Helm_registry.get "matita.glade_file") in + gui_instance := Some g; + g + +let instance = singleton gui