/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2)
+ * Copyright (C) 2015 The Jalview Authors
*
* This file is part of Jalview.
*
* Jalview is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
*
* Jalview is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.appletgui;
import java.awt.PopupMenu;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
-import java.util.Enumeration;
-import java.util.Hashtable;
+import java.util.HashMap;
+import java.util.Map;
/**
- * This class implements a pattern form embedding toolbars as a panel with
- * popups for situations where the system menu bar is either invisible or
+ * This class implements a pattern for embedding toolbars as a panel with popups
+ * for situations where the system menu bar is either invisible or
* inappropriate. It was derived from the code for embedding the jalview applet
* alignFrame as a component on the web-page, which requires the local
* alignFrame menu to be attached to that panel rather than placed on the parent
*/
public class EmbmenuFrame extends Frame implements MouseListener
{
+ protected static final Font FONT_ARIAL_PLAIN_11 = new Font("Arial",
+ Font.PLAIN, 11);
+
+ public static final Font DEFAULT_MENU_FONT = FONT_ARIAL_PLAIN_11;
+
/**
* map from labels to popup menus for the embedded menubar
*/
- protected Hashtable embeddedPopup;
+ protected Map<Label, PopupMenu> embeddedPopup = new HashMap<Label, PopupMenu>();
/**
* the embedded menu is built on this and should be added to the frame at the
// DEBUG Hint: can test embedded menus by inserting true here.
if (new jalview.util.Platform().isAMac())
{
- // Build the embedded menu panel
- embeddedMenu = makeEmbeddedPopupMenu(topMenuBar, "Arial", Font.PLAIN,
- 10, true); // try to pickup system font.
+ // Build the embedded menu panel, allowing override with system font
+ embeddedMenu = makeEmbeddedPopupMenu(topMenuBar, true, false);
setMenuBar(null);
- // add the components to the TreePanel area.
+ // add the components to the Panel area.
add(embeddedMenu, BorderLayout.NORTH);
- tobeAdjusted.setSize(getSize().width, getSize().height
- - embeddedMenu.HEIGHT);
+ tobeAdjusted.setSize(getSize().width,
+ getSize().height - embeddedMenu.getHeight());
return true;
}
return false;
}
/**
- * move all menus on menuBar onto embeddedMenu. embeddedPopup is used to store
- * the popups for each menu removed from the menuBar and added to the panel.
- * NOTE: it is up to the caller to remove menuBar from the Frame if it is
- * already attached.
- *
- * @param menuBar
- * @param fn
- * @param fstyle
- * @param fsz
- * @param overrideFonts
- * true if we take the menuBar fonts in preference to the supplied
- * defaults
- * @return the embedded menu instance to be added to the frame.
- */
- protected Panel makeEmbeddedPopupMenu(MenuBar menuBar, String fn,
- int fstyle, int fsz, boolean overrideFonts)
- {
- return makeEmbeddedPopupMenu(menuBar, fn, fstyle, fsz, overrideFonts,
- false);
- }
-
- /**
* Create or add elements to the embedded menu from menuBar. This removes all
* menu from menuBar and it is up to the caller to remove the now useless
* menuBar from the Frame if it is already attached.
*
* @param menuBar
- * @param fn
- * @param fstyle
- * @param fsz
* @param overrideFonts
* @param append
* true means existing menu will be emptied before adding new
* elements
* @return
*/
- protected Panel makeEmbeddedPopupMenu(MenuBar menuBar, String fn,
- int fstyle, int fsz, boolean overrideFonts, boolean append)
+ protected Panel makeEmbeddedPopupMenu(MenuBar menuBar,
+ boolean overrideFonts, boolean append)
{
if (!append)
{
- if (embeddedPopup != null)
- {
- embeddedPopup.clear(); // TODO: check if j1.1
- }
+ embeddedPopup.clear(); // TODO: check if j1.1
if (embeddedMenu != null)
{
embeddedMenu.removeAll();
}
}
- if (embeddedPopup == null)
- {
- embeddedPopup = new Hashtable();
- }
-
- embeddedMenu = makeEmbeddedPopupMenu(menuBar, fn, fstyle, fsz,
- overrideFonts, embeddedPopup, new Panel(), this);
+ embeddedMenu = makeEmbeddedPopupMenu(menuBar, DEFAULT_MENU_FONT,
+ overrideFonts, new Panel(), this);
return embeddedMenu;
}
*
* @param menuBar
* must be non-null
- * @param fn
- * @param fstyle
- * @param fsz
+ * @param font
* @param overrideFonts
- * @param embeddedPopup
- * must be non-null
* @param embeddedMenu
* if null, a new panel will be created and returned
* @param clickHandler
* embeddedPopup and embeddedMenu
* @return the panel instance for convenience.
*/
- protected Panel makeEmbeddedPopupMenu(MenuBar menuBar, String fn,
- int fstyle, int fsz, boolean overrideFonts,
- Hashtable embeddedPopup, Panel embeddedMenu,
+ protected Panel makeEmbeddedPopupMenu(MenuBar menuBar, Font font,
+ boolean overrideFonts, Panel embeddedMenu,
MouseListener clickHandler)
{
- if (embeddedPopup == null)
- {
- throw new Error(
- "Implementation error - embeddedPopup must be non-null");
- }
if (overrideFonts)
{
Font mbf = menuBar.getFont();
if (mbf != null)
{
- fn = mbf.getName();
- fstyle = mbf.getStyle();
- fsz = mbf.getSize();
+ font = mbf;
}
}
if (embeddedMenu == null)
+ {
embeddedMenu = new Panel();
+ }
FlowLayout flowLayout1 = new FlowLayout();
embeddedMenu.setBackground(Color.lightGray);
embeddedMenu.setLayout(flowLayout1);
{
Menu mi = menuBar.getMenu(mbi);
Label elab = new Label(mi.getLabel());
- elab.setFont(new java.awt.Font(fn, fstyle, fsz));
+ elab.setFont(font);
// add the menu entries
PopupMenu popup = new PopupMenu();
int m, mSize = mi.getItemCount();
*/
PopupMenu getPopupMenu(Label source)
{
- return (PopupMenu) embeddedPopup.get(source);
+ return embeddedPopup.get(source);
}
public void mouseClicked(MouseEvent evt)
{
if (embeddedPopup != null)
{
- Enumeration e = embeddedPopup.keys();
- while (e.hasMoreElements())
+ for (Label lb : embeddedPopup.keySet())
{
- Label lb = (Label) e.nextElement();
lb.removeMouseListener(this);
}
embeddedPopup.clear();