hackedteam/rcs-console

View on GitHub
src/it/ht/rcs/console/entities/view/renderers/CustomGroupRenderer.mxml

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
         xmlns:s="library://ns.adobe.com/flex/spark"
         xmlns:mx="library://ns.adobe.com/flex/mx"
         xmlns:renderers="fr.kapit.lab.demo.ui.renderers.*"
         xmlns:util="fr.kapit.lab.demo.util.*"
         xmlns:ns="http://www.kapit.fr/flex4/ui"
         implements="fr.kapit.visualizer.renderers.IGroupRenderer, fr.kapit.visualizer.renderers.IRenderer, fr.kapit.visualizer.renderers.ISelectable, fr.kapit.visualizer.renderers.IAnchorable"
         width="500" height="500" 
         currentState="expandedAndEdited"
         creationComplete="this_creationCompleteHandler(event)" xmlns:data="fr.kapit.visualizer.utils.data.*"  useHandCursor="true"
                 buttonMode="true">
  <fx:Script>
    <![CDATA[
      import fr.kapit.visualizer.base.IItem;
      import fr.kapit.visualizer.utils.data.AnchorsDescriptor;
      
      import mx.events.FlexEvent;
      
      import spark.events.TextOperationEvent;
      import spark.filters.GlowFilter;
      
      /* *******
      * Internal Getters/Setters
      *************/
      
      protected var _isEditionRequested:Boolean=false;
      protected var _rendererStateChanged:Boolean;

      private var filter:spark.filters.GlowFilter=new GlowFilter(0x0099FF, 1,10,10,1,1) //selection filter
      public function get isEditionRequested():Boolean
      {
        return _isEditionRequested;
      }
      
      public function set isEditionRequested(value:Boolean):void
      {
        _isEditionRequested = value;
        _rendererStateChanged = true;
        invalidateProperties();
      }
      
      [Bindable]
      protected var _label:String;
      
      public function get label():String
      {
        return _label;
      }
      
      public function set label(value:String):void
      {
        _label = value;
      }
      
      /* *******
      * ISelectable impl
      *************/
      
      private var _isSelected:Boolean;
      [Bindable]
      public function get isSelected():Boolean
      {
        return _isSelected;
      }
      
      public function set isSelected(value:Boolean):void
      {
        _isSelected = value;
        _rendererStateChanged = true;
        invalidateProperties();
        
  
      
      }
      
      protected var _isHighlighted:Boolean;
      public function get isHighlighted():Boolean
      {
        return _isHighlighted;
      } 
      public function set isHighlighted(value:Boolean):void
      {
        _isHighlighted=value;
        invalidateDisplayList();
      }
      
      /* *******
      * IGroupRenderer impl
      *************/
      
      protected var _groupMinHeight:Number=50;
      public function get groupMinHeight():Number
      {
        return groupbl.height;
      }
      protected var _groupMinWidth:Number=40;
      public function get groupMinWidth():Number
      {
        return groupbl.width+30;
      }
      
      protected var _groupPaddingBottom:Number=20;
      public function get groupPaddingBottom():Number
      {
        return _groupPaddingBottom;
      }
      
      protected var _groupPaddingLeft:Number=5;
      public function get groupPaddingLeft():Number
      {
        return _groupPaddingLeft;
      }
      
      protected var _groupPaddingRight:Number=5;
      public function get groupPaddingRight():Number
      {
        return _groupPaddingRight;
      }
      
      protected var _groupPaddingTop:Number=35;
      public function get groupPaddingTop():Number
      {
        return _groupPaddingTop;
      }
      
      
      protected var _isGroupExpanded:Boolean=true;
      public function set isGroupExpanded(value:Boolean):void
      {
        _isGroupExpanded = value;
        _rendererStateChanged = true;
        invalidateProperties();
      }
      
      /* *******
      * IRenderer impl
      *************/
      
      protected var _data:Object;
      public function get data():Object
      {
        return _data;
      }
      public function set data(value:Object):void
      {
        _data = value;
        _label=_data.name as String;
      }
      
      protected var _isFixed:Boolean;
      
      public function get isFixed():Boolean
      {
        return _isFixed;
      }
      public function set isFixed(value:Boolean):void
      {
        _isFixed = value;
      }
      
      protected var _item:IItem
      public function get item():IItem
      {
        return _item;
      }
      public function set item(value:IItem):void
      {
        _item = value;
      }
      
      
      /* *******
      * Overriden Methods
      *************/
      
      protected override function commitProperties():void
      {
        super.commitProperties();
        if(_rendererStateChanged)
        {
          commitRendererStates();
          _rendererStateChanged = false;
        }
      }
      
      /* *******
      * Helper Methods
      *************/
      
      protected function commitRendererStates():void
      {
        if(!_isSelected && _isEditionRequested)
          _isEditionRequested = false;
        currentState = (_isGroupExpanded ? "expanded":"collapsed") + 
          (_isEditionRequested ? "AndEditing" : "AndEdited");
        isFixed = _isEditionRequested;
        
      }
      /* *********
      * IAnchorable interface
      **************/
      
      [Bindable]
      private var anchorPoints:Vector.<Number> = Vector.<Number>([0,0.5,0.5,0,1,0.5,0.5,1]);
      public function get anchors():AnchorsDescriptor
      {
        return anchorsDescriptor;     // Can be extracted from data also if 
        // a ports property is set
      }
      public function set anchors(value:AnchorsDescriptor):void
      {
        anchorsDescriptor = value;
      }
      
      public function get useStrictAnchoring():Boolean
      {
        return false;
      }
      public function set useStrictAnchoring(value:Boolean):void
      {
        //No need for settings
      }
      
      /* *******
      * Event Handlers
      *************/
      
      protected function this_creationCompleteHandler(event:FlexEvent):void
      {
        //addEventListener(MouseEvent.DOUBLE_CLICK, this_doubleClickHandler);
      }
      protected function this_doubleClickHandler(event:MouseEvent):void
      {
        
        isEditionRequested=true;
      }
    
      
      override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
      {
        super.updateDisplayList(unscaledWidth,unscaledHeight);
        if (_isHighlighted)
          filters=[new spark.filters.GlowFilter(0x0C71B3,0.7,4,4)];
        else
          filters=null;
        
        if(_isSelected)
          this.filters=[filter]
        else
          this.filters=null
      }
      
      
    ]]>
  </fx:Script>
  <fx:Declarations>
    <data:AnchorsDescriptor id="anchorsDescriptor" type="{AnchorsDescriptor.ANCHORS_TYPE_LIST}" anchorPoints="{anchorPoints}"/>
  </fx:Declarations>
  <s:states>
    <s:State name="expandedAndEdited" stateGroups="edited,expanded"/>
    <s:State name="collapsedAndEdited" stateGroups="edited,collapsed"/>
    <s:State name="expandedAndEditing" stateGroups="editing,expanded"/>
    <s:State name="collapsedAndEditing" stateGroups="editing,collapsed"/>
  </s:states>
  
  
  <!--Content Background -->
  <s:Group includeIn="collapsed" width="100%" height="100%">
    <s:Rect left="1" right="1" top="1" bottom="1" width="100%" height="100%">
      <s:fill>
        <s:LinearGradient rotation="90">
          <s:GradientEntry color="0xFEFEFE"/>
          <s:GradientEntry color="0xEFEFEF"/>
        </s:LinearGradient>
      </s:fill>
    </s:Rect>
    <s:BorderContainer width="100%" height="100%" borderColor="0x646464"   backgroundAlpha="0.7"
                     />
  </s:Group>
  <s:VGroup width="100%" height="100%" gap="0">
    <s:Group includeIn="expanded" width="100%" height="100%">
      <s:Rect left="1" right="1" top="1" bottom="1">
        <s:fill>
          <s:SolidColor alpha="0.5" color="0xFCFCFC"/>
        </s:fill>
      </s:Rect> 
      <s:BorderContainer width="100%" height="100%" borderColor="0x646464" backgroundAlpha="0.7"/> 
    </s:Group>
  </s:VGroup>
  <!--Label-->
  <s:Label id="groupbl" includeIn="edited" height="30" 
           paddingLeft.collapsed="30" paddingLeft.expanded="0" paddingRight="10"
           text="{_label}" verticalAlign="middle"
           paddingTop.collapsed="5"
           paddingTop.expanded="-45" fontWeight="bold"/>
 
</s:Group>