906 lines · 17.6 KB · Java
RawDownload
     if (menuObjectCount==0)    menuObjects=null;    else    {    menuObjects=new zMenuObject[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 zMenuSeparator(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 zMenuText(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 (w!=null && w == child)     {      w.setVisible(false);      w.dispose();      w=null;     }     if (child!=null)     {      child.setVisible(false);      child.dispose();      child = null;     }       }    	   // Required by listener interface but not used  public void mouseClicked(MouseEvent e)  {  }   // Required by listener interface but not used  public void mouseEntered(MouseEvent e)  {  }   // Required by listener interface but not used  public void mouseExited(MouseEvent e)  {  }   // Required by listener interface but not used  public void mousePressed(MouseEvent e)  {  }   public void mouseReleased(MouseEvent e)  {   if (selectedMenuObject!=null && selectedMenuObject instanceof zMenuText)   {     MenuItem menuItem=((zMenuText)selectedMenuObject).item;     if (menuItem.isEnabled() && !(menuItem instanceof Menu))       {	 String actionCommand=menuItem.getActionCommand();	 iToolkit.postEvent(new ActionEvent(menuItem, ActionEvent.ACTION_PERFORMED,                          actionCommand));	 zMenuWindow w=(zMenuWindow)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 zMenuText)	 {	   zMenuText mo=(zMenuText)selectedMenuObject; 	   if (mo.item.isEnabled())	     {	       zMenuWindow w=(zMenuWindow)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; 		   zMenuWindow newChild=new zMenuWindow(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();   }   public void focusLost(FocusEvent e)  {   focus=false;   if (!gotFocus())   {    zMenuWindow m=(zMenuWindow)getParent();    if (m.ancestor!=null) m.ancestor.closeChild(m);   }  }   public void focusGained(FocusEvent e)  {   focus=true;   } } // base class for the menuObjects abstract class zMenuObject {      Rectangle area;       public zMenuObject()      {      }       public zMenuObject(Rectangle area)      {       this.area=area;      }       public abstract void paint(Graphics g,int mode); } // Standard item item class class zMenuText extends zMenuObject {      MenuItem item; public zMenuText(MenuItem item,Rectangle area){ super(area); this.item=item;}  void drawArrow(Graphics g,int x,int y){ for (int i=0;i<4;i++) {   g.drawLine(x,y+i,x+3-i,y+i);   if (i!=0)   g.drawLine(x,y-i,x+3-i,y-i); }} public void paint(Graphics g,int mode){     Font f=item.getFont();     FontMetrics fm=g.getFontMetrics(f);     int fa=fm.getAscent();     boolean enabled=item.isEnabled();     boolean submenu=item instanceof Menu;     boolean checked=(item instanceof CheckboxMenuItem?     ((CheckboxMenuItem)item).getState():false);     String s=item.getLabel();     int xx=area.x;     int yy=area.y;      g.setFont(f);     if (enabled)     {     g.setColor(SystemColor.menu);      if (mode!=0)      Misc.fill3DRect(area,mode>0,g);      else      g.fillRect(xx,yy,area.width,area.height);       xx+=2;      yy+=2;     g.setColor(SystemColor.menuText);     g.translate(-mode,-mode);     if (checked) Misc.drawTick(g,xx,yy,zMenuDisplay.TickBoxSize); g.drawString(s,zMenuDisplay.TickBoxSize+zMenuDisplay.TickLabelGap+xx,yy+fa);     if (submenu)     drawArrow(g,area.x+area.width-6,area.y+area.height/2);     g.translate(+mode,+mode);     }     else     {      xx+=2;      yy+=2;     if (checked)     {       g.setColor(SystemColor.controlLtHighlight);       Misc.drawTick(g,xx+1,yy+1,zMenuDisplay.TickBoxSize);       g.setColor(SystemColor.controlShadow);       Misc.drawTick(g,xx,yy,zMenuDisplay.TickBoxSize);     } Misc.drawDisabledString(s,zMenuDisplay.TickBoxSize+zMenuDisplay.TickLabelGap+xx,yy+fa,g);      if (submenu)      {       g.setColor(SystemColor.controlLtHighlight);       drawArrow(g,area.x+area.width-6+1,area.y+area.height/2+1);       g.setColor(SystemColor.controlShadow);       drawArrow(g,area.x+area.width-6,area.y+area.height/2);      }     }  } } // separator bar class zMenuSeparator extends zMenuObject { public zMenuSeparator(Rectangle area){ super(area);} public void paint(Graphics g,int mode){    int y=area.y+zMenuDisplay.SeparatorHeight/2-1;     g.setColor(zMenuDisplay.medium);    g.drawLine(area.x,y,area.x+area.width,y);     y+=1;     g.setColor(zMenuDisplay.light);    g.drawLine(area.x,y,area.x+area.width,y);  } } // The interface to look backwards to parent to close ourselves interface zMenuParent {            // Called by child (or parent) to close and delete itself       public void closeChild(Window W);        // Close all the windows back to the menubar	public void closeEverything(); }        

Lines 501–906 of 906. Previous lines