Source for gnu.java.awt.peer.gtk.GtkMenuBarPeer

   1: /* GtkMenuBarPeer.java -- Implements MenuBarPeer with GTK+
   2:    Copyright (C) 1999, 2005, 2006  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: 
  39: package gnu.java.awt.peer.gtk;
  40: 
  41: import java.awt.Menu;
  42: import java.awt.MenuBar;
  43: import java.awt.peer.MenuBarPeer;
  44: 
  45: public class GtkMenuBarPeer extends GtkMenuComponentPeer
  46:   implements MenuBarPeer
  47: {
  48:   /** Whether we already have an help menu set on this peer. */
  49:   private boolean hasHelpMenu;
  50: 
  51:   /**
  52:    * Creates the gtk+ widget for this peer and puts it in the nsa
  53:    * table. Called from the (super class) constructor.
  54:    */
  55:   protected native void create();
  56: 
  57:   /**
  58:    * Adds a new GtkMenuPeer to the end of the GtkMenuBarPeer.
  59:    */
  60:   private native void addMenu(GtkMenuPeer menu);
  61: 
  62:   /**
  63:    * Creates a new GtkMenuBarPeer associated with the given MenuBar.
  64:    */
  65:   public GtkMenuBarPeer(MenuBar menubar)
  66:   {
  67:     super(menubar);
  68:   }
  69: 
  70:   /**
  71:    * Adds a help menu to this MenuBar. Gnome styleguides say the help
  72:    * menu is just the last item in the menubar (they are NOT right
  73:    * justified).
  74:    */
  75:   public void addHelpMenu (Menu menu)
  76:   {
  77:     if (hasHelpMenu)
  78:       {
  79:         // Remove the (help) menu, which is after all the other items.
  80:         delMenu(((MenuBar) awtWidget).getMenuCount());
  81:         hasHelpMenu = false;
  82:       }
  83: 
  84:     if (menu != null)
  85:       {
  86:         addMenu(menu);
  87:         hasHelpMenu = true;
  88:       }
  89:   }
  90: 
  91:   /**
  92:    * Deletes the menu at (zero-based) index from this GtkMenuBar.
  93:    */
  94:   public native void delMenu(int index);
  95: 
  96:   /**
  97:    * Adds the GtkMenuPeer associated with the Menu to this
  98:    * GtkMenuBarPeer. Makes sure that any help menus keep the last menu
  99:    * on the bar.
 100:    */
 101:   public void addMenu(Menu m)
 102:   {
 103:     // Make sure the help menu is the last one.
 104:     if (hasHelpMenu)
 105:       {
 106:         addHelpMenu(null);
 107:         addMenu((GtkMenuPeer) m.getPeer());
 108:         addHelpMenu(((MenuBar) awtWidget).getHelpMenu());
 109:       }
 110:     else
 111:       addMenu((GtkMenuPeer) m.getPeer());
 112:   }
 113: }