2020-10-20 00:58:15 +02:00

248 lines
6.0 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.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;
}
}
}
}