src/it/ht/rcs/console/accounting/view/groups/GroupOperationTable.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="100%" height="100%" creationComplete="init()" gap="-1" addedToStage="onAddedToStage(event)" removedFromStage="onRemovedFromStage(event)">
<fx:Script>
<![CDATA[
import it.ht.rcs.console.accounting.controller.GroupManager;
import it.ht.rcs.console.accounting.controller.OperationManager;
import it.ht.rcs.console.accounting.model.Group;
import it.ht.rcs.console.operation.model.Operation;
import locale.R;
import mx.collections.ListCollectionView;
[Bindable]
private var _group:Group;
[Bindable] private var selectedDP:ListCollectionView;
[Bindable] private var availableDP:ListCollectionView;
private function init():void
{
availableDP = OperationManager.instance.getView(null, listFilterFunction);
}
private function listFilterFunction(item:Object):Boolean
{
try {
return selectedDP.getItemIndex(item) == -1;
} catch (e:Error) {}
return true;
}
public function set group(g:Group):void
{
_group = g;
selectedDP = getSelectedDP();
selectedOperations.sortByColumns(Vector.<int>([0]), true);
if (availableDP) availableDP.refresh();
}
private function getSelectedDP():ListCollectionView
{
var dp:ListCollectionView = new ListCollectionView(new ArrayList());
if (_group) for each (var _id:String in _group.item_ids) {
var o:Operation = OperationManager.instance.getItem(_id);
if (o) dp.addItem(o);
}
return dp;
}
private function addOperation():void
{
var o:Operation = availableOperations.selectedItem as Operation;
if (o == null || _group == null) return;
GroupManager.instance.addOperation(_group, o, function():void {
selectedDP.addItem(o);
availableDP.refresh();
selectedOperations.selectedItem = o;
});
}
private function removeOperation():void
{
var o:Operation = selectedOperations.selectedItem as Operation;
if (o == null || _group == null) return;
GroupManager.instance.removeOperation(_group, o, function():void {
selectedDP.removeItemAt(selectedDP.getItemIndex(o));
availableDP.refresh();
selectedOperations.selectedItem = null;
});
}
protected function onAddedToStage(event:Event):void
{
stage.addEventListener(MouseEvent.CLICK, onStageClick)
}
protected function onRemovedFromStage(event:Event):void
{
popup.displayPopUp=false;
stage.removeEventListener(MouseEvent.CLICK, onStageClick)
}
private function onStageClick(e:MouseEvent):void
{
if(e.target!=addBtn)
popup.displayPopUp=false;
}
]]>
</fx:Script>
<s:HGroup width="100%" gap="-1" horizontalAlign="right">
<s:Button width="30" label="-" click="removeOperation()" cornerRadius="0" enabled="{selectedOperations.selectedItem!=null}"/>
<s:Button id="addBtn" width="30" label="+" cornerRadius="0" click="{popup.displayPopUp=true}"/>
<s:PopUpAnchor id="popup" popUpPosition="above">
<s:List id="availableOperations" height="200" minWidth="150" click="addOperation()"
dataProvider="{availableDP}" filters="{[dropShadow]}" labelField="name"
textAlign="left"/>
</s:PopUpAnchor>
</s:HGroup>
<s:DataGrid id="selectedOperations" width="100%" height="100%" dataProvider="{selectedDP}">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="name" headerText="{R.get('OPERATION_IN_GROUP')}"/>
</s:ArrayList>
</s:columns>
</s:DataGrid>
<fx:Declarations>
<s:DropShadowFilter id="dropShadow" alpha="0.25" angle="90" blurX="20" blurY="20" color="#333333"
distance="8"/>
</fx:Declarations>
</s:VGroup>