root/lang/actionscript/metro-map/Viewer.as @ 7021

Revision 7021, 4.5 kB (checked in by gyuque, 5 years ago)

metro-map: highlight search results

Line 
1package
2{
3        import flash.display.*;
4        import flash.text.*;
5        import flash.events.*;
6        import flash.net.URLRequest;
7        import flash.geom.ColorTransform;
8        import mkmap.*;
9
10        public class Viewer extends MovieClip
11        {
12                private var mCanvas:MCanvas;
13                private var mTextInput:TextField;
14                private var romkan:RomkanMiniAS = new RomkanMiniAS();
15                private var mSearch:RomSearch;
16                private var mStData:StationSampleData = new StationSampleData();
17               
18                private var mOut:TextField;
19                private var mLabelPool:Object;
20               
21                private var mDarkScreen:Sprite;
22                private var mDarkCount:int;
23                private var mDarkDir:int;
24                private var mDarkTransform:ColorTransform = new ColorTransform(0.5, 0.5, 0.5, 1);
25                private var mNoTransform:ColorTransform = new ColorTransform();
26               
27                private const DARK_IN:int = 1;
28                private const DARK_OUT:int = -1;
29                               
30                function Viewer()
31                {
32                        mDarkScreen = createDarkScreen();
33                        mDarkScreen.alpha = 0;
34                        mDarkCount = 0;
35                        mDarkDir = 0;
36                        addChild(mDarkScreen);
37               
38                        stage.align = StageAlign.TOP_LEFT;
39                        stage.scaleMode = StageScaleMode.NO_SCALE;
40                       
41                        var fmt:TextFormat = new TextFormat();
42                        fmt.size = 16;
43                       
44                        mOut = new TextField();
45                        mOut.y = 100;
46                        mOut.width = 300;
47                        mOut.height = 300;
48                        addChild(mOut);
49                        setupData();
50                       
51                        var icon:Loader = new Loader();
52                        var url:String = "lens.png";
53                        var urlReq:URLRequest = new URLRequest(url);
54                        icon.load(urlReq);
55                       
56                        addChild(icon);                 
57                       
58                        mTextInput = new TextField();
59                        mTextInput.defaultTextFormat = fmt;
60                        mTextInput.type = TextFieldType.INPUT;
61                        mTextInput.border = true;
62                        mTextInput.borderColor = 0xa0afcc;
63                        mTextInput.background = true;
64                        mTextInput.backgroundColor = 0xffffff;
65                        mTextInput.x = 36;
66                        mTextInput.y = 9;
67                        mTextInput.height = 24;
68                        mTextInput.width = 200;
69                        mTextInput.addEventListener(Event.CHANGE, onSearchBoxChanged);
70                       
71                        mCanvas = new MCanvas(900, 500, false, false);
72                        mCanvas.x = 48;
73                        mCanvas.y = 24;
74                        mCanvas.cacheAsBitmap = true;
75                        addChild(mCanvas);
76                        addChild(mTextInput);
77                        mCanvas.objectAdded = onCanvasObjectAdded;
78                       
79                        mLabelPool = {};
80                        mCanvas.deserializeXML(ViewerSampleData.data);
81                        addEventListener(Event.ENTER_FRAME, onEnterFrame);
82                }
83               
84                private function onEnterFrame(event:Event):void
85                {
86                        if (mDarkDir != 0)
87                        {
88                                mDarkCount += mDarkDir;
89                                if (mDarkCount > 5)
90                                {
91                                        mDarkCount = 5;
92                                        mDarkDir = 0;
93                                }
94
95                                if (mDarkCount < 0)
96                                {
97                                        mDarkCount = 0;
98                                        mDarkDir = 0;
99                                }
100                               
101                                mDarkScreen.alpha = Number(mDarkCount) * 0.1;
102                        }
103                }
104                               
105                private function createDarkScreen():Sprite
106                {
107                        var s:Sprite = new Sprite();
108                        var g:Graphics = s.graphics;
109                        g.lineStyle();
110                        g.beginFill(0, 1);
111                        g.drawRect(0, 0, 900, 500);
112                        g.endFill();
113                       
114                        return s;                       
115                }
116               
117                private function onCanvasObjectAdded(obj:CanvasObject):void
118                {
119                        if (obj is MTitleBox)
120                        {
121                                MTitleBox(obj).showDotLabel(false);
122                                var name:String = MTitleBox(obj).title;
123                                mLabelPool[name] = obj;
124                        }
125                }
126               
127                private function setupData():void
128                {
129                        var len:int = mStData.data.length;
130                        var i:int;
131                        mSearch = new RomSearch();
132                        for (i = 0;i < len;i++)
133                        {
134                                var st:StationData = mStData.data[i];
135                                mSearch.push(st.name, st.kana, st);
136                        }
137                       
138
139                }
140               
141                private function onSearchBoxChanged(e:Event):void
142                {
143                        mOut.text = "";
144                        var res:Array = mSearch.search(romkan.to_kana(mTextInput.text));
145                        if (res != null)
146                        {
147                                mOut.text = res.join("\n");
148                               
149                                mDarkDir = DARK_IN;
150                        }
151                        else
152                                mDarkDir = DARK_OUT;
153                        highlightStationList(res);
154                }
155               
156                private function highlightStationList(stations:Array):void
157                {
158                        var o:Object;
159                        var toHighlight:Object = {};
160                        if (stations != null)
161                                for each(o in stations)
162                        {
163                                var st:StationData = StationData(o);
164                                toHighlight[st.name] = true;
165                        }
166
167                        for each(o in mLabelPool)
168                        {
169                                var label:MTitleBox = MTitleBox(o);
170                                if (toHighlight[label.title] || stations == null)
171                                {
172                                        label.transform.colorTransform = mNoTransform;
173                                        label.showDotLabel(true);
174                                }
175                                else
176                                {
177                                        label.transform.colorTransform = mDarkTransform;
178                                        label.showDotLabel(false);
179                                }
180                        }
181                }
182               
183                private function makeArrowSprite():Sprite
184                {
185                        var s:Sprite = new Sprite();
186                        var g:Graphics = s.graphics;
187                        g.lineStyle(1, 0xffdd66);
188                        g.beginFill(0xff8822);
189                        g.moveTo(0,0);
190                        g.lineTo(-10,-10);
191                        g.lineTo(-5,-10);
192                        g.lineTo(-5,-20);
193                        g.lineTo( 5,-20);
194                        g.lineTo( 5,-10);
195                        g.lineTo(10,-10);
196                        g.lineTo(0,0);
197                        g.endFill();
198                       
199                        return s;
200                }
201        }
202}
Note: See TracBrowser for help on using the browser.