6bac6dfba094d640fe318491b0defc087d560321
[jalview.git] / src / jalview / gui / TextColourChooser.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ 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 jalview.datamodel.SequenceGroup;
24 import jalview.util.MessageManager;
25
26 import java.awt.BorderLayout;
27 import java.awt.Color;
28 import java.awt.Dimension;
29 import java.awt.event.MouseAdapter;
30 import java.awt.event.MouseEvent;
31
32 import javax.swing.BorderFactory;
33 import javax.swing.JColorChooser;
34 import javax.swing.JLabel;
35 import javax.swing.JOptionPane;
36 import javax.swing.JPanel;
37 import javax.swing.JSlider;
38 import javax.swing.event.ChangeEvent;
39 import javax.swing.event.ChangeListener;
40
41 public class TextColourChooser
42 {
43   AlignmentPanel ap;
44
45   SequenceGroup sg;
46
47   public void chooseColour(AlignmentPanel ap, SequenceGroup sg)
48   {
49     this.ap = ap;
50     this.sg = sg;
51
52     int original1, original2, originalThreshold;
53     if (sg == null)
54     {
55       original1 = ap.av.getTextColour().getRGB();
56       original2 = ap.av.getTextColour2().getRGB();
57       originalThreshold = ap.av.getThresholdTextColour();
58     }
59     else
60     {
61       original1 = sg.textColour.getRGB();
62       original2 = sg.textColour2.getRGB();
63       originalThreshold = sg.thresholdTextColour;
64     }
65
66     final JSlider slider = new JSlider(0, 750, originalThreshold);
67     final JPanel col1 = new JPanel();
68     col1.setPreferredSize(new Dimension(40, 20));
69     col1.setBorder(BorderFactory.createEtchedBorder());
70     col1.setToolTipText(MessageManager.getString("label.dark_colour"));
71     col1.setBackground(new Color(original1));
72     final JPanel col2 = new JPanel();
73     col2.setPreferredSize(new Dimension(40, 20));
74     col2.setBorder(BorderFactory.createEtchedBorder());
75     col2.setToolTipText(MessageManager.getString("label.ligth_colour"));
76     col2.setBackground(new Color(original2));
77     final JPanel bigpanel = new JPanel(new BorderLayout());
78     JPanel panel = new JPanel();
79     bigpanel.add(panel, BorderLayout.CENTER);
80     bigpanel.add(
81             new JLabel(
82                     "<html>"
83                             + MessageManager
84                                     .getString("label.select_dark_light_set_thereshold")
85                             + "</html>"), BorderLayout.NORTH);
86     panel.add(col1);
87     panel.add(slider);
88     panel.add(col2);
89
90     col1.addMouseListener(new MouseAdapter()
91     {
92       public void mousePressed(MouseEvent e)
93       {
94         Color col = JColorChooser.showDialog(bigpanel,
95                 MessageManager.getString("label.select_colour_for_text"),
96                 col1.getBackground());
97         if (col != null)
98         {
99           colour1Changed(col);
100           col1.setBackground(col);
101         }
102       }
103     });
104
105     col2.addMouseListener(new MouseAdapter()
106     {
107       public void mousePressed(MouseEvent e)
108       {
109         Color col = JColorChooser.showDialog(bigpanel,
110                 MessageManager.getString("label.select_colour_for_text"),
111                 col2.getBackground());
112         if (col != null)
113         {
114           colour2Changed(col);
115           col2.setBackground(col);
116         }
117       }
118     });
119
120     slider.addChangeListener(new ChangeListener()
121     {
122       public void stateChanged(ChangeEvent evt)
123       {
124         thresholdChanged(slider.getValue());
125       }
126     });
127
128     int reply = JOptionPane
129             .showInternalOptionDialog(
130                     ap,
131                     bigpanel,
132                     MessageManager
133                             .getString("label.adjunst_foreground_text_colour_thereshold"),
134                     JOptionPane.OK_CANCEL_OPTION,
135                     JOptionPane.QUESTION_MESSAGE, null, null, null);
136
137     if (reply == JOptionPane.CANCEL_OPTION)
138     {
139       if (sg == null)
140       {
141         ap.av.setTextColour(new Color(original1));
142         ap.av.setTextColour2(new Color(original2));
143         ap.av.setThresholdTextColour(originalThreshold);
144       }
145       else
146       {
147         sg.textColour = new Color(original1);
148         sg.textColour2 = new Color(original2);
149         sg.thresholdTextColour = originalThreshold;
150       }
151     }
152   }
153
154   void colour1Changed(Color col)
155   {
156     if (sg == null)
157     {
158       ap.av.setTextColour(col);
159       if (ap.av.getColourAppliesToAllGroups())
160       {
161         setGroupTextColour();
162       }
163     }
164     else
165     {
166       sg.textColour = col;
167     }
168
169     ap.paintAlignment(true);
170   }
171
172   void colour2Changed(Color col)
173   {
174     if (sg == null)
175     {
176       ap.av.setTextColour2(col);
177       if (ap.av.getColourAppliesToAllGroups())
178       {
179         setGroupTextColour();
180       }
181     }
182     else
183     {
184       sg.textColour2 = col;
185     }
186
187     ap.paintAlignment(true);
188   }
189
190   void thresholdChanged(int value)
191   {
192     if (sg == null)
193     {
194       ap.av.setThresholdTextColour(value);
195       if (ap.av.getColourAppliesToAllGroups())
196       {
197         setGroupTextColour();
198       }
199     }
200     else
201     {
202       sg.thresholdTextColour = value;
203     }
204
205     ap.paintAlignment(true);
206   }
207
208   void setGroupTextColour()
209   {
210     if (ap.av.getAlignment().getGroups() == null)
211     {
212       return;
213     }
214
215     for (SequenceGroup sg : ap.av.getAlignment().getGroups())
216     {
217       sg.textColour = ap.av.getTextColour();
218       sg.textColour2 = ap.av.getTextColour2();
219       sg.thresholdTextColour = ap.av.getThresholdTextColour();
220     }
221   }
222
223 }