Source for gnu.java.awt.peer.qt.QtMenuPeer

   1: /* QtMenuPeer.java --
   2:    Copyright (C)  2005  Free Software Foundation, Inc.
   3: 
   4: This file is part of GNU Classpath.
   5: 
   6: GNU Classpath is free software; you can redistribute it and/or modify
   7: it under the terms of the GNU General Public License as published by
   8: the Free Software Foundation; either version 2, or (at your option)
   9: any later version.
  10: 
  11: GNU Classpath is distributed in the hope that it will be useful, but
  12: WITHOUT ANY WARRANTY; without even the implied warranty of
  13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14: General Public License for more details.
  15: 
  16: You should have received a copy of the GNU General Public License
  17: along with GNU Classpath; see the file COPYING.  If not, write to the
  18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  19: 02110-1301 USA.
  20: 
  21: Linking this library statically or dynamically with other modules is
  22: making a combined work based on this library.  Thus, the terms and
  23: conditions of the GNU General Public License cover the whole
  24: combination.
  25: 
  26: As a special exception, the copyright holders of this library give you
  27: permission to link this library with independent modules to produce an
  28: executable, regardless of the license terms of these independent
  29: modules, and to copy and distribute the resulting executable under
  30: terms of your choice, provided that you also meet, for each linked
  31: independent module, the terms and conditions of the license of that
  32: module.  An independent module is a module which is not derived from
  33: or based on this library.  If you modify this library, you may extend
  34: this exception to your version of the library, but you are not
  35: obligated to do so.  If you do not wish to do so, delete this
  36: exception statement from your version. */
  37: 
  38: package gnu.java.awt.peer.qt;
  39: 
  40: import java.awt.Menu;
  41: import java.awt.MenuItem;
  42: import java.awt.PopupMenu;
  43: import java.awt.event.ActionEvent;
  44: import java.awt.peer.MenuPeer;
  45: import java.util.Vector;
  46: 
  47: public class QtMenuPeer extends QtMenuComponentPeer implements MenuPeer
  48: {
  49:   Vector items;
  50:   boolean itemsAdded;
  51: 
  52:   public QtMenuPeer( QtToolkit kit, Menu owner )
  53:   {
  54:     super( kit, owner );
  55:     itemsAdded = false;
  56:   }
  57: 
  58:   protected native void init();
  59: 
  60:   protected void setup()
  61:   {
  62:     items = new Vector();
  63:     setLabel( ((Menu)owner).getLabel() );
  64:     if( ((Menu)owner).isTearOff() )
  65:       allowTearOff();
  66:   }
  67: 
  68:   // Recurse the menu tree adding items,
  69:   // called from the MenuBar addMenus() method, called from the Frame peer.
  70:   void addItems()
  71:   {
  72:     if(!itemsAdded)
  73:       {
  74:         Menu o = (Menu)owner;
  75:         for( int i=0; i < o.getItemCount(); i++ )
  76:           {
  77:             MenuItem ci = o.getItem(i);
  78:             if (ci instanceof Menu && ci.getPeer() != null)
  79:               ((QtMenuPeer)ci.getPeer()).addItems();
  80:             addItem( ci );
  81:           }
  82:         itemsAdded = true;
  83:       }
  84:   }
  85: 
  86:   private void fireClick()
  87:   {
  88:     ActionEvent e = new ActionEvent(owner,
  89:                                     ActionEvent.ACTION_PERFORMED,
  90:                                     ((Menu)owner).getActionCommand());
  91:     QtToolkit.eventQueue.postEvent(e);
  92:   }
  93: 
  94:   private native void allowTearOff();
  95: 
  96:   private native void insertSeperator();
  97: 
  98:   private native void insertItem(QtMenuItemPeer p);
  99: 
 100:   private native void insertMenu(QtMenuPeer menu);
 101: 
 102:   private native void delItem(long ptr);
 103: 
 104:   private void add(long ptr)
 105:   {
 106:     items.add(new Long(ptr));
 107:   }
 108: 
 109:   // ************ Public methods *********************
 110: 
 111:   public void addItem( MenuItem item )
 112:   {
 113:     if( item instanceof Menu || item instanceof PopupMenu)
 114:       insertMenu((QtMenuPeer)item.getPeer());
 115:     else
 116:       {
 117:         QtMenuItemPeer p = (QtMenuItemPeer)item.getPeer();
 118:         insertItem(p);
 119:       }
 120:   }
 121: 
 122:   public void addSeparator()
 123:   {
 124:     insertSeperator();
 125:   }
 126: 
 127:   public void delItem( int index )
 128:   {
 129:     long ptr = ((Long)items.elementAt(index)).longValue();
 130:     delItem(ptr);
 131:     items.removeElementAt(index);
 132:   }
 133: 
 134:   // Inherited methods..
 135: 
 136:   public void disable()
 137:   {
 138:     setEnabled(false);
 139:   }
 140: 
 141:   public void enable()
 142:   {
 143:     setEnabled(true);
 144:   }
 145: 
 146:   public native void setEnabled(boolean enabled);
 147: 
 148:   public native void setLabel(String text);
 149: }