Listato 2. Gestisce le cifre e la modifica delle stesse

import mx.core.UIObject;
[Event("change")]
class Display extends UIObject {
    static var symbolName:String = "Display";
    static var symbolOwner:Object = Display;
    static var className:String = "Dispaly";
    // il numero che viene richiesto
    private var __numero:Number;
    //il numero delle cifre che compongono il display
    private var maxCifre = 6;
    // indica se deve rigenerare le cifre
    private var cambiaCifre:Boolean;
    private var display:MovieClip;
    private var boundingBox_mc:MovieClip;
    private var cifre:MovieClip;

    function Display() {}
    
    [Inspectable (defaultValue=0)]
    [ChangeEvent("change")]
    public function get numero():Number {
        return __numero;
    }
    public function set numero(sec:Number) {
        __numero = Number(sec);
        dispatchEvent({type:"change", target:this, numero:numero});
        // se cambio il numero, devo aggiornare la grafica
        invalidate();
    }
    [Inspectable (type="String",enumeration="verde,rosso,grigio", defaultValue="verde")]
    public function get colore():String {
        return Cifra.colore;
    }
    public function set colore(valore) {
        Cifra.colore = valore;
        cambiaCifre = true;
        this.doLater(this, "size");
        // se cambio il colore, devo aggiornare la grafica
        invalidate();
    }
    
    function init() {
        super.init();
        // faccio scomparire la clip boundingBox_mc
        boundingBox_mc._visible = false;
        boundingBox_mc._width = 0;
        boundingBox_mc._height = 0;
    }
    
    private function createChildren() {
        creaCifre();
        invalidate();
    }

    function draw() {
        super.draw();
        if (cambiaCifre) {
            cifre.removeMovieClip();
            creaCifre();
        }
        valutaCifre();
    }

    function size() {
        cifre._width = __width;
        cifre._height = __height;
        super.size();
    }
    
    private function creaCifre() {
        this.createEmptyMovieClip("cifre", 0);
        for (var x = 1; x<=maxCifre; x++) {
            cifre.createObject("cifra", "cifra"+(maxCifre-(x-1)), x, {_x:43.1*(x-1)});
        }
        cambiaCifre = false;
    }

    private function valutaCifre() {
        var sec:String = __numero.toString();
        var len:Number = sec.length;
        for (var x = maxCifre; x>0; x--) {
            var elem:String = sec.charAt(len-x);
            cifre["cifra"+x].visualizzaNumero(elem);
        }
        if (numero<0) {
            cifre["cifra"+len].visualizzaNumero("meno");
        }
    }
    
    public function reset() {
        numero = 0;
    }
}