/src/org/robotlegs/mvcs/Mediator.as
ActionScript | 159 lines | 67 code | 16 blank | 76 comment | 3 complexity | d0b9d5795cb9479c14d4f157637788d0 MD5 | raw file
1/*
2 * Copyright (c) 2009 the original author or authors
3 *
4 * Permission is hereby granted to use, modify, and distribute this file
5 * in accordance with the terms of the license agreement accompanying it.
6 */
7
8package org.robotlegs.mvcs
9{
10 import flash.display.DisplayObjectContainer;
11 import flash.events.Event;
12 import flash.events.IEventDispatcher;
13
14 import org.robotlegs.base.EventMap;
15 import org.robotlegs.base.MediatorBase;
16 import org.robotlegs.core.IEventMap;
17 import org.robotlegs.core.IMediatorMap;
18
19 /**
20 * Abstract MVCS <code>IMediator</code> implementation
21 */
22 public class Mediator extends MediatorBase
23 {
24 [Inject]
25 public var contextView:DisplayObjectContainer;
26
27 [Inject]
28 public var mediatorMap:IMediatorMap;
29
30 /**
31 * @private
32 */
33 protected var _eventDispatcher:IEventDispatcher;
34
35 /**
36 * @private
37 */
38 protected var _eventMap:IEventMap;
39
40 public function Mediator()
41 {
42 }
43
44 /**
45 * @inheritDoc
46 */
47 override public function preRemove():void
48 {
49 if (_eventMap)
50 _eventMap.unmapListeners();
51 super.preRemove();
52 }
53
54 /**
55 * @inheritDoc
56 */
57 public function get eventDispatcher():IEventDispatcher
58 {
59 return _eventDispatcher;
60 }
61
62 [Inject]
63 /**
64 * @private
65 */
66 public function set eventDispatcher(value:IEventDispatcher):void
67 {
68 _eventDispatcher = value;
69 }
70
71 /**
72 * Local EventMap
73 *
74 * @return The EventMap for this Actor
75 */
76 protected function get eventMap():IEventMap
77 {
78 return _eventMap || (_eventMap = new EventMap(eventDispatcher));
79 }
80
81 /**
82 * Dispatch helper method
83 *
84 * @param event The Event to dispatch on the <code>IContext</code>'s <code>IEventDispatcher</code>
85 */
86 protected function dispatch(event:Event):Boolean
87 {
88 if(eventDispatcher.hasEventListener(event.type))
89 return eventDispatcher.dispatchEvent(event);
90 return false;
91 }
92
93 /**
94 * Syntactical sugar for mapping a listener to the <code>viewComponent</code>
95 *
96 * @param type
97 * @param listener
98 * @param eventClass
99 * @param useCapture
100 * @param priority
101 * @param useWeakReference
102 *
103 */
104 protected function addViewListener(type:String, listener:Function, eventClass:Class = null, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = true):void
105 {
106 eventMap.mapListener(IEventDispatcher(viewComponent), type, listener,
107 eventClass, useCapture, priority, useWeakReference);
108 }
109
110 /**
111 * Syntactical sugar for mapping a listener from the <code>viewComponent</code>
112 *
113 * @param type
114 * @param listener
115 * @param eventClass
116 * @param useCapture
117 *
118 */
119 protected function removeViewListener(type:String, listener:Function, eventClass:Class = null, useCapture:Boolean = false):void
120 {
121 eventMap.unmapListener(IEventDispatcher(viewComponent), type, listener,
122 eventClass, useCapture);
123 }
124
125 /**
126 * Syntactical sugar for mapping a listener to an <code>IEventDispatcher</code>
127 *
128 * @param dispatcher
129 * @param type
130 * @param listener
131 * @param eventClass
132 * @param useCapture
133 * @param priority
134 * @param useWeakReference
135 *
136 */
137 protected function addContextListener(type:String, listener:Function, eventClass:Class = null, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = true):void
138 {
139 eventMap.mapListener(eventDispatcher, type, listener,
140 eventClass, useCapture, priority, useWeakReference);
141 }
142
143 /**
144 * Syntactical sugar for unmapping a listener from an <code>IEventDispatcher</code>
145 *
146 * @param dispatcher
147 * @param type
148 * @param listener
149 * @param eventClass
150 * @param useCapture
151 *
152 */
153 protected function removeContextListener(type:String, listener:Function, eventClass:Class = null, useCapture:Boolean = false):void
154 {
155 eventMap.unmapListener(eventDispatcher, type, listener,
156 eventClass, useCapture);
157 }
158 }
159}