first commit
This commit is contained in:
5
com/yahoo/astra/containers/formClasses/FormEventObserver.as
Executable file
5
com/yahoo/astra/containers/formClasses/FormEventObserver.as
Executable file
@ -0,0 +1,5 @@
|
||||
/*
|
||||
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 {
|
320
com/yahoo/astra/containers/formClasses/FormItem.as
Executable file
320
com/yahoo/astra/containers/formClasses/FormItem.as
Executable file
@ -0,0 +1,320 @@
|
||||
/*
|
||||
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.FormItemContainer;
|
||||
import com.yahoo.astra.containers.formClasses.FormItemLabel;
|
||||
import com.yahoo.astra.containers.formClasses.FormLayoutStyle;
|
||||
import com.yahoo.astra.containers.formClasses.IForm;
|
||||
import com.yahoo.astra.events.FormDataManagerEvent;
|
||||
import com.yahoo.astra.events.FormLayoutEvent;
|
||||
import com.yahoo.astra.layout.LayoutContainer;
|
||||
import com.yahoo.astra.layout.LayoutManager;
|
||||
import com.yahoo.astra.layout.events.LayoutEvent;
|
||||
import com.yahoo.astra.layout.modes.BoxLayout;
|
||||
|
||||
import flash.display.DisplayObject;
|
||||
import flash.display.Sprite;
|
||||
import flash.events.Event;
|
||||
import flash.text.TextField;
|
||||
import flash.text.TextFieldAutoSize;
|
||||
import flash.text.TextFormat;
|
||||
|
||||
/**
|
||||
* Defines a label and one or more children arranged horizontally or vertically.
|
||||
* Similar to Flex FormItem, the label is vertically aligned with the first child in the FormItem container and is right-aligned in the region to the left of the container.
|
||||
* It is designed to be nested in a Form, but it can be used as a standalone class as desired.
|
||||
*
|
||||
* @example The following code shows a use of <code>FormItem</code>:
|
||||
* <listing version="3.0">
|
||||
*
|
||||
* var addressInput_line_1:TextInput = new TextInput();
|
||||
* var addressInput_line_2:TextInput = new TextInput();
|
||||
*
|
||||
* var addressFormItem : FormItem = new FormItem("Address", addressInput_line_1, addressInput_line_2);
|
||||
* addressFormItem.itemAlign = FormLayoutStyle.VERTICAL;
|
||||
* addressFormItem.labelTextFormat = new TextFormat("Arial", 11, 0xFF00FF);
|
||||
* addressFormItem.labelWidth = 60;
|
||||
* addressFormItem.showErrorMessageBox = true;
|
||||
* addressFormItem.required = true;
|
||||
* </listing>
|
||||
* @see com.yahoo.astra.fl.containers.Form
|
||||
* @author kayoh
|
||||
*/
|
||||
|
||||
public class FormItem extends LayoutContainer implements IForm {
|
||||
|
||||
//--------------------------------------
|
||||
// Constructor
|
||||
//--------------------------------------
|
||||
/**
|
||||
* Constructor.
|
||||
* The parameter can be either String or DisplayObject.
|
||||
* If the first argument is <code>Sting</code>, it will be set as a label on leftside and any string afterward will be a label aligned with other DisplayObjects.
|
||||
*
|
||||
* @param args String or DisplayObjectsto be contained in the FormItem.
|
||||
*/
|
||||
|
||||
public function FormItem( ...args ) {
|
||||
formItemLayout = new BoxLayout();
|
||||
formItemLayout.horizontalGap = horizontalGap;
|
||||
|
||||
super(formItemLayout);
|
||||
|
||||
this.autoMask = false;
|
||||
|
||||
_skin = new Sprite();
|
||||
formItemLayout.addClient(_skin, {includeInLayout:false});
|
||||
this.addChild(_skin);
|
||||
|
||||
|
||||
errorGrayBoxSpriteHolder = new Sprite();
|
||||
formItemLayout.addClient(errorGrayBoxSpriteHolder, {includeInLayout:false});
|
||||
this.addChild(errorGrayBoxSpriteHolder);
|
||||
|
||||
//attach Label
|
||||
var i : int = 0;
|
||||
if(args[0] is String) {
|
||||
var argStr : String = args[0].toString();
|
||||
labelItem = addLabel(argStr);
|
||||
i = 1;
|
||||
} else {
|
||||
labelItem = addLabel(null);
|
||||
horizontalGap = 0;
|
||||
}
|
||||
|
||||
//attach ItemContainer
|
||||
itemContainer = new FormItemContainer();
|
||||
if(itemAlign) itemContainer.itemAlign = this.itemAlign;
|
||||
if(itemHorizontalGap) itemContainer.itemHorizontalGap = this.itemHorizontalGap;
|
||||
if(itemVerticalGap) itemContainer.itemVerticalGap = this.itemVerticalGap;
|
||||
|
||||
itemContainer.addEventListener(LayoutEvent.LAYOUT_CHANGE, handler_fomItemContainer_listener, false, 0, true);
|
||||
|
||||
for (i;i < args.length; i++) {
|
||||
var curObject : * = args[i];
|
||||
if(curObject is String) {
|
||||
curObject = addTextField(curObject);
|
||||
textfieldArray.push(curObject);
|
||||
}
|
||||
if(curObject is Array) {
|
||||
var curObjectArr : Array = curObject as Array;
|
||||
var curObjectlength : int = curObjectArr.length;
|
||||
for (var j : int = 0;j < curObjectlength; j++) {
|
||||
var curObj : * = curObject[j];
|
||||
if(curObj is String) {
|
||||
curObj = addTextField(curObj);
|
||||
textfieldArray.push(curObj);
|
||||
}
|
||||
itemContainer.addItem(curObj);
|
||||
}
|
||||
} else {
|
||||
itemContainer.addItem(curObject);
|
||||
}
|
||||
}
|
||||
|
||||
this.addChild(labelItem);
|
||||
this.addChild(itemContainer);
|
||||
}
|
||||
|
||||
//--------------------------------------
|
||||
// Properties
|
||||
//--------------------------------------
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var formItemLayout : BoxLayout = null;
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var errorGrayBoxSprite : Sprite = null;
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var errorGrayBoxSpriteHolder : Sprite;
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var textfieldArray : Array = [];
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var formEventObserver : IFormEventObserver = null;
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var sidePadding : Number = NaN;
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var _skin : Sprite ;
|
||||
|
||||
/**
|
||||
* Background skin of FormItem.
|
||||
*
|
||||
* @param value DisplayObject
|
||||
*/
|
||||
public function get skin() : DisplayObject {
|
||||
return _skin;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
public function set skin(value : DisplayObject) : void {
|
||||
_skin.addChild(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var _gotResultBool : Boolean = true;
|
||||
|
||||
/**
|
||||
* @private
|
||||
*
|
||||
* When <code>multipleResult</code> is <code>true</code>, used as a reference to determine to pass/fail in validation in <code>FormDataManager</code>.
|
||||
* In case <code>multipleResult</code> is <code>true</code>,
|
||||
* In case <code>FormItem</code> has multiple form inputs to validate and part of them are not passed the validation, <code>gotResultBool</code> will be set as <code>false</code> to show ErrorMessageBox or ErrorMessageMessage.
|
||||
*
|
||||
* @default true;
|
||||
*/
|
||||
public function get gotResultBool() : Boolean {
|
||||
return _gotResultBool;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
public function set gotResultBool(value : Boolean) : void {
|
||||
_gotResultBool = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
* Storage for the showErrorMessageBox property.
|
||||
*/
|
||||
private var _showErrorMessageBox : Boolean = false;
|
||||
|
||||
/**
|
||||
* Decides to present error result message box : a translucent gray box(alpha:.2 , color:0x666666) behind the item that failed to validation.<br>
|
||||
*
|
||||
* @default false;
|
||||
*/
|
||||
public function get showErrorMessageBox() : Boolean {
|
||||
return _showErrorMessageBox;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
public function set showErrorMessageBox(value : Boolean) : void {
|
||||
if(isFormHeadingLabel) return;
|
||||
if(_showErrorMessageBox == value) return;
|
||||
_showErrorMessageBox = value;
|
||||
(value) ? this.addListeners() : this.removeListeners();
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
* Storage for the showErrorMessageText property.
|
||||
*/
|
||||
private var _showErrorMessageText : Boolean = false;
|
||||
|
||||
/**
|
||||
* Decides to present error result string: a error message returned from <code>FormDataManager</code> that failed to validate.
|
||||
*
|
||||
* @default false;
|
||||
*/
|
||||
public function get showErrorMessageText() : Boolean {
|
||||
return _showErrorMessageText;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
public function set showErrorMessageText(value : Boolean) : void {
|
||||
if(isFormHeadingLabel) return;
|
||||
if(_showErrorMessageText == value) return;
|
||||
_showErrorMessageText = value;
|
||||
if(value) {
|
||||
if(!instructionText) instructionText = " ";
|
||||
addListeners();
|
||||
} else {
|
||||
removeListeners();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
* Storage for the itemContainer property.
|
||||
*/
|
||||
private var _itemContainer : FormItemContainer = null;
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
public function get itemContainer() : FormItemContainer {
|
||||
return _itemContainer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
public function set itemContainer(value : FormItemContainer) : void {
|
||||
_itemContainer = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
* Storage for the labelItem property.
|
||||
*/
|
||||
private var _labelItem : FormItemLabel = null;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* FormItemLabel to contain a label in a FormItem.
|
||||
*
|
||||
* @param value LayoutContainer to be used as label container.
|
||||
*/
|
||||
public function get labelItem() : FormItemLabel {
|
||||
return _labelItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
public function set labelItem(value : FormItemLabel) : void {
|
||||
_labelItem = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
* Storage for the errorString property.
|
||||
*/
|
||||
private var _errorString : String = FormLayoutStyle.DEFAULT_ERROR_STRING;
|
||||
|
||||
/**
|
||||
* Sets and gets the text to be used for validation error.
|
||||
*
|
||||
* @param value String to be set as error message.
|
||||
* @default "Invalid input"
|
||||
*/
|
||||
public function get errorString() : String {
|
||||
return _errorString;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
public function set errorString(value : String) : void {
|
||||
_errorString = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var _instructionText : String;
|
||||
|
||||
/**
|
39
com/yahoo/astra/containers/formClasses/FormItemContainer.as
Executable file
39
com/yahoo/astra/containers/formClasses/FormItemContainer.as
Executable file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
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;
|
||||
|
247
com/yahoo/astra/containers/formClasses/FormItemLabel.as
Executable file
247
com/yahoo/astra/containers/formClasses/FormItemLabel.as
Executable file
@ -0,0 +1,247 @@
|
||||
/*
|
||||
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.FormItemContainer;
|
||||
import com.yahoo.astra.containers.formClasses.FormLayoutStyle;
|
||||
import com.yahoo.astra.containers.formClasses.IForm;
|
||||
import com.yahoo.astra.events.FormLayoutEvent;
|
||||
import com.yahoo.astra.layout.LayoutManager;
|
||||
import com.yahoo.astra.layout.events.LayoutEvent;
|
||||
|
||||
import flash.display.Sprite;
|
||||
import flash.text.TextField;
|
||||
import flash.text.TextFormat;
|
||||
|
||||
/**
|
||||
* <code>FormItemLabel</code> contains a label and required indicator in <code>FormItem</code> .
|
||||
*
|
||||
* @see com.yahoo.astra.containers.formClasses.FormItem
|
||||
* @see com.yahoo.astra.containers.formClasses.FormItemContainer
|
||||
* @author kayoh
|
||||
*/
|
||||
public class FormItemLabel extends FormItemContainer implements IForm {
|
||||
|
||||
|
||||
//--------------------------------------
|
||||
// Constructor
|
||||
//--------------------------------------
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public function FormItemLabel() {
|
||||
super();
|
||||
}
|
||||
|
||||
//--------------------------------------
|
||||
// Properties
|
||||
//--------------------------------------
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var labelTextField : TextField = null;
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var lableText : String = null;
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var lableSprite : Sprite = null;
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var _actualLabelTextWidth : Number = NaN;
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
internal function get actualLabelTextWidth() : Number {
|
||||
return _actualLabelTextWidth;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
internal function set actualLabelTextWidth(value : Number) : void {
|
||||
if(_actualLabelTextWidth == value) return;
|
||||
_actualLabelTextWidth = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var _preferredWidth : Number;
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
internal function get preferredLabelWidth() : Number {
|
||||
return _preferredWidth;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
internal function set preferredLabelWidth(value : Number) : void {
|
||||
if(_preferredWidth == value) return;
|
||||
_preferredWidth = value;
|
||||
|
||||
var tempHeight : Number = (labelTextField) ? labelTextField.height : 0;
|
||||
LayoutManager.resize(subItemContainer, value, tempHeight);
|
||||
|
||||
if(labelAlign) this.alignLabel = labelAlign;
|
||||
this.dispatchEvent(new LayoutEvent(LayoutEvent.LAYOUT_CHANGE));
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var _preferredLabelTextFormat : TextFormat;
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
internal function get preferredLabelTextFormat() : TextFormat {
|
||||
return _preferredLabelTextFormat;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
internal function set preferredLabelTextFormat(value : TextFormat) : void {
|
||||
updateTextFields(value as TextFormat);
|
||||
_preferredLabelTextFormat = value;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------
|
||||
// Internal Methods
|
||||
//--------------------------------------
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
override internal function update_indicatiorLocation(value : String) : void {
|
||||
cleanRequiredIndicatorBoxs();
|
||||
switch(value) {
|
||||
case FormLayoutStyle.INDICATOR_LEFT:
|
||||
if(!lableText && labelAlign == FormLayoutStyle.TOP) {
|
||||
break;
|
||||
return;
|
||||
}
|
||||
if(required) reqBox_l.showIndicator();
|
||||
reqBox_l.makeEmptyGap();
|
||||
break;
|
||||
|
||||
case FormLayoutStyle.INDICATOR_LABEL_RIGHT:
|
||||
if(!lableText && labelAlign == FormLayoutStyle.TOP) {
|
||||
break;
|
||||
return;
|
||||
}
|
||||
if(required) reqBox_r.showIndicator();
|
||||
reqBox_r.makeEmptyGap();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------
|
||||
// Private Methods
|
||||
//--------------------------------------
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
override public function update(target : String, value : Object = null) : void {
|
||||
switch(target) {
|
||||
case FormLayoutEvent.UPDATE_LABEL_FONT_CHANGE:
|
||||
if(!preferredLabelTextFormat) updateTextFields(value as TextFormat);
|
||||
break;
|
||||
case FormLayoutEvent.UPDATE_LABEL_WIDTH:
|
||||
this.preferredLabelWidth = Number(value);
|
||||
break;
|
||||
|
||||
case FormLayoutEvent.UPDATE_REQUIRED_ITEM:
|
||||
required = Boolean(value);
|
||||
break;
|
||||
|
||||
case FormLayoutEvent.UPDATE_INDICATOR_LOCATION:
|
||||
indicatorLocation = String(value);
|
||||
break;
|
||||
|
||||
case FormLayoutEvent.UPDATE_LABEL_ALIGN:
|
||||
labelAlign = String(value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
override internal function set labelAlign(value : String) : void {
|
||||
if(this.labelAlign == value) return;
|
||||
this.alignLabel = _labelAlign = value;
|
||||
update_indicatiorLocation(indicatorLocation);
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
internal function attLabel(lableTxt : String) : void {
|
||||
|
||||
lableSprite = new Sprite();
|
||||
if(lableTxt is String && lableTxt != "" ) {
|
||||
lableText = lableTxt;
|
||||
if(!labelTextField) labelTextField = FormLayoutStyle.labelTextField;
|
||||
labelTextField.htmlText = lableText;
|
||||
actualLabelTextWidth = labelTextField.width;
|
||||
labelTextField.x = 0;
|
||||
lableSprite.addChild(labelTextField);
|
||||
} else {
|
||||
lableText = null;
|
||||
actualLabelTextWidth = 0;
|
||||
}
|
||||
|
||||
|
||||
this.dispatchEvent(new FormLayoutEvent(FormLayoutEvent.LABEL_ADDED));
|
||||
|
||||
this.addItem(lableSprite);
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
override protected function updateTextFields(textformat : TextFormat) : void {
|
||||
if(!labelTextField) return;
|
||||
actualLabelTextWidth = NaN;
|
||||
|
||||
var textFieldToChg : TextField = labelTextField;
|
||||
var str : String = textFieldToChg.htmlText;
|
||||
textFieldToChg.htmlText = str;
|
||||
// trace("updateTextFields", textformat, str)
|
||||
textFieldToChg.setTextFormat(textformat);
|
||||
actualLabelTextWidth = textFieldToChg.width;
|
||||
this.dispatchEvent(new FormLayoutEvent(FormLayoutEvent.LABEL_ADDED));
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
|
||||
private function set alignLabel(value : String) : void {
|
||||
if(!lableText) return;
|
||||
switch(value) {
|
||||
case FormLayoutStyle.TOP:
|
||||
labelTextField.x = 0;
|
||||
break;
|
||||
case FormLayoutStyle.RIGHT:
|
||||
labelTextField.x = (preferredLabelWidth) ? preferredLabelWidth - actualLabelTextWidth : 0;
|
||||
break;
|
||||
case FormLayoutStyle.LEFT:
|
||||
labelTextField.x = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
10
com/yahoo/astra/containers/formClasses/FormLayoutStyle.as
Executable file
10
com/yahoo/astra/containers/formClasses/FormLayoutStyle.as
Executable file
File diff suppressed because one or more lines are too long
5
com/yahoo/astra/containers/formClasses/IForm.as
Executable file
5
com/yahoo/astra/containers/formClasses/IForm.as
Executable file
@ -0,0 +1,5 @@
|
||||
/*
|
||||
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 {
|
5
com/yahoo/astra/containers/formClasses/IFormEventObserver.as
Executable file
5
com/yahoo/astra/containers/formClasses/IFormEventObserver.as
Executable file
@ -0,0 +1,5 @@
|
||||
/*
|
||||
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 {
|
178
com/yahoo/astra/containers/formClasses/RequiredIndicator.as
Executable file
178
com/yahoo/astra/containers/formClasses/RequiredIndicator.as
Executable file
@ -0,0 +1,178 @@
|
||||
/*
|
||||
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.events.FormLayoutEvent;
|
||||
|
||||
import flash.display.DisplayObject;
|
||||
import flash.display.DisplayObjectContainer;
|
||||
import flash.display.Sprite;
|
||||
import flash.text.TextField;
|
||||
import flash.utils.getDefinitionByName;
|
||||
|
||||
/**
|
||||
* Attach a required field indicator object to FormItem.
|
||||
*
|
||||
* @author kayoh
|
||||
*/
|
||||
public class RequiredIndicator extends Sprite implements IForm {
|
||||
//--------------------------------------
|
||||
// Constructor
|
||||
//--------------------------------------
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public function RequiredIndicator() {
|
||||
super();
|
||||
}
|
||||
|
||||
//--------------------------------------
|
||||
// Properties
|
||||
//--------------------------------------
|
||||
/**
|
||||
* Required field mark(red asterisk). the default is indicatorSkin movieclip in Form.
|
||||
* @private
|
||||
*/
|
||||
private var checkBox : DisplayObjectContainer = null;
|
||||
/**
|
||||
* Place holder to make even gap.
|
||||
* @private
|
||||
*/
|
||||
private var emptyBox : Sprite = null;
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var _requiredIndicator : DisplayObject = null;
|
||||
|
||||
/**
|
||||
* Return requiredIndicator DisplayObject being used in <code>Form</code> or <code>FormItem</code>.
|
||||
* @param value DisplayObject to be used as requiredIndicator.
|
||||
*/
|
||||
public function get requiredIndicator() : DisplayObject {
|
||||
return _requiredIndicator;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @see com.yahoo.astra.fl.containers.formClasses.FormLayoutStyle#DEFAULT_INDICATORFIELD_WIDTH
|
||||
*/
|
||||
private var boxWidth : Number = FormLayoutStyle.INDICATORFIELD_WIDTH;
|
||||
/**
|
||||
* @private
|
||||
* @see com.yahoo.astra.fl.containers.formClasses.FormLayoutStyle#DEFAULT_INDICATORFIELD_HEIGHT
|
||||
*/
|
||||
private var boxHeight : Number = FormLayoutStyle.INDICATORFIELD_HEIGHT;
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private var formEventObserver : IFormEventObserver = null;
|
||||
|
||||
|
||||
//--------------------------------------
|
||||
// internal Methods
|
||||
//--------------------------------------
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
private function upateEmptyBoxWidthHeight(w : Number, h : Number) : void {
|
||||
boxWidth = w;
|
||||
boxHeight = h;
|
||||
if(emptyBox) {
|
||||
emptyBox.width = w;
|
||||
emptyBox.height = h;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
internal function cleanBox() : void {
|
||||
_requiredIndicator = null;
|
||||
while(this.numChildren) this.removeChildAt(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
internal function makeEmptyGap() : void {
|
||||
if(this.getChildByName("emptyBox")) {
|
||||
this.removeChild(this.getChildByName("emptyBox"));
|
||||
}
|
||||
var sp : Sprite = new Sprite();
|
||||
sp.graphics.beginFill(0xff00ff, 0);
|
||||
sp.graphics.drawRect(0, 0, boxWidth, boxHeight);
|
||||
sp.graphics.endFill();
|
||||
|
||||
emptyBox = Sprite(this.addChild(sp));
|
||||
emptyBox.name = "emptyBox";
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*
|
||||
* Show the required indicator(asterisk mark or custom movieclip).
|
||||
*/
|
||||
internal function showIndicator() : void {
|
||||
try {
|
||||
/*
|
||||
* When FormItem is nested in Form, attaches one from Form.
|
||||
*/
|
||||
var ClassReference : Class = getDefinitionByName(FormLayoutStyle.defaultStyles["indicatorSkin"]) as Class;
|
||||
checkBox = new ClassReference();
|
||||
}
|
||||
|
||||
catch(e : ReferenceError) {
|
||||
if(FormLayoutStyle.defaultStyles["indicatorSkin"] is DisplayObjectContainer) {
|
||||
/*
|
||||
* When "indicatorSkin" was defined by set setIndicatorSkin in FormItem.
|
||||
*/
|
||||
checkBox = FormLayoutStyle.defaultStyles["indicatorSkin"];
|
||||
} else {
|
||||
checkBox = new Sprite();
|
||||
var astTxtField : TextField = FormLayoutStyle.asteriskTextField;
|
||||
astTxtField.y = -astTxtField.height / 2;
|
||||
astTxtField.x = -astTxtField.width / 2;
|
||||
checkBox.addChild(astTxtField);
|
||||
}
|
||||
}
|
||||
if(FormLayoutStyle.INDICATORFIELD_WIDTH < checkBox.width || FormLayoutStyle.INDICATORFIELD_HEIGHT < checkBox.height) {
|
||||
boxWidth = FormLayoutStyle.INDICATORFIELD_WIDTH = checkBox.width;
|
||||
boxHeight = FormLayoutStyle.INDICATORFIELD_HEIGHT = checkBox.height;
|
||||
|
||||
if(formEventObserver) formEventObserver.setUpdate(FormLayoutEvent.INDICATOR_SIZE_CHAGE, [boxWidth, boxHeight]);
|
||||
}
|
||||
checkBox.x = boxWidth / 2;
|
||||
checkBox.y = boxHeight / 2;
|
||||
|
||||
makeEmptyGap();
|
||||
_requiredIndicator = this.addChild(checkBox);
|
||||
}
|
||||
|
||||
//--------------------------------------
|
||||
// Public Methods
|
||||
//--------------------------------------
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
public function update(target : String, value : Object = null) : void {
|
||||
switch(target) {
|
||||
case FormLayoutEvent.INDICATOR_SIZE_CHAGE:
|
||||
upateEmptyBoxWidthHeight(value[0], value[1]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
public function subscribeObserver(formEventObserver : IFormEventObserver) : IFormEventObserver {
|
||||
this.formEventObserver = formEventObserver;
|
||||
return formEventObserver.subscribeObserver(this);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user