refactored embedded menu machinery
[jalview.git] / src / jalview / appletgui / AlignFrame.java
index 7e706d5..22537f6 100755 (executable)
@@ -33,8 +33,8 @@ import jalview.io.*;
 import jalview.schemes.*;
 
 public class AlignFrame
-    extends Frame implements ActionListener,
-    ItemListener, KeyListener, MouseListener
+    extends EmbmenuFrame implements ActionListener,
+    ItemListener, KeyListener
 {
   public AlignmentPanel alignPanel;
   public AlignViewport viewport;
@@ -2465,16 +2465,6 @@ public class AlignFrame
   MenuItem documentation = new MenuItem();
   MenuItem about = new MenuItem();
    CheckboxMenuItem seqLimits = new CheckboxMenuItem();
-  Panel embeddedMenu;
-  Label embeddedEdit;
-  Label embeddedSelect;
-  Label embeddedView;
-  Label embeddedFormat;
-  Label embeddedColour;
-  Label embeddedFile;
-  Label embeddedHelp;
-  Label embeddedCalculate;
-  FlowLayout flowLayout1;
 
   private void jbInit()
       throws Exception
@@ -2789,7 +2779,22 @@ public class AlignFrame
     selectMenu.add(invertColSel);
     selectMenu.add(deleteGroups);
   }
+  MenuItem featureSettings = new MenuItem();
+  CheckboxMenuItem sequenceFeatures = new CheckboxMenuItem();
+  MenuItem annotationColour = new MenuItem();
+  MenuItem invertColSel = new MenuItem();
+  Menu menu1 = new Menu();
+  MenuItem showColumns = new MenuItem();
+  MenuItem showSeqs = new MenuItem();
+  Menu menu2 = new Menu();
+  MenuItem hideColumns = new MenuItem();
+  MenuItem hideSequences = new MenuItem();
+  Menu formatMenu = new Menu();
+  Menu selectMenu = new Menu();
+  MenuItem newView = new MenuItem();
+
   /**
+   * Attach the alignFrame panels after embedding menus, if necessary.
    * This used to be called setEmbedded, but is now creates the 
    * dropdown menus in a platform independent manner
    * to avoid OSX/Mac menu appendage daftness.
@@ -2798,47 +2803,12 @@ public class AlignFrame
    */
   public void createAlignFrameWindow(boolean reallyEmbedded, String title)
   {
-    embeddedMenu = new Panel();
-    embeddedEdit = new Label("Edit");
-    embeddedSelect = new Label("Select");
-    embeddedView = new Label("View");
-    embeddedFormat = new Label("Format");
-    embeddedColour = new Label("Colour");
-    embeddedFile = new Label("File");
-    embeddedHelp = new Label("Help");
-    embeddedCalculate = new Label("Calculate");
-    flowLayout1 = new FlowLayout();
-    embeddedMenu.setBackground(Color.lightGray);
-    embeddedMenu.setLayout(flowLayout1);
-    embeddedEdit.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
-    embeddedSelect.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
-    embeddedView.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
-    embeddedFormat.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
-    embeddedColour.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
-    embeddedFile.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
-    embeddedHelp.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
-    embeddedCalculate.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
-    embeddedMenu.add(embeddedFile);
-    embeddedMenu.add(embeddedEdit);
-    embeddedMenu.add(embeddedSelect);
-    embeddedMenu.add(embeddedView);
-    embeddedMenu.add(embeddedFormat);
-    embeddedMenu.add(embeddedColour);
-    embeddedMenu.add(embeddedCalculate);
-    embeddedMenu.add(embeddedHelp);
-    flowLayout1.setAlignment(FlowLayout.LEFT);
-    flowLayout1.setHgap(2);
-    flowLayout1.setVgap(0);
-    embeddedFile.addMouseListener(this);
-    embeddedEdit.addMouseListener(this);
-    embeddedSelect.addMouseListener(this);
-    embeddedView.addMouseListener(this);
-    embeddedFormat.addMouseListener(this);
-    embeddedColour.addMouseListener(this);
-    embeddedCalculate.addMouseListener(this);
-    embeddedHelp.addMouseListener(this);
     if (reallyEmbedded)
     {
+      //////
+      // Explicly build the embedded menu panel for the on-page applet
+      //
+      embeddedMenu = makeEmbeddedPopupMenu(alignFrameMenuBar, "Arial", Font.PLAIN, 10, false); // use our own fonts.
       // view cannot be closed if its actually on the page
       fileMenu.remove(closeMenuItem);
       fileMenu.remove(3); // Remove Seperator
@@ -2852,17 +2822,14 @@ public class AlignFrame
       viewport.applet.add(alignPanel, BorderLayout.CENTER);
       viewport.applet.validate();
     } else {
-      if (new jalview.util.Platform().isAMac())
-      {
-        // TODO: try to modify the embeddedMenu display so it looks like a real toolbar menu
-        // TODO: modify click/mouse handler for embeddedMenu so it behaves more like a real pulldown menu toolbar
-        setMenuBar(null);// alignFramMenuBar);
-        // add the components to the AlignFrame area.
-        add(embeddedMenu, BorderLayout.NORTH);
+      ////////
+      // test and embed menu bar if necessary.
+      //
+      if (embedMenuIfNeeded(alignPanel)) {
+        // adjust for status bar height too
         alignPanel.setSize(getSize().width,
               getSize().height
-                - embeddedMenu.HEIGHT - statusBar.HEIGHT);
-        
+                - statusBar.HEIGHT);
       }
       add(statusBar, BorderLayout.SOUTH);
       add(alignPanel, BorderLayout.CENTER);
@@ -2871,94 +2838,4 @@ public class AlignFrame
                                          DEFAULT_HEIGHT);
     }
   }
