package ch.unil.cbg.ExpressionView.view.components {
import ch.unil.cbg.ExpressionView.events.PopUpEvent;
import flash.events.MouseEvent;
import mx.containers.HBox;
import mx.containers.Panel;
import mx.controls.Button;
import mx.controls.Text;
import mx.events.StateChangeEvent;
[Event(name=PopUpEvent.CANCEL, type="ch.unil.cbg.expressionview.events.PopUpEvent")];
[Event(name=PopUpEvent.OK, type="ch.unil.cbg.expressionview.events.PopUpEvent")];
public class SelectModules extends Panel {
private var modulesList:Array;
private var textField:Text;
private var modulesBar:HBox;
private var buttonBar:HBox;
private var modulesButtons:Array;
private var selectNoneButton:Button;
private var selectAllButton:Button;
private var okButton:Button;
private var cancelButton:Button;
public function SelectModules(modules:Array) {
super();
this.styleName = "selectModulesPanel";
modulesList = modules;
}
override protected function createChildren():void {
super.createChildren();
if ( !textField ) {
textField = new Text();
textField.text = "Which modules do you want to open?";
addChild(textField);
}
if ( !modulesBar ) {
modulesBar = new HBox();
addChild(modulesBar);
modulesButtons = [];
for ( var i:int = 0; i < modulesList.length; ++i ) {
var button:Button = new Button();
button.label = "m" + modulesList[i];
button.stickyHighlighting = true;
button.toggle = true;
button.addEventListener(MouseEvent.CLICK, moduleButtonClickHandler);
modulesButtons.push(button);
modulesBar.addChild(button);
}
}
if ( !buttonBar ) {
buttonBar = new HBox();
addChild(buttonBar);
if ( !selectNoneButton ) {
selectNoneButton = new Button();
selectNoneButton.label = "Select None";
selectNoneButton.addEventListener(MouseEvent.CLICK, selectNoneButtonClickHandler);
buttonBar.addChild(selectNoneButton);
}
if ( !selectAllButton ) {
selectAllButton = new Button();
selectAllButton.label = "Select all";
selectAllButton.addEventListener(MouseEvent.CLICK, selectAllButtonClickHandler);
buttonBar.addChild(selectAllButton);
}
if ( !okButton ) {
okButton = new Button();
okButton.label = "Ok";
okButton.addEventListener(MouseEvent.CLICK, okButtonClickHandler);
buttonBar.addChild(okButton);
}
if ( !cancelButton ) {
cancelButton = new Button();
cancelButton.label = "Cancel";
cancelButton.addEventListener(MouseEvent.CLICK, cancelButtonClickHandler);
buttonBar.addChild(cancelButton);
}
}
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);
textField.x = 10;
textField.y = 10;
modulesBar.x = 10;
modulesBar.y = textField.y + textField.measuredHeight + 10;
buttonBar.x = 10;
buttonBar.y = modulesBar.y + modulesBar.measuredHeight + 30;
width = Math.max(textField.measuredWidth, modulesBar.measuredWidth, buttonBar.measuredWidth) + 20;
height = buttonBar.y + buttonBar.measuredHeight + 50;
}
private function moduleButtonClickHandler(event:MouseEvent): void {
if ( event.target.styleName == null ) {
event.target.styleName = "selectedButton";
} else {
event.target.styleName = null;
}
}
private function selectAllButtonClickHandler(event:MouseEvent): void {
for ( var i:int = 0; i < modulesButtons.length; ++i ) {
modulesButtons[i].selected = true;
modulesButtons[i].styleName = "selectedButton";
}
}
private function selectNoneButtonClickHandler(event:MouseEvent): void {
for ( var i:int = 0; i < modulesButtons.length; ++i ) {
modulesButtons[i].selected = false;
modulesButtons[i].styleName = null;
}
}
private function okButtonClickHandler(event:MouseEvent): void {
var selection:Array = [];
for ( var i:int = 0; i < modulesButtons.length; ++i ) {
if ( modulesButtons[i].selected ) {
selection.push(modulesList[i]);
}
}
dispatchEvent(new PopUpEvent(PopUpEvent.OK, [selection]));
}
private function cancelButtonClickHandler(event:MouseEvent): void {
dispatchEvent(new PopUpEvent(PopUpEvent.CANCEL));
}
}
}