Merge branch 'bug/JAL-3049colourCellTooltip' into Jalview-BH/JAL-3026
[jalview.git] / src / jalview / gui / FeatureSettings.java
index 7fb3af9..c0097cd 100644 (file)
@@ -29,6 +29,7 @@ import jalview.datamodel.features.FeatureMatcherI;
 import jalview.datamodel.features.FeatureMatcherSet;
 import jalview.datamodel.features.FeatureMatcherSetI;
 import jalview.gui.Help.HelpId;
+import jalview.gui.JalviewColourChooser.ColourChooserListener;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
 import jalview.schemabinding.version2.Filter;
@@ -135,9 +136,9 @@ public class FeatureSettings extends JPanel
    */
   Object[][] originalData;
 
-  private float originalTransparency;
+  float originalTransparency;
 
-  private Map<String, FeatureMatcherSetI> originalFilters;
+  Map<String, FeatureMatcherSetI> originalFilters;
 
   final JInternalFrame frame;
 
@@ -167,7 +168,7 @@ public class FeatureSettings extends JPanel
   /*
    * true when Feature Settings are updating from feature renderer
    */
-  private boolean handlingUpdate = false;
+  boolean handlingUpdate = false;
 
   /*
    * holds {featureCount, totalExtent} for each feature type
@@ -260,7 +261,7 @@ public class FeatureSettings extends JPanel
 
     table.setDefaultEditor(FeatureMatcherSet.class, new FilterEditor(this));
     table.setDefaultRenderer(FeatureMatcherSet.class, new FilterRenderer());
-
+    
     TableColumn colourColumn = new TableColumn(COLOUR_COLUMN, 75,
             new ColorRenderer(), new ColorEditor(this));
     table.addColumn(colourColumn);
@@ -440,40 +441,53 @@ public class FeatureSettings extends JPanel
      * variable colour options include colour by label, by score,
      * by selected attribute text, or attribute value
      */
