JAL-2361 simplify constructors, select unsaved but applied user defined
[jalview.git] / src / jalview / gui / PopupMenu.java
index fdac7f8..660c651 100644 (file)
@@ -39,16 +39,14 @@ import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.gui.ColourMenuHelper.ColourChangeListener;
-import jalview.io.FileFormat;
 import jalview.io.FileFormatI;
+import jalview.io.FileFormats;
 import jalview.io.FormatAdapter;
 import jalview.io.SequenceAnnotationReport;
-import jalview.schemes.AnnotationColourGradient;
 import jalview.schemes.Blosum62ColourScheme;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemes;
 import jalview.schemes.PIDColourScheme;
-import jalview.schemes.ResidueColourScheme;
 import jalview.util.GroupUrlLink;
 import jalview.util.GroupUrlLink.UrlStringTooLongException;
 import jalview.util.MessageManager;
@@ -88,8 +86,12 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
 
   protected JCheckBoxMenuItem abovePIDColour = new JCheckBoxMenuItem();
 
+  protected JMenuItem modifyPID = new JMenuItem();
+
   protected JCheckBoxMenuItem conservationMenuItem = new JCheckBoxMenuItem();
 
+  protected JMenuItem modifyConservation = new JMenuItem();
+
   AlignmentPanel ap;
 
   JMenu sequenceMenu = new JMenu();
@@ -200,7 +202,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
     this.ap = ap;
     sequence = seq;
 
-    for (String ff : FileFormat.getWritableFormats(true))
+    for (String ff : FileFormats.getInstance().getWritableFormats(true))
     {
       JMenuItem item = new JMenuItem(ff);
 
@@ -410,7 +412,6 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
 
         add(menuItem);
       }
-
     }
 
     SequenceGroup sg = ap.av.getSelectionGroup();
@@ -424,6 +425,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
 
       ColourMenuHelper.setColourSelected(colourMenu, sg.getColourScheme());
 
+      conservationMenuItem.setEnabled(!sg.isNucleotide());
+
       if (sg.cs != null)
       {
         if (sg.cs.conservationApplied())
@@ -435,6 +438,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
           abovePIDColour.setSelected(true);
         }
       }
+      modifyConservation.setEnabled(conservationMenuItem.isSelected());
+      modifyPID.setEnabled(abovePIDColour.isSelected());
       displayNonconserved.setSelected(sg.getShowNonconserved());
       showText.setSelected(sg.getDisplayText());
       showColourText.setSelected(sg.getColourText());
@@ -558,8 +563,6 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
 
   }
 
-
-
   /**
    * Add annotation types to 'Show annotations' and/or 'Hide annotations' menus.
    * "All" is added first, followed by a separator. Then add any annotation
@@ -983,6 +986,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
         sequenceSelectionDetails_actionPerformed();
       }
     });
+
     unGroupMenuItem
             .setText(MessageManager.getString("action.remove_group"));
     unGroupMenuItem.addActionListener(new ActionListener()
@@ -1173,12 +1177,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
         hideInsertions_actionPerformed(e);
       }
     });
-    /*
-     * annotationMenuItem.setText("By Annotation");
-     * annotationMenuItem.addActionListener(new ActionListener() { public void
-     * actionPerformed(ActionEvent actionEvent) {
-     * annotationMenuItem_actionPerformed(actionEvent); } });
-     */
+
     groupMenu.add(sequenceSelDetails);
     add(groupMenu);
     add(sequenceMenu);
@@ -1232,7 +1231,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
     jMenu1.add(outline);
     jMenu1.add(displayNonconserved);
   }
-
+  
   /**
    * Constructs the entries for the colour menu
    */
@@ -1248,6 +1247,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
         textColour_actionPerformed();
       }
     });
+
     abovePIDColour.setText(MessageManager
             .getString("label.above_identity_threshold"));
     abovePIDColour.addActionListener(new ActionListener()
@@ -1255,7 +1255,18 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        abovePIDColour_actionPerformed();
+        abovePIDColour_actionPerformed(abovePIDColour.isSelected());
+      }
+    });
+
+    modifyPID.setText(MessageManager
+            .getString("label.modify_identity_threshold"));
+    modifyPID.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        modifyPID_actionPerformed();
       }
     });
 
@@ -1266,7 +1277,19 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        conservationMenuItem_actionPerformed();
+        conservationMenuItem_actionPerformed(conservationMenuItem
+                .isSelected());
+      }
+    });
+
+    modifyConservation.setText(MessageManager
+            .getString("label.modify_conservation_threshold"));
+    modifyConservation.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        modifyConservation_actionPerformed();
       }
     });
   }
@@ -1293,7 +1316,33 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
 
     colourMenu.addSeparator();
     colourMenu.add(conservationMenuItem);
+    colourMenu.add(modifyConservation);
     colourMenu.add(abovePIDColour);
