Guest User

Untitled

a guest
Oct 16th, 2012
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package feathers.examples
  2. {
  3.     import feathers.controls.Button;
  4.     import feathers.controls.List;
  5.     import feathers.controls.Scroller;
  6.     import feathers.core.FeathersControl;
  7.     import feathers.data.ListCollection;
  8.     import feathers.examples.BlogListItemRenderer;
  9.     import feathers.layout.VerticalLayout;
  10.    
  11.     import flash.display.BitmapData;
  12.     import flash.events.IOErrorEvent;
  13.     import flash.events.SecurityErrorEvent;
  14.     import flash.geom.Matrix;
  15.     import flash.net.URLLoader;
  16.     import flash.net.URLLoaderDataFormat;
  17.     import flash.net.URLRequest;
  18.     import flash.text.TextField;
  19.     import flash.text.TextFieldAutoSize;
  20.     import flash.text.TextFormat;
  21.     import flash.xml.XMLDocument;
  22.    
  23.     import starling.display.Sprite;
  24.     import starling.events.Event;
  25.     import starling.textures.Texture;
  26.    
  27.     /**
  28.      * A very basic example to create a Button with Feathers.
  29.      */
  30.     public class Main extends Sprite
  31.     {
  32.         private var _list:List;
  33.        
  34.         public function Main()
  35.         {
  36.             //we'll initialize things after we've been added to the stage
  37.             this.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
  38.         }
  39.        
  40.         protected function addedToStageHandler(event:Event):void
  41.         {
  42.             this.removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
  43.            
  44.             // make list control
  45.             _list = new List();
  46.             _list.width = 300;
  47.             _list.height = 768;
  48.            
  49.             // properties
  50.             _list.itemRendererProperties.horizontalAlign = Button.HORIZONTAL_ALIGN_LEFT;
  51.             _list.itemRendererProperties.verticalAlign = Button.VERTICAL_ALIGN_MIDDLE;
  52.             var vl:VerticalLayout = new VerticalLayout();
  53.             vl.hasVariableItemDimensions = true;
  54.             _list.layout = vl;
  55.             _list.scrollerProperties.snapScrollPositionsToPixels = true;
  56.             _list.scrollerProperties.verticalScrollPolicy = Scroller.SCROLL_POLICY_ON;
  57.            
  58.             // cell renderer
  59.             _list.itemRendererType = BlogListItemRenderer;
  60.            
  61.             // add list to display
  62.             addChild(_list);
  63.            
  64.             // get Blog data
  65.             var xmlLoader:URLLoader = new URLLoader();
  66.             xmlLoader.dataFormat = URLLoaderDataFormat.TEXT;
  67.             xmlLoader.addEventListener(flash.events.Event.COMPLETE, _handleXMLLoaded, false, 0, true);
  68.             xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, _handleXMLError, false, 0, true);
  69.             xmlLoader.addEventListener(IOErrorEvent.NETWORK_ERROR, _handleXMLError, false, 0, true);
  70.             xmlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, _handleXMLError, false, 0, true);
  71.            
  72.             // cnn blog feed for testing
  73.             xmlLoader.load(new URLRequest('http://politicalticker.blogs.cnn.com/feed/'));
  74.         }
  75.        
  76.         private function _handleXMLLoaded(e:flash.events.Event):void
  77.         {
  78.             if (e.type != Event.COMPLETE) {  return; }
  79.            
  80.             // get data in list form
  81.             var dataList:XMLList = XMLList(XML(e.target.data).channel.item);
  82.            
  83.             // data for collection
  84.             var dataProvided:Array = new Array();
  85.            
  86.             // get only 10 items           
  87.             for (var feedIndex:int = 0; feedIndex < 10; feedIndex++)
  88.             {
  89.                 // populate an object to add to array
  90.                 var currentData:Object = new Object();
  91.                
  92.                 // container used to draw() into BitmapData
  93.                 var container:flash.display.Sprite = new flash.display.Sprite();
  94.                
  95.                 // Blog title
  96.                 var tt:TextField = new TextField();
  97.                 container.addChild(tt);
  98.                 tt.autoSize = TextFieldAutoSize.LEFT;
  99.                 tt.multiline = true;
  100.                 tt.wordWrap = true;
  101.                 tt.text = String(new XMLDocument(dataList[feedIndex].title.text()).firstChild.nodeValue);
  102.                 tt.width = 250;
  103.                 tt.y = 5;
  104.                 tt.x = 10;
  105.                 tt.setTextFormat(new TextFormat("Arial",15,0x333333));
  106.                
  107.                 // Blog date
  108.                 var dt:TextField = new TextField();
  109.                 container.addChild(dt);
  110.                 dt.autoSize = TextFieldAutoSize.LEFT;
  111.                 dt.wordWrap = true;
  112.                 var feedDateStr:String = dataList[feedIndex].pubDate.text();
  113.                 feedDateStr = feedDateStr.replace(/\,/g, "");
  114.                 var feedDate:Date = new Date(feedDateStr);
  115.                 dt.text = String(feedDate.toDateString());
  116.                 dt.width = 250;
  117.                 dt.y = int(tt.y + tt.height);
  118.                 dt.x = 10;
  119.                 dt.setTextFormat(new TextFormat("Arial",13,0x999999,false,true));
  120.                
  121.                 // Blog description
  122.                 var st:TextField = new TextField();
  123.                 container.addChild(st);
  124.                 st.autoSize = TextFieldAutoSize.LEFT;
  125.                 st.multiline = true;
  126.                 st.wordWrap = true;
  127.                 st.text = String(new XMLDocument(dataList[feedIndex].description.text()).firstChild.nodeValue).substr(0,120);
  128.                 if (String(new XMLDocument(dataList[feedIndex].description.text()).firstChild.nodeValue).length > 120)
  129.                 {
  130.                     st.appendText(" [..]");
  131.                 }
  132.                 st.width = 250;
  133.                 st.y = int(dt.y + dt.height);
  134.                 st.x = 10;
  135.                 st.setTextFormat(new TextFormat("Arial",13,0x333333));
  136.                
  137.                 // generate a simple white square background
  138.                 var cellBG:flash.display.Sprite = new flash.display.Sprite();
  139.                 cellBG.graphics.beginFill(0xf5f5f5,1);
  140.                 cellBG.graphics.drawRect(0,0,300,int(st.y + st.height + 10));
  141.                 cellBG.graphics.endFill();
  142.                 container.addChildAt(cellBG,0); // add under text
  143.                
  144.                 // pre-create Texture of this text for reference
  145.                 var bmd:BitmapData = new BitmapData(300,container.height,false,0xFFFFFF);
  146.                 bmd.draw(container);
  147.                 currentData.texture = Texture.fromBitmapData(bmd);
  148.                
  149.                 currentData.url = dataList[feedIndex].link.text();
  150.                
  151.                 dataProvided.push(currentData);
  152.                
  153.                 // cleaning up
  154.                 bmd.dispose();
  155.                 while (container.numChildren > 0) { container.removeChildAt(0); }
  156.                 container = null;
  157.                 tt = null;
  158.                 dt = null;
  159.                 st = null;
  160.                 bmd = null;
  161.             }
  162.            
  163.             _list.dataProvider = new ListCollection(dataProvided);
  164.             _list.selectedIndex = 0;
  165.         }
  166.        
  167.         private function _handleXMLError(e:Event):void
  168.         {
  169.             trace("Blog._handleXMLError() -Error loading XML [" + e.target + "]: " + e.type + " (" + e.toString() + ")");
  170.            
  171.         }
  172.     }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment