X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2FmatitaGui.ml;h=26cf9df086cacdd54511d0ded7bb5dab02fa40b0;hb=339504cd07bef1767536d6817953ba084e00855d;hp=70a909a57c0a05234f8ae93061fd790b8ae34372;hpb=fd96ce8e13f4f9adbeef2d9feb32f94dfcfaadad;p=helm.git diff --git a/helm/matita/matitaGui.ml b/helm/matita/matitaGui.ml index 70a909a57..26cf9df08 100644 --- a/helm/matita/matitaGui.ml +++ b/helm/matita/matitaGui.ml @@ -45,6 +45,7 @@ open Printf open MatitaGeneratedGui open MatitaGtkMisc +open MatitaMisc class gui file = (* creation order _is_ relevant for windows placement *) @@ -54,45 +55,84 @@ class gui file = let fileSel = new fileSelectionWin ~file () in let proof = new proofWin ~file () in let check = new checkWin ~file () in + let script = new scriptWin ~file () in let keyBindingBoxes = (* event boxes which should receive global key events *) - [ toolbar#toolBarEventBox; proof#proofWinEventBox; main#mainWinEventBox ] + [ toolbar#toolBarEventBox; proof#proofWinEventBox; main#mainWinEventBox; + check#checkWinEventBox; script#scriptWinEventBox; main#consoleEventBox ] in let console = MatitaConsole.console ~evbox:main#consoleEventBox - ~packing:main#scrolledConsole#add () + ~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 ()) (let c w = (w :> unit>) in - [ c about; c fileSel; c main; c proof; c toolbar; c check ]); - (* show/hide commands *) - toggle_visibility toolbar#toolBarWin main#showToolBarMenuItem; - toggle_visibility proof#proofWin main#showProofMenuItem; - toggle_visibility check#checkWin main#showCheckMenuItem; + [ c about; c fileSel; c main; c proof; c toolbar; c check; c script ]); (* "global" key bindings *) List.iter (fun (key, callback) -> self#addKeyBinding key callback) [ GdkKeysyms._F3, toggle_win ~check:main#showProofMenuItem proof#proofWin; + GdkKeysyms._F4, + toggle_win ~check:main#showCheckMenuItem check#checkWin; + GdkKeysyms._F5, + toggle_win ~check:main#showScriptMenuItem script#scriptWin; + GdkKeysyms._x, (fun () -> console#toggle ()); ]; (* about win *) ignore (about#aboutWin#event#connect#delete (fun _ -> true)); ignore (main#aboutMenuItem#connect#activate (fun _ -> about#aboutWin#show ())); - ignore (about#aboutDismissButton#connect#clicked (fun _ -> - about#aboutWin#misc#hide ())); + connect_button about#aboutDismissButton (fun _ -> + about#aboutWin#misc#hide ()); about#aboutLabel#set_label (Pcre.replace ~pat:"@VERSION@" ~templ:BuildTimeConf.version about#aboutLabel#label); + (* file selection win *) + ignore (fileSel#fileSelectionWin#event#connect#delete (fun _ -> true)); + ignore (fileSel#fileSelectionWin#connect#response (fun event -> + let return r = + chosen_file <- r; + fileSel#fileSelectionWin#misc#hide (); + GMain.Main.quit () + in + match event with + | `OK -> + let fname = fileSel#fileSelectionWin#filename in + if is_regular fname then return (Some fname) + | `CANCEL -> return None + | `HELP -> () + | `DELETE_EVENT -> return None)); + (* script *) (* menus *) + toggle_visibility toolbar#toolBarWin main#showToolBarMenuItem; + toggle_visibility proof#proofWin main#showProofMenuItem; + toggle_visibility check#checkWin main#showCheckMenuItem; + toggle_visibility script#scriptWin main#showScriptMenuItem; 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); + (* main *) + connect_button main#hideConsoleButton console#hide; +(* (* console *) console#echo_message (sprintf "\tMatita version %s\n" BuildTimeConf.version); console#echo_prompt (); - console#misc#grab_focus () + console#misc#grab_focus (); +*) method about = about method check = check @@ -100,6 +140,7 @@ class gui file = method fileSel = fileSel method main = main method proof = proof + method script = script method toolbar = toolbar method newUriDialog () = @@ -133,6 +174,38 @@ class gui file = method setPhraseCallback = console#set_callback + method chooseFile () = + fileSel#fileSelectionWin#show (); + GtkThread.main (); + chosen_file + + method askText ?(title = "") ?(msg = "") () = + let dialog = new textDialog () in + dialog#textDialog#set_title title; + dialog#textDialogLabel#set_label msg; + let text = ref None in + let return v = + text := v; + dialog#textDialog#destroy (); + GMain.Main.quit () + in + ignore (dialog#textDialog#event#connect#delete (fun _ -> true)); + connect_button dialog#textDialogCancelButton (fun _ -> return None); + connect_button dialog#textDialogOkButton (fun _ -> + let text = dialog#textDialogTextView#buffer#get_text () in + return (Some text)); + dialog#textDialog#show (); + 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 =