+    colourMenu.add(modifyPID);
+  }
+
+  protected void modifyConservation_actionPerformed()
+  {
+    SequenceGroup sg = getGroup();
+    if (sg.cs != null)
+    {
+      SliderPanel.setConservationSlider(ap, sg.cs, sg.getName());
+      SliderPanel.showConservationSlider();
+    }
+  }
+
+  protected void modifyPID_actionPerformed()
+  {
+    SequenceGroup sg = getGroup();
+    if (sg.cs != null)
+    {
+      // int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup()
+      // .getName());
+      // sg.cs.setThreshold(threshold, ap.av.isIgnoreGapsConsensus());
+      SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup()
+              .getName());
+      SliderPanel.showPIDSlider();
+    }
   }
 
   /**
@@ -1474,10 +1523,12 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
   /**
    * DOCUMENT ME!
    * 
+   * @param selected
+   * 
    * @param e
    *          DOCUMENT ME!
    */
-  protected void abovePIDColour_actionPerformed()
+  public void abovePIDColour_actionPerformed(boolean selected)
   {
     SequenceGroup sg = getGroup();
     if (sg.cs == null)
@@ -1485,7 +1536,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
       return;
     }
 
-    if (abovePIDColour.isSelected())
+    if (selected)
     {
       sg.cs.setConsensus(AAFrequency.calculate(
               sg.getSequences(ap.av.getHiddenRepSequences()),
@@ -1503,7 +1554,9 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
     // remove PIDColouring
     {
       sg.cs.setThreshold(0, ap.av.isIgnoreGapsConsensus());
+      SliderPanel.hidePIDSlider();
     }
+    modifyPID.setEnabled(selected);
 
     refresh();
   }
@@ -1526,7 +1579,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
    * @param e
    *          DOCUMENT ME!
    */
-  protected void conservationMenuItem_actionPerformed()
+  public void conservationMenuItem_actionPerformed(boolean selected)
   {
     SequenceGroup sg = getGroup();
     if (sg.cs == null)
@@ -1534,7 +1587,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
       return;
     }
 
-    if (conservationMenuItem.isSelected())
+    if (selected)
     {
       // JBPNote: Conservation name shouldn't be i18n translated
       Conservation c = new Conservation("Group", sg.getSequences(ap.av
@@ -1553,25 +1606,9 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
     // remove ConservationColouring
     {
       sg.cs.setConservation(null);
+      SliderPanel.hideConservationSlider();
     }
-
-    refresh();
-  }
-
-  public void annotationMenuItem_actionPerformed(ActionEvent actionEvent)
-  {
-    SequenceGroup sg = getGroup();
-    if (sg == null)
-    {
-      return;
-    }
-
-    AnnotationColourGradient acg = new AnnotationColourGradient(
-            sequence.getAnnotation()[0], null,
-            AnnotationColourGradient.NO_THRESHOLD);
-
-    acg.setPredefinedColours(true);
-    sg.setColourScheme(acg);
+    modifyConservation.setEnabled(selected);
 
     refresh();
   }
@@ -1831,7 +1868,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
     // or we simply trust the user wants
     // wysiwig behaviour
 
-    FileFormatI fileFormat = FileFormat.forName(e.getActionCommand());
+    FileFormatI fileFormat = FileFormats.getInstance().forName(e.getActionCommand());
     cap.setText(new FormatAdapter(ap).formatSequences(fileFormat, ap, true));
   }
 
@@ -1939,33 +1976,26 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
   /**
    * Action on user selecting an item from the colour menu (that does not have
    * its bespoke action handler)
+   * 
+   * @return
    */
   @Override
   public void changeColour_actionPerformed(String colourSchemeName)
   {
     SequenceGroup sg = getGroup();
-    if (ResidueColourScheme.USER_DEFINED.equals(colourSchemeName))
-    {
-      /*
-       * open a panel to load or configure a user-defined colour scheme
-       */
-      new UserDefinedColours(ap, sg);
-    }
-    else
+    /*
+     * switch to the chosen colour scheme (or null for None)
+     */
+    ColourSchemeI colourScheme = ColourSchemes.getInstance()
+            .getColourScheme(colourSchemeName, sg,
+                    ap.av.getHiddenRepSequences());
+    sg.setColourScheme(colourScheme);
+    if (colourScheme instanceof Blosum62ColourScheme
+            || colourScheme instanceof PIDColourScheme)
     {
-      /*
-       * switch to the chosen colour scheme (or null for None)
-       */
-      ColourSchemeI colourScheme = ColourSchemes.getInstance().getColourScheme(
-              colourSchemeName, sg, ap.av.getHiddenRepSequences());
-      sg.setColourScheme(colourScheme);
-      if (colourScheme instanceof Blosum62ColourScheme
-              || colourScheme instanceof PIDColourScheme)
-      {
-        sg.cs.setConsensus(AAFrequency.calculate(
-                sg.getSequences(ap.av.getHiddenRepSequences()),
-                sg.getStartRes(), sg.getEndRes() + 1));
-      }
+      sg.cs.setConsensus(AAFrequency.calculate(
+              sg.getSequences(ap.av.getHiddenRepSequences()),
+              sg.getStartRes(), sg.getEndRes() + 1));
     }
 
     refresh();