Check if colos are null
[jalview.git] / src / jalview / gui / UserDefinedColours.java
1 package jalview.gui;\r
2 \r
3 import jalview.jbgui.GUserDefinedColours;\r
4 import jalview.datamodel.*;\r
5 import jalview.io.*;\r
6 import javax.swing.*;\r
7 import java.awt.*;\r
8 import java.awt.event.*;\r
9 import javax.swing.event.*;\r
10 import jalview.schemes.*;\r
11 import java.io.*;\r
12 import java.util.*;\r
13 \r
14 \r
15 public class UserDefinedColours extends GUserDefinedColours implements ChangeListener\r
16 {\r
17 \r
18   AlignmentPanel ap;\r
19   SequenceGroup seqGroup;\r
20   JButton selectedButton;\r
21   Vector oldColours = new Vector();\r
22   ColourSchemeI oldColourScheme;\r
23   JInternalFrame frame;\r
24 \r
25 \r
26   public UserDefinedColours(AlignmentPanel ap, SequenceGroup sg)\r
27   {\r
28     super();\r
29     frame = new JInternalFrame();\r
30     frame.setContentPane(this);\r
31     Desktop.addInternalFrame(frame, "User Defined Colours", 450,530, false );\r
32     if(System.getProperty("os.name").startsWith("Mac"))\r
33       frame.setSize(450,560);\r
34 \r
35     if(sg!=null)\r
36         frame.setTitle( frame.getTitle()+ " ("+sg.getName()+")");\r
37 \r
38     colorChooser.getSelectionModel().addChangeListener(this);\r
39 \r
40     this.ap = ap;\r
41     seqGroup = sg;\r
42 \r
43 \r
44       if (seqGroup != null)\r
45         oldColourScheme = seqGroup.cs;\r
46       else\r
47         oldColourScheme = ap.av.getGlobalColourScheme();\r
48 \r
49       for (int i = 0; i < 20; i++)\r
50         makeButton(ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i]) +\r
51                    "", ResidueProperties.aa[i]);\r
52 \r
53       makeButton("B", "B");\r
54       makeButton("Z", "Z");\r
55       makeButton("X", "X");\r
56       makeButton("Gap", "'.','-',' '");\r
57 \r
58       if(jalview.bin.Cache.getProperty("USER_DEFINED_COLOUR")!=null)\r
59       {\r
60         loadColours(jalview.bin.Cache.getProperty("USER_DEFINED_COLOUR"));\r
61       }\r
62   }\r
63 \r
64  public void stateChanged(ChangeEvent evt)\r
65  {\r
66    if(selectedButton!=null)\r
67      selectedButton.setBackground( colorChooser.getColor() );\r
68  }\r
69 \r
70   public void colourButtonPressed(MouseEvent e)\r
71   {\r
72      selectedButton = (JButton)e.getSource();\r
73      colorChooser.setColor(selectedButton.getBackground());\r
74   }\r
75 \r
76   void makeButton(String label, String aa)\r
77   {\r
78     final JButton button = new JButton();\r
79     Color col = Color.white;\r
80 \r
81 \r
82     try{\r
83       col = oldColourScheme.findColour(aa, -1);\r
84     }catch(Exception ex){}\r
85 \r
86     button.setBackground(  col );\r
87     oldColours.addElement( col );\r
88     button.setText( label );\r
89     button.setForeground( col.darker().darker().darker() );\r
90     button.setFont(new java.awt.Font("Verdana", 1, 10));\r
91     button.addMouseListener(new java.awt.event.MouseAdapter()\r
92     {\r
93       public void mouseClicked(MouseEvent e)\r
94       {\r
95         colourButtonPressed(e);\r
96       }\r
97     });\r
98 \r
99     buttonPanel.add(button, null);\r
100   }\r
101 \r
102 \r
103   protected void okButton_actionPerformed(ActionEvent e)\r
104   {\r
105     applyButton_actionPerformed(null);\r
106     try{\r
107       frame.setClosed(true);\r
108     }catch(Exception ex){}\r
109   }\r
110 \r
111   protected void applyButton_actionPerformed(ActionEvent e)\r
112   {\r
113     Color [] newColours = new Color[24];\r
114     for(int i=0; i<24; i++)\r
115     {\r
116           JButton button = (JButton)buttonPanel.getComponent(i);\r
117           newColours[i] = button.getBackground();\r
118     }\r
119 \r
120     UserColourScheme ucs = new UserColourScheme(newColours);\r
121     ucs.setThreshold(0);\r
122 \r
123     if(seqGroup!=null)\r
124     {\r
125       seqGroup.cs = ucs;\r
126       ap.repaint();\r
127     }\r
128     else\r
129       ap.alignFrame.changeColour(ucs);\r
130 \r
131   }\r
132 \r
133   protected void loadbutton_actionPerformed(ActionEvent e)\r
134   {\r
135     JalviewFileChooser chooser = new JalviewFileChooser(\r
136       jalview.bin.Cache.getProperty("LAST_DIRECTORY"),\r
137         new String[]{"jc"},\r
138         new String[]{"Jalview User Colours"},\r
139           "Jalview User Colours");\r
140     chooser.setFileView(new jalview.io.JalviewFileView());\r
141     chooser.setDialogTitle("Load colour scheme");\r
142     chooser.setToolTipText("Load");\r
143     int value = chooser.showOpenDialog(this);\r
144     if (value == JalviewFileChooser.APPROVE_OPTION)\r
145     {\r
146       File choice = chooser.getSelectedFile();\r
147       jalview.bin.Cache.setProperty("LAST_DIRECTORY",  choice.getParent());\r
148       jalview.bin.Cache.setProperty("USER_DEFINED_COLOUR", choice.getPath());\r
149       Color[] colors = loadColours(choice.getAbsolutePath());\r
150       for (int i = 0; i < colors.length; i++)\r
151       {\r
152         JButton button = (JButton) buttonPanel.getComponent(i);\r
153         button.setBackground(colors[i]);\r
154       }\r
155 \r
156     }\r
157   }\r
158 \r
159   public static UserColourScheme loadDefaultColours()\r
160   {\r
161     if(jalview.bin.Cache.getProperty("USER_DEFINED_COLOUR")!=null)\r
162       return loadDefaultColours(jalview.bin.Cache.getProperty("USER_DEFINED_COLOUR"));\r
163     else\r
164       return null;\r
165   }\r
166 \r
167   public static UserColourScheme loadDefaultColours(String file)\r
168   {\r
169       UserColourScheme ucs = null;\r
170       Color cols[] = loadColours(file);\r
171       if(cols!=null)\r
172       {\r
173         ucs = new UserColourScheme(cols);\r
174         ucs.setThreshold(0);\r
175       }\r
176       return ucs;\r
177   }\r
178 \r
179   static Color [] loadColours(String file)\r
180   {\r
181     Color [] newColours=null;\r
182     try\r
183     {\r
184       InputStreamReader in = new InputStreamReader(\r
185           new FileInputStream(file), "UTF-8");\r
186 \r
187       jalview.binding.JalviewUserColours ucs = new jalview.binding.JalviewUserColours();\r
188       ucs = (jalview.binding.JalviewUserColours)ucs.unmarshal(in);\r
189 \r
190       newColours = new Color[ucs.getColourCount()];\r
191       for (int i = 0; i < 24; i++)\r
192         newColours[i] = new Color(Integer.parseInt(ucs.getColour(i).getRGB(), 16));\r
193 \r
194     }\r
195     catch (Exception ex)\r
196     {System.out.println("Error loading UserColourFile "+file);}\r
197 \r
198     return newColours;\r
199   }\r
200 \r
201   protected void savebutton_actionPerformed(ActionEvent e)\r
202   {\r
203     JalviewFileChooser chooser = new JalviewFileChooser(\r
204     jalview.bin.Cache.getProperty("LAST_DIRECTORY"),\r
205     new String[]{"jc"},\r
206     new String[]{"Jalview User Colours"},\r
207       "Jalview User Colours");\r
208 \r
209     chooser.setFileView(new jalview.io.JalviewFileView());\r
210     chooser.setDialogTitle("Save colour scheme");\r
211     chooser.setToolTipText("Save");\r
212     int value = chooser.showSaveDialog(this);\r
213     if (value == JalviewFileChooser.APPROVE_OPTION)\r
214     {\r
215       String choice = chooser.getSelectedFile().getPath();\r
216       jalview.bin.Cache.setProperty("USER_DEFINED_COLOUR", choice);\r
217       jalview.binding.JalviewUserColours ucs = new jalview.binding.JalviewUserColours();\r
218 \r
219       try{\r
220         PrintWriter out = new PrintWriter(new OutputStreamWriter(\r
221                                      new FileOutputStream(choice), "UTF-8"));\r
222         for(int i=0; i<24; i++)\r
223         {\r
224          JButton button = (JButton)buttonPanel.getComponent(i);\r
225          jalview.binding.Colour col = new jalview.binding.Colour();\r
226          col.setName(button.getText());\r
227          col.setRGB( jalview.util.Format.getHexString( button.getBackground() ));\r
228          ucs.addColour(col);\r
229         }\r
230 \r
231         ucs.marshal(out);\r
232         out.close();\r
233       }\r
234       catch(Exception ex)\r
235       {ex.printStackTrace();}\r
236     }\r
237 \r
238   }\r
239 \r
240   protected void cancelButton_actionPerformed(ActionEvent e)\r
241   {\r
242 \r
243     Color [] newColours = new Color[24];\r
244     for(int i=0; i<24; i++)\r
245     {\r
246           newColours[i] = (Color)oldColours.elementAt(i);\r
247           buttonPanel.getComponent(i).setBackground(newColours[i]);\r
248     }\r
249 \r
250     UserColourScheme ucs = new UserColourScheme( newColours );\r
251 \r
252     if (seqGroup != null)\r
253       seqGroup.cs = ucs;\r
254     else\r
255       ap.av.setGlobalColourScheme(ucs);\r
256 \r
257     ap.repaint();\r
258 \r
259     try{\r
260       frame.setClosed(true);\r
261     }catch(Exception ex){}\r
262   }\r
263 \r
264 \r
265 }\r