ButtonBar付きAccordionHeader


AccordionHeaderの中にButtonBarを入れてみました。クリック感が無いのがイマイチなんだけどね。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*">
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
		]]>
	</mx:Script>
	<mx:Accordion headerRenderer="TestHeader" headerHeight="30" width="100%" height="100%">
		<local:TestCanvas label="header 1"/>
		<local:TestCanvas label="header 2" toolbarDataProvider="['test']" toolbarItemClick="Alert.show(event.label)"/>
		<local:TestCanvas label="header 3" toolbarDataProvider="['foo','bar']" toolbarItemClick="Alert.show(event.label)"/>
	</mx:Accordion>
</mx:Application>
package {
	import flash.events.MouseEvent;
	
	import mx.containers.accordionClasses.AccordionHeader;
	import mx.controls.Button;
	import mx.controls.ButtonBar;
	import mx.events.ItemClickEvent;

public class TestHeader extends AccordionHeader {
	private var toolbar: ButtonBar = new ButtonBar();

	public function TestHeader() {
		super();
		addEventListener(MouseEvent.CLICK, onClick);
	}

	override protected function createChildren():void {
		super.createChildren();
		addChild(toolbar);
	}

	private function onClick(event: MouseEvent): void {
		for each (var button: Button in toolbar.getChildren()) {
			if (button.getRect(this).contains(event.localX, event.localY)) {
				data.dispatchEvent(new ItemClickEvent("toolbarItemClick", false, false,
					 button.label, toolbar.getChildIndex(button), button));
			}
		}
	}

	override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
		super.updateDisplayList(unscaledWidth, unscaledHeight);
		if (toolbar.numChildren == 0) {
			toolbar.dataProvider = data["toolbarDataProvider"];
		}
		var y: Number = (unscaledHeight - toolbar.minHeight) / 2;
		toolbar.move(unscaledWidth - toolbar.minWidth - y, y);
		toolbar.setActualSize(toolbar.minWidth, toolbar.minHeight);
	}
}
}
package {
	import mx.containers.Canvas;

[Event(name="toolbarItemClick", type="mx.events.ItemClickEvent")]

public class TestCanvas extends Canvas {
	[Bindable]
	public var toolbarDataProvider: Array;

	public function TestCanvas() {
		super();
	}
}
}