I am creating a dynamic drop down menu using XML and I am having
trouble spacing out each menu item.

Is there a way of determing the size of the text in each xml node?

Thanks for your help,
Aaron

P.S. This menu is based on a tutorial at kirupa.com.

Here is the XML:

<?xml version="1.0" encoding="iso-8859-1"?>
<menu name="navigation">
        <item name="Home" link="http://whitehorsemedia.com"; />
        <menu name="About Us" link="http://whitehorsemedia.com/about/index.cfm";>
                <item name="Our Name" 
link="http://whitehorsemedia.com/about/name.cfm"; />
                <item name="News" link="http://whitehorsemedia.com/about/news.cfm"; 
/>
                <item name="We Believe" 
link="http://whitehorsemedia.com/about/believe.cfm"; />
                <item name="Staff" 
link="http://whitehorsemedia.com/about/staff.cfm"; />
                <item name="Projects" 
link="http://whitehorsemedia.com/about/projects.cfm"; />
        </menu>
</menu>

Here is the ActionScript:


// generates a list of menu items (effectively one menu)
// given the inputted parameters.  This makes the main menu
// as well as any of the submenus
GenerateMenu = function(container, name, x, y, depth, node_xml) {
        // variable declarations
        var curr_node;
        var curr_item;
        var curr_menu = container.createEmptyMovieClip(name, depth);
        
        // for all items or XML nodes (items and menus)
        // within this node_xml passed for this menu
        for (var i=0; i<node_xml.childNodes.length; i++) {
                // movieclip for each menu item
                curr_item = curr_menu.attachMovie("menuitem","item"+i+"_mc", i);
                curr_item._x = x + i*curr_item._width;
                curr_item._y = y;
                curr_item.trackAsMenu = true;
                
                // item properties assigned from XML
                curr_node = node_xml.childNodes[i];
                curr_item.link = curr_node.attributes.link;
                curr_item.name.text = curr_node.attributes.name;
                
                // item submenu behavior for rollover event
                if (node_xml.childNodes[i].nodeName == "menu"){
                        // open a submenu
                        curr_item.node_xml = curr_node;
                        curr_item.onRollOver = curr_item.onDragOver = 
function(){
                                var x = 200;
                                var y = this._y + this._height;
                                GenerateMenu(curr_menu, "submenu_mc", x, y, 
1000, this.node_xml);
                                // show a hover color
                                var col = new Color(this.background);
                                col.setRGB(0xf4faff);
                        };
                }else{ // nodeName == "item"
                        curr_item.arrow._visible = false;
                        // close existing submenu
                        curr_item.onRollOver = curr_item.onDragOver = 
function(){
                                curr_menu.submenu_mc.removeMovieClip();
                                // show a hover color
                                var col = new Color(this.background);
                                col.setRGB(0xf4faff);
                        };
                }
                
                curr_item.onRollOut = curr_item.onDragOut = function(){
                        // restore color
                        var col = new Color(this.background);
                        col.setTransform({ra:100,rb:0,ga:100,gb:0,ba:100,bb:0});
                };
                
                // any item, menu opening or not can have actions
                curr_item.onRelease = function(){
                        Actions["goToURL"](this.link);
                        CloseSubmenus();
                };
        } // end for loop
};

// create the main menu, this will be constantly visible
CreateMainMenu = function(x, y, depth, menu_xml){
        // generate a menu list
        GenerateMenu(this, "mainmenu_mc", x, y, depth, menu_xml.firstChild);
        // close only submenus if visible durring a mouseup
        // this main menu (mainmenu_mc) will remain
        mainmenu_mc.onMouseUp = function(){
                if (mainmenu_mc.submenu_mc && 
!mainmenu_mc.hitTest(_root._xmouse,
_root._ymouse, true)){
                        CloseSubmenus();
                }
        };
};

// closes all submenus by removing the submenu_mc
// in the main menu (if it exists)
CloseSubmenus = function(){
        mainmenu_mc.submenu_mc.removeMovieClip();
};

// This actions object handles methods for actions
// defined by the XML called when a menu item is pressed
Actions = Object();
Actions.gotoURL = function(urlVar){
        getURL(urlVar, "_blank");
};

// load XML, when done, run CreateMainMenu to interpret it
menu_xml = new XML();
menu_xml.ignoreWhite = true;
menu_xml.onLoad = function(ok){
        // create main menu after successful loading of XML
        if (ok){
                CreateMainMenu(200, 250, 0, this);
        }
};
// load first XML menu
menu_xml.load("menu.xml");
_______________________________________________
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com

Reply via email to