+ let fourierb =
+ GButton.button ~label:"Fourier"
+ ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
+ let rewritesimplb =
+ GButton.button ~label:"RewriteSimpl ->"
+ ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
+ let reflexivityb =
+ GButton.button ~label:"Reflexivity"
+ ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
+ let hbox5 =
+ GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in
+ let symmetryb =
+ GButton.button ~label:"Symmetry"
+ ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
+ let transitivityb =
+ GButton.button ~label:"Transitivity"
+ ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
+ let leftb =
+ GButton.button ~label:"Left"
+ ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
+ let rightb =
+ GButton.button ~label:"Right"
+ ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
+ let assumptionb =
+ GButton.button ~label:"Assumption"
+ ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
+object
+ method proofw = proofw
+ method content = vbox1
+ initializer
+ ignore(exactb#connect#clicked exact) ;
+ ignore(applyb#connect#clicked apply) ;
+ ignore(elimsimplintrosb#connect#clicked elimsimplintros) ;
+ ignore(elimtypeb#connect#clicked elimtype) ;
+ ignore(whdb#connect#clicked whd) ;
+ ignore(reduceb#connect#clicked reduce) ;
+ ignore(simplb#connect#clicked simpl) ;
+ ignore(foldb#connect#clicked fold) ;
+ ignore(cutb#connect#clicked cut) ;
+ ignore(changeb#connect#clicked change) ;
+ ignore(letinb#connect#clicked letin) ;
+ ignore(ringb#connect#clicked ring) ;
+ ignore(clearbodyb#connect#clicked clearbody) ;
+ ignore(clearb#connect#clicked clear) ;
+ ignore(fourierb#connect#clicked fourier) ;
+ ignore(rewritesimplb#connect#clicked rewritesimpl) ;
+ ignore(reflexivityb#connect#clicked reflexivity) ;
+ ignore(symmetryb#connect#clicked symmetry) ;
+ ignore(transitivityb#connect#clicked transitivity) ;
+ ignore(leftb#connect#clicked left) ;
+ ignore(rightb#connect#clicked right) ;
+ ignore(assumptionb#connect#clicked assumption) ;
+ ignore(introsb#connect#clicked intros) ;
+ initializer
+ ignore(proofw#connect#selection_changed (choose_selection proofw)) ;
+end
+;;
+
+class notebook =
+object(self)
+ val notebook = GPack.notebook ()
+ val pages = ref []
+ val mutable skip_switch_page_event = false
+ method notebook = notebook
+ method add_page n =
+ let new_page = new page () in
+ pages := !pages @ [n,new_page] ;
+ notebook#append_page
+ ~tab_label:((GMisc.label ~text:("?" ^ string_of_int n) ())#coerce)
+ new_page#content#coerce
+ method remove_all_pages =
+ List.iter (function _ -> notebook#remove_page 0) !pages ;
+ pages := [] ;
+ method set_current_page n =
+ let (_,page) = List.find (function (m,_) -> m=n) !pages in
+ let new_page = notebook#page_num page#content#coerce in
+ if new_page <> notebook#current_page then
+ skip_switch_page_event <- true ;
+ notebook#goto_page new_page
+ method set_empty_page = self#add_page (-1)
+ method proofw =
+ (snd (List.nth !pages notebook#current_page))#proofw
+ initializer
+ ignore
+ (notebook#connect#switch_page
+ (function i ->
+ let skip = skip_switch_page_event in
+ skip_switch_page_event <- false ;
+ if not skip then
+ try
+ let metano = fst (List.nth !pages i) in
+ setgoal metano
+ with _ -> ()
+ ))
+end
+;;
+
+(* Main window *)
+
+class rendering_window output (notebook : notebook) =
+ let window =
+ GWindow.window ~title:"MathML viewer" ~border_width:2
+ ~allow_shrink:false () in
+ let vbox_for_menu = GPack.vbox ~packing:window#add () in
+ (* menus *)
+ let menubar = GMenu.menu_bar ~packing:vbox_for_menu#pack () in
+ let factory0 = new GMenu.factory menubar in
+ let accel_group = factory0#accel_group in
+ (* file menu *)
+ let file_menu = factory0#add_submenu "File" in
+ let factory1 = new GMenu.factory file_menu ~accel_group in
+ let export_to_postscript_menu_item =
+ begin
+ ignore
+ (factory1#add_item "Load" ~key:GdkKeysyms._L ~callback:load) ;
+ ignore (factory1#add_item "Save" ~key:GdkKeysyms._S ~callback:save) ;
+ ignore (factory1#add_separator ()) ;
+ let export_to_postscript_menu_item =
+ factory1#add_item "Export to PostScript..." ~key:GdkKeysyms._E
+ ~callback:(export_to_postscript output) in
+ ignore (factory1#add_separator ()) ;
+ ignore
+ (factory1#add_item "Exit" ~key:GdkKeysyms._C ~callback:GMain.Main.quit) ;
+ export_to_postscript_menu_item
+ end in
+ (* edit menu *)
+ let edit_menu = factory0#add_submenu "Edit" in
+ let factory2 = new GMenu.factory edit_menu ~accel_group in
+ let focus_and_proveit_set_sensitive = ref (function _ -> assert false) in
+ let proveit_menu_item =
+ factory2#add_item "Prove It" ~key:GdkKeysyms._I
+ ~callback:(function () -> proveit ();!focus_and_proveit_set_sensitive false)
+ in
+ let focus_menu_item =
+ factory2#add_item "Focus" ~key:GdkKeysyms._F
+ ~callback:(function () -> focus () ; !focus_and_proveit_set_sensitive false)
+ in
+ let _ =
+ focus_and_proveit_set_sensitive :=
+ function b ->
+ proveit_menu_item#misc#set_sensitive b ;
+ focus_menu_item#misc#set_sensitive b
+ in
+ let _ = factory2#add_separator () in
+ let _ = factory2#add_item "Qed" ~key:GdkKeysyms._Q ~callback:qed in
+ let _ = !focus_and_proveit_set_sensitive false in
+ (* settings menu *)
+ let settings_menu = factory0#add_submenu "Settings" in
+ let factory3 = new GMenu.factory settings_menu ~accel_group in
+ let _ =
+ factory3#add_item "Edit Aliases" ~key:GdkKeysyms._A
+ ~callback:edit_aliases in
+ let _ = factory3#add_separator () in
+ let _ =
+ factory3#add_item "MathML Widget Preferences..." ~key:GdkKeysyms._P
+ ~callback:(function _ -> (settings_window ())#show ()) in
+ (* accel group *)
+ let _ = window#add_accel_group accel_group in
+ (* end of menus *)
+ let hbox0 =
+ GPack.hbox
+ ~packing:(vbox_for_menu#pack ~expand:true ~fill:true ~padding:5) () in
+ let vbox =
+ GPack.vbox ~packing:(hbox0#pack ~expand:true ~fill:true ~padding:5) () in
+ let scrolled_window0 =
+ GBin.scrolled_window ~border_width:10
+ ~packing:(vbox#pack ~expand:true ~padding:5) () in
+ let _ = scrolled_window0#add output#coerce in
+ let hbox4 =
+ GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
+ let stateb =
+ GButton.button ~label:"State"
+ ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
+ let openb =
+ GButton.button ~label:"Open"
+ ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
+ let checkb =
+ GButton.button ~label:"Check"
+ ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
+ let locateb =
+ GButton.button ~label:"Locate"
+ ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
+ let searchpatternb =
+ GButton.button ~label:"SearchPattern"
+ ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
+ let scrolled_window1 =
+ GBin.scrolled_window ~border_width:10
+ ~packing:(vbox#pack ~expand:true ~padding:5) () in
+ let inputt = GEdit.text ~editable:true ~width:400 ~height:100
+ ~packing:scrolled_window1#add () in
+ let vboxl =
+ GPack.vbox ~packing:(hbox0#pack ~expand:true ~fill:true ~padding:5) () in
+ let _ =
+ vboxl#pack ~expand:true ~fill:true ~padding:5 notebook#notebook#coerce in
+ let frame = GBin.frame ~packing:(vboxl#pack ~expand:true ~padding:5) () in