source: audio-player/trunk/source/classes/Display.as @ 348

Revision 87, 3.2 KB checked in by doryphores, 15 years ago (diff)

Converted project to use Flash IDE instead of FlashDevelop
Added showRemaining option

Line 
1import mx.utils.Delegate;
2
3class Display extends MovieClip
4{
5        public var message_txt:TextField;
6        public var time_txt:TextField;
7       
8        private var _ticker:Ticker;
9       
10        private var _messages:Array;
11        private var _currentSlot:Number;
12       
13        private var _newWidth:Number;
14       
15        /**
16         * Constructor
17         */
18        function Display()
19        {
20                // Initialise message storage
21                _messages = new Array();
22                _currentSlot = 0;
23               
24                // Initialise and start ticker
25                _ticker = new Ticker(this.message_txt);
26                _ticker.start();
27        }
28       
29        /**
30        * Load the next message in the queue
31        */
32        private function next():Void
33        {
34                _currentSlot = (++_currentSlot == _messages.length) ? 0 : _currentSlot;
35                _update();
36        }
37       
38        /**
39        * Sets the text in the given message slot
40        * @param        text the message
41        * @param        slot the slot to store it in (integer 0-n)
42        */
43        public function setText(text:String, slot:Number, forceDisplay:Boolean):Void
44        {
45                if(forceDisplay == undefined) forceDisplay = false;
46               
47                var update:Boolean = false;
48                if(_currentSlot == slot && _messages[slot] != text) update = true;
49                if(forceDisplay && _messages[slot] != text)
50                {
51                        _currentSlot = slot;
52                        update = true;
53                }
54                _messages[slot] = text;
55               
56                // Only update display if currently viewing the updated slot and it has changed
57                if(update) _update();
58        }
59       
60        /**
61        * Sets the time display
62        * @param        ms the time to display in milliseconds
63        */
64        public function setTime(ms:Number, isRemaining:Boolean)
65        {
66                var timeDisplay:String = (isRemaining && ms > 0)?"-":"";
67                this.time_txt.text = timeDisplay + _formatTime(ms);
68                this.resize();
69        }
70       
71        /**
72        * Clears all messages
73        */
74        public function clear():Void
75        {
76                _messages = new Array();
77                _currentSlot = 0;
78                this.message_txt.text = "";
79                this.time_txt.text = "";
80                _ticker.reset();
81        }
82       
83        /**
84        * Resizes display
85        * @param        newWidth the new display width
86        */
87        public function resize(newWidth:Number):Void
88        {
89                if(newWidth != undefined) _newWidth = newWidth;
90                var newMessageWidth = _newWidth;
91                newMessageWidth -= ((this.time_txt.text.length > 5) ? 50: 38);
92                this.message_txt._width = newMessageWidth;
93                this.time_txt._x = _newWidth - this.time_txt._width + 1;
94        }
95       
96        /**
97        * Updates the display and resets the ticker
98        */
99        private function _update():Void
100        {
101                this.message_txt.text = _messages[_currentSlot];
102                _ticker.reset();
103        }
104
105        private function _formatTime(ms:Number):String
106        {
107                var trkTimeInfo:Date = new Date();
108                var seconds:Number, minutes:Number, hours:Number;
109                var result:String;
110
111                // Populate a date object (to convert from ms to hours/minutes/seconds)
112                trkTimeInfo.setSeconds(int(ms/1000));
113                trkTimeInfo.setMinutes(int((ms/1000)/60));
114                trkTimeInfo.setHours(int(((ms/1000)/60)/60));
115
116                // Get the values from date object
117                seconds = trkTimeInfo.getSeconds();
118                minutes = trkTimeInfo.getMinutes();
119                hours = trkTimeInfo.getHours();
120
121                // Build position string
122                result = seconds.toString();
123                if(seconds < 10) result = "0" + result;
124                result = ":" + result;
125                result = minutes.toString() + result;
126                if(hours > 0)
127                {
128                        if(minutes < 10) result = "0" + result;
129                        result = ":" + result;
130                        result = hours.toString() + result;
131                }
132
133                return result;
134        }
135}
Note: See TracBrowser for help on using the repository browser.