X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FTextColourChooser.java;h=17c1f291b32397fb52c4d61b67fd5db9d37ca52f;hb=57738a1f3c19b1c3a00bd3ac5108f8cd0af32f99;hp=3ada67e468cf3e9306ceab5ea339d539c9e32fc8;hpb=d053a3c980cf4318b9a19a255f9fc870e74de989;p=jalview.git diff --git a/src/jalview/gui/TextColourChooser.java b/src/jalview/gui/TextColourChooser.java index 3ada67e..17c1f29 100644 --- a/src/jalview/gui/TextColourChooser.java +++ b/src/jalview/gui/TextColourChooser.java @@ -1,30 +1,43 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) - * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.gui; -import java.util.*; +import jalview.datamodel.SequenceGroup; +import jalview.gui.JalviewColourChooser.ColourChooserListener; +import jalview.util.MessageManager; -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; -import javax.swing.event.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.HashMap; +import java.util.Map; -import jalview.datamodel.*; +import javax.swing.BorderFactory; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSlider; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; public class TextColourChooser { @@ -32,112 +45,208 @@ public class TextColourChooser SequenceGroup sg; - public void chooseColour(AlignmentPanel ap, SequenceGroup sg) + Color original1, original2; + + int originalThreshold; + + Map groupColour1; + + Map groupColour2; + + Map groupThreshold; + + /** + * Show a dialogue which allows the user to select two text colours and adjust + * a slider for the cross-over point + * + * @param alignPanel + * the AlignmentPanel context + * @param sequenceGroup + * the SequenceGroup context (only for group pop-menu option) + */ + public void chooseColour(AlignmentPanel alignPanel, + SequenceGroup sequenceGroup) { - this.ap = ap; - this.sg = sg; + this.ap = alignPanel; + this.sg = sequenceGroup; - int original1, original2, originalThreshold; - if (sg == null) - { - original1 = ap.av.textColour.getRGB(); - original2 = ap.av.textColour2.getRGB(); - originalThreshold = ap.av.thresholdTextColour; - } - else - { - original1 = sg.textColour.getRGB(); - original2 = sg.textColour2.getRGB(); - originalThreshold = sg.thresholdTextColour; - } + saveInitialSettings(); final JSlider slider = new JSlider(0, 750, originalThreshold); final JPanel col1 = new JPanel(); col1.setPreferredSize(new Dimension(40, 20)); col1.setBorder(BorderFactory.createEtchedBorder()); - col1.setToolTipText("Dark Colour"); - col1.setBackground(new Color(original1)); + col1.setToolTipText(MessageManager.getString("label.dark_colour")); + col1.setBackground(original1); final JPanel col2 = new JPanel(); col2.setPreferredSize(new Dimension(40, 20)); col2.setBorder(BorderFactory.createEtchedBorder()); - col2.setToolTipText("Light Colour"); - col2.setBackground(new Color(original2)); + col2.setToolTipText(MessageManager.getString("label.light_colour")); + col2.setBackground(original2); final JPanel bigpanel = new JPanel(new BorderLayout()); - JPanel panel = new JPanel(); + JPanel panel = new JPanel(new BorderLayout()); bigpanel.add(panel, BorderLayout.CENTER); bigpanel.add( - new JLabel( - "Select a dark and light text colour, then set the threshold to" - + "
switch between colours, based on background colour
"), + new JLabel("" + + MessageManager.getString( + "label.select_dark_light_set_threshold") + + ""), BorderLayout.NORTH); - panel.add(col1); - panel.add(slider); - panel.add(col2); + panel.add(col1, BorderLayout.WEST); + panel.add(slider, BorderLayout.CENTER); + panel.add(col2, BorderLayout.EAST); col1.addMouseListener(new MouseAdapter() { + @Override public void mousePressed(MouseEvent e) { - Color col = JColorChooser.showDialog(bigpanel, - "Select Colour for Text", col1.getBackground()); - if (col != null) + String ttl = MessageManager + .getString("label.select_colour_for_text"); + ColourChooserListener listener = new ColourChooserListener() { - colour1Changed(col); - col1.setBackground(col); - } + @Override + public void colourSelected(Color c) + { + colour1Changed(c); + col1.setBackground(c); + } + }; + JalviewColourChooser.showColourChooser(bigpanel, ttl, + col1.getBackground(), listener); } }); col2.addMouseListener(new MouseAdapter() { + @Override public void mousePressed(MouseEvent e) { - Color col = JColorChooser.showDialog(bigpanel, - "Select Colour for Text", col2.getBackground()); - if (col != null) + String ttl = MessageManager + .getString("label.select_colour_for_text"); + ColourChooserListener listener = new ColourChooserListener() { - colour2Changed(col); - col2.setBackground(col); - } + @Override + public void colourSelected(Color c) + { + colour2Changed(c); + col2.setBackground(c); + } + }; + JalviewColourChooser.showColourChooser(bigpanel, ttl, + col2.getBackground(), listener); } }); slider.addChangeListener(new ChangeListener() { + @Override public void stateChanged(ChangeEvent evt) { thresholdChanged(slider.getValue()); } }); - int reply = JOptionPane.showInternalOptionDialog(ap, bigpanel, - "Adjust Foreground Text Colour Threshold", - JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, - null, null, null); - - if (reply == JOptionPane.CANCEL_OPTION) + Object[] options = new Object[] { MessageManager.getString("action.ok"), + MessageManager.getString("action.cancel") }; + String title = MessageManager + .getString("label.adjust_foreground_text_colour_threshold"); + Runnable action = new Runnable() // response for 1 = Cancel { - if (sg == null) + @Override + public void run() { - ap.av.textColour = new Color(original1); - ap.av.textColour2 = new Color(original2); - ap.av.thresholdTextColour = originalThreshold; + restoreInitialSettings(); } - else + }; + JvOptionPane.newOptionDialog(alignPanel).setResponseHandler(1, action) + .showInternalDialog(bigpanel, title, + JvOptionPane.YES_NO_CANCEL_OPTION, + JvOptionPane.PLAIN_MESSAGE, null, options, + MessageManager.getString("action.ok")); + } + + /** + * Restore initial settings on Cancel + */ + protected void restoreInitialSettings() + { + if (sg == null) + { + ap.av.setTextColour(original1); + ap.av.setTextColour2(original2); + ap.av.setThresholdTextColour(originalThreshold); + } + else + { + sg.textColour = original1; + sg.textColour2 = original2; + sg.thresholdTextColour = originalThreshold; + } + + /* + * if 'Apply To All Groups' was in force, there will be + * group-specific settings to restore as well + */ + for (SequenceGroup group : this.groupColour1.keySet()) + { + group.textColour = groupColour1.get(group); + group.textColour2 = groupColour2.get(group); + group.thresholdTextColour = groupThreshold.get(group); + } + + ap.paintAlignment(false, false); + } + + /** + * Save settings on entry, for restore on Cancel + */ + protected void saveInitialSettings() + { + groupColour1 = new HashMap<>(); + groupColour2 = new HashMap<>(); + groupThreshold = new HashMap<>(); + + if (sg == null) + { + /* + * alignment scope + */ + original1 = ap.av.getTextColour(); + original2 = ap.av.getTextColour2(); + originalThreshold = ap.av.getThresholdTextColour(); + if (ap.av.getColourAppliesToAllGroups() + && ap.av.getAlignment().getGroups() != null) { - sg.textColour = new Color(original1); - sg.textColour2 = new Color(original2); - sg.thresholdTextColour = originalThreshold; + /* + * if applying changes to all groups, need to be able to + * restore group settings as well + */ + for (SequenceGroup group : ap.av.getAlignment().getGroups()) + { + groupColour1.put(group, group.textColour); + groupColour2.put(group, group.textColour2); + groupThreshold.put(group, group.thresholdTextColour); + } } } + else + { + /* + * Sequence group scope + */ + original1 = sg.textColour; + original2 = sg.textColour2; + originalThreshold = sg.thresholdTextColour; + } } void colour1Changed(Color col) { if (sg == null) { - ap.av.textColour = col; - if (ap.av.colourAppliesToAllGroups) + ap.av.setTextColour(col); + if (ap.av.getColourAppliesToAllGroups()) { setGroupTextColour(); } @@ -147,15 +256,15 @@ public class TextColourChooser sg.textColour = col; } - ap.paintAlignment(true); + ap.paintAlignment(false, false); } void colour2Changed(Color col) { if (sg == null) { - ap.av.textColour2 = col; - if (ap.av.colourAppliesToAllGroups) + ap.av.setTextColour2(col); + if (ap.av.getColourAppliesToAllGroups()) { setGroupTextColour(); } @@ -165,15 +274,15 @@ public class TextColourChooser sg.textColour2 = col; } - ap.paintAlignment(true); + ap.paintAlignment(false, false); } void thresholdChanged(int value) { if (sg == null) { - ap.av.thresholdTextColour = value; - if (ap.av.colourAppliesToAllGroups) + ap.av.setThresholdTextColour(value); + if (ap.av.getColourAppliesToAllGroups()) { setGroupTextColour(); } @@ -183,7 +292,7 @@ public class TextColourChooser sg.thresholdTextColour = value; } - ap.paintAlignment(true); + ap.paintAlignment(false, false); } void setGroupTextColour() @@ -193,14 +302,11 @@ public class TextColourChooser return; } - Vector groups = ap.av.getAlignment().getGroups(); - - for (int i = 0; i < groups.size(); i++) + for (SequenceGroup group : ap.av.getAlignment().getGroups()) { - SequenceGroup sg = (SequenceGroup) groups.elementAt(i); - sg.textColour = ap.av.textColour; - sg.textColour2 = ap.av.textColour2; - sg.thresholdTextColour = ap.av.thresholdTextColour; + group.textColour = ap.av.getTextColour(); + group.textColour2 = ap.av.getTextColour2(); + group.thresholdTextColour = ap.av.getThresholdTextColour(); } }