39 lines
10 KiB
ActionScript
Executable File
39 lines
10 KiB
ActionScript
Executable File
/*
|
|
Copyright (c) 2009 Yahoo! Inc. All rights reserved.
|
|
The copyrights embodied in the content of this file are licensed under the BSD (revised) open source license
|
|
*/
|
|
package com.yahoo.astra.containers.formClasses {
|
|
import com.yahoo.astra.containers.formClasses.FormLayoutStyle;
|
|
import com.yahoo.astra.containers.formClasses.IForm;
|
|
import com.yahoo.astra.containers.formClasses.RequiredIndicator;
|
|
import com.yahoo.astra.events.FormLayoutEvent;
|
|
import com.yahoo.astra.layout.LayoutContainer;
|
|
import com.yahoo.astra.layout.modes.BoxLayout;
|
|
|
|
import flash.display.DisplayObject;
|
|
import flash.text.TextField;
|
|
import flash.text.TextFormat;
|
|
|
|
/**
|
|
* FormItemContainer contains, aligns form inputs(DisplayObjects) in <code>LayoutContainer</code> and handles required indicators as part of <code>FormItem</code>.
|
|
* @see com.yahoo.astra.containers.formClasses.FormItem
|
|
* @author kayoh
|
|
*/
|
|
public class FormItemContainer extends LayoutContainer implements IForm {
|
|
//--------------------------------------
|
|
// Constructor
|
|
//--------------------------------------
|
|
|
|
/**
|
|
* Constructor.
|
|
*/
|
|
public function FormItemContainer(direction : String = FormLayoutStyle.HORIZONTAL) {
|
|
itemContainerLayout = new BoxLayout();
|
|
itemContainerLayout.direction = direction;
|
|
super(itemContainerLayout);
|
|
init();
|
|
}
|
|
|
|
|
|
private var formEventObserver : IFormEventObserver = null;
|
|
|
|
|
|
//--------------------------------------
|
|
// Properties
|
|
//--------------------------------------
|
|
/**
|
|
* @private
|
|
*/
|
|
internal var reqBox_l : RequiredIndicator = null;
|
|
/**
|
|
* @private
|
|
*/
|
|
internal var reqBox_r : RequiredIndicator = null;
|
|
/**
|
|
* @private
|
|
*/
|
|
internal var gotRequiredField : Boolean = false;
|
|
/**
|
|
* @private
|
|
*/
|
|
internal var instructionTextField : TextField = null;
|
|
/**
|
|
* @private
|
|
*/
|
|
internal var subItemContainer : LayoutContainer = null;
|
|
/**
|
|
* @private
|
|
*/
|
|
private var itemContainerLayout : BoxLayout = null;
|
|
/**
|
|
* @private
|
|
*/
|
|
private var itemLayoutMode : BoxLayout = null;
|
|
/**
|
|
* @private
|
|
*/
|
|
private var preferredInstrunctionTextformat : TextFormat;
|
|
/**
|
|
* @private
|
|
*/
|
|
private var itemOutterContainer : LayoutContainer = null;
|
|
/**
|
|
* @private
|
|
*/
|
|
private var ItemOutterLayoutMode : BoxLayout = null;
|
|
/**
|
|
* @private
|
|
*/
|
|
private var _isformHeadingLabel : Boolean = false;
|
|
|
|
/**
|
|
* Setting whether this ItemContainer is assigned for FormHeading or not.
|
|
* @private
|
|
*/
|
|
internal function get isFormHeadingLabel() : Boolean {
|
|
return _isformHeadingLabel;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function set isFormHeadingLabel(value : Boolean) : void {
|
|
if(_isformHeadingLabel == value) return;
|
|
_isformHeadingLabel = value;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
private var _itemAlign : String = FormLayoutStyle.DEFAULT_ITEM_ALIGN;
|
|
|
|
/**
|
|
* @copy com.yahoo.astra.containers.formClasses.FormItem#itemAlign
|
|
*/
|
|
public function get itemAlign() : String {
|
|
return _itemAlign;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
public function set itemAlign(value : String) : void {
|
|
if(_itemAlign == value) return;
|
|
itemLayoutMode.direction = _itemAlign = value;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
private var _itemVerticalGap : Number = FormLayoutStyle.DEFAULT_FORMITEM_VERTICAL_GAP ;
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function get itemVerticalGap() : Number {
|
|
return _itemVerticalGap;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function set itemVerticalGap(value : Number) : void {
|
|
if(itemVerticalGap == value) return;
|
|
_itemVerticalGap = itemLayoutMode.verticalGap = value;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
private var _itemHorizontalGap : Number = FormLayoutStyle.DEFAULT_FORMITEM_HORIZONTAL_GAP;
|
|
|
|
/**
|
|
* The number of pixels in gaps between each items in a formItems horizontaly.
|
|
*/
|
|
internal function get itemHorizontalGap() : Number {
|
|
return _itemHorizontalGap;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function set itemHorizontalGap(value : Number) : void {
|
|
if(itemHorizontalGap == value) return;
|
|
_itemHorizontalGap = itemLayoutMode.horizontalGap = value;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal var _labelAlign : String = FormLayoutStyle.DEFAULT_LABELALIGN;
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function get labelAlign() : String {
|
|
return _labelAlign;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function set labelAlign(value : String) : void {
|
|
if(_labelAlign == value) return;
|
|
|
|
_labelAlign = value;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal var _indicatorLocation : String = FormLayoutStyle.INDICATOR_NONE;
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function get indicatorLocation() : String {
|
|
return _indicatorLocation;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function set indicatorLocation(value : String) : void {
|
|
if(_indicatorLocation == value) return;
|
|
|
|
_indicatorLocation = value;
|
|
update_indicatiorLocation(value);
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
private var _required : Boolean = false;
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function get required() : Boolean {
|
|
return _required;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function set required(value : Boolean) : void {
|
|
if(_required == value) return;
|
|
_required = value;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function get instructionText() : String {
|
|
return (instructionTextField)? instructionTextField.htmlText:null;
|
|
}
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function set instructionText(value : String) : void {
|
|
if(!instructionTextField) {
|
|
instructionTextField = FormLayoutStyle.instructionTextField;
|
|
if(preferredInstrunctionTextformat) instructionTextField.defaultTextFormat = preferredInstrunctionTextformat;
|
|
itemOutterContainer.addChild(instructionTextField);
|
|
}
|
|
instructionTextField.htmlText = value;
|
|
}
|
|
|
|
|
|
//--------------------------------------
|
|
// Public Methods
|
|
//--------------------------------------
|
|
/**
|
|
* @private
|
|
* @see com.yahoo.astra.containers.formClasses.FormItem#subscribeObserver
|
|
*/
|
|
public function subscribeObserver(formEventObserver : IFormEventObserver) : IFormEventObserver {
|
|
this.formEventObserver = formEventObserver;
|
|
|
|
reqBox_l.subscribeObserver(formEventObserver);
|
|
reqBox_r.subscribeObserver(formEventObserver);
|
|
|
|
return formEventObserver.subscribeObserver(this);
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function get requiredIndicator() : DisplayObject {
|
|
var curIndicator : DisplayObject = (reqBox_l.requiredIndicator) ? reqBox_l.requiredIndicator : (reqBox_r.requiredIndicator) ? reqBox_r.requiredIndicator : null;
|
|
return curIndicator;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
* @see com.yahoo.astra.containers.formClasses.FormItem#update
|
|
*/
|
|
public function update(target : String, value : Object = null) : void {
|
|
|
|
switch(target) {
|
|
|
|
case FormLayoutEvent.UPDATE_GOT_REQUIRED_ITEM:
|
|
gotRequiredField = true;
|
|
update_indicatiorLocation(indicatorLocation);
|
|
break;
|
|
|
|
case FormLayoutEvent.UPDATE_INSTRUCTION_FONT_CHANGE:
|
|
updateTextFields(value as TextFormat);
|
|
break;
|
|
|
|
case FormLayoutEvent.UPDATE_ERROR_MSG_TEXT:
|
|
if(isFormHeadingLabel) return;
|
|
if(!instructionTextField) instructionText = " ";
|
|
break;
|
|
|
|
case FormLayoutEvent.UPDATE_ITEM_VERTICAL_GAP:
|
|
|
|
if(itemVerticalGap == Number(value)) return;
|
|
itemVerticalGap = itemLayoutMode.verticalGap = Number(value);
|
|
break;
|
|
|
|
case FormLayoutEvent.UPDATE_ITEM_HORIZONTAL_GAP:
|
|
if(itemHorizontalGap == Number(value)) return;
|
|
itemHorizontalGap = itemLayoutMode.horizontalGap = Number(value);
|
|
break;
|
|
|
|
case FormLayoutEvent.UPDATE_REQUIRED_ITEM:
|
|
|
|
if(required == Boolean(value)) return;
|
|
required = Boolean(value);
|
|
break;
|
|
|
|
case FormLayoutEvent.UPDATE_INDICATOR_LOCATION:
|
|
indicatorLocation = String(value);
|
|
break;
|
|
|
|
case FormLayoutEvent.UPDATE_LABEL_ALIGN:
|
|
this.labelAlign = String(value);
|
|
update_indicatiorLocation(indicatorLocation);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------
|
|
// Private Methods
|
|
//--------------------------------------
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
private function init() : void {
|
|
|
|
reqBox_l = new RequiredIndicator();
|
|
reqBox_r = new RequiredIndicator();
|
|
|
|
|
|
itemOutterContainer = attItemOutterContainer();
|
|
subItemContainer = attItemContainer();
|
|
|
|
this.autoMask = itemOutterContainer.autoMask = subItemContainer.autoMask = false;
|
|
|
|
this.addChild(reqBox_l);
|
|
itemOutterContainer.addChild(subItemContainer);
|
|
this.addChild(itemOutterContainer);
|
|
this.addChild(reqBox_r);
|
|
}
|
|
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
private function attItemOutterContainer() : LayoutContainer {
|
|
ItemOutterLayoutMode = new BoxLayout();
|
|
ItemOutterLayoutMode.direction = FormLayoutStyle.VERTICAL ;
|
|
return new LayoutContainer(ItemOutterLayoutMode);
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
private function attItemContainer() : LayoutContainer {
|
|
itemLayoutMode = new BoxLayout();
|
|
itemLayoutMode.direction = itemAlign;
|
|
itemLayoutMode.verticalGap = itemVerticalGap;
|
|
itemLayoutMode.horizontalGap = itemHorizontalGap;
|
|
return new LayoutContainer(itemLayoutMode);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
protected function updateTextFields(value : TextFormat) : void {
|
|
if(!instructionTextField && value is TextFormat) {
|
|
preferredInstrunctionTextformat = value;
|
|
return;
|
|
}
|
|
|
|
var textFieldToChg : TextField = instructionTextField;
|
|
var str : String = textFieldToChg.text;
|
|
textFieldToChg.defaultTextFormat = value;
|
|
textFieldToChg.htmlText = str;
|
|
}
|
|
|
|
//--------------------------------------
|
|
// Internal Methods
|
|
//--------------------------------------
|
|
/**
|
|
* Adds DisplayObjects into the <code>ItemContainer</code>.
|
|
*
|
|
* @param value DisplayObject.
|
|
*/
|
|
public function addItem(value : DisplayObject) : void {
|
|
subItemContainer.addChild(value);
|
|
}
|
|
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
protected function cleanRequiredIndicatorBoxs() : void {
|
|
reqBox_l.cleanBox();
|
|
reqBox_r.cleanBox();
|
|
}
|
|
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
internal function update_indicatiorLocation(value : String) : void {
|
|
cleanRequiredIndicatorBoxs();
|
|
switch(value) {
|
|
case FormLayoutStyle.INDICATOR_RIGHT:
|
|
if(required) reqBox_r.showIndicator();
|
|
if(gotRequiredField) reqBox_r.makeEmptyGap();
|
|
break;
|
|
case FormLayoutStyle.INDICATOR_LEFT:
|
|
if(labelAlign == FormLayoutStyle.TOP) reqBox_l.makeEmptyGap();
|
|
break;
|
|
case FormLayoutStyle.INDICATOR_LABEL_RIGHT:
|
|
break;
|
|
case FormLayoutStyle.INDICATOR_NONE:
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|