import mx.controls.*; class valutaomvandlare.CurrencyConverter { // Hard-code the exchange rates for this example. private static var rateUS:Number = 1.3205; // Rate for US dollar private static var rateUK:Number = 2.1996; // Rate for Pound Sterling private static var rateEU:Number = 1.5600; // Rate for EURO // The container for all UI elements private var converter_mc:MovieClip; // The user interface components. private var input:TextInput; // Text field for original amount private var currencyPicker:ComboBox; // Currency-selection menu private var result:TextArea; // Text field for conversion output /** * CurrencyConverter Constructor * * @param target The movie clip to which the * converter_mc will be attached. * @param depth The depth, in target, on which to * attach the converter_mc. * @param x The horizonatal position of the converter_mc. * @param y The vertical position of the converter_mc. */ public function CurrencyConverter (target:MovieClip, depth:Number, x:Number, y:Number) { buildConverter(target, depth, x, y); } /** * Creates the user interface for the currency converter, * and defines the events for that interface. */ public function buildConverter (target:MovieClip, depth:Number, x:Number, y:Number):Void { // Store a reference to the current object for use by nested functions. var thisConverter:CurrencyConverter = this; // Make a container movie clip to hold the converter's UI. converter_mc = target.createEmptyMovieClip("converter", depth); converter_mc._x = x; converter_mc._y = y; // Create title. // If converter_mc were a UIObject instance (i.e., if it were a // component), we'd have to cast the return of createClassObject() // to Label because createClassObject() returns a UIObject instance, // not a Label. However, converter_mc is a MovieClip instance, and // the MovieClip class is dynamic so, in this case, no type checking // is performed on createClassObject()'s return. (The curious might // want to note that the createClassObject() method is hacked on to // the MovieClip class by the mx.core.ext.UIObjectExtensions class.) var title:Label = converter_mc.createClassObject(Label, "title", 0); title.autoSize = "left"; title.text = "Canadian Currency Converter"; title.setStyle("color", 0x770000); title.setStyle("fontSize", 16); // Create instructions. var instructions:Label = converter_mc.createClassObject(Label, "instructions", 1); instructions.autoSize = "left"; instructions.text = "Enter Amount in Canadian Dollars"; instructions.move(instructions.x, title.y + title.height + 5); // Create an input text field to receive the amount to convert. input = converter_mc.createClassObject(TextInput, "input", 2); input.setSize(200, 25); input.move(input.x, instructions.y + instructions.height); input.restrict = "0-9."; // Handle this component's events using a generic listener object. var enterHandler:Object = new Object(); enterHandler.enter = function (e:Object):Void { thisConverter.convert(); } input.addEventListener("enter", enterHandler); // Create the currency selector ComboBox. currencyPicker = converter_mc.createClassObject(ComboBox, "picker", 3); currencyPicker.setSize(200, currencyPicker.height); currencyPicker.move(currencyPicker.x, input.y + input.height + 10); currencyPicker.dataProvider = [ {label:"Select Target Currency", data:null}, {label:"Canadian to U.S. Dollar", data:"US"}, {label:"Canadian to UK Pound Sterling", data:"UK"}, {label:"Canadian to EURO", data:"EU"}]; // Create the convert button. var convertButton:Button = converter_mc.createClassObject(Button, "convertButton", 4); convertButton.move(currencyPicker.x + currencyPicker.width + 5, currencyPicker.y); convertButton.label = "Convert!"; // Handle this component's events using a handler function. // As discussed in Chapter 12 of ActionScript 2.0 Essentials, // this technique is discouraged by Macromedia. convertButton.clickHandler = function (e:Object):Void { thisConverter.convert(); }; // Here's the alternative to the above three lines. This approach is // considered better practice. To try this version, uncomment the following // line and delete the above three lines of code. // convertButton.addEventListener("click", new org.moock.tools.EventProxy(this, convert)); // Create the result output field. result = converter_mc.createClassObject(TextArea, "result", 5); result.setSize(200, 25); result.move(result.x, currencyPicker.y + currencyPicker.height + 10); result.editable = false; } /** * Converts a user-supplied quantity from Canadian dollars to * the selected currency. */ public function convert ():Void { var convertedAmount:Number; var origAmount:Number = parseFloat(input.text); if (!isNaN(origAmount)) { if (currencyPicker.selectedItem.data != null) { switch (currencyPicker.selectedItem.data) { case "US": convertedAmount = origAmount / CurrencyConverter.rateUS; break; case "UK": convertedAmount = origAmount / CurrencyConverter.rateUK; break; case "EU": convertedAmount = origAmount / CurrencyConverter.rateEU; break; } result.text = "Result: " + convertedAmount; } else { result.text = "Please select a currency."; } } else { result.text = "Original amount is not valid."; } } // Program point of entry. public static function main (target:MovieClip, depth:Number, x:Number, y:Number):Void { var converter:CurrencyConverter = new CurrencyConverter(target, depth, x, y); } }