JAL-2361 extract methods to (re-)build colour menu
[jalview.git] / src / jalview / jbgui / GStructureViewer.java
index bd0f1de..daba592 100644 (file)
 package jalview.jbgui;
 
 import jalview.api.structures.JalviewStructureDisplayI;
+import jalview.gui.UserDefinedColours;
+import jalview.schemes.UserColourScheme;
 import jalview.util.MessageManager;
 
+import java.awt.BorderLayout;
 import java.awt.GridLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.util.Map;
 
 import javax.swing.ButtonGroup;
 import javax.swing.JInternalFrame;
@@ -41,49 +45,53 @@ public abstract class GStructureViewer extends JInternalFrame implements
 {
   // private AAStructureBindingModel bindingModel;
 
-  protected JMenu savemenu = new JMenu();
+  protected JMenu savemenu;
 
-  protected JMenu viewMenu = new JMenu();
+  protected JMenu viewMenu;
 
-  protected JMenu chainMenu = new JMenu();
+  protected JMenu colourMenu;
 
-  protected JMenu viewerActionMenu = new JMenu();
+  protected JMenu chainMenu;
 
-  protected JMenuItem alignStructs = new JMenuItem();
+  protected JMenu viewerActionMenu;
 
-  protected JMenuItem fitToWindow = new JMenuItem();
+  protected JMenuItem alignStructs;
 
-  protected JRadioButtonMenuItem seqColour = new JRadioButtonMenuItem();
+  protected JMenuItem fitToWindow;
 
-  protected JRadioButtonMenuItem chainColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem seqColour;
 
-  protected JRadioButtonMenuItem chargeColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem chainColour;
 
-  protected JRadioButtonMenuItem zappoColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem chargeColour;
 
-  protected JRadioButtonMenuItem taylorColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem zappoColour;
 
-  protected JRadioButtonMenuItem hydroColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem taylorColour;
 
-  protected JRadioButtonMenuItem strandColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem hydroColour;
 
-  protected JRadioButtonMenuItem helixColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem strandColour;
 
-  protected JRadioButtonMenuItem turnColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem helixColour;
 
-  protected JRadioButtonMenuItem buriedColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem turnColour;
 
-  protected JRadioButtonMenuItem purinePyrimidineColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem buriedColour;
 
-  protected JRadioButtonMenuItem userColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem nucleotideColour;
 
-  protected JRadioButtonMenuItem viewerColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem purinePyrimidineColour;
 
-  protected JMenuItem helpItem = new JMenuItem();
+  protected JRadioButtonMenuItem userColour;
 
-  protected JLabel statusBar = new JLabel();
+  protected JRadioButtonMenuItem viewerColour;
 
-  protected JPanel statusPanel = new JPanel();
+  protected JMenuItem helpItem;
+
+  protected JLabel statusBar;
+
+  protected JPanel statusPanel;
 
   /**
    * Constructor
@@ -107,6 +115,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
     JMenu fileMenu = new JMenu();
     fileMenu.setText(MessageManager.getString("action.file"));
 
+    savemenu = new JMenu();
     savemenu.setActionCommand(MessageManager.getString("action.save_image"));
     savemenu.setText(MessageManager.getString("action.save_as"));
 
@@ -153,10 +162,14 @@ public abstract class GStructureViewer extends JInternalFrame implements
         viewMapping_actionPerformed(actionEvent);
       }
     });
+
+    viewMenu = new JMenu();
     viewMenu.setText(MessageManager.getString("action.view"));
 
+    chainMenu = new JMenu();
     chainMenu.setText(MessageManager.getString("action.show_chain"));
 
+    fitToWindow = new JMenuItem();
     fitToWindow.setText(MessageManager.getString("label.fit_to_window"));
     fitToWindow.addActionListener(new ActionListener()
     {
@@ -167,7 +180,62 @@ public abstract class GStructureViewer extends JInternalFrame implements
       }
     });
 
-    JMenu colourMenu = new JMenu();
+    JMenu helpMenu = new JMenu();
+    helpMenu.setText(MessageManager.getString("action.help"));
+    helpItem = new JMenuItem();
+    helpItem.setText(MessageManager.getString("label.jmol_help"));
+    helpItem.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent actionEvent)
+      {
+        showHelp_actionPerformed(actionEvent);
+      }
+    });
+    alignStructs = new JMenuItem();
+    alignStructs
+            .setText(MessageManager.getString("label.align_structures"));
+    alignStructs.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent actionEvent)
+      {
+        alignStructs_actionPerformed(actionEvent);
+      }
+    });
+
+    viewerActionMenu = new JMenu(MessageManager.getString("label.jmol"));
+    viewerActionMenu.setVisible(false);
+    viewerActionMenu.add(alignStructs);
+    colourMenu = new JMenu();
+    buildColourMenu();
+    fileMenu.add(savemenu);
+    fileMenu.add(viewMapping);
+    savemenu.add(pdbFile);
+    savemenu.add(png);
+    savemenu.add(eps);
+    viewMenu.add(chainMenu);
+    helpMenu.add(helpItem);
+
+    menuBar.add(fileMenu);
+    menuBar.add(viewMenu);
+    menuBar.add(colourMenu);
+    menuBar.add(viewerActionMenu);
+    menuBar.add(helpMenu);
+
+    statusPanel = new JPanel();
+    statusPanel.setLayout(new GridLayout());
+    this.getContentPane().add(statusPanel, BorderLayout.SOUTH);
+    statusBar = new JLabel();
+    statusPanel.add(statusBar, null);
+  }
+
+  /**
+   * Builds the colour menu
+   */
+  protected void buildColourMenu()
+  {
+    colourMenu.removeAll();
     colourMenu.setText(MessageManager.getString("label.colours"));
 
     JMenuItem backGround = new JMenuItem();
@@ -181,6 +249,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
         backGround_actionPerformed(actionEvent);
       }
     });