-
-  PopupMenu filePopup, editPopup, searchPopup,
-  viewPopup, formatPopup, colourPopup, calculatePopup, helpPopup;
-  MenuItem featureSettings = new MenuItem();
-  CheckboxMenuItem sequenceFeatures = new CheckboxMenuItem();
-  MenuItem annotationColour = new MenuItem();
-  MenuItem invertColSel = new MenuItem();
-  Menu menu1 = new Menu();
-  MenuItem showColumns = new MenuItem();
-  MenuItem showSeqs = new MenuItem();
-  Menu menu2 = new Menu();
-  MenuItem hideColumns = new MenuItem();
-  MenuItem hideSequences = new MenuItem();
-  Menu formatMenu = new Menu();
-  Menu selectMenu = new Menu();
-  MenuItem newView = new MenuItem();
-
-  public void mousePressed(MouseEvent evt)
-  {
-    PopupMenu popup = null;
-    Label source = (Label) evt.getSource();
-    if (source == embeddedFile)
-    {
-      popup = filePopup = genPopupMenu(filePopup, fileMenu);
-    }
-    else if (source == embeddedEdit)
-    {
-      popup = editPopup = genPopupMenu(editPopup, editMenu);
-    }
-    else if (source == embeddedSelect)
-    {
-      popup = searchPopup = genPopupMenu(searchPopup, selectMenu);
-    }
-    else if (source == embeddedView)
-    {
-      popup = viewPopup = genPopupMenu(viewPopup, viewMenu);
-    }
-    else if (source == embeddedFormat)
-    {
-      popup = formatPopup = genPopupMenu(formatPopup, formatMenu);
-    }
-    else if (source == embeddedColour)
-    {
-      popup = colourPopup = genPopupMenu(colourPopup, colourMenu);
-    }
-    else if (source == embeddedCalculate)
-    {
-      popup = calculatePopup = genPopupMenu(calculatePopup, calculateMenu);
-    }
-    else if (source == embeddedHelp)
-    {
-      popup = helpPopup = genPopupMenu(helpPopup, helpMenu);
-    }
-
-    embeddedMenu.add(popup);
-    popup.show(embeddedMenu,
-               source.getBounds().x,
-               source.getBounds().y + source.getBounds().getSize().height);
-  }
-
-  PopupMenu genPopupMenu(PopupMenu popup, Menu original)
-  {
-    if (popup != null)
-    {
-      return popup;
-    }
-    popup = new PopupMenu();
-    int m, mSize = original.getItemCount();
-    for (m = 0; m < mSize; m++)
-    {
-      popup.add(original.getItem(m));
-      mSize--;
-      m--;
-    }
-
-    return popup;
-  }
-
-  public void mouseClicked(MouseEvent evt)
-  {}
-
-  public void mouseReleased(MouseEvent evt)
-  {}
-
-  public void mouseEntered(MouseEvent evt)
-  {}
-
-  public void mouseExited(MouseEvent evt)
-  {}
-
 }