topical media & game development

talk show tell print

actionscript-book-NewsLayout-com-example-programmingas3-newslayout-StoryLayout.ax

actionscript-book-NewsLayout-com-example-programmingas3-newslayout-StoryLayout.ax [swf] flex


  package 
  {
          import flash.display.Sprite;
          import flash.text.TextFormatAlign;
          import flash.text.TextFormat;
          import flash.text.StyleSheet;
  
          import flash.events.Event;
          import flash.net.URLRequest;
          import flash.net.URLLoader;
          import flash.display.Sprite;
          import flash.display.Graphics;
  
          public class @ax-actionscript-book-NewsLayout-com-example-programmingas3-newslayout-StoryLayout extends Sprite
          {
                  public var headlineTxt:actionscript_book_NewsLayout_com_example_programmingas3_newslayout_HeadlineTextField;
                  public var subtitleTxt:actionscript_book_NewsLayout_com_example_programmingas3_newslayout_HeadlineTextField;
                  public var storyTxt:actionscript_book_NewsLayout_com_example_programmingas3_newslayout_MultiColumnText;
                  public var sheet:StyleSheet;
                  public var h1Format:TextFormat;
                  public var h2Format:TextFormat;
                  public var pFormat:TextFormat;
                  
                  private var loader:URLLoader;
                  
                  public var paddingLeft:Number;
                  public var paddingRight:Number;
                  public var paddingTop:Number;
                  public var paddingBottom:Number;
                  
                  public var preferredWidth:Number;
                  public var preferredHeight:Number;
                  
                  public var numColumns:int;
                  
                  public var bgColor:Number = 0xFFFFFF;
                  
                  public var headline:String = "News Layout Example";
                  public var subtitle:String = "This example formats text like a newspaper page with a headline, a subtitle, and multiple columns. ";
  
                  public var loremIpsum:String = "In ActionScript 3.0, text is usually displayed within a text field, \
  but can occasionally appear as a property of an item on the display list (for example, as the label on a UI \
  component). This chapter explains how to work with the script-defined contents of a text field and with user \
  input, dynamic text from a remote file, or static text defined in Adobe Flash CS3 Professional. \r\
  As an ActionScript programmer you can establish specific content for text fields, or designate the \
  source for the text, and then set the appearance of that text using styles and formats. You can also respond \
  to user events as the user inputs text or clicks a hyperlink.\r\
  To display any text on the screen in Adobe Flash Player you use an instance of the TextField class. \
  The TextField class is the basis for other text-based components, like the TextArea component or the \
  TextInput component, that are provided in the Adobe Flex framework and in the Flash authoring environment.\r\
  Text field content can be pre-specified in the SWF file, loaded from an external source like a text file or \
  database, or entered by users interacting with your application. Within a text field, the text can appear as \
  rendered HTML content, with images embedded in the rendered HTML. Once you establish an instance of a text \
  field, you can use flash.text package classes, like the TextFormat class and the StyleSheet class, to control \
  the text’s appearance. The flash.text package contains nearly all the classes related to creating, managing, \
  and formatting text in ActionScript.\r\
  You can format text by defining the formatting with a TextFormat object and assigning that object to the text \
  field. If your text field contains HTML text, you can apply a StyleSheet object to the text field to assign \
  styles to specific pieces of the text field content. The TextFormat object or StyleSheet object contains \
  properties defining the appearance of the text, such as color, size, and weight. The TextFormat object assigns \
  the properties to all the content within a text field or to a range of text.";
                   
                  public function @ax-actionscript-book-NewsLayout-com-example-programmingas3-newslayout-StoryLayout(w:int = 400, h:int = 200, cols:int = 3, padding:int = 10):void
                  {
                          this.preferredWidth = w;
                          this.preferredHeight = h;
                          
                          this.numColumns = cols;
                          
                          this.paddingLeft = padding;
                          this.paddingRight = padding;
                          this.paddingTop = padding;
                          this.paddingBottom = padding;
                          
                          var req:URLRequest = new URLRequest("actionscript-book-NewsLayout-story.css");
                          loader = new URLLoader();
                          loader.addEventListener(Event.COMPLETE, onCSSFileLoaded);
                          loader.load(req);
                  }
                  
                  public function onCSSFileLoaded(event:Event):void
                  {
                          this.sheet = new StyleSheet(); 
                          this.sheet.parseCSS(loader.data);
                          
                          // convert headline styles to TextFormat objects
                          h1Format = getTextStyle("h1", this.sheet);
                          if (h1Format == null)
                          {
                                  h1Format = getDefaultHeadFormat();
                          }
  
                          h2Format = getTextStyle("h2", this.sheet);
                          if (h2Format == null)
                          {
                                  h2Format = getDefaultHeadFormat();
                                  h2Format.size = 16;
                          }
                          
                          pFormat = getTextStyle("p", this.sheet);
                          if (pFormat == null)
                          {
                                  pFormat = getDefaultTextFormat();
                                  pFormat.size = 12;
                          }
                          
                          displayText();
                  }
                  
                  public function drawBackground():void
                  {
                      var h:Number = this.storyTxt.y + this.storyTxt.height + this.paddingTop + this.paddingBottom;
                      var g:Graphics = this.graphics;
                      g.beginFill(this.bgColor);
                      g.drawRect(0, 0, this.width + this.paddingRight + this.paddingLeft, h);
                      g.endFill();
                  }
                  
                  
Reads a set of style properties for a named style and then creates a TextFormat object that uses the same properties.

  
          public function getTextStyle(styleName:String, ss:StyleSheet):TextFormat
          {
                  var format:TextFormat = null;
                  
                  var style:Object = ss.getStyle(styleName);
                  if (style != null)
                  {
                          var colorStr:String = style.color;
                          if (colorStr != null && colorStr.indexOf("#") == 0)
                          {
                                  style.color = colorStr.substr(1);
                          }
                          format = new TextFormat(style.fontFamily, 
                                                                    style.fontSize, 
                                                                    style.color, 
                                                                    (style.fontWeight == "bold"), 
                                                                    (style.fontStyle == "italic"), 
                                                                    (style.textDecoration == "underline"), 
                                                                    style.url, 
                                                                    style.target, 
                                                                    style.textAlign, 
                                                                    style.marginLeft, 
                                                                    style.marginRight,
                                                                    style.indent,
                                                                    style.leading);
                          
                          if (style.hasOwnProperty("letterSpacing"))                
                          {                                  
                                  format.letterSpacing = style.letterSpacing;
                          }
                  }
                  return format;
          }
  
          public function getDefaultHeadFormat():TextFormat
          {
                  var tf:TextFormat = new TextFormat("Arial", 20, 0x000000, true);
                  return tf;
          }
          
          public function getDefaultTextFormat():TextFormat
          {
                  var tf:TextFormat = new TextFormat("Georgia", 12, 0x000000, true);
                  return tf;
          }
                          
          public function displayText():void
          {        
                  headlineTxt = new actionscript_book_NewsLayout_com_example_programmingas3_newslayout_HeadlineTextField(h1Format);                        
                  headlineTxt.wordWrap = true;
                  headlineTxt.x = this.paddingLeft;
                  headlineTxt.y = this.paddingTop;
                  headlineTxt.width = this.preferredWidth;
                  this.addChild(headlineTxt);
                  
                  headlineTxt.fitText(this.headline, 1, true);
                  
                  subtitleTxt = new actionscript_book_NewsLayout_com_example_programmingas3_newslayout_HeadlineTextField(h2Format); 
                  subtitleTxt.wordWrap = true;
                  subtitleTxt.x = this.paddingLeft;
                  subtitleTxt.y = headlineTxt.y + headlineTxt.height;
                  subtitleTxt.width = this.preferredWidth;
                  this.addChild(subtitleTxt);                        
              
              subtitleTxt.fitText(this.subtitle, 2, false);
                                      
                  storyTxt = new actionscript_book_NewsLayout_com_example_programmingas3_newslayout_MultiColumnText(this.numColumns, 
                                                  20, 
                                                  this.preferredWidth, 
                                                  this.preferredHeight, 
                                                  this.pFormat);
                  storyTxt.x = this.paddingLeft;
                  storyTxt.y = subtitleTxt.y + subtitleTxt.height + 10;
                  this.addChild(storyTxt);
                  
                  storyTxt.text = loremIpsum;
                  
              drawBackground();
          }
          }
  }


(C) Æliens 27/08/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.