1 / 43

Event Models

Event Models. James Landay, UCB. Outline. Event overview Windowing systems Window events Event dispatching and handling. Sequential Programs. Program takes control, prompts for input Examples include command-line prompts (DOS, UNIX) LISP interpreter The user waits on the program

Download Presentation

Event Models

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Event Models James Landay, UCB

  2. Outline • Event overview • Windowing systems • Window events • Event dispatching and handling

  3. Sequential Programs • Program takes control, prompts for input • Examples include • command-line prompts (DOS, UNIX) • LISP interpreter • The user waits on the program • Program tells user it’s ready for more input • User enters more input

  4. Sequential Programs (cont.) • Architecture Program reads in a line of text Program parses the text Program evaluates the result Maybe some output Loop back to beginning • But how do you model the many actions a user can take? • For example, a word processor? • Need to do printing, editing, inserting, etc.

  5. Sequential Programs (cont.) • Usually end up with lots of modes • Lots of state variables • Other examples of modes • Paint programs (line, bucket-fill, rectangle, etc) • Universal remotes with TV / VCR mode • VI edit mode and command mode • Problems with modes?

  6. Sequential Programs (cont.) • Problems with modes? • Gets confusing if too many modes • Can be easy to make errors • Need feedback as to what mode you are in • How to switch between modes? • We’ll need a more advanced model to simplify windows programming

  7. Event-Driven Programming • Instead of the user waiting on program, have the program wait on the user • All communication from user to computer is done via “events” • An event is something “interesting” that happens in the system • Mouse button goes down • Item is being dragged • Keyboard button was hit

  8. Event Example close box title bar folder scroll bar size control

  9. Major Issues • How to decompose the UI into interactive objects? • How to distribute inputs to the interactive objects • How to partition between application & system software? • Models for programming interactive objects • Models for communications between objects

  10. Windowing Systems • Partitioning to prevent chaos • Infrastructure to support common services • Two major aspects • software services to applications • create and organize windows • implement interaction in those windows • window manager • UI allowing user to control size & placement of windows

  11. Interactor Tree • Decompose interactive objects into a tree • interactive objects also known as “widgets” • based on screen geometry of objects • nested rectangles • Used for dispatching events • Events are dispatched (sent) to code in widget • The code then handles the event • Variety of methods for dispatching events • Return to this later

  12. Interactor Tree Display Screen “F:\cs160\Public” window Inner Window title bar horizontal scroll bar contents area “CDJukebox” folder “Home Ent…” folder … size control … “Web Newspaper” window …

  13. 93.54 9 6 - 3 0 7 4 1 2 + 8 5 = ENT Interactor Tree Display Screen Outer Win [black] ?????

  14. 93.54 3 - 6 9 1 0 4 7 + 5 8 2 = ENT Interactor Tree Display Screen Outer Win [black] Inner Win [green] Result Win [tan] Result String Keypad [Teal] = button - button + button 0 button

  15. 93.54 3 - 6 9 1 0 4 7 + 5 8 2 = ENT Interactor Tree (Java) Display Screen Frame [black] Panel [green] Text Entry [tan] Result String Keypad Panel [Teal] Button(“=”) Button(“-”) Button(“+”) Button(“0”)

  16. Windows • Top level windows known as root windows • provide UI abstraction for multiple apps • windowing system arbitrates interactive resources • Each root window belongs to an app. • all descendant windows belong to same app • violated by OLE (ActiveX) and OpenDoc (dead?)

  17. Windows (cont.) • Windows vs. widgets/controls • X, NeXTStep, MS Windows • everything is window • Mac: only roots are windows - controls manage rect. space in a window (Motif gadgets similar)

  18. Network X Server std system software Client app software User Networked Windowing Systems • X Window & NeWS designed to allow apps to run on remote machines • Uses client-server model

  19. X Window • Note backwards terminology • User is on “server” not “client” • X Server • interprets X commands and can send events • determines which window receives events and forwards over network to proper client • X Client • software interface to X (Xlib) • assembles the output from Xlib routines into packets for transmission to server

  20. Bandwidth (bps) Latency (time) X Window • Interaction Problems? Network X Server std system software Client app software User Network Bandwidth is bits per second Network Latency is time to transfer and process data. Relation to Model Human Processor?

  21. scroll bar thumb (elevator) Network Round Trips (NRT) • Every mouse move on thumb involves NRT • Solutions? • download code that knows how to scroll • NeWS used display PostScript to do this

  22. Window Events • User interacts with input device • action translated into software events • must distribute events to appropriate window • doesn’t need IPC, use method/procedure call • Events have • type • mouse position or character key • the window the event is directed to

  23. Input Events • Mouse button events • mouse up and down • modifier (shift keys, etc.) • double click (X doesn’t have this -> fakes it) • Mouse movement events • implement painting with mouse • mouse drag • can “mask off” mouse moves w/o button down • Mouse enter and exit events • e.g. if you entered / exited a button region

  24. Implementing Buttons Button mouse enter mouse exit Button (But using mouse move events would be overkill)

  25. Events (cont.) • Keyboard events • must translate raw “scan codes” into ASCII • Windowing events on window • creation / destruction • opening / closing • iconifying / deiconifying • selection / deselection • resize • redraw • redraw newly exposed portions of the window (rect.)

  26. Main Event Loop • Main event loop Initialization While (not time to quit) { Get next event E Dispatch event E } • The meat of the program is in the code that handles the “dispatch”

  27. 0 9 6 - 3 4 1 0 7 8 5 + 2 = ENT Event Dispatch Dispatch (event E) { switch (E.window) { ... case FIVE-KEY: if (E.type == left-down){ cur = 5 + 10*cur; display (cur); last-op = NUMBER; } ... Hit the ‘5’ key

  28. 5 9 6 - 3 4 1 0 7 8 5 + 2 = ENT Event Dispatch Dispatch (event E) { switch (E.window) { ... case TWO-KEY: if (E.type == left-down) { cur = 2 + 10*cur; display (cur); last-op = NUMBER; } ... Hit the ‘2’ key

  29. 52 9 6 - 3 4 1 0 7 8 5 + 2 = ENT Event Dispatch Dispatch (event E) { switch (E.window) { ... case ENTER-KEY: if (E.type == left-down){ push (cur); cur = 0; last-op = COM; } ... Hit the ‘enter’ key

  30. 0 9 6 - 3 4 1 0 7 8 5 + 2 = ENT Event Dispatch Dispatch (event E) { switch (E.window) { ... case SIX-KEY: if (E.type == left-down) { cur = 6 + 10*cur; display (cur); last-op = NUMBER; } ... Hit the ‘6’ key

  31. 6 9 6 - 3 4 1 0 7 8 5 + 2 = ENT Event Dispatch Dispatch (event E) { switch (E.window) { ... case PLUS-WIN: if (E.type == left-down){ if (last-op == NUMBER) push (cur); result = pop() + pop(); push (result); display (result); cur = 0; last-op = COM; } Hit the ‘+’ key

  32. 58 9 6 - 3 0 1 7 4 + 8 5 2 = ENT Event Dispatch J

  33. Event Queues • Input events are placed in a queue • Ensures events are processed in order • Main event loop removes them from the queue (get_next_event) & dispatches for processing Mouse move (22, 33) Mouse move (40, 30) Mouse down left (45, 34) Mouse up left (46, 35)

  34. Event Queues (cont.) • Can use event masks to filter unwanted events • e.g., filter mouse moves in a forms-based program • just get enter/exit events

  35. Object-Oriented Event Handling • Older methods prone to programmer error • OO languages more naturally handle passing messages between independent objects • Basis for NeXTStep, Mac App, Visual C++, Java

  36. Object-Oriented Event Loop • Tool kit defines an application class • provides a run method which contains event loop • technique used by Visual C++ and MacApp Application myApp; Intialize windows & application data structures Set any special event masks by sending messages to myApp myApp.Run();

  37. Dispatching Events • If user scrolls the text, the software must: • direct the mouse events to the scroll bar • update the scroll bar display during the drag • notify the text editing window it needs to scroll itself so that the text appears to have moved

  38. Dispatching Events (cont.) • Algorithm selects the bottom-most, front-most region in the interactor tree • scroll bar or contents over outerwin (bottom-most) • scroll bar over contents (front-most) • each window need only consider its own events • difficult to impose a high level of control • known as bottom-first event dispatch • Top-down event dispatch • events passed to top-most, front-most window • it dispatches to one or more of its children...

  39. Event Focus • Where should keyboard events go? • mouse-based • attach mouse position to all key events and dispatch events in the same way as mouse events • click-to-type (Mac) • send all key events to last window where mouse down occurred • key focus • windows take and give away keyboard focus • Mouse focus • long narrow scrollbar...

  40. Simple Event Handling • Event tables (in the early days…) • indexed by event types (integer from 0 - 255) • holds pointers to functions that handle each event • one table per / window • lots of things to maintain when attached to a widget that you want to make reusable • Callbacks • separate things like labels/colors into resources read from files • each kind of widget defines a set of named callbacks which it will invoke

  41. Callback Example • How do we notify text window to scroll when the scroll bar is moved? • create a vertical scroll bar widget • write a callback procedure which has code to notify text windows of their new position • register callback with scroll bar as callback to invoke when the scroll bar is moved • also register a pointer to the text window as the callback data -> knows which window to scroll

  42. Simple Event Handling (cont.) • WindowProc style (MS Windows) • newer and better than older models • define window classes, each of which have a WindowProc (similar to callback) • whenever event dispatch algorithm identifies a window that should receive an event, that window’s WindowProc is invoked • body of WindowProc is a switch on the event type with a handler for each event • 100s of events, but most is inherited/delegated

  43. Summary • Windowing systems • special problems with networked WS • Interactor trees • Input events • Main event loop • Dispatching events • Event focus • Simple event handling

More Related