Hey all ,
            I am trying to write a custom component in AS3 from scratch but
am having some trouble with the skinning and Style tags.

So its basic rating component ( like 5 stars )

I set up the stylels

[Style (name="iconUpSkin" , type="Class" , inherit="no" )]

   [Style (name="iconOverSkin" , type="Class" , inherit="no" )]

   [Style (name="iconDownSkin" , type="Class" , inherit="no" )]


public class Rating extends UIComponent
   {
       protected var iconUpSkin:IFlexDisplayObject;
       protected var iconOverSkin:IFlexDisplayObject;
       protected var iconDownSkin:IFlexDisplayObject;

//variables to hold the skins


override protected  function createChildren():void{
           super.createChildren();
           iconUpSkin  = createSkin( "iconUpSkin"    , RatingIconUpSkin );
           //iconOverSkin = createSkin( "iconOverSkin" , RatingIconOverSkin
);
           //iconDownSkin  = createSkin( "iconDownSkin", RatingIconDownSkin
);

       }


protected function createSkin( skinName:String, defaultSkin:Class ) :
IFlexDisplayObject{

var newSkin:IFlexDisplayObject =
IFlexDisplayObject(getChildByName(skinName)); //check to see if the child
already exists

if (!newSkin){   // IF DOESNT exist

               var newSkinClass:Class = Class(getStyle(skinName));   // see
if the user specified a skin

               if( !newSkinClass ){
                   trace("noskin");
                   newSkinClass = defaultSkin;                // if not
assign the default one
               }

               if (newSkinClass){

                  newSkin = IFlexDisplayObject(new newSkinClass());
//HERE IS WHERE I GET THE ERROR

Error: Error #2136: The SWF file
file:///C:/Fidi/projects/RatingComponent/bin/RatingComponent-debug.swfcontains
invalid data.

at com.ftangri.components::Rating/com.ftangri.components:Rating::createSkin
()[C:\Fidi\projects\RatingComponent\src\com\ftangri\components\Rating.as:76]

                   if( !newSkin ){
                       //newSkin = new defaultSkin();
                   }

                   newSkin.name = skinName;

                   var styleableSkin:ISimpleStyleClient = newSkin as
ISimpleStyleClient;


                   if (styleableSkin){

                       styleableSkin.styleName = this;
                   }

                   addChild(DisplayObject(newSkin));

               }

           }

           return newSkin;

       }






Here is the code for the RatingIconUpSkin

package com.ftangri.skins
{

   import mx.controls.Image;
   import mx.core.Container;

   [Embed (source="../../../assets/RankingUnSelectedUpSkin.png")]

   public class RatingIconUpSkin extends Container
   {
       private var upSkin:Image;

       public function RatingIconUpSkin()
       {
           super();
           upSkin=new Image();
       }

       override protected  function createChildren():void{
           super.createChildren();
           upSkin.source="../../../assets/RankingUnSelectedUpSkin.png";
           addChild(upSkin);


       }

       override protected function updateDisplayList( w:Number, h:Number )
: void{
           upSkin.move(0,0);
           upSkin.setActualSize(measuredMinWidth,measuredMinHeight);
       }

       override protected function measure():void {

           super.measure();
           measuredWidth = measuredMinWidth = 20;
           measuredHeight = measuredMinHeight = 20;
       }

   }
}

Reply via email to