7.3 Example: Alarm Ratio Bar Component

Source for Alarm Ratio Bar component:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas
  xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initComponent()" x="0" y="0" width="100%" height="100%" >
  <mx:Script>
    <![CDATA[
      private var _stageWidth : Number;
      private var _showShadows : Boolean;
      private var _okayCount : Number;
      private var _infoCount : Number;
      private var _minorCount : Number;
      private var _majorCount : Number;
      private var _criticalCount : Number;
      private var _totalCount : Number;

      [Bindable]

      private var _okaySkinImage : String = "images/ratioBarOkay.jpg";

      [Bindable]

      private var _infoSkinImage : String = "images/ratioBarInformational.jpg";

      [Bindable]

      private var _minorSkinImage : String = "images/ratioBarMinor.jpg";

      [Bindable]

      private var _majorSkinImage : String = "images/ratioBarMajor.jpg";
      [Bindable]
      private var _criticalSkinImage : String = "images/ratioBarCritical.jpg";
      private function initComponent() : void
      {
        this._okayCount = this.OkayCount;
        this._infoCount = this.InfoCount;
        this._minorCount = this.MinorCount;
        this._majorCount = this.MajorCount;
        this._criticalCount = this.CriticalCount;
        this._totalCount = this._okayCount;
        this._totalCount += this._infoCount;
        this._totalCount += this._minorCount;
        this._totalCount += this._majorCount;
        this._totalCount += this._criticalCount;       
        this.drawComponent();       
      }
      public function setCountValues(values : Array) : void
      {
        this._okayCount = values[0];
        this._infoCount = values[1];
        this._minorCount = values[2];
        this._majorCount = values[3];
        this._criticalCount = values[4];  
        this._totalCount = this._okayCount;
        this._totalCount += this._infoCount;
        this._totalCount += this._minorCount;
        this._totalCount += this._majorCount;
        this._totalCount += this._criticalCount;       
        this.drawComponent();
      }
      private function getSeverityBarWidth(count : Number) : Number
      {
        var pixels : Number;
        pixels = this._graphCanvas.width / this._totalCount;
        return count * pixels;
      }
      private function drawComponent() : void
      {
        var okayWidth : Number;
        var infoWidth : Number;
        var minorWidth : Number;
        var majorWidth : Number;
        var criticalWidth : Number;
        this._stageWidth = this._graphCanvas.width;
        okayWidth = getSeverityBarWidth(this._okayCount);
        infoWidth = getSeverityBarWidth(this._infoCount);
        minorWidth = getSeverityBarWidth(this._minorCount);
        majorWidth = getSeverityBarWidth(this._majorCount);
        criticalWidth = getSeverityBarWidth(this._criticalCount);
        if (okayWidth != 0)
        {
          this._okaySkin.x = 0;
          this._okaySkin.y = 0;
          this._okaySkin.width = okayWidth;
          this._okaySkin.visible = true;
        }
        else
        {
          this._okaySkin.visible = false;
        }
        if (infoWidth != 0)
        {
          this._infoSkin.x = okayWidth;
          this._infoSkin.width = infoWidth; 
          this._infoSkin.visible = true; 
        }
        else
        {
          this._infoSkin.visible = false; 
        }
        if (minorWidth != 0)
        {
          this._minorSkin.x = okayWidth + infoWidth;
          this._minorSkin.width = minorWidth; 
          this._minorSkin.visible = true;
        }
        else
        {
          this._minorSkin.visible = false;
        }
        if (majorWidth != 0)
        {
          this._majorSkin.x = okayWidth + infoWidth + minorWidth;
          this._majorSkin.width = majorWidth;
          this._majorSkin.visible = true;
        }
        else
        {
          this._majorSkin.visible = false;
        }
        if (criticalWidth != 0)
        {
          this._criticalSkin.x = okayWidth + infoWidth + minorWidth + majorWidth;
          this._criticalSkin.width = criticalWidth;
          this._criticalSkin.visible = true;
        }
        else
        {
          this._criticalSkin.visible = false;
        }
        if (this._showShadows)
        {
          showShadows();
        }
        else
        {
          hideShadows();
        }
      }   
      private function hideShadows() : void
      {
        this._okaySkin.filters = [];
        this._infoSkin.filters = [];
        this._minorSkin.filters = [];
        this._majorSkin.filters = [];
        this._criticalSkin.filters = [];
        this._graphCanvas.filters = [];
      }
      private function showShadows() : void
      {
        this._okaySkinShadow.strength = 1;
        this._infoSkinShadow.strength = 1;
        this._minorSkinShadow.strength = 1;
        this._majorSkinShadow.strength = 1;
        this._criticalSkinShadow.strength = 1;
        this._graphCanvasShadow.strength = 1;
      }
      public function set ShowShadows(state : Boolean) : void
      {
        _showShadows = state;
      }
      public function get ShowShadows() : Boolean
      {
        return _showShadows;
      }
    ]]>
  </mx:Script>
  <mx:Image id="_okaySkin" source="{_okaySkinImage}" scaleContent="true"     maintainAspectRatio="false" height="100%">
    <mx:filters>
      <mx:DropShadowFilter id="_okaySkinShadow" distance="4" angle="90"
