(**************************************************************************)
(*                   Cameleon                                             *)
(*                                                                        *)
(*      Copyright (C) 2002 Institut National de Recherche en Informatique et   *)
(*      en Automatique. All rights reserved.                              *)
(*                                                                        *)
(*      This program is free software; you can redistribute it and/or modify  *)
(*      it under the terms of the GNU General Public License as published by  *)
(*      the Free Software Foundation; either version 2 of the License, or  *)
(*      any later version.                                                *)
(*                                                                        *)
(*      This program is distributed in the hope that it will be useful,   *)
(*      but WITHOUT ANY WARRANTY; without even the implied warranty of    *)
(*      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     *)
(*      GNU General Public License for more details.                      *)
(*                                                                        *)
(*      You should have received a copy of the GNU General Public License  *)
(*      along with this program; if not, write to the Free Software       *)
(*      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA          *)
(*      02111-1307  USA                                                   *)
(*                                                                        *)
(*      Contact: Maxence.Guesdon@inria.fr                                *)
(**************************************************************************)

(** The HTML editor bindings configurator. *)

module C = Configwin_ihm
open Configwin_types
open Options

let simple_get = C.simple_edit 
    ~with_apply: false ~apply: (fun () -> ())

let params_hb hb =
  let p_key = C.hotkey 
      ~f: (fun k -> hb.html_key <- k) Configwin_messages.mKey
      hb.html_key
  in
  let p_begin = C.string
      ~f: (fun s -> hb.html_begin <- s)
      Configwin_messages.html_begin
      hb.html_begin
  in
  let p_end = C.string
      ~f: (fun s -> hb.html_end <- s)
      Configwin_messages.html_end
      hb.html_end
  in
  [ p_key ; p_begin ; p_end ]

let edit_hb hb =
  ignore (simple_get Configwin_messages.mEdit (params_hb hb));
  hb

let add () =
  let hb = { html_key = KeyOption.string_to_key "C-a" ;
	     html_begin = "" ;
	     html_end = "" ;
	   } 
  in
  match simple_get Configwin_messages.mAdd (params_hb hb) with
    Return_ok -> [hb]
  | _ -> []

let main () =
  ignore (GMain.Main.init ());
  let (ini, bindings) = C.html_config_file_and_option () in
  let param = C.list
      ~f: (fun l -> bindings =:= l ; Options.save_with_help ini)
      ~eq: (fun hb1 hb2 -> hb1.html_key = hb2.html_key)
      ~edit: edit_hb
      ~add: add
      ~titles: [ Configwin_messages.mKey ; Configwin_messages.html_begin ;
		 Configwin_messages.html_end ]
      Configwin_messages.shortcuts
      (fun hb -> [ KeyOption.key_to_string hb.html_key ;
		   hb.html_begin ; hb.html_end ])
      !!bindings
  in
  ignore (simple_get ~width: 300 ~height: 400 
	    Configwin_messages.html_config [param])

let _ = main ()
