652 lines · 11.1 KB · Java
RawDownload
package inferno.awt; import java.awt.*;import java.applet.*;import java.awt.event.*;import java.awt.peer.*;import inferno.awt.*; public class iPopupMenuPeer implements PopupMenuPeer,zPopupMenuParent {    PopupMenu     target;    Window child;     public void show(Event e)    {     Object o=e.target;      if (o instanceof Component)     {      Component c=(Component)o;      Point pc=c.getLocationOnScreen();      Container p;       if (c instanceof Container)      p=(Container)c;      else      p=c.getParent();       if (p!=null)      {       Window w=null;        while (true)       {         if (p instanceof Frame)         {          Frame f=(Frame)p;           Point pf=f.getLocationOnScreen();           closeChild(child);           child=new zPopupMenu(f,this,target,pc.x+e.x-pf.x,pc.y+e.y-pf.y);          child.pack();          child.setVisible(true);           break;        }        else        if (p instanceof Applet)        {         Applet a=(Applet)p;          break;        }         p=p.getParent();         if (p==null) break;       }        }        }      }     public void delItem(int item)    {     }      public void addItem(MenuItem item)    {     }     public void addSeparator()    {    }     public void disable()    {     }     public void enable()    {     }     public void setEnabled(boolean state)    {     }     public void setLabel(String label)    {     }      public void closeChild(Window w)    {     if (child!=null && child==w)     {      child.setVisible(false);      child.dispose();      child=null;     }    }     public void closeEverything()        {          closeChild(child);        }     public iPopupMenuPeer(PopupMenu target) {        this.target = target;    }     public void dispose()    {    } } class zPopupMenu extends Window implements ComponentListener,zPopupMenuParent{     zPopupMenuDisplay menudisplay;     zPopupMenuParent ancestor;     int xoffset,yoffset;   public zPopupMenu(Frame f,zPopupMenuParent ancestor,Menu menu,int xoffset,int yoffset){         super(f);         this.xoffset=xoffset;         this.yoffset=yoffset;         this.ancestor=ancestor;         Point p=f.getLocation();         p.translate(this.xoffset,this.yoffset);         setLocation(p);         f.addComponentListener(this);         this.menudisplay=new zPopupMenuDisplay(menu);         add(this.menudisplay,BorderLayout.CENTER);         //System.out.println("zPopupMenu Called: " + this);  }   public void closeChild(Window w)  {   if (menudisplay!=null)   {       if (!menudisplay.gotFocus() && ancestor!=null)       ancestor.closeChild(this);       else       menudisplay.closeChild(w);   }  }  public void closeEverything(){        if (ancestor!=null)        ancestor.closeEverything();}          public boolean gotFocus()  {   if (menudisplay==null)   return false;   else   return menudisplay.gotFocus();   }   public void componentHidden(ComponentEvent e)  {   }   public void componentMoved(ComponentEvent e)  {   Point p=e.getComponent().getLocation();   p.translate(xoffset,yoffset);   setLocation(p);  }   public void componentResized(ComponentEvent e)  {   }   public void componentShown(ComponentEvent e)  {   }   public void dispose()  {  if (menudisplay!=null)  {   menudisplay.closeChild(this);  }   super.dispose();  } } class zPopupMenuDisplay extends Canvas implementsMouseListener,MouseMotionListener,FocusListener{  zPopupMenuObject menuObjects[];  zPopupMenuObject selectedMenuObject;  zPopupMenu child;  int menuObjectCount;  Dimension pSize;  boolean focus;  Menu menu;    static Color highlight  = SystemColor.controlHighlight;    static Color light = SystemColor.controlLtHighlight;    static Color medium = SystemColor.controlShadow;    static Color dark = SystemColor.controlDkShadow;      static final int TickBoxSize=13;     static final int TickLabelGap=4;     static final int SeparatorHeight=6;    public zPopupMenuDisplay(Menu menu)   {   super();   setMenu(menu);         addMouseListener(this);         addMouseMotionListener(this);         /*addKeyListener(this);*/         addFocusListener(this);   }     public boolean isFocusTraversable() {        return false;    }   void setMenu(Menu menu)  {    int maxwidth=0;    int yy=4;    int xx=4;    this.menu=menu;     menuObjectCount=menu.getItemCount();     selectedMenuObject=null;     if (menuObjectCount==0)    menuObjects=null;    else    {    menuObjects=new zPopupMenuObject[menuObjectCount];     boolean submenu=false;    for (int i=0;i<menuObjectCount;i++)    {     MenuItem mi=menu.getItem(i);     String label=mi.getLabel();    if (!submenu && mi instanceof Menu) submenu=true;      if (!label.equals("-"))     {      Font f=mi.getFont();      FontMetrics fm=getFontMetrics(f);  maxwidth=Math.max(maxwidth,TickBoxSize+TickLabelGap+fm.stringWidth(label));      }     }    maxwidth+=2; // For outside lines    if (submenu) maxwidth+=8;    for (int i=0;i<menuObjectCount;i++)   {     MenuItem mi=menu.getItem(i);     String label=mi.getLabel();    int h;      if (label.equals("-"))    {     h=SeparatorHeight;     // Height         menuObjects[i]=new zPopupMenuSeparator(new Rectangle(xx,yy,maxwidth,h));     }    else    {     Font f=mi.getFont();     FontMetrics fm=getFontMetrics(f);     h=Math.max(fm.getHeight(),TickBoxSize)+4; //Height         menuObjects[i]=new zPopupMenuText(mi,new Rectangle(xx,yy,maxwidth,h));     }     yy+=h;     }     }    pSize=new Dimension(xx+maxwidth+4,yy+4);  }   public Dimension getPreferredSize()  {   return pSize;  }    public void paint(Graphics g)  {   Dimension d=getSize();    g.setColor(SystemColor.menu);    Misc.Draw3DArea(0,0,d.width,d.height,g);    for (int i=0;i<menuObjectCount;i++)   menuObjects[i].paint(g,0);   }   void closeChild()  {   closeChild(child);  }   void closeChild(Window w)  {     if (child!=null && child==w)     {      child.setVisible(false);      child.dispose();      child=null;     }  }             public void mouseClicked(MouseEvent e)  {  }   public void mouseEntered(MouseEvent e)  {  }   public void mouseExited(MouseEvent e)  {  }   public void mousePressed(MouseEvent e)  {  }   public void mouseReleased(MouseEvent e)  {   if (selectedMenuObject!=null && selectedMenuObject instanceof zPopupMenuText)   {   MenuItem menuItem=((zPopupMenuText)selectedMenuObject).item;   if (menuItem.isEnabled() && !(menuItem instanceof Menu))   {   String actionCommand=menuItem.getActionCommand();   iToolkit.postEvent(new ActionEvent(menuItem, ActionEvent.ACTION_PERFORMED,                          actionCommand));    zPopupMenu w=(zPopupMenu)getParent();    Frame f=(Frame)w.getParent();    f.requestFocus();        w.closeEverything();       }   }  }   public void mouseMoved(MouseEvent e)  {   if (!focus)   {    focus=true;    requestFocus();   }    if (selectedMenuObject==null ||   !selectedMenuObject.area.contains(e.getPoint()))   {    Graphics g=getGraphics();    if (selectedMenuObject!=null)    {     selectedMenuObject.paint(g,0);     selectedMenuObject=null;     closeChild(child);    }     for (int i=0;i<menuObjectCount;i++)     if (menuObjects[i].area.contains(e.getPoint()))     {     int mode=1;        selectedMenuObject=menuObjects[i];   if (selectedMenuObject instanceof zPopupMenuText)   {    zPopupMenuText mo=(zPopupMenuText)selectedMenuObject;      if (mo.item.isEnabled())     {    zPopupMenu w=(zPopupMenu)getParent();    Frame f=(Frame)w.getParent();     if (mo.item instanceof Menu)    {      int xx=w.xoffset+mo.area.x+mo.area.width;      int yy=w.yoffset+mo.area.y;     Menu menu=(Menu)mo.item;      mode=-1;         zPopupMenu newChild=new zPopupMenu(f,w,menu,xx,yy);        newChild.pack();        newChild.setVisible(true);       closeChild(child);       child=newChild;     }   }     selectedMenuObject.paint(g,mode);     }       break;     }      g.dispose();   }  }   public void mouseDragged(MouseEvent e)  {   mouseMoved(e);  }   public boolean gotFocus()  {   if (focus)   return true;   else   if (child==null)   return false;   else   return child.gotFocus();   }

Lines 1–500 of 652.