Here is the code. Feel free to re-use it in any way you deem fit.
package com.flexceptional.components
{
import mx.containers.Panel;
import mx.core.UIComponent;
public class ExtendedPanel extends Panel
{
public var headerPanel:UIComponent;
override protected function createChildren():void
{
super.createChildren();
// Add the title panel
if (headerPanel)
{
titleBar.addChild(headerPanel);
}
}
override protected function updateDisplayList
(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
// Position the title panel
if (headerPanel)
{
var y:int = (titleBar.height - headerPanel.height) / 2;
var x:int = this.width - headerPanel.width - 5;
headerPanel.move(x, y);
}
}
}
}
Now, thanks to the convenience of MXML and the way it is compiled, we can specify our additions to the Panel header in MXML when defining the Panel.
Example:
<comp:ExtendedPanel width="100%" height="100%" title="Properties">
<comp:headerPanel>
<mx:Image source="{helpIcon}"
width="16"
height="16"
toolTip="Open help documentation in new window"
useHandCursor="true"
buttonMode="true"
mouseChildren="false"
click="propertyHelpIcon_clickHandler(event)" />
</comp:headerPanel>
<!-- Panel content -->
<comp:PropertiesGrid />
</comp:ExtendedPanel>
You dont need a custom Panel.
ReplyDeleteIn a normal Panel's creation complete event handler, just call this.titleBar.addChild( component );
where component is some component you declared in the mxml - and set the x, y for the child in the resize event or similar
Line 17 should have tipped you off to this...
Also should be ??
titlePanel should be headerPanel in the example
ReplyDelete