package
{
import mx.controls.Image;
import mx.controls.menuClasses.MenuBarItem;
public class MyMenuBarItem extends MenuBarItem
{
private var image:Image;
public function MyMenuBarItem()
{
}
override protected function commitProperties():void
{
super.commitProperties();
if (data)
{
// <item label="Three" icon="assets/accessories-text-editor.png"/>
var icon:String = data.@icon;
image = new Image();
image.source = icon;
addChild(image);
}
}
override protected function measure():void
{
super.measure();
if (image)
{
measuredWidth += image.measuredWidth + 2;
measuredHeight = Math.max(image.measuredHeight, measuredHeight);
}
}
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if (image)
{
image.x = (20 - image.measuredWidth) / 2;
image.setActualSize(image.measuredWidth, image.measuredHeight);
label.x = 20;
}
}
}
}
Note that the label and it's associated text is taken car of in the super class.
And in the Application;
<mx:MenuBar id="menuBar"
labelField="@label"
iconField="@icon"
showRoot="false"
menuBarItemRenderer="MyMenuBarItem"
dataProvider="{dp}"/>
// extends MenuBar class in order to gain access to menuBarItems and
adjust their label x values
// also extended to apply menu ItemRenderer
public class ExtendedMenuBar extends MenuBar
{
public function ExtendedMenuBar()
{
super();
}
override public function getMenuAt(index:int):Menu
{
var menu:Menu = super.getMenuAt(index);
menu.itemRenderer = new
ClassFactory(renderer.ExtendedMenuItemRenderer);
return menu;
}
package com.istmanagement.vo
{
import mx.controls.*;
import mx.controls.Menu;
import mx.controls.MenuBar;
import mx.core.ClassFactory;
public class ExtendedMenuBar extends MenuBar
{
public function ExtendedMenuBar()
{
super();
}
override public function getMenuAt(index:int):Menu
{ var menu:Menu = super.getMenuAt(index);
menu.itemRenderer = new ClassFactory(MyMenuBarItem);
return menu;
}
}
}
MyMenuBarItem.as file
package com.istmanagement.vo
{
import mx.controls.Image;
import mx.controls.Text;
import mx.controls.menuClasses.MenuBarItem;
public class MyMenuBarItem extends MenuBarItem
{
private var image:Image;
private var text:Text;
public function MyMenuBarItem()
{
}
override protected function commitProperties():void
{
super.commitProperties();
if (data)
{
var icon:String = data.menuIcon;
image = new Image();
image.source = icon;
addChild(image);
}
}
override protected function measure():void
{
super.measure();
if (image)
{
measuredWidth += image.measuredWidth +2;
measuredHeight = Math.max(image.measuredHeight, measuredHeight);
}
}
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if (image)
{
image.x = (20 - image.measuredWidth) / 2;
image.setActualSize(image.measuredWidth, image.measuredHeight);
label.x = 20;
}
}
}
}
Error ll be displayed
cannot convert to mx.controls.menuClasses.IMenuBarItemRenderer.
ExtendedMenuBar.as
package com.vo
{
import mx.controls.*;
import mx.controls.Menu;
import mx.controls.MenuBar;
import mx.controls.menuClasses.MenuBarItem;
import mx.controls.menuClasses.MenuItemRenderer;
import mx.core.ClassFactory;
public class ExtendedMenuBar extends MenuBar
{
public function ExtendedMenuBar()
{
super();
}
override public function getMenuAt(index:int):Menu
{
var menu:Menu = super.getMenuAt(index);
menu.itemRenderer = new ClassFactory(MyMenuBArItem);
6 return menu;
}
}
}
MyMenuBArItem.as
package com.vo
{
import mx.collections.ArrayCollection;
import mx.controls.Image;
import mx.controls.Menu;
import mx.controls.MenuBar;
import mx.controls.menuClasses.MenuBarItem;
import mx.controls.menuClasses.MenuItemRenderer;
import mx.rpc.events.ResultEvent;
public class MyMenuBArItem extends MenuItemRenderer
{
private var image:Image;
private var imgtest:Image;
private var text:Text;
public function MyMenuBArItem()
{
}
override protected function commitProperties():void
{
super.commitProperties();
var icon:String = data.menuIcon;
image = new Image();
image.source = icon;
addChild(image);
var str:ArrayCollection= data.children;
menuImage(str);
}
public function menuImage(str:ArrayCollection):void
{
var str:ArrayCollection= data.children;
if(str == null)
{
}
else
{
var j:int;
var i:int=0;
for(; i<str.length ; i++)
{
var test:ArrayCollection=str[i].children;
for(j=0;j<test.length;j++)
{
var menuicon:String = test[j].menuIcon ;
imgtest= new Image();
imgtest.source= menuicon;
addChild(imgtest);
}
}
}
}
override protected function measure():void
{
super.measure();
if (image)
{
measuredWidth += image.measuredWidth +2;
measuredHeight = Math.max(image.measuredHeight, measuredHeight);
}
}
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if (image)
{
image.x = (20 - image.measuredWidth) / 2;
image.setActualSize(image.measuredWidth, image.measuredHeight);
label.x = 20;
}
}
}
}
It works for top menu but not working for submenu.