Back to index

wims  3.65+svn20090927
MacroMenu.java
Go to the documentation of this file.
00001 /*
00002  * Created on 07.01.2006
00003  *
00004  */
00005 package rene.zirkel.macro;
00006 
00007 import java.awt.*;
00008 import java.util.*;
00009 import rene.gui.*;
00010 
00011 public class MacroMenu 
00012 {      Vector V; // Vector of MacroMenu or MacroItem
00013        Menu FatherMenu; // awt.Menu containing this MacroMenu
00014        String Name; // Name of this MacroMenu (as displayed in the Menu)
00015        MacroMenu Father;
00016 
00017        public MacroMenu (Menu o, String name, MacroMenu father)
00018        {      V=new Vector();
00019               FatherMenu=o;
00020               Name=name;
00021               Father=father;
00022        }
00023        
00031        public MacroItem add (Macro m, String name)
00032        {      String s=name;
00033               int n=s.indexOf("/");
00034               if (n<0)
00035               {      MyMenuItem item;
00036                      if (FatherMenu==null)
00037                             item=null;
00038                      else 
00039                      {      if (m.isProtected())
00040                                    item=new MyMenuItem("- "+name+" -");
00041                             else 
00042                                    item=new MyMenuItem(name);
00043                             FatherMenu.add(item);
00044                      }
00045                      MacroItem mi=new MacroItem(m,item);
00046                      mi.Name=name;
00047                      V.addElement(mi);
00048                      return mi;
00049               }
00050               String menu=s.substring(0,n);
00051               s=s.substring(n+1);
00052               Enumeration e=V.elements();
00053               while (e.hasMoreElements())
00054               {      Object o=e.nextElement();
00055                      if (o instanceof MacroMenu 
00056                             && ((MacroMenu)o).getName().equals(menu))
00057                      {      return ((MacroMenu)o).add(m,s);
00058                      }
00059               }
00060               MyMenu mm;
00061               if (FatherMenu==null)
00062                      mm=null;
00063               else
00064               {      mm=new MyMenu(menu);
00065                      FatherMenu.add(mm);
00066               }
00067               MacroMenu macm=new MacroMenu(mm,menu,this);
00068               V.addElement(macm);
00069               return macm.add(m,s);
00070        }
00071        
00072        public boolean remove (MacroItem item)
00073        {      Enumeration e=V.elements();
00074               while (e.hasMoreElements())
00075               {      Object o=e.nextElement();
00076                      if (o instanceof MacroMenu)
00077                      {      boolean res=((MacroMenu)o).remove(item);
00078                             if (res)
00079                             {      if (((MacroMenu)o).isEmpty())
00080                                    {      V.removeElement(o);
00081                                           if (FatherMenu!=null)
00082                                                  FatherMenu.remove(((MacroMenu)o).FatherMenu);
00083                                    }
00084                                    return true;
00085                             }
00086                      }
00087                      else
00088                      {      if (((MacroItem)o).M==item.M)
00089                             {      V.removeElement(o);
00090                                    if (FatherMenu!=null)
00091                                           FatherMenu.remove(item.I);
00092                                    return true;
00093                             }
00094                      }
00095               }
00096               return false;
00097        }
00098        
00099        public boolean replace (MacroItem item, MacroItem newitem)
00100        {      Enumeration e=V.elements();
00101               while (e.hasMoreElements())
00102               {      Object o=e.nextElement();
00103                      if (o instanceof MacroMenu)
00104                      {      boolean res=((MacroMenu)o).replace(item,newitem);
00105                             if (res) break;
00106                      }
00107                      else
00108                      {      if (((MacroItem)o).M==item.M)
00109                             {      ((MacroItem)o).M=newitem.M;
00110                                    return true;
00111                             }
00112                      }
00113               }
00114               return false;
00115        }
00116        
00117        
00118        public String getName ()
00119        {      return Name;
00120        }
00121        
00122        public boolean isEmpty ()
00123        {      return V.size()==0;
00124        }
00125 
00126        public Vector getV ()
00127        {      return V;
00128        }
00129        
00130        public boolean hasSubmenus ()
00131        {      Enumeration e=V.elements();
00132               while (e.hasMoreElements())
00133               {      Object o=e.nextElement();
00134                      if (o instanceof MacroMenu) return true;
00135               }
00136               return false;
00137        }
00138 
00139        public String getFullName ()
00140        {      String s=Name;
00141               MacroMenu m=this;
00142               while (m.Father!=null)
00143               {      m=m.Father;
00144                      s=m.Name+"/"+s;
00145               }
00146               return s;
00147        }
00148        
00149        public MacroMenu findWithFullName (String name)
00150        {      int n=name.indexOf("/");
00151               if (n<0)
00152               {      if (name.equals(Name)) return this;
00153                      else return null;
00154               }
00155               if(!name.substring(0,n).equals(Name)) return null;      
00156               name=name.substring(n+1);
00157               Enumeration e=V.elements();
00158               while (e.hasMoreElements())
00159               {      Object o=e.nextElement();
00160                      if (o instanceof MacroMenu)
00161                      {      MacroMenu m=(MacroMenu)o;
00162                             MacroMenu res=m.findWithFullName(name);
00163                             if (res!=null) return res;
00164                      }
00165               }
00166               return null;
00167        }
00168 }