JAL-3058 colour button / menu option use JalviewColourChooser
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Thu, 5 Jul 2018 11:09:24 +0000 (12:09 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Thu, 5 Jul 2018 11:09:24 +0000 (12:09 +0100)
src/jalview/gui/FeatureSettings.java

index cc58e2c..884f1d7 100644 (file)
@@ -28,6 +28,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;
@@ -413,40 +414,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)
           {
             /*
@@ -457,16 +471,6 @@ public class FeatureSettings extends JPanel
             table.setValueAt(fci, rowSelected, COLOUR_COLUMN);
             table.validate();
           }
-          else
-          {
-            // probably the color chooser!
-            table.setValueAt(new FeatureColour(colorChooser.getColor()),
-                    rowSelected, COLOUR_COLUMN);
-            table.validate();
-            me.updateFeatureRenderer(
-                    ((FeatureTableModel) table.getModel()).getData(),
-                    false);
-          }
         }
       }
 
@@ -1620,10 +1624,6 @@ public class FeatureSettings extends JPanel
 
     JButton button;
 
-    JColorChooser colorChooser;
-
-    JDialog dialog;
-
     protected static final String EDIT = "edit";
 
     int rowSelected = 0;
@@ -1639,35 +1639,38 @@ 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();
@@ -1676,36 +1679,25 @@ public class FeatureSettings extends JPanel
         }
         // 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();
       }