From: amwaterhouse Date: Tue, 21 Nov 2006 12:17:42 +0000 (+0000) Subject: New file, as its used in popup and alignframe previuously X-Git-Tag: Release_2_2~86 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=f5041efe0ef6fefa86634566c6217242895a14d3;p=jalview.git New file, as its used in popup and alignframe previuously --- diff --git a/src/jalview/gui/TextColourChooser.java b/src/jalview/gui/TextColourChooser.java new file mode 100644 index 0000000..c9840d8 --- /dev/null +++ b/src/jalview/gui/TextColourChooser.java @@ -0,0 +1,208 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * + * This program 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 2 + * of the License, or (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +package jalview.gui; + +import java.awt.BorderLayout; +import java.awt.event.MouseAdapter; +import javax.swing.JOptionPane; +import jalview.datamodel.SequenceGroup; +import javax.swing.BorderFactory; +import javax.swing.JColorChooser; +import javax.swing.JPanel; +import javax.swing.event.ChangeEvent; +import java.awt.Color; +import java.awt.event.MouseEvent; +import java.awt.Dimension; +import javax.swing.JSlider; +import javax.swing.event.ChangeListener; +import javax.swing.JLabel; +import java.util.Vector; + +public class TextColourChooser +{ + AlignmentPanel ap; + SequenceGroup sg; + + public void chooseColour(AlignmentPanel ap, SequenceGroup sg ) + { + this.ap = ap; + this.sg = sg; + + 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; + } + + 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)); + final JPanel col2 = new JPanel(); + col2.setPreferredSize(new Dimension(40, 20)); + col2.setBorder(BorderFactory.createEtchedBorder()); + col2.setToolTipText("Light Colour"); + col2.setBackground(new Color(original2)); + final JPanel bigpanel = new JPanel(new BorderLayout()); + JPanel panel = new JPanel(); + 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
"), + BorderLayout.NORTH); + panel.add(col1); + panel.add(slider); + panel.add(col2); + + col1.addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent e) + { + Color col = JColorChooser.showDialog(bigpanel, + "Select Colour for Text", + col1.getBackground()); + if (col != null) + { + colour1Changed(col); + col1.setBackground(col); + } + } + }); + + col2.addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent e) + { + Color col = JColorChooser.showDialog(bigpanel, + "Select Colour for Text", + col2.getBackground()); + if (col != null) + { + colour2Changed(col); + col2.setBackground(col); + } + } + }); + + slider.addChangeListener(new ChangeListener() + { + 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) + { + if(sg==null) + { + ap.av.textColour = new Color(original1); + ap.av.textColour2 = new Color(original2); + ap.av.thresholdTextColour = originalThreshold; + } + else + { + sg.textColour = new Color(original1); + sg.textColour2 = new Color(original2); + sg.thresholdTextColour = originalThreshold; + } + } + } + + void colour1Changed(Color col) + { + if(sg==null) + { + ap.av.textColour = col; + if (ap.av.colourAppliesToAllGroups) + setGroupTextColour(); + } + else + sg.textColour = col; + + ap.repaint(); + } + + void colour2Changed(Color col) + { + if(sg==null) + { + ap.av.textColour2 = col; + if (ap.av.colourAppliesToAllGroups) + setGroupTextColour(); + } + else + sg.textColour2 = col; + + ap.repaint(); + } + + void thresholdChanged(int value) + { + if(sg==null) + { + ap.av.thresholdTextColour = value; + if (ap.av.colourAppliesToAllGroups) + setGroupTextColour(); + } + else + sg.thresholdTextColour = value; + + ap.repaint(); + } + + + + void setGroupTextColour() + { + if (ap.av.alignment.getGroups() == null) + return; + + Vector groups = ap.av.alignment.getGroups(); + + for (int i = 0; i < groups.size(); i++) + { + SequenceGroup sg = (SequenceGroup) groups.elementAt(i); + sg.textColour = ap.av.textColour; + sg.textColour2 = ap.av.textColour2; + sg.thresholdTextColour = ap.av.thresholdTextColour; + } + } + +}