JAL-1517 fix copyright for 2.8.2
[jalview.git] / src / jalview / gui / TextColourChooser.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
3  * Copyright (C) 2014 The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.gui;
22
23 import java.awt.*;
24 import java.awt.event.*;
25 import javax.swing.*;
26 import javax.swing.event.*;
27
28 import jalview.datamodel.*;
29 import jalview.util.MessageManager;
30
31 public class TextColourChooser
32 {
33   AlignmentPanel ap;
34
35   SequenceGroup sg;
36
37   public void chooseColour(AlignmentPanel ap, SequenceGroup sg)
38   {
39     this.ap = ap;
40     this.sg = sg;
41
42     int original1, original2, originalThreshold;
43     if (sg == null)
44     {
45       original1 = ap.av.textColour.getRGB();
46       original2 = ap.av.textColour2.getRGB();
47       originalThreshold = ap.av.thresholdTextColour;
48     }
49     else
50     {
51       original1 = sg.textColour.getRGB();
52       original2 = sg.textColour2.getRGB();
53       originalThreshold = sg.thresholdTextColour;
54     }
55
56     final JSlider slider = new JSlider(0, 750, originalThreshold);
57     final JPanel col1 = new JPanel();
58     col1.setPreferredSize(new Dimension(40, 20));
59     col1.setBorder(BorderFactory.createEtchedBorder());
60     col1.setToolTipText(MessageManager.getString("label.dark_colour"));
61     col1.setBackground(new Color(original1));
62     final JPanel col2 = new JPanel();
63     col2.setPreferredSize(new Dimension(40, 20));
64     col2.setBorder(BorderFactory.createEtchedBorder());
65     col2.setToolTipText(MessageManager.getString("label.ligth_colour"));
66     col2.setBackground(new Color(original2));
67     final JPanel bigpanel = new JPanel(new BorderLayout());
68     JPanel panel = new JPanel();
69     bigpanel.add(panel, BorderLayout.CENTER);
70     bigpanel.add(
71             new JLabel(
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>"),
74             BorderLayout.NORTH);
75     panel.add(col1);
76     panel.add(slider);
77     panel.add(col2);
78
79     col1.addMouseListener(new MouseAdapter()
80     {
81       public void mousePressed(MouseEvent e)
82       {
83         Color col = JColorChooser.showDialog(bigpanel,
84                 "Select Colour for Text", col1.getBackground());
85         if (col != null)
86         {
87           colour1Changed(col);
88           col1.setBackground(col);
89         }
90       }
91     });
92
93     col2.addMouseListener(new MouseAdapter()
94     {
95       public void mousePressed(MouseEvent e)
96       {
97         Color col = JColorChooser.showDialog(bigpanel,
98                 "Select Colour for Text", col2.getBackground());
99         if (col != null)
100         {
101           colour2Changed(col);
102           col2.setBackground(col);
103         }
104       }
105     });
106
107     slider.addChangeListener(new ChangeListener()
108     {
109       public void stateChanged(ChangeEvent evt)
110       {
111         thresholdChanged(slider.getValue());
112       }
113     });
114
115     int reply = JOptionPane.showInternalOptionDialog(ap, bigpanel,
116             "Adjust Foreground Text Colour Threshold",
117             JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
118             null, null, null);
119
120     if (reply == JOptionPane.CANCEL_OPTION)
121     {
122       if (sg == null)
123       {
124         ap.av.textColour = new Color(original1);
125         ap.av.textColour2 = new Color(original2);
126         ap.av.thresholdTextColour = originalThreshold;
127       }
128       else
129       {
130         sg.textColour = new Color(original1);
131         sg.textColour2 = new Color(original2);
132         sg.thresholdTextColour = originalThreshold;
133       }
134     }
135   }
136
137   void colour1Changed(Color col)
138   {
139     if (sg == null)
140     {
141       ap.av.textColour = col;
142       if (ap.av.getColourAppliesToAllGroups())
143       {
144         setGroupTextColour();
145       }
146     }
147     else
148     {
149       sg.textColour = col;
150     }
151
152     ap.paintAlignment(true);
153   }
154
155   void colour2Changed(Color col)
156   {
157     if (sg == null)
158     {
159       ap.av.textColour2 = col;
160       if (ap.av.getColourAppliesToAllGroups())
161       {
162         setGroupTextColour();
163       }
164     }
165     else
166     {
167       sg.textColour2 = col;
168     }
169
170     ap.paintAlignment(true);
171   }
172
173   void thresholdChanged(int value)
174   {
175     if (sg == null)
176     {
177       ap.av.thresholdTextColour = value;
178       if (ap.av.getColourAppliesToAllGroups())
179       {
180         setGroupTextColour();
181       }
182     }
183     else
184     {
185       sg.thresholdTextColour = value;
186     }
187
188     ap.paintAlignment(true);
189   }
190
191   void setGroupTextColour()
192   {
193     if (ap.av.getAlignment().getGroups() == null)
194     {
195       return;
196     }
197
198     for (SequenceGroup sg : ap.av.getAlignment().getGroups())
199     {
200       sg.textColour = ap.av.textColour;
201       sg.textColour2 = ap.av.textColour2;
202       sg.thresholdTextColour = ap.av.thresholdTextColour;
203     }
204   }
205
206 }