+    seqColour = new JRadioButtonMenuItem();
     seqColour.setSelected(false);
     seqColour.setText(MessageManager.getString("action.by_sequence"));
     seqColour.addActionListener(new ActionListener()
@@ -191,6 +260,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
         seqColour_actionPerformed(actionEvent);
       }
     });
+    chainColour = new JRadioButtonMenuItem();
     chainColour.setText(MessageManager.getString("action.by_chain"));
     chainColour.addActionListener(new ActionListener()
     {
@@ -200,6 +270,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
         chainColour_actionPerformed(actionEvent);
       }
     });
+    chargeColour = new JRadioButtonMenuItem();
     chargeColour.setText(MessageManager.getString("label.charge_cysteine"));
     chargeColour.addActionListener(new ActionListener()
     {
@@ -209,6 +280,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
         chargeColour_actionPerformed(actionEvent);
       }
     });
+    zappoColour = new JRadioButtonMenuItem();
     zappoColour.setText(MessageManager.getString("label.zappo"));
     zappoColour.addActionListener(new ActionListener()
     {
@@ -218,6 +290,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
         zappoColour_actionPerformed(actionEvent);
       }
     });
+    taylorColour = new JRadioButtonMenuItem();
     taylorColour.setText(MessageManager.getString("label.taylor"));
     taylorColour.addActionListener(new ActionListener()
     {
@@ -227,6 +300,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
         taylorColour_actionPerformed(actionEvent);
       }
     });
+    hydroColour = new JRadioButtonMenuItem();
     hydroColour.setText(MessageManager.getString("label.hydrophobicity"));
     hydroColour.addActionListener(new ActionListener()
     {
@@ -236,6 +310,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
         hydroColour_actionPerformed(actionEvent);
       }
     });
+    strandColour = new JRadioButtonMenuItem();
     strandColour.setText(MessageManager
             .getString("label.strand_propensity"));
     strandColour.addActionListener(new ActionListener()
@@ -246,6 +321,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
         strandColour_actionPerformed(actionEvent);
       }
     });
+    helixColour = new JRadioButtonMenuItem();
     helixColour.setText(MessageManager.getString("label.helix_propensity"));
     helixColour.addActionListener(new ActionListener()
     {
@@ -255,6 +331,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
         helixColour_actionPerformed(actionEvent);
       }
     });
+    turnColour = new JRadioButtonMenuItem();
     turnColour.setText(MessageManager.getString("label.turn_propensity"));
     turnColour.addActionListener(new ActionListener()
     {
@@ -264,6 +341,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
         turnColour_actionPerformed(actionEvent);
       }
     });
+    buriedColour = new JRadioButtonMenuItem();
     buriedColour.setText(MessageManager.getString("label.buried_index"));
     buriedColour.addActionListener(new ActionListener()
     {
@@ -273,6 +351,17 @@ public abstract class GStructureViewer extends JInternalFrame implements
         buriedColour_actionPerformed(actionEvent);
       }
     });
