Supplementary Video:
More Events
CS 51 and CSCI E-51 April 5, 2014
.
More Events CS 51 and CSCI E-51 April 5, 2014 . Road map The - - PowerPoint PPT Presentation
Supplementary Video: More Events CS 51 and CSCI E-51 April 5, 2014 . Road map The concept Using events Implementation of events UI events 2:1 The concept 3:1 The concept 3:2 The concept 3:3 The concept 3:4 The concept
Supplementary Video:
.
2:1
3:1
3:2
3:3
3:4
3:5
3:6
3:7
3:8
3:9
module Event51 : sig
.
type id
.
type ’a event
.
val new_event : unit -> ’a event
.
val add_listener :
.
’a event ->
.
(’a -> unit) ->
.
id
.
val fire_event :
.
’a event ->
.
’a -> unit
.
val add_one_shot_listener : ’a event -> (’a -> unit) -> id
.
val remove_listener : ’a event -> id -> unit
· · ·
end
4:1
module Event51 : sig
.
type id
.
.
.
type ’a event
.
val new_event : unit -> ’a event
.
val add_listener :
.
’a event ->
.
(’a -> unit) ->
.
id
.
val fire_event :
.
’a event ->
.
’a -> unit
.
val add_one_shot_listener : ’a event -> (’a -> unit) -> id
.
val remove_listener : ’a event -> id -> unit
· · ·
end
4:2
module Event51 : sig
.
type id
.
type ’a event
.
.
.
val new_event : unit -> ’a event
.
val add_listener :
.
’a event ->
.
(’a -> unit) ->
.
id
.
val fire_event :
.
’a event ->
.
’a -> unit
.
val add_one_shot_listener : ’a event -> (’a -> unit) -> id
.
val remove_listener : ’a event -> id -> unit
· · ·
end
4:3
module Event51 : sig
.
type id
.
type ’a event
.
val new_event : unit -> ’a event
.
.
.
val add_listener :
.
’a event ->
.
(’a -> unit) ->
.
id
.
val fire_event :
.
’a event ->
.
’a -> unit
.
val add_one_shot_listener : ’a event -> (’a -> unit) -> id
.
val remove_listener : ’a event -> id -> unit
· · ·
end
4:4
module Event51 : sig
.
type id
.
type ’a event
.
val new_event : unit -> ’a event
.
val add_listener :
.
.
.
’a event ->
.
.
.
(’a -> unit) ->
.
id
.
val fire_event :
.
’a event ->
.
’a -> unit
.
val add_one_shot_listener : ’a event -> (’a -> unit) -> id
.
val remove_listener : ’a event -> id -> unit
· · ·
end
4:5
module Event51 : sig
.
type id
.
type ’a event
.
val new_event : unit -> ’a event
.
val add_listener :
.
’a event ->
.
(’a -> unit) ->
.
id
. . .
val fire_event :
.
’a event ->
.
’a -> unit
.
val add_one_shot_listener : ’a event -> (’a -> unit) -> id
.
val remove_listener : ’a event -> id -> unit
· · ·
end
4:6
module Event51 : sig
.
type id
.
type ’a event
.
val new_event : unit -> ’a event
.
val add_listener :
.
’a event ->
.
(’a -> unit) ->
.
id
.
val fire_event :
.
.
.
’a event ->
.
..
’a -> unit
.
val add_one_shot_listener : ’a event -> (’a -> unit) -> id
.
val remove_listener : ’a event -> id -> unit
· · ·
end
4:7
module Event51 : sig
.
type id
.
type ’a event
.
val new_event : unit -> ’a event
.
val add_listener :
.
’a event ->
.
.
.
(’a -> unit) ->
.
id
.
val fire_event :
.
’a event ->
.
..
’a -> unit
.
val add_one_shot_listener : ’a event -> (’a -> unit) -> id
.
val remove_listener : ’a event -> id -> unit
· · ·
end
4:8
module Event51 : sig
.
type id
.
type ’a event
.
val new_event : unit -> ’a event
.
val add_listener :
.
’a event ->
.
(’a -> unit) ->
.
id
.
val fire_event :
.
’a event ->
.
’a -> unit
.
.
val add_one_shot_listener : ’a event -> (’a -> unit) -> id
.
val remove_listener : ’a event -> id -> unit
· · ·
end
4:9
module Event51 : sig
.
.
.
type id
.
type ’a event
.
val new_event : unit -> ’a event
.
val add_listener :
.
’a event ->
.
(’a -> unit) ->
.
..
id
.
val fire_event :
.
’a event ->
.
’a -> unit
.
val add_one_shot_listener : ’a event -> (’a -> unit) -> id
.
val remove_listener : ’a event -> id -> unit
· · ·
end
4:10
module Event51 : sig
.
.
.
type id
.
type ’a event
.
val new_event : unit -> ’a event
.
val add_listener :
.
’a event ->
.
(’a -> unit) ->
.
..
id
.
val fire_event :
.
’a event ->
.
’a -> unit
.
val add_one_shot_listener : ’a event -> (’a -> unit) -> id
. . .
val remove_listener : ’a event -> id -> unit
· · ·
end
4:11
— To Emacs —
.
type ’a waiter = { id : id; action : ’a -> unit }
.
type ’a event = ’a waiter list ref
.
let new_event () : ’a event = ref [] let add_listener (
.
e : ’a event) (
.
f : ’a -> unit) : id =
.
let i = new_id () in
.
e :=
. .
{ id = i; action = f } :: !e;
.
i let fire_event (
.
e : ’a event) (
.
v : ’a) : unit =
.
List.iter !e ~f:(
.
fun w -> w.action v)
6:1
.
.
.
type ’a waiter = { id : id; action : ’a -> unit }
.
type ’a event = ’a waiter list ref
.
let new_event () : ’a event = ref [] let add_listener (
.
e : ’a event) (
.
f : ’a -> unit) : id =
.
let i = new_id () in
.
e :=
. .
{ id = i; action = f } :: !e;
.
i let fire_event (
.
e : ’a event) (
.
v : ’a) : unit =
.
List.iter !e ~f:(
.
fun w -> w.action v)
6:2
.
type ’a waiter = { id : id; action : ’a -> unit }
.
.
.
type ’a event = ’a waiter list ref
.
let new_event () : ’a event = ref [] let add_listener (
.
e : ’a event) (
.
f : ’a -> unit) : id =
.
let i = new_id () in
.
e :=
. .
{ id = i; action = f } :: !e;
.
i let fire_event (
.
e : ’a event) (
.
v : ’a) : unit =
.
List.iter !e ~f:(
.
fun w -> w.action v)
6:3
.
type ’a waiter = { id : id; action : ’a -> unit }
.
type ’a event = ’a waiter list ref
.
.
.
let new_event () : ’a event = ref [] let add_listener (
.
e : ’a event) (
.
f : ’a -> unit) : id =
.
let i = new_id () in
.
e :=
. .
{ id = i; action = f } :: !e;
.
i let fire_event (
.
e : ’a event) (
.
v : ’a) : unit =
.
List.iter !e ~f:(
.
fun w -> w.action v)
6:4
.
type ’a waiter = { id : id; action : ’a -> unit }
.
type ’a event = ’a waiter list ref
.
let new_event () : ’a event = ref [] let add_listener (
.
.
.
e : ’a event) (
.
.
.
f : ’a -> unit) : id =
.
let i = new_id () in
.
e :=
. .
{ id = i; action = f } :: !e;
.
i let fire_event (
.
e : ’a event) (
.
v : ’a) : unit =
.
List.iter !e ~f:(
.
fun w -> w.action v)
6:5
.
type ’a waiter = { id : id; action : ’a -> unit }
.
type ’a event = ’a waiter list ref
.
let new_event () : ’a event = ref [] let add_listener (
.
e : ’a event) (
.
f : ’a -> unit) : id =
.
.
.
let i = new_id () in
.
e :=
. .
{ id = i; action = f } :: !e;
.
i let fire_event (
.
e : ’a event) (
.
v : ’a) : unit =
.
List.iter !e ~f:(
.
fun w -> w.action v)
6:6
.
type ’a waiter = { id : id; action : ’a -> unit }
.
type ’a event = ’a waiter list ref
.
let new_event () : ’a event = ref [] let add_listener (
.
e : ’a event) (
.
f : ’a -> unit) : id =
.
let i = new_id () in
.
e :=
. .
.
.
{ id = i; action = f } :: !e;
.
i let fire_event (
.
e : ’a event) (
.
v : ’a) : unit =
.
List.iter !e ~f:(
.
fun w -> w.action v)
6:7
.
type ’a waiter = { id : id; action : ’a -> unit }
.
type ’a event = ’a waiter list ref
.
let new_event () : ’a event = ref [] let add_listener (
.
e : ’a event) (
.
f : ’a -> unit) : id =
.
let i = new_id () in
.
e :=
.
.
. .
{ id = i; action = f } :: !e;
.
i let fire_event (
.
e : ’a event) (
.
v : ’a) : unit =
.
List.iter !e ~f:(
.
fun w -> w.action v)
6:8
.
type ’a waiter = { id : id; action : ’a -> unit }
.
type ’a event = ’a waiter list ref
.
let new_event () : ’a event = ref [] let add_listener (
.
e : ’a event) (
.
f : ’a -> unit) : id =
.
let i = new_id () in
.
.
.
e :=
. .
{ id = i; action = f } :: !e;
.
i let fire_event (
.
e : ’a event) (
.
v : ’a) : unit =
.
List.iter !e ~f:(
.
fun w -> w.action v)
6:9
.
type ’a waiter = { id : id; action : ’a -> unit }
.
type ’a event = ’a waiter list ref
.
let new_event () : ’a event = ref [] let add_listener (
.
e : ’a event) (
.
f : ’a -> unit) : id =
.
let i = new_id () in
.
e :=
. .
{ id = i; action = f } :: !e;
.
..i let fire_event (
.
e : ’a event) (
.
v : ’a) : unit =
.
List.iter !e ~f:(
.
fun w -> w.action v)
6:10
.
type ’a waiter = { id : id; action : ’a -> unit }
.
type ’a event = ’a waiter list ref
.
let new_event () : ’a event = ref [] let add_listener (
.
e : ’a event) (
.
f : ’a -> unit) : id =
.
let i = new_id () in
.
e :=
. .
{ id = i; action = f } :: !e;
.
i let fire_event (
.
.
.
e : ’a event) (
.
.
.
v : ’a) : unit =
.
List.iter !e ~f:(
.
fun w -> w.action v)
6:11
.
type ’a waiter = { id : id; action : ’a -> unit }
.
type ’a event = ’a waiter list ref
.
let new_event () : ’a event = ref [] let add_listener (
.
e : ’a event) (
.
f : ’a -> unit) : id =
.
let i = new_id () in
.
e :=
. .
{ id = i; action = f } :: !e;
.
i let fire_event (
.
e : ’a event) (
.
v : ’a) : unit =
.
.
.
List.iter !e ~f:(
.
fun w -> w.action v)
6:12
.
type ’a waiter = { id : id; action : ’a -> unit }
.
type ’a event = ’a waiter list ref
.
let new_event () : ’a event = ref [] let add_listener (
.
e : ’a event) (
.
f : ’a -> unit) : id =
.
let i = new_id () in
.
e :=
. .
{ id = i; action = f } :: !e;
.
i let fire_event (
.
e : ’a event) (
.
v : ’a) : unit =
.
List.iter !e ~f:(
.
.
.
fun w -> w.action v)
6:13
val key_pressed : char event
. .
val mouse_motion : (int * int) event
. .
val button_down : (int * int) event
. .
val button_up : (int * int) event
. .
val clock : unit event
7:1
val key_pressed : char event
.
val mouse_motion : (int * int) event
.
val button_down : (int * int) event
.
val button_up : (int * int) event
.
val clock : unit event
7:2
val key_pressed : char event
.
.
.
val mouse_motion : (int * int) event
.
val button_down : (int * int) event
.
val button_up : (int * int) event
.
val clock : unit event
7:3
val key_pressed : char event
.
val mouse_motion : (int * int) event
.
.
.
val button_down : (int * int) event
.
.
.
val button_up : (int * int) event
.
val clock : unit event
7:4
val key_pressed : char event
.
val mouse_motion : (int * int) event
.
val button_down : (int * int) event
.
val button_up : (int * int) event
.
.
.
val clock : unit event
7:5
let read_event () = if mouse position has changed then fire_event mouse_motion mouse position; if mouse button was up and is now down then fire_event button_down mouse position; else if mouse button was down and is now up then fire_event button_up mouse position; if a key has been pressed then fire_event key_handler the key; fire_event clock () let rec event_loop () = read_event ();
redraw screen; wait a bit;
event_loop ()
8:1
let read_event () = if mouse position has changed then fire_event mouse_motion mouse position; if mouse button was up and is now down then fire_event button_down mouse position; else if mouse button was down and is now up then fire_event button_up mouse position; if a key has been pressed then fire_event key_handler the key; fire_event clock () let rec event_loop () = read_event ();
redraw screen; wait a bit;
event_loop ()
8:2
let read_event () = if mouse position has changed then fire_event mouse_motion mouse position; if mouse button was up and is now down then fire_event button_down mouse position; else if mouse button was down and is now up then fire_event button_up mouse position; if a key has been pressed then fire_event key_handler the key; fire_event clock () let rec event_loop () = read_event ();
redraw screen; wait a bit;
event_loop ()
8:3
let read_event () = if mouse position has changed then fire_event mouse_motion mouse position; if mouse button was up and is now down then fire_event button_down mouse position; else if mouse button was down and is now up then fire_event button_up mouse position; if a key has been pressed then fire_event key_handler the key; fire_event clock () let rec event_loop () = read_event ();
redraw screen; wait a bit;
event_loop ()
8:4
let read_event () = if mouse position has changed then fire_event mouse_motion mouse position; if mouse button was up and is now down then fire_event button_down mouse position; else if mouse button was down and is now up then fire_event button_up mouse position; if a key has been pressed then fire_event key_handler the key; fire_event clock () let rec event_loop () = read_event ();
redraw screen; wait a bit;
event_loop ()
8:5
let read_event () = if mouse position has changed then fire_event mouse_motion mouse position; if mouse button was up and is now down then fire_event button_down mouse position; else if mouse button was down and is now up then fire_event button_up mouse position; if a key has been pressed then fire_event key_handler the key; fire_event clock () let rec event_loop () = read_event ();
redraw screen; wait a bit;
event_loop ()
8:6
let read_event () = if mouse position has changed then fire_event mouse_motion mouse position; if mouse button was up and is now down then fire_event button_down mouse position; else if mouse button was down and is now up then fire_event button_up mouse position; if a key has been pressed then fire_event key_handler the key; fire_event clock () let rec event_loop () = read_event ();
redraw screen; wait a bit;
event_loop ()
8:7
let read_event () = if mouse position has changed then fire_event mouse_motion mouse position; if mouse button was up and is now down then fire_event button_down mouse position; else if mouse button was down and is now up then fire_event button_up mouse position; if a key has been pressed then fire_event key_handler the key; fire_event clock () let rec event_loop () = read_event ();
redraw screen; wait a bit;
event_loop ()
8:8