Cascading Menu

I have started making a cascading style menu… It works. But surely there must be an easier way than this!?? Anyone has any ideas?

Thanks

// CascadeMenu.js 
private var level2a : boolean;
private var level2b : boolean; 
private var level2c : boolean;

private var level3ai : boolean;
private var level3aii : boolean;
private var level3aiii : boolean;

private var level3bi : boolean;
private var level3bii : boolean;
private var level3biii : boolean;
private var level3biv : boolean;
  
function OnGUI (){
	
// LEVEL ONE LEVEL ONE LEVEL ONE LEVEL ONE
   
if (GUI.Button (Rect (150, 0, 100, 30), "A")){ 
   		 level2a = !level2a;
   		 level2b = false;
   		 level2c = false;
   		 level3ai = false;
   		 level3aii = false;
   		 level3aiii = false; 
   		 level3bi = false;
   		 level3bii = false;
   		 level3biii = false; 
   		 level3biv = false;     
} 
   
if (GUI.Button (Rect (150, 30, 100, 30), "B")){ 
   		level2a = false;
   		level2b = !level2b;
        level2c = false;
        level3ai = false;
   		level3aii = false;
   		level3aiii = false;
   		level3bi = false;
   		level3bii = false;
   		level3biii = false;
   		level3biv = false; 
} 
    
if (GUI.Button (Rect (150, 60, 100, 30), "C")){ 
   		level2a = false;
   		level2b = false;
   		level2c = !level2c;
   		level3ai = false;
   		level3aii = false;         
        level3aiii = false;
        level3bi = false;
   		level3bii = false;
   		level3biii = false;
   		level3biv = false; 
}

//LEVEL 2 LEVEL 2 LEVEL 2 LEVEL 2

if(level2a == true){ 
  
         if (GUI.Button (Rect (250, 0, 100, 30), "a2")){ 
         level3ai = !level3ai;
         level3aii = false; 
         level3aiii = false;
         }  
         if (GUI.Button (Rect (250, 30, 100, 30), "a2")){ 
         level3ai = false;	
         level3aii = !level3aii;
         level3aiii = false;
         } 
         if (GUI.Button (Rect (250, 60, 100, 30), "a2")){ 
         level3ai = false;	
         level3aii = false;
         level3aiii = !level3aiii;
         }
}
     
if(level2b == true){
    
         if (GUI.Button (Rect (250, 30, 100, 30), "b2")){
         level3bi = !level3bi;
         level3bii = false; 
         level3biii = false;
         level3biv = false;    
         } 
       
         if (GUI.Button (Rect (250, 60, 100, 30), "b2")){
         level3bi = false;	
         level3bii = !level3bii;
         level3biii = false;
         level3biv = false; 
         } 
          
         if (GUI.Button (Rect (250, 90, 100, 30), "b2")){
         level3bi = false;	
         level3bii = false;
         level3biii = !level3biii;
         level3biv = false; 
         } 
          
         if (GUI.Button (Rect (250, 120, 100, 30), "b2")){
         level3bi = false;	
         level3bii = false;
         level3biii = false;
         level3biv = !level3biv;
         } 
}

if(level2c == true){

         if (GUI.Button (Rect (250, 60, 100, 30), "c2")){    
         } 
       
         if (GUI.Button (Rect (250, 90, 100, 30), "c2")){ 
         } 
          
         if (GUI.Button (Rect (250, 120, 100, 30), "c2")){ 
         }
} 

//LEVEL 3 LEVEL 3 LEVEL 3 LEVEL 3   

if(level3ai == true){

         if (GUI.Button (Rect (350, 60, 100, 30), "a3i")){    
         } 
       
         if (GUI.Button (Rect (350, 90, 100, 30), "a3i")){ 
         } 
          
         if (GUI.Button (Rect (350, 120, 100, 30), "a3i")){ 
         }
}

if(level3aii == true){

         if (GUI.Button (Rect (350, 60, 100, 30), "a3ii")){    
         } 
       
         if (GUI.Button (Rect (350, 90, 100, 30), "a3ii")){ 
         } 
          
         if (GUI.Button (Rect (350, 120, 100, 30), "a3ii")){ 
         }
}

if(level3aiii == true){

         if (GUI.Button (Rect (350, 60, 100, 30), "a3iii")){    
         } 
       
         if (GUI.Button (Rect (350, 90, 100, 30), "a3iii")){ 
         } 
          
         if (GUI.Button (Rect (350, 120, 100, 30), "a3iii")){ 
         }
         
         if (GUI.Button (Rect (350, 150, 100, 30), "a3iii")){ 
         }
}

if(level3bi == true){

         if (GUI.Button (Rect (350, 60, 100, 30), "b3i")){    
         } 
       
         if (GUI.Button (Rect (350, 90, 100, 30), "b3i")){ 
         } 
          
         if (GUI.Button (Rect (350, 120, 100, 30), "b3i")){ 
         }
}

if(level3bii == true){

         if (GUI.Button (Rect (350, 60, 100, 30), "b3ii")){    
         } 
       
         if (GUI.Button (Rect (350, 90, 100, 30), "b3ii")){ 
         } 
          
         if (GUI.Button (Rect (350, 120, 100, 30), "b3ii")){ 
         }
}

if(level3biii == true){

         if (GUI.Button (Rect (350, 60, 100, 30), "b3iii")){    
         } 
       
         if (GUI.Button (Rect (350, 90, 100, 30), "b3iii")){ 
         } 
          
         if (GUI.Button (Rect (350, 120, 100, 30), "b3iii")){ 
         }
}

if(level3biv == true){

         if (GUI.Button (Rect (350, 60, 100, 30), "b3iv")){    
         } 
       
         if (GUI.Button (Rect (350, 90, 100, 30), "b3iv")){ 
         } 
          
         if (GUI.Button (Rect (350, 120, 100, 30), "b3iv")){ 
         }
}

}

First thing I see is that your code would be a lot easier to read if you enumerated a bitvector instead of 10 separate bools.

Your menu selection code would then compress down to something akin to.

if (GUI.Button (Rect (150, 0, 100, 30), "A"))
             menuStatus_BitV = menuItem_LevelOne;

Hi Quietus

Thanks for the suggestion. I just searched bitvector on the forums and came up with bupkiss. How would you implement that?

Search google. There are tons of bitfield classes around for both javascript and C#. Most networking libraries have highly tuned versions either built in or as a utility class.

You replace your large set of related but separate bools with testing individual bits in the same related set stored within a short or int. You can then replace those huge sets of state changes you have when a user clicks a button with a simple bit mask.

They’re perfect for anything that has less than 64 states.

In fact with a quick search it looks like System.Collections actually has a bitvector class built in.

:? I don’t understand!!! Web design is soooo much easier.

You’d think a dropdown menu would be piece of piss. :frowning:

Well, it might be if you use Eric5h5’s popup script from the Unify wiki. I’m not sure if it’s exactly what you want, but it would be a good starting point at least.