justnukeit/Keyboard.ml

70 lines
1.3 KiB
OCaml

(* vim: set st=2 sw=2 et : *)
module KeyMap = Map.Make(
struct
type t = Sdlkey.t
let compare x y =
let xval = Sdlkey.int_of_key x
and yval = Sdlkey.int_of_key y
in
if xval = yval then 0
else
if xval < yval then -1
else 1
end
)
type mapdata_editable_t =
| Static
| Editable
;;
type key_action_t = mapdata_editable_t * Action.t
;;
type t = {
mutable map : key_action_t KeyMap.t ;
}
;;
(** used keys *)
let keys = {
map = KeyMap.empty ;
}
let handle_event key_ev anon_ev =
let {Sdlevent.keysym = keysym} = key_ev
in
let map_fold_fun map_key map_action action_list =
if keysym = map_key then
let (sub_editable, sub_action) = map_action
in
match action_list with
| [Action.None] -> [sub_action]
| hd::tail ->
raise ( Common.NotImplemented "Keyboard: folding 2 concrete actions" )
| [] -> [sub_action]
else
action_list
in
KeyMap.fold map_fold_fun keys.map [Action.None]
;;
let init () =
(* do nothing *)
(* init an associative array of
key -> actions events
with KEY_ESCAPE -> (Action.Quit,
*)
keys.map <- KeyMap.add Sdlkey.KEY_ESCAPE ( Static, Action.Quit ) keys.map ;
keys.map <- KeyMap.add Sdlkey.KEY_q ( Static, Action.Quit ) keys.map ;
()
;;