0 Replies Latest reply on Oct 20, 2010 9:03 AM by daymonic

    help needed to rewrite code so main menus move down to make way for subs

    daymonic

      Can anybody please help me (slightly) alter some code.

       

      I am working on a vertical menu with sub's and need to alter the AS so that when a sub menu is selected, the main menus below it move down to accommodate the new sub menu.

       

      This is the code I am currently using is

       

      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;
              curr_item._y = y + i*curr_item._height;
              curr_item.trackAsMenu = true;
              
              // 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 + this._width -76;
                      var y = this._y + 55;
                      GenerateMenu(curr_menu, "submenu_mc", x, y, 10, 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.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[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(10, 10, 0, this);
              message_txt.text = "message area";
          }else{
              message_txt.text = "error:  XML not successfully loaded";
          }
      };
      // load first XML menu
      menu_xml.load("menu1.xml");
      
      
      Any help/feed back - even if its just to tell me Im asking for too much, would be incredibly appriciated.