All pastes #1350 Raw Edit

new dynamic menu

public text v1 · immutable
#1350 ·published 2004-10-09 15:41 UTC
rendered paste body
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);
		
		if (name == "mainmenu_mc") {
			curr_item._x = x + i*(curr_item._width-1);
			curr_item._y = y;
			} else {
			curr_item._x = x;
			//curr_item.background._width = curr_item._width; //+ 30
			//curr_item.name._width = curr_item._width; //+ 30
			curr_item._y = y + i*(curr_item._height-1);
		}
		
		curr_item.trackAsMenu = true;		
		//curr_item._x = x+i*curr_item._width;
		//curr_item._y = y;
		curr_item.action = curr_item.attributes.action;
		curr_item.variables = curr_item.attributes.variables;
		curr_item.name.text = curr_item.attributes.name;
		curr_item.trackAsMenu = true;
		curr_item.onRelease = function() {
			Actions[this.action](this.variables);
			CloseSubmenus();
		};
		// item properties assigned from XML
		curr_node = node_xml.childNodes[i];
		curr_item.action = curr_node.attributes.action;
		curr_item.variables = curr_node.attributes.variables;
		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 = this._x;
			var y = this._y+curr_item._height;
			
			GenerateMenu(curr_menu, "submenu_mc", x, y, 1000, this.node_xml);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();var col = new Color(this.background);col.setRGB(0xf4faff);};
		}
		curr_item.onRollOut = curr_item.onDragOut=function () { 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[this.action](this.variables);
			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");
};
Actions.message = function(msg) {
	message_txt.text = msg;
};
Actions.newMenu = function(menuxml) {
	menu_xml.load(menuxml);
};
// 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(265, 36, 0, this);
		message_txt.text = "message area";
	} else {
		message_txt.text = "error:  XML not successfully loaded";
	}
};
// load first XML menu
menu_xml.load("navigation.xml");