blurX="8" blurY="8" quality="4" />
    </mx:filters>  
  </mx:Image> 
  <mx:Image id="_infoSkin" source="{_infoSkinImage}" scaleContent="true" 
maintainAspectRatio="false" height="100%" >
    <mx:filters>
      <mx:DropShadowFilter id="_infoSkinShadow" distance="4" angle="90"      blurX="8" blurY="8" quality="4" />
    </mx:filters>  
  </mx:Image> 
  <mx:Image id="_minorSkin" source="{_minorSkinImage}" scaleContent="true"     maintainAspectRatio="false" height="100%" >
    <mx:filters>
      <mx:DropShadowFilter id="_minorSkinShadow" distance="4" angle="90"        blurX="8" blurY="8" quality="4" />
    </mx:filters>  
  </mx:Image> 
  <mx:Image id="_majorSkin" source="{_majorSkinImage}" scaleContent="true"     maintainAspectRatio="false" height="100%" >
    <mx:filters>
      <mx:DropShadowFilter id="_majorSkinShadow" distance="4" angle="90"     blurX="8" blurY="8" quality="4" />
    </mx:filters>  
  </mx:Image> 
  <mx:Image id="_criticalSkin" source="{_criticalSkinImage}" scaleContent="true" maintainAspectRatio="false" height="100%" >
    <mx:filters>
      <mx:DropShadowFilter id="_criticalSkinShadow" distance="4"     angle="90" blurX="8" blurY="8" quality="4" />
    </mx:filters>  
  </mx:Image> 
  <mx:Label id="_graphText" text="{CaptionText}" fontFamily="{CaptionFontFamily}" fontSize="{CaptionFontSize}" fontWeight="bold" textAlign="{CaptionAlign}" color="{CaptionColor}"    alpha="0.9" left="24" top="24" right="{this._graphCanvas.width - 24}" bottom="{this._graphCanvas.height - 24}" >
    <mx:filters>
      <mx:DropShadowFilter distance="4" angle="90" blurX="8" blurY="8" quality="5" />
    </mx:filters>  
   </mx:Label>
  <mx:Canvas id="_graphCanvas" x="0" y="0" width="100%" height="100%"
borderThickness="8" borderColor="white" >
    <mx:filters>
      <mx:DropShadowFilter id="_graphCanvasShadow" distance="0"       angle="90" blurX="8" blurY="8" quality="5" alpha="0.25" />
    </mx:filters>  
  </mx:Canvas>
  <mx:Number id="OkayCount">10</mx:Number>
  <mx:Number id="InfoCount">20</mx:Number>
  <mx:Number id="MinorCount">30</mx:Number>
  <mx:Number id="MajorCount">40</mx:Number>
  <mx:Number id="CriticalCount">50</mx:Number>
  <mx:Number id="FrameColor">#ffffff</mx:Number>
  <mx:Number id="FrameThickness">0x08</mx:Number>
  <mx:String id="CaptionText">Element Name</mx:String>
  <mx:Number id="CaptionColor">#ffffff</mx:Number>
  <mx:String id="CaptionFontFamily">Tahoma</mx:String>
  <mx:Number id="CaptionFontSize">40</mx:Number>
  <mx:String id="CaptionAlign">center</mx:String>
</mx:Canvas>