src/it/ht/rcs/console/operations/view/agents/build/BuildForm.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:TitleWindow 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:build="it.ht.rcs.console.operations.view.agents.build.*"
width="600" height="480" close="close(event)" creationComplete="init(event)" title="{R.get('BUILD_FROM_FACTORY')}">
<fx:Script>
<![CDATA[
import it.ht.rcs.console.agent.model.Agent;
import it.ht.rcs.console.events.SessionEvent;
import it.ht.rcs.console.operations.view.agents.build.BuildFormIcons;
import it.ht.rcs.console.operations.view.configuration.ConfigurationView;
import locale.R;
import mx.collections.ICollectionView;
import mx.collections.XMLListCollection;
import mx.core.FlexGlobals;
import mx.events.CloseEvent;
import mx.events.FlexEvent;
import mx.events.ListEvent;
import mx.managers.PopUpManager;
import spark.events.TextOperationEvent;
[Bindable]
public var factory:Agent;
[Bindable]
public var configView:ConfigurationView;
[Bindable]
private var treeData_desktop:XMLList =
<>
<node folder='true' label="Silent Installer" state="none" >
<node label="Linux" state='dsk_silent' desc='BUILD_SILENT' icon="linuxIcon"/>
<node label="OSX" state='dsk_silent' desc='BUILD_SILENT' icon="osxIcon"/>
<node label="Windows" state='dsk_silent' desc='BUILD_SILENT' icon="windowsIcon"/>
</node>
<node folder='true' label="Melted Application" state="none" >
<node label="Linux" state='dsk_melted' desc='BUILD_MELTED' icon="linuxIcon"/>
<node label="OSX" state='dsk_melted' desc='BUILD_MELTED' icon="osxIcon"/>
<node label="Windows" state='dsk_melted' desc='BUILD_MELTED' icon="windowsIcon"/>
</node>
<node folder='true' label="Offline Installation" state="none">
<node label="Multi-Platform" state='dsk_offline' desc='BUILD_OFFLINE' icon="desktopIcon"/>
</node>
<node folder='true' label="Persistent Installation" state="none" >
<node label="Windows" state='dsk_UEFI' desc='BUILD_UEFI' icon="windowsIcon"/>
</node>
<node folder='true' label="U3 Installation" state="none" >
<node label="Windows" state='dsk_U3' desc='BUILD_U3' icon="windowsIcon"/>
</node>
<node folder='true' label="Exploit" state="none" >
<node label="OSX" state='exploit' desc='BUILD_EXPLOIT' icon="osxIcon"/>
<node label="Windows" state='exploit' desc='BUILD_EXPLOIT' icon="windowsIcon"/>
</node>
<node folder='true' label="Network Injection" state="none" >
<node label="Linux" state='dsk_nia' desc='BUILD_NIA' icon="linuxIcon"/>
<node label="OSX" state='dsk_nia' desc='BUILD_NIA' icon="osxIcon"/>
<node label="Windows" state='dsk_nia' desc='BUILD_NIA' icon="windowsIcon"/>
</node>
</>;
[Bindable]
private var treeData_mobile:XMLList =
<>
<node folder='true' label="Local Installation" state="none">
<node label="Blackberry" state='mob_local' desc='BUILD_LOCAL_BLACKBERRY' icon="blackberryIcon"/>
<node label="iOS" state='mob_local' desc='BUILD_LOCAL_IOS' icon="iosIcon"/>
</node>
<node folder='true' label="Installation Package" state="none">
<node label="Android" state='mob_silent' desc='BUILD_SILENT' icon="androidIcon"/>
<node label="Blackberry" state='mob_silent' desc='BUILD_SILENT' icon="blackberryIcon"/>
<node label="iOS" state='mob_silent' desc='BUILD_SILENT' icon="iosIcon"/>
<node label="Symbian" state='mob_silent' desc='BUILD_SILENT' icon="symbianIcon"/>
<node label="WinPhone" state='mob_silent' desc='BUILD_SILENT' icon="winPhoneIcon"/>
</node>
<node folder='true' label="Persistent Installation" state="none" >
<node label="Android" state='mob_persist' desc='BUILD_PERSIST' icon="androidIcon"/>
</node>
<node folder='true' label="Melted Application" state="none">
<node label="Android" state='mob_melted' desc='BUILD_MELTED' icon="androidIcon"/>
<node label="Symbian" state='mob_melted' desc='BUILD_MELTED' icon="symbianIcon"/>
</node>
<node folder='true' label="Wap Push Message" state="none">
<node label="MultiPlatform" state='mob_wap' desc='BUILD_WAP' icon="mobileIcon" />
<node label="Android" state='mob_wap' desc='BUILD_WAP' icon="androidIcon"/>
<node label="Blackberry" state='mob_wap' desc='BUILD_WAP' icon="blackberryIcon"/>
<node label="Symbian" state='mob_wap' desc='BUILD_WAP' icon="symbianIcon"/>
</node>
<node folder='true' label="QR Code / Web Link" state="none">
<node label="MultiPlatform" state='mob_qr' desc='BUILD_QR' icon="mobileIcon"/>
<node label="Android" state='mob_qr' desc='BUILD_QR' icon="androidIcon"/>
<node label="Blackberry" state='mob_qr' desc='BUILD_QR' icon="blackberryIcon"/>
<node label="Symbian" state='mob_qr' desc='BUILD_QR' icon="symbianIcon"/>
</node>
<node folder='true' label="Exploit" state="none">
<node label="iOS" state='exploit' desc='BUILD_EXPLOIT' icon="iosIcon"/>
</node>
</>;
[Bindable]
[Embed('/img/buildform/os_windows.png')]
public var windowsIcon:Class;
[Bindable]
[Embed('/img/buildform/os_apple.png')]
public var osxIcon:Class;
[Bindable]
[Embed('/img/buildform/os_linux.png')]
public var linuxIcon:Class;
[Bindable]
[Embed('/img/buildform/os_blackberry.png')]
public var blackberryIcon:Class;
[Bindable]
[Embed('/img/buildform/os_android.png')]
public var androidIcon:Class;
[Bindable]
[Embed('/img/buildform/os_s60.png')]
public var symbianIcon:Class;
[Bindable]
[Embed('/img/buildform/os_apple.png')]
public var iosIcon:Class;
[Bindable]
[Embed('/img/buildform/os_winphone.png')]
public var winPhoneIcon:Class;
[Bindable]
[Embed('/img/buildform/agent_desktop_16.png')]
public var desktopIcon:Class;
[Bindable]
[Embed('/img/buildform/agent_mobile_16.png')]
public var mobileIcon:Class;
[Bindable]
[Embed('/img/buildform/openFolder.gif')]
public var openFolderIcon:Class;
[Bindable]
[Embed('/img/buildform/closedFolder.gif')]
public var closedFolderIcon:Class;
protected function close(event:*):void
{
PopUpManager.removePopUp(this);
}
private function filterFunc(node:Object):ICollectionView
{
var str:String = searchTree.text.replace(/\s/g,"\\s");
var re:RegExp = new RegExp(str, "i");
//trace (node.@label + " " + node.descendants().length());
//return new XMLListCollection( node.*.(@label.match(re) || @desc.match(re) || descendants().(@label.match(re) || @desc.match(re)).length() > 0) );
return new XMLListCollection( node.*.(@label.match(re) || @desc.match(re)) );
}
protected function searchTree_changeHandler(event:TextOperationEvent):void
{
if (searchTree.text) {
openAllTreeNodes(vectorTree);
} else {
closeAllTreeNodes(vectorTree);
}
vectorTree.invalidateList();
}
private function openAllTreeNodes(tree:Tree):void {
tree.openItems = tree.dataProvider;
}
private function closeAllTreeNodes(tree:Tree):void {
tree.openItems = [];
}
protected function vectorTree_changeHandler(event:ListEvent):void
{
leftPanel.platform = null;
if (vectorTree.selectedItem.@state != 'none')
leftPanel.platform = vectorTree.selectedItem.@label.toLowerCase();
leftPanel.desc = vectorTree.selectedItem.@desc;
leftPanel.currentState = vectorTree.selectedItem.@state;
}
protected function init(event:FlexEvent):void
{
FlexGlobals.topLevelApplication.addEventListener(SessionEvent.LOGOUT, close);
// replace the localized descriptions
for each (var element:* in treeData_desktop) {
for each(var node:* in element..node) {
node.@desc = R.get(node.@desc);
}
}
for each (var el:* in treeData_mobile) {
for each(var no:* in el..node) {
no.@desc = R.get(no.@desc);
}
}
}
protected function openItem(event:ListEvent):void
{
var selectedRow:Object = event.currentTarget.selectedItem;
vectorTree.expandItem(selectedRow, !event.target.isItemOpen(selectedRow))
}
]]>
</fx:Script>
<s:TextInput id="searchTree" left="10" top="10" width="200"
change="searchTree_changeHandler(event)"
skinClass="it.ht.rcs.console.skins.TextInputSearchSkin"/>
<mx:Tree id="vectorTree" left="10" top="35" bottom="10" width="200"
change="vectorTree_changeHandler(event)"
dataDescriptor="{new FilteredTreeDataDescriptor(filterFunc)}"
dataProvider="{factory.type == 'desktop' ? treeData_desktop : treeData_mobile}"
labelField="@label" iconField="@icon" folderClosedIcon="{closedFolderIcon}" folderOpenIcon="{openFolderIcon}" doubleClickEnabled="true" itemDoubleClick="openItem(event)"/>
<build:LeftPanel id="leftPanel" left="220" right="10" top="35" bottom="10" factory="{factory}" configView="{configView}"/>
</s:TitleWindow>