<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" 
    creationComplete="init()" viewSourceURL="srcview/index.html">
    
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import com.paulofierro.wii.events.WiiClientEvent;
            import com.paulofierro.wii.events.WiiButtonEvent;
            import com.paulofierro.wii.events.WiiAxisEvent;
            import com.paulofierro.wii.WiiRemoteClient;
    
            private var wiiClient:WiiRemoteClient = new WiiRemoteClient();
            
            private function init():void {
                Alert.show("Start up MoteDaemon, pair the Wiimote and then click Connect", "");
                btnConnect.addEventListener(MouseEvent.CLICK,             toggleConnection);
                wiiClient.addEventListener(WiiClientEvent.CONNECTED,     onConnectionChange);
                wiiClient.addEventListener(WiiClientEvent.DISCONNECTED, onConnectionChange);
                wiiClient.addEventListener(WiiClientEvent.ERROR,         onError);
                wiiClient.addEventListener(WiiAxisEvent.UPDATE,              onAxisChange);
                wiiClient.addEventListener(WiiButtonEvent.PRESS,          onButtonEvent);
                wiiClient.addEventListener(WiiButtonEvent.RELEASE,        onButtonEvent);
            }
            private function toggleConnection(event:MouseEvent):void {
                var btn:Button = event.currentTarget as Button;
                if(btn.selected) {
                    wiiClient.connect();
                } else {
                    wiiClient.disconnect();
                }
            }
            private function onConnectionChange(event:Event):void {
                btnConnect.label = (event.type == WiiClientEvent.CONNECTED) ? "Disconnect" : "Connect";
            }
            private function onAxisChange(event:WiiAxisEvent):void {
                wx.text = String("wx: " + event.wx);
                wy.text = String("wy: " + event.wy);
                wz.text = String("wz: " + event.wz);
                wp.text = String("wp: " + event.wp);
                wr.text = String("wr: " + event.wr);
            }
            private function onButtonEvent(event:WiiButtonEvent):void {
                var field:Text;
                switch(event.button) {
                    case WiiButtonEvent.A:         field = BUTTON_A;     break; 
                    case WiiButtonEvent.B:         field = BUTTON_B; break; 
                    case WiiButtonEvent.MINUS:     field = BUTTON_MINUS; break; 
                    case WiiButtonEvent.PLUS:     field = BUTTON_PLUS; break; 
                    case WiiButtonEvent.ONE:     field = BUTTON_ONE; break; 
                    case WiiButtonEvent.TWO:     field = BUTTON_TWO; break; 
                    case WiiButtonEvent.LEFT:     field = BUTTON_LEFT; break; 
                    case WiiButtonEvent.RIGHT:     field = BUTTON_RIGHT; break; 
                    case WiiButtonEvent.UP:     field = BUTTON_UP; break; 
                    case WiiButtonEvent.DOWN:     field = BUTTON_DOWN; break; 
                    case WiiButtonEvent.HOME:     field = BUTTON_HOME; break; 
                }
                if(event.type == WiiButtonEvent.PRESS) {
                    field.text = "PRESS";
                } else {
                    field.text = "";
                }
            }
            private function onError(event:WiiClientEvent):void {
                Alert.show(event.message, "ERROR");
            }
        ]]>
    </mx:Script>
    <mx:VBox width="100%" height="100%">
        <mx:Button id="btnConnect" toggle="true" label="Connect" />
        <mx:HBox>
            <mx:Label text="Buttons: " />
            <mx:Label text="A: " />
            <mx:Text id="BUTTON_A" width="40"/>
            <mx:Label text="B: " />
            <mx:Text id="BUTTON_B" width="40"/>
            <mx:Label text="-: " />
            <mx:Text id="BUTTON_MINUS" width="40"/>
            <mx:Label text="+: " />
            <mx:Text id="BUTTON_PLUS" width="40"/>
            <mx:Label text="1: " />
            <mx:Text id="BUTTON_ONE" width="40"/>
            <mx:Label text="2: " />
            <mx:Text id="BUTTON_TWO" width="40"/>
            <mx:Label text="home: " />
            <mx:Text id="BUTTON_HOME" width="40" />
        </mx:HBox>
        <mx:HBox>
            <mx:Label text="Pad:" />
            <mx:Label text="left: " />
            <mx:Text id="BUTTON_LEFT" width="40"/>
            <mx:Label text="right: " />
            <mx:Text id="BUTTON_RIGHT" width="40"/>
            <mx:Label text="up: " />
            <mx:Text id="BUTTON_UP" width="40"/>
            <mx:Label text="down: " />
            <mx:Text id="BUTTON_DOWN" width="40"/>
        </mx:HBox>
        <mx:HBox>
            <mx:Label text="Axes: " />
            <mx:Text id="wx" />
            <mx:Text id="wy" />
            <mx:Text id="wz" />
            <mx:Text id="wp" />
            <mx:Text id="wr" />
        </mx:HBox>
    </mx:VBox>
</mx:WindowedApplication>