Skip to content

Commit

Permalink
Adding first pass at clock demo
Browse files Browse the repository at this point in the history
  • Loading branch information
unknown authored and unknown committed Nov 12, 2009
1 parent a14a330 commit 211f6e5
Show file tree
Hide file tree
Showing 12 changed files with 232 additions and 0 deletions.
6 changes: 6 additions & 0 deletions RobotLegsClock/.as3_classpath
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<AS3Classpath>
<AS3Classpath generateProblems="true" type="source" useAsSharedCode="false">src</AS3Classpath>
<AS3Classpath generateProblems="false" type="lib" useAsSharedCode="false">playerglobal.swc</AS3Classpath>
<AS3Classpath generateProblems="false" type="lib" useAsSharedCode="false">lib/robotlegs-framework-v1.0RC6.swc</AS3Classpath>
</AS3Classpath>
24 changes: 24 additions & 0 deletions RobotLegsClock/.project
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>RobotLegsClock</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.powerflasher.fdt.core.FlashBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.powerflasher.fdt.core.FlashNature</nature>
</natures>
<linkedResources>
<link>
<name>playerglobal.swc</name>
<type>1</type>
<locationURI>Flex_3_SDK_0/frameworks/libs/player/9/playerglobal.swc</locationURI>
</link>
</linkedResources>
</projectDescription>
Binary file added RobotLegsClock/Main.swf
Binary file not shown.
Binary file not shown.
25 changes: 25 additions & 0 deletions RobotLegsClock/src/Main.as
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package
{
import flash.display.DisplayObject;
import org.robotlegs.examples.clock.view.ITimeDisplay;
import org.robotlegs.examples.clock.view.DigitalClock;
import org.robotlegs.examples.clock.ClockContext;

import flash.display.Sprite;

/**
* @author John Lindquist
*/
public class Main extends Sprite
{
public var timeDisplay:ITimeDisplay;

public function Main()
{
new ClockContext(this);

timeDisplay = new DigitalClock();
addChild(timeDisplay as DisplayObject);
}
}
}
28 changes: 28 additions & 0 deletions RobotLegsClock/src/org/robotlegs/examples/clock/ClockContext.as
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.robotlegs.examples.clock
{
import org.robotlegs.examples.clock.view.DigitalClock;
import org.robotlegs.examples.clock.model.TimeModel;
import org.robotlegs.examples.clock.view.ITimeDisplay;
import org.robotlegs.examples.clock.view.TimeDisplayMediator;
import org.robotlegs.mvcs.Context;

import flash.display.DisplayObjectContainer;

/**
* @author John Lindquist
*/
public class ClockContext extends Context
{
public function ClockContext(contextView:DisplayObjectContainer = null, autoStartup:Boolean = true)
{
super(contextView, autoStartup);
}

override public function startup():void
{
injector.mapSingleton(TimeModel);
injector.instantiate(TimeModel);
mediatorMap.mapView(DigitalClock, TimeDisplayMediator, ITimeDisplay);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package org.robotlegs.examples.clock.controller {
import flash.events.Event;
import flash.events.TimerEvent;

/**
* @author John Lindquist
*/
public class TimeUpdateEvent extends TimerEvent
{
public static const TIME_UPDATED:String = "TIME_UPDATED";

private var _newTime:Number;
public function get newTime():Number
{
return _newTime;
}

public function set newTime(newTime:Number):void
{
_newTime = newTime;
}

public function TimeUpdateEvent(type:String, newTime:Number, bubbles:Boolean = false, cancelable:Boolean = false)
{
this.newTime = newTime;
super(type, bubbles, cancelable);
}

override public function clone():Event
{
return new TimeUpdateEvent(type, newTime, bubbles, cancelable);
}
}
}
32 changes: 32 additions & 0 deletions RobotLegsClock/src/org/robotlegs/examples/clock/model/TimeModel.as
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package org.robotlegs.examples.clock.model
{
import org.robotlegs.examples.clock.controller.TimeUpdateEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
import org.robotlegs.mvcs.Actor;

/**
* @author John Lindquist
*/
public class TimeModel extends Actor
{
public static const TIME_INCREMENT:Number = 1000;

private var timer:Timer = new Timer(TIME_INCREMENT);
private var timeTracker:Number = 0;

public function TimeModel()
{
timer.addEventListener(TimerEvent.TIMER, handleTimer);
timer.start();
}

protected function handleTimer(event:TimerEvent):void
{
timeTracker += TIME_INCREMENT / 1000;
var timeUpdateEvent:TimeUpdateEvent = new TimeUpdateEvent(TimeUpdateEvent.TIME_UPDATED, timeTracker);

dispatch(timeUpdateEvent);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.robotlegs.examples.clock.view {
import flash.display.Sprite;

/**
* @author John Lindquist
*/
public class AnalogClock extends Sprite implements ITimeDisplay
{
public function AnalogClock()
{
//in progress
}

public function updateTime(newTime:Number):void
{

}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.robotlegs.examples.clock.view
{
import flash.text.TextField;
import flash.display.Sprite;

/**
* @author John Lindquist
*/
public class DigitalClock extends Sprite implements ITimeDisplay
{
protected var timeDisplay:TextField;

public function DigitalClock()
{
timeDisplay = new TextField();
addChild(timeDisplay);
}

public function updateTime(newTime:Number):void
{
timeDisplay.text = newTime.toString();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.robotlegs.examples.clock.view
{

/**
* @author John Lindquist
*/
public interface ITimeDisplay
{
function updateTime(newTime:Number):void;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.robotlegs.examples.clock.view
{
import org.robotlegs.examples.clock.controller.TimeUpdateEvent;
import org.robotlegs.examples.clock.model.TimeModel;
import org.robotlegs.mvcs.Mediator;

/**
* @author John Lindquist
*/
public class TimeDisplayMediator extends Mediator
{
[Inject]
public var timeDisplay:ITimeDisplay; //how does injection work with interfaces? Should I use "Abstract" classes instead?

[Inject]
public var timeModel:TimeModel;

override public function onRegister():void
{
//Why do I still have to inject the TimeModel if I just use eventDispatcher?
eventMap.mapListener(eventDispatcher, TimeUpdateEvent.TIME_UPDATED, handleTimeUpdate);
}

protected function handleTimeUpdate(event:TimeUpdateEvent):void
{
timeDisplay.updateTime(event.newTime);
}
}
}

0 comments on commit 211f6e5

Please sign in to comment.