combox拡張(リストに画像を追加)
2354 ワード
import flash.display.DisplayObject;
import mx.controls.ComboBox;
import mx.core.IFlexDisplayObject;
import mx.core.UIComponent;
import mx.controls.TextInput;
public class IconComboBox extends ComboBox
{
public function IconComboBox()
{
super();
}
private var iconHolder:UIComponent;
override protected function createChildren():void
{
super.createChildren();
iconHolder = new UIComponent();
addChild(iconHolder);
}
override protected function measure():void
{
super.measure();
if (iterator)
{
var iconClass:Class = iterator.current.icon;
var icon:IFlexDisplayObject = new iconClass() as IFlexDisplayObject;
while (iconHolder.numChildren > 0)
iconHolder.removeChildAt(0);
iconHolder.addChild(DisplayObject(icon));
measuredWidth += icon.measuredWidth;
measuredHeight = Math.max(measuredHeight, icon.measuredHeight + borderMetrics.top + borderMetrics.bottom);
}
}
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if(!selectedItem)
return;
var iconClass:Class = selectedItem.icon;
var icon:IFlexDisplayObject = new iconClass() as IFlexDisplayObject;
while (iconHolder.numChildren > 0)
iconHolder.removeChildAt(0);
iconHolder.addChild(DisplayObject(icon));
iconHolder.y = (unscaledHeight - icon.measuredHeight) / 2;
iconHolder.x = borderMetrics.left;
textInput.setStyle("paddingLeft", 16);
}
}
導入コード:
<components:IconComboBox x="528" y="90"
focusEnabled="true"
id="a_presences"
filters="{[]}"
dataProvider="{PresenceManager.presence}"
rowCount="{PresenceManager.presence.length}"
close=""
mouseDown=""
editable="true"
width="60" fontSize="11" />