+    nucleotideColour = new JRadioButtonMenuItem();
+    nucleotideColour.setText(MessageManager.getString("label.nucleotide"));
+    nucleotideColour.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent actionEvent)
+      {
+        nucleotideColour_actionPerformed(actionEvent);
+      }
+    });
+    purinePyrimidineColour = new JRadioButtonMenuItem();
     purinePyrimidineColour.setText(MessageManager
             .getString("label.purine_pyrimidine"));
     purinePyrimidineColour.addActionListener(new ActionListener()
@@ -283,7 +372,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
         purinePyrimidineColour_actionPerformed(actionEvent);
       }
     });
-
+    userColour = new JRadioButtonMenuItem();
     userColour.setText(MessageManager.getString("action.user_defined"));
     userColour.addActionListener(new ActionListener()
     {
@@ -293,6 +382,7 @@ public abstract class GStructureViewer extends JInternalFrame implements
         userColour_actionPerformed(actionEvent);
       }
     });
+    viewerColour = new JRadioButtonMenuItem();
     viewerColour.setSelected(false);
     viewerColour
             .setText(MessageManager.getString("label.colour_with_jmol"));
@@ -307,40 +397,11 @@ public abstract class GStructureViewer extends JInternalFrame implements
       }
     });
 
-    JMenu helpMenu = new JMenu();
-    helpMenu.setText(MessageManager.getString("action.help"));
-    helpItem.setText(MessageManager.getString("label.jmol_help"));
-    helpItem.addActionListener(new ActionListener()
-    {
-      @Override
-      public void actionPerformed(ActionEvent actionEvent)
-      {
-        showHelp_actionPerformed(actionEvent);
-      }
-    });
-    alignStructs
-            .setText(MessageManager.getString("label.align_structures"));
-    alignStructs.addActionListener(new ActionListener()
-    {
-      @Override
-      public void actionPerformed(ActionEvent actionEvent)
-      {
-        alignStructs_actionPerformed(actionEvent);
-      }
-    });
-    viewerActionMenu.setText(MessageManager.getString("label.jmol"));
-    menuBar.add(fileMenu);
-    menuBar.add(viewMenu);
-    menuBar.add(colourMenu);
-    menuBar.add(viewerActionMenu);
-    viewerActionMenu.setVisible(false);
-    menuBar.add(helpMenu);
-    fileMenu.add(savemenu);
-    fileMenu.add(viewMapping);
-    savemenu.add(pdbFile);
-    savemenu.add(png);
-    savemenu.add(eps);
-    viewMenu.add(chainMenu);
+    /*
+     * add colour buttons to a group so their selection
+     * is mutually exclusive
+     */
+    ButtonGroup colourButtons = new ButtonGroup();
 
     colourMenu.add(seqColour);
     colourMenu.add(chainColour);
@@ -353,12 +414,34 @@ public abstract class GStructureViewer extends JInternalFrame implements
     colourMenu.add(turnColour);
     colourMenu.add(buriedColour);
     colourMenu.add(purinePyrimidineColour);
+
+    /*
+     * add any user-defined colours that are loaded
+     */
+    Map<String, UserColourScheme> userColourSchemes = UserDefinedColours
+            .getUserColourSchemes();
+    if (userColourSchemes != null)
+    {
+      for (String schemeName : userColourSchemes.keySet())
+      {
+        final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(
+                schemeName);
+        radioItem.addActionListener(new ActionListener()
+        {
+          @Override
+          public void actionPerformed(ActionEvent evt)
+          {
+            userColour_actionPerformed(evt);
+          }
+        });
+        colourMenu.add(radioItem);
+        colourButtons.add(radioItem);
+      }
+    }
     colourMenu.add(userColour);
     colourMenu.add(viewerColour);
     colourMenu.add(backGround);
 
-    ButtonGroup colourButtons = new ButtonGroup();
-
     colourButtons.add(seqColour);
     colourButtons.add(chainColour);
     colourButtons.add(chargeColour);
@@ -372,13 +455,6 @@ public abstract class GStructureViewer extends JInternalFrame implements
     colourButtons.add(purinePyrimidineColour);
     colourButtons.add(userColour);
     colourButtons.add(viewerColour);
-
-    helpMenu.add(helpItem);
-    viewerActionMenu.add(alignStructs);
-
-    statusPanel.setLayout(new GridLayout());
-    this.getContentPane().add(statusPanel, java.awt.BorderLayout.SOUTH);
-    statusPanel.add(statusBar, null);
   }
 
   protected void fitToWindow_actionPerformed()
@@ -467,6 +543,11 @@ public abstract class GStructureViewer extends JInternalFrame implements
 
   }
 
+  public void nucleotideColour_actionPerformed(ActionEvent actionEvent)
+  {
+
+  }
+
   public void purinePyrimidineColour_actionPerformed(ActionEvent actionEvent)
   {