Hi, I have problem with XML Menu. I want add command to move to different frames on timeline.
I will so thankful if you can help me to do this.
this is ActionScript code:
Actionscript Code:
/**
Example usage:
In your FLA file, add the following code into the main timeline. Make sure that the XML file points to the appropriate file containing your navigation.
new XmlMenu("menu.xml", this);
*/
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class XmlMenu {
private var menu_xml:XML;
private var m_parent_mc:MovieClip;
private var m_menu_array:Array;
public function XmlMenu(xmlpath_str:String, parent_mc:MovieClip) {
this.m_parent_mc = parent_mc;
this.m_menu_array = new Array();
initXML(xmlpath_str);
}
private function completeHandler(event:Event):void {
menu_xml = XML(event.currentTarget.data);
var menuXMLList:XMLList = menu_xml.menu;
var nodeXML:XML;
var menu_array:Array = new Array();
var i:Number;
for each (nodeXML in menuXMLList) {
var submenu_array:Array = new Array();
var subNodeXML:XML;
for each (subNodeXML in nodeXML.children()) {
submenu_array.push({caption:subNodeXML.@name, href:subNodeXML.@href});
}
menu_array.push({caption:nodeXML.@name, href:nodeXML.@href, subnav_array:submenu_array});
}
initMenu(menu_array);
}
private function initXML(xmlpath_str:String):void {
menu_xml = new XML();
menu_xml.ignoreWhitespace = true;
var xmlLdr:URLLoader = new URLLoader();
xmlLdr.addEventListener(Event.COMPLETE, completeHandler);
xmlLdr.load(new URLRequest(xmlpath_str));
}
private function initMenu(nav_array:Array):void {
var thisX:Number = 20;
var thisY:Number = 20;
var menuIndex:Number;
for (menuIndex = 0; menuIndex < nav_array.length; menuIndex++) {
var menuMC:MovieClip = new menu_mc();
menuMC.buttonMode = true;
m_parent_mc.addChild(menuMC);
menuMC.x = thisX;
menuMC.y = thisY;
menuMC.data = nav_array[menuIndex];
m_menu_array.push(menuMC);
menuMC.label_txt.text = menuMC.data.caption;
menuMC.label_txt.selectable = false;
menuMC.label_txt.mouseEnabled = false;
var subMC:MovieClip = new MovieClip();
m_parent_mc.addChild(subMC);
subMC.x = thisX;
subMC.y = menuMC.height;
subMC.subMenuVisible = true;
hideSubMenu(subMC);
subMC.parentMenu = menuMC;
subMC.visible = false;
var yPos:Number = thisY;
var temp_subnav_array:Array = menuMC.data.subnav_array;
var i:Number;
for (i = 0; i < temp_subnav_array.length; i++) {
var linkMC:MovieClip = new link_mc();
linkMC.buttonMode = true;
subMC.addChild(linkMC);
linkMC.x = 0;
linkMC.y = yPos;
linkMC.data = temp_subnav_array[i];
linkMC.label_txt.text = linkMC.data.caption;
linkMC.label_txt.mouseEnabled = false;
linkMC.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
yPos += linkMC.height;
}
var thisWidth:Number = subMC.width + 1;
var thisHeight:Number = subMC.height + 1;
subMC.graphics.beginFill(0x000000, 0);
subMC.graphics.moveTo(0, 0);
subMC.graphics.drawRect(0, 0, thisWidth, thisHeight);
subMC.graphics.endFill();
menuMC.childMenu = subMC;
thisX += menuMC.width;
}
var j:Number;
for (j in this.m_menu_array) {
var thisMenuItem:MovieClip = m_menu_array[j];
thisMenuItem.buttonMode = true;
thisMenuItem.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler);
thisMenuItem.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}
}
private function rollOverHandler(event:MouseEvent):void {
showSubMenu(event.currentTarget.childMenu);
}
private function mouseUpHandler(event:MouseEvent):void {
trace(event.currentTarget.data.href);
}
private function showSubMenu(target_mc:MovieClip):void {
var thisObj = this;
if (!target_mc.subMenuVisible) {
hideAllSubMenus();
target_mc.visible = true;
target_mc.subMenuVisible = true;
target_mc.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
}
}
private function mouseMoveHandler(event:MouseEvent):void {
var thisMC:MovieClip = event.currentTarget as MovieClip;
var subHit:Boolean = thisMC.hitTestPoint(event.stageX, event.stageY, true);
var menuHit:Boolean = thisMC.parentMenu.hitTestPoint(event.stageX, event.stageY, true);
if (!((subHit || menuHit) && thisMC.subMenuVisible)) {
thisObj.hideSubMenu(thisMC);
thisMC.removeEventListener(event.type, this);
}
}
private function hideSubMenu(target_mc:MovieClip):void {
if (target_mc.subMenuVisible) {
target_mc.visible = false;
target_mc.subMenuVisible = false;
}
}
private function hideAllSubMenus():void {
var i:int;
for (i in this.m_menu_array) {
hideSubMenu(this.m_menu_array[i].childMenu);
}
}
private function toggleSubMenu(target_mc:MovieClip):void {
(target_mc.subMenuVisible) ? hideSubMenu(target_mc) : showSubMenu(target_mc);
}
}
}
this is XML:
Actionscript Code:
<?xml version="1.0" encoding="iso-8859-1" ?>
<navigation>
<menu name="Home" href="/home/" />
<menu name="Tutorials" href="/tutorials/">
<submenu name="Flash" href="/tutorials/flash/" />
<submenu name="ActionScript" href="/tutorials/actionscript/" />
</menu>
<menu name="Reviews" href="/reviews/">
<submenu name="Books" href="/reviews/books/" />
<submenu name="Software" href="/reviews/software/" />
</menu>
</navigation>
Best regards
George
georgmorb@yahoo.com