hackedteam/rcs-console

View on GitHub
src/it/ht/rcs/console/operations/view/evidences/filters/TypeFilterPopup.mxml

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="utf-8"?>
<filters:AbstractFilterPopup 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:xt="library://ns.tink.ws/flex/mx"
                             xmlns:filters="it.ht.rcs.console.operations.view.evidences.filters.*"
                             creationComplete="init()" show="show()">
  
  <s:VGroup paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10">
    
    <s:CheckBox id="all" label="All" color="0x00CCFF" change="{applyAll(all.selected)}"/>
    <s:Spacer height="4"/>
    <filters:TypeFilterItemRenderer id="addressbook"  label="addressbook"     change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="application"  label="application"     change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="calendar"     label="calendar"        change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="call"         label="call"            change="{all.selected=false}"/>
    
    <filters:TypeFilterItemRenderer id="camera"       label="camera"          change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="chat"         label="chat"            change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="clipboard"    label="clipboard"       change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="device"       label="device"          change="{all.selected=false}"/>
    
    <filters:TypeFilterItemRenderer id="file"         label="file"            change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="keylog"       label="keylog"          change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="message"      label="message"         change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="mic"          label="mic"             change="{all.selected=false}"/>
    
    <filters:TypeFilterItemRenderer id="money"        label="money"           change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="mouse"        label="mouse"           change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="password"     label="password"        change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="photo"        label="photo"           change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="position"     label="position"        change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="print"        label="print"           change="{all.selected=false}"/>
    
    <filters:TypeFilterItemRenderer id="screenshot"   label="screenshot"      change="{all.selected=false}"/>
    <filters:TypeFilterItemRenderer id="url"          label="url"             change="{all.selected=false}"/>
    
    <s:HGroup>
    <!--  <s:Button label="Apply" width="90"/>-->
      
    <!--  <s:Button label="Select All" width="90" click="applyAll(true)"/>
      <s:Button label="Deselect All" width="90" click="applyAll(false)"/>-->
    </s:HGroup>
    
  </s:VGroup>
  
  <fx:Script>
    <![CDATA[
      import it.ht.rcs.console.events.FilterEvent;
      
      import mx.core.FlexGlobals;
      
      private var checks:Array;
      
      private function init():void
      {
        checks = [addressbook, application, calendar, call, camera, chat, clipboard, device, file,
                  keylog, message, mic, money, mouse, password, photo, position, print, screenshot, url];
      }
      
      override public function commit(fireEvent:Boolean=true, setProperty:Boolean=true):void
      {
        var values:Array = getValues();
        hasFilter = values.length > 0;
        hasFilter ? filter[property] = values : delete(filter[property]);
        visible = false;
        if (fireEvent)
          FlexGlobals.topLevelApplication.dispatchEvent(new FilterEvent(FilterEvent.FILTER_CHANGED));
      }
      
      private function getValues():Array
      {
        var toReturn:Array = [];
        
        checks.forEach(function(item:TypeFilterItemRenderer, index:int, array:Array):void {
          if (item.checkbox.selected)
            toReturn.push(item.id);
        });
        
        return toReturn;
      }
      
      override public function reset(fireEvent:Boolean=true):void
      {
        deselectAll();
        commit(fireEvent);
      }

      private function deselectAll():void
      {
        if(!checks)
          return;
        checks.forEach(function(item:TypeFilterItemRenderer, index:int, array:Array):void {
          item.checkbox.selected = false;
        });
      }
      
      private function show():void
      {
        if (!filter.hasOwnProperty(property)) return;
        checks.forEach(function(item:TypeFilterItemRenderer, index:int, array:Array):void {
          item.checkbox.selected = filter[property].indexOf(item.id) != -1;
        });
      }
      
      private function applyAll(val:Boolean):void
      {
        checks.forEach(function(item:TypeFilterItemRenderer, index:int, array:Array):void {
          item.checkbox.selected = val;
        });
      }
      
      override public function rebuild(e:Event=null):void
      {
        hasFilter = filter.hasOwnProperty(property);
        deselectAll();
        if (hasFilter && filter[property] is Array)
          filter[property].forEach(function(item:String, index:int, array:Array):void {
            this[item].checkbox.selected = true;
          }, this);
      }
    ]]>
  </fx:Script>
  
</filters:AbstractFilterPopup>