From 38669210803deafaaea6f18463e148fafcf1acdf Mon Sep 17 00:00:00 2001 From: gmungoc Date: Thu, 5 Jul 2018 12:09:24 +0100 Subject: [PATCH] JAL-3058 colour button / menu option use JalviewColourChooser --- src/jalview/gui/FeatureSettings.java | 140 ++++++++++++++++------------------ 1 file changed, 66 insertions(+), 74 deletions(-) diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index cc58e2c..884f1d7 100644 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@ -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(); } -- 1.7.10.2