More Events CS 51 and CSCI E-51 April 5, 2014 . Road map The - - PowerPoint PPT Presentation

more events
SMART_READER_LITE
LIVE PREVIEW

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


slide-1
SLIDE 1

Supplementary Video:

More Events

CS 51 and CSCI E-51 April 5, 2014

.

slide-2
SLIDE 2

Road map

  • The concept
  • Using events
  • Implementation of events
  • UI events

2:1

slide-3
SLIDE 3

The concept

3:1

slide-4
SLIDE 4

The concept

3:2

slide-5
SLIDE 5

The concept

3:3

slide-6
SLIDE 6

The concept

3:4

slide-7
SLIDE 7

The concept

3:5

slide-8
SLIDE 8

The concept

3:6

slide-9
SLIDE 9

The concept

3:7

slide-10
SLIDE 10

The concept

3:8

slide-11
SLIDE 11

The concept

3:9

slide-12
SLIDE 12

Basic event primitives

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

slide-13
SLIDE 13

Basic event primitives

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

slide-14
SLIDE 14

Basic event primitives

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

slide-15
SLIDE 15

Basic event primitives

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

slide-16
SLIDE 16

Basic event primitives

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

slide-17
SLIDE 17

Basic event primitives

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

slide-18
SLIDE 18

Basic event primitives

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

slide-19
SLIDE 19

Basic event primitives

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

slide-20
SLIDE 20

Basic event primitives

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

slide-21
SLIDE 21

Basic event primitives

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

slide-22
SLIDE 22

Basic event primitives

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

slide-23
SLIDE 23

— To Emacs —

slide-24
SLIDE 24

Event implementation

.

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

slide-25
SLIDE 25

Event implementation

.

.

.

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

slide-26
SLIDE 26

Event implementation

.

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

slide-27
SLIDE 27

Event implementation

.

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

slide-28
SLIDE 28

Event implementation

.

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

slide-29
SLIDE 29

Event implementation

.

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

slide-30
SLIDE 30

Event implementation

.

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

slide-31
SLIDE 31

Event implementation

.

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

slide-32
SLIDE 32

Event implementation

.

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

slide-33
SLIDE 33

Event implementation

.

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

slide-34
SLIDE 34

Event implementation

.

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

slide-35
SLIDE 35

Event implementation

.

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

slide-36
SLIDE 36

Event implementation

.

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

slide-37
SLIDE 37

UI events

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

slide-38
SLIDE 38

UI events

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

slide-39
SLIDE 39

UI events

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

slide-40
SLIDE 40

UI events

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

slide-41
SLIDE 41

UI events

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

slide-42
SLIDE 42

UI event implementation

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

slide-43
SLIDE 43

UI event implementation

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

slide-44
SLIDE 44

UI event implementation

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

slide-45
SLIDE 45

UI event implementation

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

slide-46
SLIDE 46

UI event implementation

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

slide-47
SLIDE 47

UI event implementation

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

slide-48
SLIDE 48

UI event implementation

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

slide-49
SLIDE 49

UI event implementation

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