2 * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)
3 * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 import java.awt.event.*;
26 import javax.swing.event.*;
28 import jalview.datamodel.*;
30 public class TextColourChooser
36 public void chooseColour(AlignmentPanel ap, SequenceGroup sg)
41 int original1, original2, originalThreshold;
44 original1 = ap.av.textColour.getRGB();
45 original2 = ap.av.textColour2.getRGB();
46 originalThreshold = ap.av.thresholdTextColour;
50 original1 = sg.textColour.getRGB();
51 original2 = sg.textColour2.getRGB();
52 originalThreshold = sg.thresholdTextColour;
55 final JSlider slider = new JSlider(0, 750, originalThreshold);
56 final JPanel col1 = new JPanel();
57 col1.setPreferredSize(new Dimension(40, 20));
58 col1.setBorder(BorderFactory.createEtchedBorder());
59 col1.setToolTipText("Dark Colour");
60 col1.setBackground(new Color(original1));
61 final JPanel col2 = new JPanel();
62 col2.setPreferredSize(new Dimension(40, 20));
63 col2.setBorder(BorderFactory.createEtchedBorder());
64 col2.setToolTipText("Light Colour");
65 col2.setBackground(new Color(original2));
66 final JPanel bigpanel = new JPanel(new BorderLayout());
67 JPanel panel = new JPanel();
68 bigpanel.add(panel, BorderLayout.CENTER);
72 "<html><i>Select a dark and light text colour, then set the threshold to"
73 + "<br>switch between colours, based on background colour</i></html>"),
79 col1.addMouseListener(new MouseAdapter()
81 public void mousePressed(MouseEvent e)
83 Color col = JColorChooser.showDialog(bigpanel,
84 "Select Colour for Text", col1.getBackground());
88 col1.setBackground(col);
93 col2.addMouseListener(new MouseAdapter()
95 public void mousePressed(MouseEvent e)
97 Color col = JColorChooser.showDialog(bigpanel,
98 "Select Colour for Text", col2.getBackground());
102 col2.setBackground(col);
107 slider.addChangeListener(new ChangeListener()
109 public void stateChanged(ChangeEvent evt)
111 thresholdChanged(slider.getValue());
115 int reply = JOptionPane.showInternalOptionDialog(ap, bigpanel,
116 "Adjust Foreground Text Colour Threshold",
117 JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
120 if (reply == JOptionPane.CANCEL_OPTION)
124 ap.av.textColour = new Color(original1);
125 ap.av.textColour2 = new Color(original2);
126 ap.av.thresholdTextColour = originalThreshold;
130 sg.textColour = new Color(original1);
131 sg.textColour2 = new Color(original2);
132 sg.thresholdTextColour = originalThreshold;
137 void colour1Changed(Color col)
141 ap.av.textColour = col;
142 if (ap.av.colourAppliesToAllGroups)
144 setGroupTextColour();
152 ap.paintAlignment(true);
155 void colour2Changed(Color col)
159 ap.av.textColour2 = col;
160 if (ap.av.colourAppliesToAllGroups)
162 setGroupTextColour();
167 sg.textColour2 = col;
170 ap.paintAlignment(true);
173 void thresholdChanged(int value)
177 ap.av.thresholdTextColour = value;
178 if (ap.av.colourAppliesToAllGroups)
180 setGroupTextColour();
185 sg.thresholdTextColour = value;
188 ap.paintAlignment(true);
191 void setGroupTextColour()
193 if (ap.av.alignment.getGroups() == null)
198 Vector groups = ap.av.alignment.getGroups();
200 for (int i = 0; i < groups.size(); i++)
202 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
203 sg.textColour = ap.av.textColour;
204 sg.textColour2 = ap.av.textColour2;
205 sg.thresholdTextColour = ap.av.thresholdTextColour;