X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FEmbmenuFrame.java;h=fdd7d46e16b3f1fd905a7a57acc054fe69af7f51;hb=838e4f91d4a53dd315640dbc9ff6ef7a815ee576;hp=858a5a3bb7f5843597d6862f3e561c10e6f087ce;hpb=59d682209891099d46b960509907c79e3fb276fe;p=jalview.git diff --git a/src/jalview/appletgui/EmbmenuFrame.java b/src/jalview/appletgui/EmbmenuFrame.java index 858a5a3..fdd7d46 100644 --- a/src/jalview/appletgui/EmbmenuFrame.java +++ b/src/jalview/appletgui/EmbmenuFrame.java @@ -1,45 +1,44 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8) - * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b1) + * 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 . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.appletgui; import java.awt.BorderLayout; import java.awt.Color; -import java.awt.Container; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Frame; -import java.awt.GraphicsConfiguration; import java.awt.HeadlessException; import java.awt.Label; import java.awt.Menu; import java.awt.MenuBar; import java.awt.Panel; import java.awt.PopupMenu; -import java.awt.event.ActionListener; -import java.awt.event.ItemListener; 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 @@ -52,10 +51,15 @@ import java.util.Hashtable; */ 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 embeddedPopup = new HashMap(); /** * the embedded menu is built on this and should be added to the frame at the @@ -93,77 +97,43 @@ public class EmbmenuFrame extends Frame implements MouseListener // 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; } @@ -176,12 +146,8 @@ public class EmbmenuFrame extends Frame implements MouseListener * * @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 @@ -189,28 +155,22 @@ public class EmbmenuFrame extends Frame implements MouseListener * 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); @@ -219,7 +179,7 @@ public class EmbmenuFrame extends Frame implements MouseListener { 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(); @@ -260,7 +220,7 @@ public class EmbmenuFrame extends Frame implements MouseListener */ PopupMenu getPopupMenu(Label source) { - return (PopupMenu) embeddedPopup.get(source); + return embeddedPopup.get(source); } public void mouseClicked(MouseEvent evt) @@ -287,10 +247,8 @@ public class EmbmenuFrame extends Frame implements MouseListener { 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();