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" />