-    final JCheckBoxMenuItem mxcol = new JCheckBoxMenuItem(
+    final JCheckBoxMenuItem variableColourCB = new JCheckBoxMenuItem(
             MessageManager.getString("label.variable_colour"));
-    mxcol.setSelected(!featureColour.isSimpleColour());
-    men.add(mxcol);
-    mxcol.addActionListener(new ActionListener()
+    variableColourCB.setSelected(!featureColour.isSimpleColour());
+    men.add(variableColourCB);
+    
+    /*
+     * checkbox action listener doubles up as listener to OK
+     * from the variable colour / filters dialog
+     */
+    variableColourCB.addActionListener(new ActionListener()
     {
-      JColorChooser colorChooser;
-
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        if (e.getSource() == mxcol)
+        if (e.getSource() == variableColourCB)
         {
           if (featureColour.isSimpleColour())
           {
+            /*
+             * toggle simple colour to variable colour - show dialog
+             */
             FeatureTypeSettings fc = new FeatureTypeSettings(me.fr, type);
             fc.addActionListener(this);
           }
           else
           {
-            // bring up simple color chooser
-            colorChooser = new JColorChooser();
-            String title = MessageManager
-                    .getString("label.select_colour");
-            JDialog dialog = JColorChooser.createDialog(me,
-                    title, true, // modal
-                    colorChooser, this, // OK button handler
-                    null); // no CANCEL button handler
-            colorChooser.setColor(featureColour.getMaxColour());
-            dialog.setVisible(true);
+            /*
+             * toggle variable to simple colour - show colour chooser
+             */
+            String title = MessageManager.getString("label.select_colour");
+            ColourChooserListener listener = new ColourChooserListener()
+            {
+              @Override
+              public void colourSelected(Color c)
+              {
+                table.setValueAt(new FeatureColour(c), rowSelected,
+                        COLOUR_COLUMN);
+                table.validate();
+                me.updateFeatureRenderer(
+                        ((FeatureTableModel) table.getModel()).getData(),
+                        false);
+              }
+            };
+            JalviewColourChooser.showColourChooser(me, title, featureColour.getMaxColour(), listener);
           }
         }
-        else
-        {
+        else    {
           if (e.getSource() instanceof FeatureTypeSettings)
           {
             /*
@@ -481,19 +495,9 @@ public class FeatureSettings extends JPanel
              * colour will have already been set in the FeatureRenderer
              */
             FeatureColourI fci = fr.getFeatureColours().get(type);
-            table.setValueAt(fci, rowSelected, 1);
+            table.setValueAt(fci, rowSelected, COLOUR_COLUMN);
             table.validate();
           }
-          else
-          {
-            // probably the color chooser!
-            table.setValueAt(new FeatureColour(colorChooser.getColor()),
-                    rowSelected, 1);
-            table.validate();
-            me.updateFeatureRenderer(
-                    ((FeatureTableModel) table.getModel()).getData(),
-                    false);
-          }
         }
       }
 
@@ -873,6 +877,9 @@ public class FeatureSettings extends JPanel
    */
   void load()
   {
+    // TODO: JAL-3048 relies on Castor XML parsing: not needed for JS-jalview core
+    // functionalty
+
     JalviewFileChooser chooser = new JalviewFileChooser("fc",
             SEQUENCE_FEATURE_COLOURS);
     chooser.setFileView(new JalviewFileView());
@@ -955,6 +962,7 @@ public class FeatureSettings extends JPanel
    */
   void save()
   {
+    // TODO: JAL-3048 not needed for Jalview-JS - save colours
     JalviewFileChooser chooser = new JalviewFileChooser("fc",
             SEQUENCE_FEATURE_COLOURS);
     chooser.setFileView(new JalviewFileView());
@@ -1135,7 +1143,7 @@ public class FeatureSettings extends JPanel
    * @param data
    * @param visibleNew
    */
-  private void updateFeatureRenderer(Object[][] data, boolean visibleNew)
+  void updateFeatureRenderer(Object[][] data, boolean visibleNew)
   {
     FeatureSettingsBean[] rowData = getTableAsBeans(data);
 
@@ -1647,17 +1655,13 @@ public class FeatureSettings extends JPanel
 
     JButton button;
 
-    JColorChooser colorChooser;
-
-    JDialog dialog;
-
     protected static final String EDIT = "edit";
 
     int rowSelected = 0;
 
-    public ColorEditor(FeatureSettings me)
+    public ColorEditor(FeatureSettings fs)
     {
-      this.me = me;
+      this.me = fs;
       // Set up the editor (from the table's point of view),
       // which is a button.
       // This button brings up the color chooser dialog,
@@ -1666,73 +1670,69 @@ public class FeatureSettings extends JPanel
       button.setActionCommand(EDIT);
       button.addActionListener(this);
       button.setBorderPainted(false);
-      // Set up the dialog that the button brings up.
-      colorChooser = new JColorChooser();
-      dialog = JColorChooser.createDialog(button,
-              MessageManager.getString("label.select_colour"), true, // modal
-              colorChooser, this, // OK button handler
-              null); // no CANCEL button handler
     }
 
     /**
-     * Handles events from the editor button and from the dialog's OK button.
+     * Handles events from the editor button, and from the colour/filters
+     * dialog's OK button
      */
     @Override
     public void actionPerformed(ActionEvent e)
     {
-      // todo test e.getSource() instead here
-      if (EDIT.equals(e.getActionCommand()))
+      if (button == e.getSource())
       {
-        // The user has clicked the cell, so
-        // bring up the dialog.
         if (currentColor.isSimpleColour())
         {
-          // bring up simple color chooser
-          button.setBackground(currentColor.getColour());
-          colorChooser.setColor(currentColor.getColour());
-          dialog.setVisible(true);
+          /*
+           * simple colour chooser
+           */
+          String ttl = MessageManager.getString("label.select_colour");
+          ColourChooserListener listener = new ColourChooserListener() {
+            @Override
+            public void colourSelected(Color c)
+            {
+              currentColor = new FeatureColour(c);
+              me.table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN);
+            }
+          };
+          JalviewColourChooser.showColourChooser(button,  ttl,  currentColor.getColour(), listener);
         }
         else
         {
-          // bring up graduated chooser.
+          /*
+           * variable colour and filters dialog
+           */
           chooser = new FeatureTypeSettings(me.fr, type);
-          chooser.setRequestFocusEnabled(true);
-          chooser.requestFocus();
+          /**
+           * @j2sNative
+           */
+          {
+            chooser.setRequestFocusEnabled(true);
+            chooser.requestFocus();
+          }
           chooser.addActionListener(this);
-          chooser.showTab(true);
+          // Make the renderer reappear.
+          fireEditingStopped();
         }
-        // Make the renderer reappear.
-        fireEditingStopped();
-
       }
       else
       {
-        if (currentColor.isSimpleColour())
-        {
-          /*
-           * read off colour picked in colour chooser after OK pressed
-           */
-          currentColor = new FeatureColour(colorChooser.getColor());
-          me.table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN);
-        }
-        else
+        /*
+         * after OK in variable colour dialog, any changes to colour 
+         * (or filters!) are already set in FeatureRenderer, so just
+         * update table data without triggering updateFeatureRenderer
+         */
+        currentColor = fr.getFeatureColours().get(type);
+        FeatureMatcherSetI currentFilter = me.fr.getFeatureFilter(type);
+        if (currentFilter == null)
         {
-          /*
-           * after OK in variable colour dialog, any changes to colour 
-           * (or filters!) are already set in FeatureRenderer, so just
-           * update table data without triggering updateFeatureRenderer
-           */
-          currentColor = fr.getFeatureColours().get(type);
-          FeatureMatcherSetI currentFilter = me.fr.getFeatureFilter(type);
-          if (currentFilter == null)
-          {
-            currentFilter = new FeatureMatcherSet();
-          }
-          Object[] data = ((FeatureTableModel) table.getModel())
-                  .getData()[rowSelected];
-          data[COLOUR_COLUMN] = currentColor;
-          data[FILTER_COLUMN] = currentFilter;
+          currentFilter = new FeatureMatcherSet();
         }
+        Object[] data = ((FeatureTableModel) table.getModel())
+                .getData()[rowSelected];
+        data[COLOUR_COLUMN] = currentColor;
+        data[FILTER_COLUMN] = currentFilter;
+
         fireEditingStopped();
         me.table.validate();
       }
@@ -1825,7 +1825,6 @@ public class FeatureSettings extends JPanel
                   chooser.getWidth(), chooser.getHeight());
           chooser.validate();
         }
-        chooser.showTab(false);
         fireEditingStopped();
       }
       else if (e.getSource() instanceof Component)