added placeholder indicators and menu item
[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   public UserDefinedColours(AlignmentPanel ap, SequenceGroup sg)\r
26   {\r
27     super();\r
28     frame = new JInternalFrame();\r
29     frame.setContentPane(this);\r
30     Desktop.addInternalFrame(frame, "User defined colours", 450,530, false );\r
31     if(System.getProperty("os.name").startsWith("Mac"))\r
32       frame.setSize(450,560);\r
33 \r
34     if(sg!=null)\r
35         frame.setTitle( frame.getTitle()+ " ("+sg.getName()+")");\r
36 \r
37     colorChooser.getSelectionModel().addChangeListener(this);\r
38 \r
39     this.ap = ap;\r
40     seqGroup = sg;\r
41 \r
42 \r
43       if (seqGroup != null)\r
44         oldColourScheme = seqGroup.cs;\r
45       else\r
46         oldColourScheme = ap.av.getGlobalColourScheme();\r
47 \r
48       for (int i = 0; i < 20; i++)\r
49         makeButton(ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i]) +\r
50                    "", ResidueProperties.aa[i]);\r
51 \r
52       makeButton("B", "B");\r
53       makeButton("Z", "Z");\r
54       makeButton("X", "X");\r
55       makeButton("Gap", "'.','-',' '");\r
56 \r
57       if(jalview.bin.Cache.getProperty("USER_DEFINED_COLOUR")!=null)\r
58       {\r
59         loadColour(jalview.bin.Cache.getProperty("USER_DEFINED_COLOUR"));\r
60       }\r
61   }\r
62 \r
63  public void stateChanged(ChangeEvent evt)\r
64  {\r
65    if(selectedButton!=null)\r
66      selectedButton.setBackground( colorChooser.getColor() );\r
67  }\r
68 \r
69   public void colourButtonPressed(MouseEvent e)\r
70   {\r
71      selectedButton = (JButton)e.getSource();\r
72      colorChooser.setColor(selectedButton.getBackground());\r
73   }\r
74 \r
75   void makeButton(String label, String aa)\r
76   {\r
77     final JButton button = new JButton();\r
78     Color col = Color.white;\r
79 \r
80 \r
81     try{\r
82       col = oldColourScheme.findColour(aa, -1);\r
83     }catch(Exception ex){}\r
84 \r
85     button.setBackground(  col );\r
86     oldColours.addElement( col );\r
87     button.setText( label );\r
88     button.setForeground( col.darker().darker().darker() );\r
89     button.setFont(new java.awt.Font("Verdana", 1, 10));\r
90     button.addMouseListener(new java.awt.event.MouseAdapter()\r
91     {\r
92       public void mouseClicked(MouseEvent e)\r
93       {\r
94         colourButtonPressed(e);\r
95       }\r
96     });\r
97 \r
98     buttonPanel.add(button, null);\r
99   }\r
100 \r
101 \r
102   protected void okButton_actionPerformed(ActionEvent e)\r
103   {\r
104     applyButton_actionPerformed(null);\r
105     try{\r
106       frame.setClosed(true);\r
107     }catch(Exception ex){}\r
108   }\r
109 \r
110   protected void applyButton_actionPerformed(ActionEvent e)\r
111   {\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();\r
121     ucs.setThreshold(0);\r
122     ucs.setColourScheme( newColours );\r
123 \r
124     if(seqGroup!=null)\r
125       seqGroup.cs = ucs;\r
126     else\r
127       ap.av.setGlobalColourScheme(ucs);\r
128 \r
129     ap.repaint();\r
130   }\r
131 \r
132   protected void loadbutton_actionPerformed(ActionEvent e)\r
133   {\r
134     JalviewFileChooser chooser = new JalviewFileChooser(\r
135       jalview.bin.Cache.getProperty("LAST_DIRECTORY"),\r
136         new String[]{".jc"},\r
137         new String[]{"Jalview User Colours"},\r
138           "Jalview User Colours");\r
139     chooser.setFileView(new jalview.io.JalviewFileView());\r
140     chooser.setDialogTitle("Load colour scheme");\r
141     chooser.setToolTipText("Load");\r
142     int value = chooser.showOpenDialog(this);\r
143     if (value == JalviewFileChooser.APPROVE_OPTION)\r
144     {\r
145       File choice = chooser.getSelectedFile();\r
146       jalview.bin.Cache.setProperty("LAST_DIRECTORY",  choice.getParent());\r
147       loadColour(choice.getAbsolutePath());\r
148     }\r
149 \r
150   }\r
151 \r
152   public static UserColourScheme loadDefaultColours(String file)\r
153   {\r
154     UserColourScheme ucs = null;\r
155     try\r
156     {\r
157       BufferedReader in = new BufferedReader(new FileReader(file));\r
158       Color [] newColours = new Color[24];\r
159       for (int i = 0; i < 24; i++)\r
160       {\r
161         newColours[i] = new Color(Integer.parseInt(in.readLine()));\r
162       }\r
163 \r
164       ucs = new UserColourScheme();\r
165       ucs.setThreshold(0);\r
166       ucs.setColourScheme(newColours);\r
167 \r
168     }\r
169     catch (Exception ex)\r
170     {}\r
171 \r
172     return ucs;\r
173   }\r
174 \r
175   void loadColour(String file)\r
176   {\r
177     try\r
178     {\r
179       BufferedReader in = new BufferedReader(new FileReader(file));\r
180       for (int i = 0; i < 24; i++)\r
181       {\r
182         JButton button = (JButton) buttonPanel.getComponent(i);\r
183         Color c = new Color(Integer.parseInt(in.readLine()));\r
184         button.setBackground(c);\r
185       }\r
186 \r
187       jalview.bin.Cache.setProperty("USER_DEFINED_COLOUR", file);\r
188     }\r
189     catch (Exception ex)\r
190     {}\r
191 \r
192   }\r
193 \r
194   protected void savebutton_actionPerformed(ActionEvent e)\r
195   {\r
196     JalviewFileChooser chooser = new JalviewFileChooser(\r
197     jalview.bin.Cache.getProperty("LAST_DIRECTORY"),\r
198     new String[]{".jc"},\r
199     new String[]{"Jalview User Colours"},\r
200       "Jalview User Colours");\r
201 \r
202     chooser.setFileView(new jalview.io.JalviewFileView());\r
203     chooser.setDialogTitle("Save colour scheme");\r
204     chooser.setToolTipText("Save");\r
205     int value = chooser.showSaveDialog(this);\r
206     if (value == JalviewFileChooser.APPROVE_OPTION)\r
207     {\r
208       String choice = chooser.getSelectedFile().getPath();\r
209       jalview.bin.Cache.setProperty("USER_DEFINED_COLOUR", choice);\r
210 \r
211       try{\r
212         PrintWriter out = new PrintWriter(new FileWriter(choice));\r
213         for(int i=0; i<24; i++)\r
214         {\r
215           JButton button = (JButton)buttonPanel.getComponent(i);\r
216           out.println(button.getBackground().getRGB() + "");\r
217         }\r
218 \r
219         out.close();\r
220       }\r
221       catch(Exception ex)\r
222       {ex.printStackTrace();}\r
223     }\r
224 \r
225   }\r
226 \r
227   protected void cancelButton_actionPerformed(ActionEvent e)\r
228   {\r
229     UserColourScheme ucs = new UserColourScheme();\r
230     Color [] newColours = new Color[24];\r
231     for(int i=0; i<24; i++)\r
232     {\r
233           newColours[i] = (Color)oldColours.elementAt(i);\r
234           buttonPanel.getComponent(i).setBackground(newColours[i]);\r
235     }\r
236 \r
237     ucs.setColourScheme( newColours );\r
238     if (seqGroup != null)\r
239       seqGroup.cs = ucs;\r
240     else\r
241       ap.av.setGlobalColourScheme(ucs);\r
242 \r
243     ap.repaint();\r
244 \r
245     try{\r
246       frame.setClosed(true);\r
247     }catch(Exception ex){}\r
248   }\r
249 \r
250 \r
251 }\r