Changeset 4042
- Timestamp:
- 08/14/10 12:54:49 (21 months ago)
- Location:
- ssme/trunk
- Files:
-
- 7 modified
-
flex/Calendar/src/Calendar.mxml (modified) (5 diffs)
-
flex/Calendar/src/com/kh/ssme/components/DayCanvas.as (modified) (5 diffs)
-
flex/Calendar/src/com/kh/ssme/components/EventField.as (modified) (4 diffs)
-
flex/Calendar/src/com/kh/ssme/components/SimpleEventDisplay.as (modified) (1 diff)
-
flex/Common/src/com/kh/ssme/components/GridCanvas.as (modified) (6 diffs)
-
flex/Common/src/com/kh/ssme/components/RoundedCornerContainer.as (modified) (2 diffs)
-
web/flex/Calendar.swf (modified) (previous)
Legend:
- Unmodified
- Added
- Removed
-
ssme/trunk/flex/Calendar/src/Calendar.mxml
r4040 r4042 251 251 import com.kh.ssme.entity.CalendarEntity; 252 252 import com.kh.ssme.entity.ErrorMessageEntity; 253 import com.kh.ssme.entity.TimeFrameEntity; 254 import com.kh.ssme.util.DateProperty; 253 255 import com.kh.ssme.util.DateUtil; 256 import com.kh.ssme.util.HashArray; 254 257 import com.kh.ssme.util.Logger; 255 258 … … 280 283 281 284 currentState = "day"; 282 285 theDayCanvas = canvas_1; 286 dayCanvas = [ canvas_1, canvas_2, canvas_3, canvas_4, canvas_5, canvas_6, canvas_7 ]; 283 287 } 284 288 … … 351 355 352 356 private var calendarEntity:CalendarEntity; 357 private var currentDay:Date, weekBeginDay:Date, monthBeginDay:Date, dayOfTheWeek:int = 0; 353 358 private function onCalendarGetResponse(event:Event):void { 354 359 var result:ConnectorResult = (event as SsmeEvent).eventProperties['result']; … … 359 364 Logger.debug( result.lastResult as String, LoggingComponentsEnum.CAL ); 360 365 calendarEntity = (new CalendarEntity()).parseJSONString( result.lastResult as String, EVENTS_RECURSION ); 366 currentDay = chosenDate.selectedDate; 367 weekBeginDay = (new DateUtil( currentDay )).weekBegin( 0 ).date; 368 monthBeginDay = (new DateUtil( currentDay )).monthBegin().date; 369 dayOfTheWeek = currentDay.getDay() - weekBeginDay.getDay(); 361 370 switch( state.selectedIndex ){ // determine time range 362 371 case DAY: { … … 388 397 } 389 398 390 private var theDayCanvas:DayCanvas = canvas_1;391 private var dayCanvas:Array = [ canvas_1, canvas_2, canvas_3, canvas_4, canvas_5, canvas_6, canvas_7 ];399 private var theDayCanvas:DayCanvas; 400 private var dayCanvas:Array; 392 401 private function showDayEvents():void { 393 canvas_1.currentDay = c hosenDate.selectedDate;402 canvas_1.currentDay = currentDay; 394 403 canvas_1.dataProvider = calendarEntity.timeFramesEntitites; 404 //dayCanvas[ dayOfTheWeek ].currentDay = currentDay; 405 //dayCanvas[ dayOfTheWeek ].dataProvider = calendarEntity.timeFramesEntitites; 395 406 } 396 407 397 408 private function showWeekEvents():void { 398 409 410 // create data structure 411 var dataProviders:Array = [ ], i:int, timeFrame:TimeFrameEntity; 412 for(i=0; i<7; i++) dataProviders.push( new HashArray() ); 413 414 // divide events among days 415 for each( timeFrame in calendarEntity.timeFramesEntitites ){ 416 if( timeFrame.from.getDay() == timeFrame.to.getDay() ){ 417 // starts and ends in the same day 418 dataProviders[ timeFrame.from.getDay() ].put( timeFrame.UUID, timeFrame ); 419 } else { 420 // split over some days so add it to all of them 421 for(i=timeFrame.from.getDay(); i<=timeFrame.to.getDay();i++){ 422 dataProviders[ i ].put( timeFrame.UUID, timeFrame ); 423 } 424 } 425 } 426 427 // set dataProviders 428 var weekBegin:DateUtil = new DateUtil( weekBeginDay ); 429 for(i=0; i<7; i++){ 430 (dayCanvas[ i ] as DayCanvas).currentDay = weekBegin.date; 431 (dayCanvas[ i ] as DayCanvas).dataProvider = dataProviders[ i ]; 432 weekBegin.add( DateProperty.DATE, 1 ); 433 } 399 434 } 400 435 -
ssme/trunk/flex/Calendar/src/com/kh/ssme/components/DayCanvas.as
r4040 r4042 24 24 25 25 import com.kh.ssme.entity.TimeFrameEntity; 26 import com.kh.ssme.util.DateUtil; 27 import com.kh.ssme.util.HashArray; 28 29 import flash.display.DisplayObject; 30 31 import mx.containers.Canvas; 32 import mx.controls.Label; 33 import mx.controls.TextArea; 34 35 public class DayCanvas extends GridCanvas { 26 import com.kh.ssme.util.DateUtil; 27 import com.kh.ssme.util.HashArray; 28 29 import com.kh.ssme.util.Logger; 30 import com.kh.ssme.util.Logger; 31 32 public class DayCanvas extends GridCanvas { 36 33 37 34 public function DayCanvas() { … … 41 38 public var currentDay:Date; 42 39 40 private var oldWidth:Number, oldHeight:Number; 43 41 override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ 44 42 45 if(visible){ // repaint only if visible 43 if(visible){ // necessary only if visible 44 46 45 // call first in order to get grid drawn correctly 47 super.updateDisplayList(unscaledWidth, unscaledHeight); 46 super.updateDisplayList(unscaledWidth, unscaledHeight); 47 48 // call repaint only if dimensions were changed 49 if((unscaledWidth+unscaledHeight) - (oldWidth+oldHeight)){ 50 oldWidth = unscaledWidth; 51 oldHeight = unscaledHeight; 52 repaint(); 53 } 48 54 } 49 55 } … … 51 57 [ArrayElementType("com.kh.ssme.entity.TimeFrameEntity")] 52 58 private var dataProvider_:HashArray; 59 private var eventsMap:HashArray = new HashArray(); 60 53 61 public function set dataProvider(value:HashArray):void{ 62 dataProviderAvailable = false; 63 eventFieldsUpToDate = false; 64 recreateEvents = true; 54 65 dataProvider_ = value; 55 66 … … 57 68 if( eventsMap.getValueAt(i) ){ 58 69 this.removeChild( eventsMap.getValueAt(i) ); 59 trace( "REMOVE : "+eventsMap.getValueAt(i).data+" - ["+eventsMap.getValueAt(i).data.UUID+"] " );60 70 } 61 71 } 62 72 eventsMap.clear(); 63 64 createEvents(); 73 dataProviderAvailable = true; 74 75 repaint(); 65 76 validateNow(); 66 77 } … … 69 80 } 70 81 71 private var eventsMap:HashArray = new HashArray(); 72 public function createEvents():void{ 73 74 // prepare additional data about events 75 76 77 // create events 82 private var dataProviderAvailable:Boolean = false; 83 private var recreateEvents:Boolean = false; 84 private var eventFieldsUpToDate:Boolean = false; 85 public function repaint():void{ 86 if(dataProviderAvailable){ 87 createEvents(); 88 repaintEvents(); 89 } 90 } 91 92 /** 93 * Create display object for each TimeFrameEntity in dataProvider 94 */ 95 protected function createEvents():void{ 96 97 // in order to save time we recreate EventFields 98 // only if it is necessary 99 if(recreateEvents){ 100 101 // create events 102 var ev:EventField; 103 var i:int = 0, timeBegin:int, timeEnd:int; 104 var from:DateUtil, to:DateUtil, current:DateUtil = (new DateUtil(currentDay)).dayBegin(); 105 for each(var json:TimeFrameEntity in dataProvider_){ 106 ev = new EventField(); 107 eventsMap.put(json.UUID, ev); 108 109 ev.eventInfo = new SimpleEventDisplay(); 110 ev.data = json; 111 ev.name = json.UUID; 112 113 // event boundaries, index 114 timeBegin = (json.from.getHours() * 4) + ((json.from.getMinutes() as int)/15); 115 timeEnd = (json.to.getHours() * 4) + ((json.to.getMinutes() as int)/15); 116 // check if event exceed current day 117 from = (new DateUtil(json.from)).dayBegin(); 118 to = (new DateUtil(json.to)).dayBegin(); 119 if( current.compare(from) > 0 ) timeBegin = 0; 120 if( current.compare(to) < 0 ) timeEnd = rowsPosition[1].length - 1; 121 // store for future use 122 ev.beginIndex = timeBegin; 123 ev.endIndex = timeEnd; 124 125 ev.setStyle("borderThickness", 5); 126 ev.setStyle("cornerRadius", 20); 127 128 addChild( ev ); 129 } 130 131 recreateEvents = false; 132 } 133 } 134 135 // used by repaint 136 private var clusterOfEventsMap:HashArray = new HashArray(); 137 /** 138 * Calculates rank and coordinates for each TimeFrame display object 139 */ 140 protected function repaintEvents():void{ 78 141 var ev:EventField; 79 var i:int = 0; 80 for each(var json:TimeFrameEntity in dataProvider_){ 81 ev = new EventField(); 82 eventsMap.put(json.UUID, ev); 142 var countArray:Array; 143 var i:int, j:int = 0; 144 145 // in order to save time we recalculate ranks, clusters etc. 146 // only if it is necessary 147 if(!eventFieldsUpToDate){ 148 //------------------------------------------------ 149 // "rank" events 150 // count number of events for each quarter 151 countArray = new Array(96); 152 for each(ev in eventsMap){ 153 for(i=ev.beginIndex; i<ev.endIndex; i++){ 154 if(countArray[i]<0 || isNaN(countArray[i])) countArray[i]=0; 155 countArray[i]++; 156 } 157 } 158 159 // calculate rank and number of neighbours for each event 160 var neighbours:int; 161 for each(ev in eventsMap){ 162 neighbours = 0; 163 for(i=ev.beginIndex; i<ev.endIndex; i++) neighbours = Math.max( neighbours, countArray[i] ); 164 ev.neighbours = neighbours - 1; 165 ev.rank = neighbours*10000 + (ev.endIndex - ev.beginIndex)*100 + ev.beginIndex; 166 } 167 //------------------------------------------------ 168 169 170 //------------------------------------------------ 171 //clustering events into separated groups which don't intersect each other 172 var clusterIndex:Array = new Array(96); 173 var helpMap:HashArray, lastCreatedClusterID:int = 1; 174 var trace:String = ""; 175 176 // clear old clusters 177 clusterOfEventsMap.clear(); 83 178 84 ev.eventInfo = new SimpleEventDisplay(); 85 ev.data = json; 86 ev.name = json.UUID; 87 ev.setStyle("borderThickness", 5); 88 ev.setStyle("cornerRadius", 20); 89 trace( "ADD : "+ev.data+" - ["+ev.data.UUID+"] " ); 90 91 addChild( ev ); 92 sizeEvent( ev, i ); 93 i += 100; 94 95 } 96 97 } 98 99 private function sizeEvent(ev:EventField, i:int):void{ 179 // for each of the events 180 for each(ev in eventsMap){ 181 helpMap = new HashArray(); 182 183 // check the time span of current event 184 // if there were already clusters defined for this span then collect their ids 185 for(i=ev.beginIndex; i<ev.endIndex; i++){ 186 if(clusterIndex[i]<0 || isNaN(clusterIndex[i])) clusterIndex[i]=0; 187 if(!helpMap.containsKey(clusterIndex[i]) && clusterIndex[i]>0){ 188 helpMap.put(clusterIndex[i], clusterIndex[i]); 189 } 190 } 191 192 if(helpMap.size == 0){ // helpMap.size == #clusters 193 // there were no clusters so far for this span, 194 // so we 'book' the span and create new cluster on the base of current event 195 for(i=ev.beginIndex; i<ev.endIndex; i++) clusterIndex[i] = lastCreatedClusterID; 196 clusterOfEventsMap.put(lastCreatedClusterID, [ ev ]); 197 lastCreatedClusterID++; 198 } 199 if(helpMap.size == 1){ 200 // there was one cluster for this span 201 // so we just join current event to cluster we found 202 var currentCluster:int = helpMap.getKeyAt(0); 203 for(i=ev.beginIndex; i<ev.endIndex; i++) clusterIndex[i] = currentCluster; 204 clusterOfEventsMap[currentCluster].push( ev ); 205 } 206 if(helpMap.size > 1){ 207 // there was more than one cluster for this span 208 // we join cluster we found into new single one 209 // so we just join current event to cluster we found 210 var temp:Array = [ ev ]; 211 var minIndex:int = ev.beginIndex, maxIndex:int = ev.endIndex; 212 for each(var value:* in helpMap){ 213 for each(var clusterElement:EventField in clusterOfEventsMap[value]){ 214 temp.push( clusterElement ); // add to new cluster 215 minIndex = Math.min(minIndex, clusterElement.beginIndex ); 216 maxIndex = Math.max(maxIndex, clusterElement.beginIndex ); 217 } 218 clusterOfEventsMap.deleteWithKey(value); 219 } 220 for(i=minIndex; i<maxIndex; i++) clusterIndex[i] = lastCreatedClusterID; 221 clusterOfEventsMap.put(lastCreatedClusterID, temp); 222 lastCreatedClusterID++; 223 } 224 225 } 226 227 for (var key:String in clusterOfEventsMap){ 228 trace = ""; 229 var el:EventField; 230 for each(el in clusterOfEventsMap[key]) trace+= (el.data as TimeFrameEntity).UUID.substr(0, 3)+"|"; 231 Logger.debug( "~("+key+") -> ["+trace+"]" ); 232 } 233 //------------------------------------------------ 234 235 eventFieldsUpToDate = true; 236 } 237 238 239 //------------------------------------------------ 240 // for each cluster size it's events 241 j = 0; 242 var placeArray:Array = new Array(96); 243 var minPosition:int = 0, numberOfPositions:int = 0; 244 for each(var eventsArray:Array in clusterOfEventsMap){ 245 // sort events by rank 246 eventsArray.sort( sortEventsByRank ); 247 248 // calculate sub-optimal position within cluster 249 // surely there's a better algorithm :) 250 numberOfPositions = 0; 251 for each(ev in eventsArray){ 252 minPosition = 0; 253 // find minimal possible position (maximum of available position in span) 254 for(i=ev.beginIndex; i<ev.endIndex; i++){ 255 if(placeArray[i]<0 || isNaN(placeArray[i])) placeArray[i]=0; 256 minPosition = Math.max( minPosition, placeArray[i] ); 257 } 258 // store information in event 259 ev.leftPosition = minPosition; 260 //update position availability array for current span 261 for(i=ev.beginIndex; i<ev.endIndex; i++){ 262 placeArray[i] = minPosition + 1; 263 } 264 numberOfPositions = Math.max( numberOfPositions, minPosition ); 265 } 266 267 // size events 268 for each(ev in eventsArray){ 269 sizeEvent( ev, eventsArray.length, numberOfPositions, j ); 270 j += 100; 271 } 272 } 273 //------------------------------------------------ 274 } 275 private function sortEventsByRank(a:EventField, b:EventField):int { 276 return ( a.rank < b.rank ) ? -1 : (( a.rank > b.rank ) ? 1 : 0 ); 277 } 278 279 private function sizeEvent(ev:EventField, clusterSize:int, numberOfPositions:int, i:int):void{ 100 280 var data:TimeFrameEntity = ev.eventInfo.eventData; 101 281 if(data){ 102 var timeBegin:int = (data.from.getHours() * 4) + ((data.from.getMinutes() as int)/15); 103 var timeEnd:int = (data.to.getHours() * 4) + ((data.to.getMinutes() as int)/15); 104 105 // if event exceed current day 106 var from:DateUtil = (new DateUtil(data.from)).dayBegin(); 107 var current:DateUtil = (new DateUtil(currentDay)).dayBegin(); 108 var to:DateUtil = (new DateUtil(data.to)).dayBegin(); 109 110 if( current.compare(from) > 0 ){ 111 timeBegin = 0; 112 } 113 if( current.compare(to) < 0 ){ 114 timeEnd = rowsPosition[1].length - 1; 115 } 116 117 ev.width = 200;//XXX 118 ev.height = rowsPosition[1][timeEnd] - rowsPosition[1][timeBegin]; 119 ev.x = 50+i;//XXX 120 ev.y = rowsPosition[1][timeBegin]; 282 var availableWidth:Number = this.width - this.leftHorizontalMargin_ - this.rightHorizontalMargin_; 283 ev.width = availableWidth * (2 / (numberOfPositions+2)); 284 ev.height = rowsPosition[1][ev.endIndex] - rowsPosition[1][ev.beginIndex]; 285 ev.x = this.leftHorizontalMargin_ + ((availableWidth / (numberOfPositions+2)) * ev.leftPosition); 286 ev.y = rowsPosition[1][ev.beginIndex]; 287 this.setChildIndex( ev, 0 ); 121 288 ev.invalidateSize(); 122 289 ev.invalidateDisplayList(); -
ssme/trunk/flex/Calendar/src/com/kh/ssme/components/EventField.as
r4040 r4042 24 24 25 25 import com.kh.ssme.entity.TimeFrameEntity; 26 27 import flash.display.DisplayObject; 28 26 29 27 import mx.binding.utils.BindingUtils; 30 import mx.binding.utils.ChangeWatcher;31 import mx.controls.TextArea;32 28 import mx.core.Container; 33 29 import mx.core.UIComponent; 30 import mx.events.ToolTipEvent; 31 import mx.managers.ToolTipManager; 34 32 35 33 public class EventField extends RoundedCornerContainer { … … 40 38 container_.visible = container_.includeInLayout = true; 41 39 this.addChild( container_ ); 40 41 this.toolTip = ""; 42 42 } 43 43 … … 68 68 } 69 69 70 /** 71 * Index of beginning quarter 72 */ 73 public var beginIndex:int; 74 75 /** 76 * Index of ending quarter 77 */ 78 public var endIndex:int; 79 80 /** 81 * number of neighbour events 82 */ 83 public var neighbours:int; 84 85 /** 86 * Component position rank 87 */ 88 public var rank:int; 89 90 /** 91 * Component left alignment 92 */ 93 public var leftPosition:int; 70 94 71 95 protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ … … 75 99 container_.y = this.borderThickness_; 76 100 container_.width = this.width - this.borderThickness_*2; 77 container_.height = this.height - this.borderThickness_*2; 101 container_.height = this.height - this.borderThickness_*2; 102 103 this.toolTip = "Indexes : ["+beginIndex+" - "+endIndex+"]\n" + 104 "neighbours: "+neighbours+"; rank:"+rank+"\n" + 105 "x: "+x+"; y:"+y+"; width:"+width+"; height:"+height+ 106 "UUID:"+data.UUID; 78 107 } 79 108 -
ssme/trunk/flex/Calendar/src/com/kh/ssme/components/SimpleEventDisplay.as
r4040 r4042 50 50 this.text += eventData_.description+"\n"; 51 51 52 this.toolTip = this.text;52 //this.toolTip = this.text; 53 53 } 54 54 } -
ssme/trunk/flex/Common/src/com/kh/ssme/components/GridCanvas.as
r4040 r4042 78 78 } 79 79 public function get outerBorderThickness_():Number{ 80 return this.getStyle ("outerBorderThickness");80 return this.getStyle_("outerBorderThickness", 1); 81 81 } 82 82 public function set outerBorderColor_(value:uint):void{ … … 84 84 } 85 85 public function get outerBorderColor_():uint{ 86 return this.getStyle ("outerBorderColor");86 return this.getStyle_("outerBorderColor", 0x000000); 87 87 } 88 88 public function set outerBorderAlpha_(value:Number):void{ … … 90 90 } 91 91 public function get outerBorderAlpha_():Number{ 92 return this.getStyle ("outerBorderAlpha");92 return this.getStyle_("outerBorderAlpha", 1.0); 93 93 } 94 94 public function set innerBorderThicknesses_(value:Array):void{ 95 95 this.setStyle("innerBorderThicknesses", value); 96 96 } 97 [ArrayElementType("int")] 97 98 public function get innerBorderThicknesses_():Array{ 98 return this.getStyle ("innerBorderThicknesses");99 return this.getStyle_("innerBorderThicknesses", [ 0 ]); 99 100 } 100 101 public function set innerBorderColors_(value:Array):void{ 101 102 this.setStyle("innerBorderColors", value); 102 103 } 104 [ArrayElementType("uint")] 103 105 public function get innerBorderColors_():Array{ 104 return this.getStyle ("innerBorderColors");106 return this.getStyle_("innerBorderColors", [ 0x000000 ]); 105 107 } 106 108 public function set innerBorderAlphas_(value:Array):void{ 107 109 this.setStyle("innerBorderAlphas", value); 108 110 } 111 [ArrayElementType("Number")] 109 112 public function get innerBorderAlphas_():Array{ 110 return this.getStyle("innerBorderAlphas"); 111 } 112 113 return this.getStyle_("innerBorderAlphas", [1.0]); 114 } 115 public function set cornerRadius_(value:Number):void{ 116 this.setStyle("cornerRadius", value); 117 } 118 public function get cornerRadius_():Number{ 119 return this.getStyle_("cornerRadius", 0); 120 } 113 121 public function set verticalMargin_(value:Number):void{ 114 122 this.setStyle("verticalMargin", value); 115 123 } 116 124 public function get verticalMargin_():Number{ 117 return this.getStyle ("verticalMargin");125 return this.getStyle_("verticalMargin", 0); 118 126 } 119 127 public function set leftHorizontalMargin_(value:Number):void{ … … 121 129 } 122 130 public function get leftHorizontalMargin_():Number{ 123 return this.getStyle ("leftHorizontalMargin");131 return this.getStyle_("leftHorizontalMargin", 0); 124 132 } 125 133 public function set rightHorizontalMargin_(value:Number):void{ … … 127 135 } 128 136 public function get rightHorizontalMargin_():Number{ 129 return this.getStyle ("rightHorizontalMargin");137 return this.getStyle_("rightHorizontalMargin", 0); 130 138 } 131 139 //--------------------------------------------- … … 137 145 */ 138 146 override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ 139 var outBorderThickness:Number = getStyle_("outerBorderThickness", 1); 140 var outBorderColor:uint = getStyle_("outerBorderColor", 0x000000); 141 var outBorderAlpha:Number = getStyle_("outerBorderAlpha", 1.0); 142 [ArrayElementType("int")] 143 var inBorderThicknesses:Array = getStyle_("innerBorderThicknesses", [ 0 ]); 144 [ArrayElementType("uint")] 145 var inBorderColors:Array = getStyle_("innerBorderColors", [ 0x000000 ]); 146 [ArrayElementType("Number")] 147 var inBorderAlphas:Array = getStyle_("innerBorderAlphas", [ 1.0 ]); 148 var cornerRadius:Number = getStyle_("cornerRadius", 0.0); 149 var verticalMargin:Number = getStyle_("verticalMargin",0); 150 var leftHorizontalMargin:Number = getStyle_("leftHorizontalMargin",0); 151 var rightHorizontalMargin:Number = getStyle_("rightHorizontalMargin",0); 147 var outBorderThickness:Number = outerBorderThickness_; 148 var outBorderColor:uint = outerBorderColor_; 149 var outBorderAlpha:Number = outerBorderAlpha_; 150 151 var inBorderThicknesses:Array = innerBorderThicknesses_; 152 var inBorderColors:Array = innerBorderColors_; 153 var inBorderAlphas:Array = innerBorderAlphas_; 154 155 var cornerRadius:Number = cornerRadius_; 156 var verticalMargin:Number = verticalMargin_; 157 var leftHorizontalMargin:Number = leftHorizontalMargin_; 158 var rightHorizontalMargin:Number = rightHorizontalMargin_; 152 159 153 160 -
ssme/trunk/flex/Common/src/com/kh/ssme/components/RoundedCornerContainer.as
r4031 r4042 72 72 // OVERRIDE 73 73 protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ 74 74 75 var borderThickness:Number = getStyle_("borderThickness", 10); 75 76 var borderColor:uint = getStyle_("borderColor", 0x000000); 76 77 var borderAlpha:Number = 1.0; 77 78 var cornerRadius:Number = getStyle_("cornerRadius", 10); 78 var backgroundAlpha = getStyle_("backgroundAlpha", 1.0);79 var backgroundAlpha:Number = getStyle_("backgroundAlpha", 1.0); 79 80 80 81 … … 93 94 94 95 //border 95 if (borderThickness > 0) 96 { 96 if (borderThickness > 0){ 97 97 graphics.lineStyle(borderThickness, 98 98 borderColor,
