If you want to use an mxml itemRenderer (MyItemRenderer.mxml): myMenu.itemRenderer=new ClassFactory(MyItemRenderer);
-TH --- In flexcoders@yahoogroups.com, "hank williams" <[EMAIL PROTECTED]> wrote: > > Yes... but how do you assign an itemRenderer to a menu. > > You cant use mxml which takes care of the typing niceties. > > the problem is that you cant do this: > > myMenu= Menu.createMenu(parent, menuData, false); > myMenu.itemRenderer=ThumbPopUpRenderer; > > Where ThumbPopUpRenderer is an MXML component. It gives you a type error > because itemRenderer is of type IFactory and ThumbPopupRenderer is not. > > But if you do this: > > myMenu= Menu.createMenu(parent, menuData, false); > myMenu.itemRenderer=ThumbPopUpRenderer as IFactory; > > It runs, but apparently an MXML itemRenderer is not of the right type, so it > throws a runtime error. > > Any ideas? > > Hank > > On 7/16/06, hank williams <[EMAIL PROTECTED]> wrote: > > > > lol. > > > > Just five minutes ago I switched to an array and got it working. > > > > It looks like you cant create a field of type class in an xml object, or > > at least I wasnt able to. It seems to want to interpret it as text. When > > putting braces around it it doesnt work either. > > > > But you are right. It was the wrong strategy anyway because the icon is > > left justified, so it looks wierd. I am just (today) playing with > > itemRenderers so I will give that a shot. In fact this popup is being used > > inside an itemrenderer that is inside a datagrid! So it looks like I will > > just have to do the next level :) > > > > Thanks for taking a look. It was driving me crazy. > > > > Hank > > > > > > On 7/16/06, Tim Hoff <[EMAIL PROTECTED]> wrote: > > > > > > Hi Hank, > > > > > > I couldn't get this to work with xml. So, I changed the dataProvider to > > > an array and used an iconFunction. It works, but if you select an icon, > > > when the menu is displayed a second time the icon is also used as the > > > selected icon. For what you are trying to do, I would recommend that you > > > use an itemRenderer for your menu items. That way you can still use xml and > > > control the positioning of the icon image. I know that you have asked this > > > question a couple of time, so I thought I would give it a try. I can see > > > why you are having problems with this. > > > > > > -TH > > > > > > <?xml version="1.0" encoding="utf-8"?> > > > <mx:Canvas xmlns:mx=" http://www.adobe.com/2006/mxml" > > > creationComplete="initList();"> > > > > > > > > > <mx:Script> > > > <![CDATA[ > > > > > > import mx.controls.Menu ; > > > import mx.events.MenuEvent; > > > import mx.controls.Alert; > > > import flash.geom.Point; > > > > > > [Embed(source='../assets/assets.swf', symbol='thumbsdown')] > > > public var thumbsup:Class; > > > [Embed(source='../assets/assets.swf', symbol='thumbsup')] > > > public var thumbsdown:Class; > > > > > > // Define data provider. > > > private var myDP: Array; > > > private function initList():void { > > > myDP = [ > > > {label:'No Vote', icon:''}, > > > {label:'', icon:'thumbsup'}, > > > {label:'', icon:'thumbsdown'}]; > > > > > > } > > > > > > private var point1:Point = new Point(); > > > private var myMenu:Menu; > > > > > > // Create and display the Menu control. > > > private function showMenu():void { > > > myMenu=Menu.createMenu(parent, myDP, false); > > > myMenu.labelField="label"; > > > myMenu.iconFunction=myIconfunction; > > > > > > myMenu.addEventListener("itemClick", menuHandler); > > > > > > // Calculate position of Menu in Application's coordinates. > > > point1.x=linkButton.x ; > > > point1.y=linkButton.y; > > > point1= linkButton.localToGlobal(point1); > > > myMenu.show(point1.x, point1.y + linkButton.height + 1); > > > } > > > > > > // Event handler for the Menu control's change event. > > > private function menuHandler(event:MenuEvent):void { > > > Alert.show("Label: " + event.item.label, "Clicked menu > > > item"); > > > } > > > > > > // Determine icon based on icon field. > > > private function myIconfunction(item:Object):Class > > > { > > > if (item.icon == "thumbsup") { > > > return thumbsup; > > > } > > > if (item.icon == "thumbsdown") { > > > return thumbsdown; > > > } > > > return null; > > > } > > > > > > ]]> > > > </mx:Script> > > > > > > <mx:LinkButton id="linkButton" width="100" > > > icon="@Embed(source='../assets/assets.swf', symbol='thumbsup')" > > > click="showMenu();"/> > > > > > > </mx:Canvas> > > > > > > > > > --- In flexcoders@yahoogroups.com, "hank williams" <hank777@> wrote: > > > > > > > > I am trying to get a menu to display some icons, and I cant get them > > > to show > > > > up. The code I have written is based on the sample code for creating a > > > popup > > > > menu and the sample code for creating a list where they show you how > > > to > > > > include an icon. But the two examples are different enough that I may > > > not be > > > > merging them together right. > > > > > > > > The other thing that is odd is, if you look at the code you will se a > > > line > > > > that looks like this: > > > > myMenu.labelField="@label" > > > > > > > > I dont know why I need the @ here at all. But without it the label > > > doesnt > > > > show up whereas with it it does. But for the following line > > > > myMenu.labelField= "@icon" > > > > > > > > The icons dont show up. > > > > > > > > I know that I am embedding the icon properly because the code also > > > embeds > > > > one of the same icons inside the button. > > > > > > > > Any help appreciated. > > > > > > > > Hank > > > > > > > > <?xml version="1.0" encoding="utf-8"?> > > > > <mx:Canvas xmlns:mx=" http://www.adobe.com/2006/mxml" > > > > > > > > > <mx:LinkButton id="linkButton" width="100" > > > > icon="@Embed(source='../assets/assets.swf', symbol='thumbsup')" > > > > click="showMenu();"> > > > > > > > > <mx:Script> > > > > <![CDATA[ > > > > > > > > import mx.controls.Menu; > > > > import mx.events.MenuEvent; > > > > import mx.controls.Alert; > > > > import flash.geom.Point; > > > > > > > > [Embed(source='../assets/assets.swf', symbol='thumbsup')] > > > > public var thumbsup:Class; > > > > [Embed(source='../assets/assets.swf', symbol='thumbsdown')] > > > > public var thumbsdown:Class; > > > > > > > > private var point1:Point = new Point(); > > > > private var myMenu:Menu; > > > > > > > > // Create and display the Menu control. > > > > private function showMenu():void { > > > > myMenu= Menu.createMenu(parent, myMenuData, false); > > > > myMenu.labelField="@label" > > > > myMenu.iconField= "@icon" > > > > myMenu.addEventListener("itemClick", menuHandler); > > > > > > > > // Calculate position of Menu in Application's > > > > coordinates. > > > > point1.x=linkButton.x; > > > > point1.y=linkButton.y ; > > > > point1=linkButton.localToGlobal(point1); > > > > > > > > myMenu.show(point1.x, point1.y + linkButton.height + 1); > > > > } > > > > > > > > // Event handler for the Menu control's change event. > > > > private function menuHandler(event:MenuEvent):void { > > > > Alert.show("Label: " + event.item.label, "Clicked menu > > > > item"); > > > > } > > > > ]]> > > > > </mx:Script> > > > > </mx:LinkButton> > > > > <mx:XML id="myMenuData"> > > > > <root> > > > > <menuitem label="No vote"/> > > > > <menuitem icon="thumbsup"/> > > > > <menuitem icon="thumbsdown"/> > > > > </root> > > > > </mx:XML> > > > > > > > > </mx:Canvas> > > > > > > > > > > > > > > > ------------------------ Yahoo! Groups Sponsor --------------------~--> Great things are happening at Yahoo! Groups. See the new email design. http://us.click.yahoo.com/TISQkA/hOaOAA/yQLSAA/nhFolB/TM --------------------------------------------------------------------~-> -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/flexcoders/ <*> To unsubscribe from this group, send an email to: [EMAIL PROTECTED] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/