SPEAKER 1: Let's write a program that has a graphical user interface that includes a slider that a user can move left to right in order to choose some value between two integers. To do so, I've begun with some placeholder code. And now let's fill in a blank. Let's first allocate a GSlider, calling it slider, and assign to it the return value of getGSlider. And now let's specify that I want the lower bound of the slider to be an integer of 0, the upper bound of the slider to be an integer of 100, and the default initial value to be 50. Next, let's go ahead and associate an action command with this slider by calling setActionCommand, passing in slider, and passing in an arbitrary but unique string like quote unquote "slide." In other words, "slide" is going to be the identifier uniquely associated with this slider. Just in case my user interface had multiple sliders, I could distinguish among them with this technique. Next, let's call addToRegion, passing in window, passing in slider, passing in quote unquote "SOUTH," in order to add the slider to the southernmost region of our user interface. Where quote unquote "SOUTH" happens to be unique identifier defined in the Stanford Portable Library. But now, for clarity, to the left of the slider let's hard code the number 0. And to the right of the slider let's hard code the number 100. So that the user knows by sliding the thing to the left or to the right how they're changing its value. Before we allocate that slider, let's go back here and allocate a GLabel, calling it left. And assign it the return value of newGLabel, passing in quote unquote-- in other words-- of "0." Let's now call addToRegion, passing in window, passing in left, passing in quote unquote "SOUTH." So that this label is inserted into that southern region before the slider. And now after the slider, let's go ahead and declare another GLabel. Calling it right, assigning it the return value of newGLabel. Quote unquote-- another string-- "100." And then call addToRegion, passing in window, passing in right, passing in "SOUTH" as well. In other words, we've just declared a label, a slider, and another label and inserted them into the southern region in that order, so that the user knows when he or she moves it to the right or to the left roughly what value they'll be approaching. Let's now induce an infinite loop. And inside of this loop, lets first check for a GActionEvent, calling it event. Assigning it the return value of waitForEvent. Passing in ACTION-EVENT, a constant declared in the Stanford Portable Library that indicates that you indeed want to wait for an action. Let's next check if getEventType, passing in event, equals WINDOW_CLOSED, another constant declared in the Stanford Portable Library that indicates that the action is the closing of a window. Then let's go ahead and break out of this otherwise infinite loop. Else, let's check if the user has slid that slider. If string compare of getActionCommand, passing in event, comma, quote unquote "slide" equals equals 0. In other words, if the unique identifier associated with the slider that has been slid equals quote unquote "slide," the unique identifier that we provided earlier, then I want to do the following. Printf "slider was slid to %i backslash n," indicating that I'd like to plug in the integral value of the slider. So comma getValue of slider. Let's now save, compile, run this program, and slide that slider. Make slider. ./slider. There's my user interface. There's my slider, to the left of which is a 0, to the right of which is 100, both of them labels. And as I slide the slider to the left and the right, notice that in my console window I'll see the integer value. Now, I don't necessarily see all of the numbers between 0 and 100, because depending on the speed with which I move the slider, my program might not notice. But indeed, if I move it to any particular location, that's the value that will print.