JInternalFrame is within class. Method to load default added
[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(jalview.bin.Cache.getProperty("LAST_DIRECTORY"),\r
135         new String[]{".jvuc"}, "Jalview User Colours");\r
136     chooser.setFileView(new jalview.io.JalviewFileView());\r
137     chooser.setDialogTitle("Load colour scheme");\r
138     chooser.setToolTipText("Load");\r
139     int value = chooser.showOpenDialog(this);\r
140     if (value == JalviewFileChooser.APPROVE_OPTION)\r
141     {\r
142       String choice = chooser.getSelectedFile().getPath();\r
143       jalview.bin.Cache.setProperty("LAST_DIRECTORY",  choice);\r
144       loadColour(choice);\r
145     }\r
146 \r
147   }\r
148 \r
149   public static UserColourScheme loadDefaultColours(String file)\r
150   {\r
151     UserColourScheme ucs = null;\r
152     try\r
153     {\r
154       BufferedReader in = new BufferedReader(new FileReader(file));\r
155       Color [] newColours = new Color[24];\r
156       for (int i = 0; i < 24; i++)\r
157       {\r
158         newColours[i] = new Color(Integer.parseInt(in.readLine()));\r
159       }\r
160 \r
161       ucs = new UserColourScheme();\r
162       ucs.setThreshold(0);\r
163       ucs.setColourScheme(newColours);\r
164 \r
165     }\r
166     catch (Exception ex)\r
167     {}\r
168 \r
169     return ucs;\r
170   }\r
171 \r
172   void loadColour(String file)\r
173   {\r
174     try\r
175     {\r
176       BufferedReader in = new BufferedReader(new FileReader(file));\r
177       for (int i = 0; i < 24; i++)\r
178       {\r
179         JButton button = (JButton) buttonPanel.getComponent(i);\r
180         Color c = new Color(Integer.parseInt(in.readLine()));\r
181         button.setBackground(c);\r
182       }\r
183 \r
184       jalview.bin.Cache.setProperty("USER_DEFINED_COLOUR", file);\r
185     }\r
186     catch (Exception ex)\r
187     {}\r
188 \r
189   }\r
190 \r
191   protected void savebutton_actionPerformed(ActionEvent e)\r
192   {\r
193     JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.getProperty("LAST_DIRECTORY"));\r
194     chooser.setFileView(new jalview.io.JalviewFileView());\r
195     chooser.setDialogTitle("Save colour scheme");\r
196     chooser.setToolTipText("Save");\r
197     int value = chooser.showSaveDialog(this);\r
198     if (value == JalviewFileChooser.APPROVE_OPTION)\r
199     {\r
200       String choice = chooser.getSelectedFile().getPath();\r
201       jalview.bin.Cache.setProperty("USER_DEFINED_COLOUR", choice);\r
202 \r
203       try{\r
204         PrintWriter out = new PrintWriter(new FileWriter(choice));\r
205         for(int i=0; i<24; i++)\r
206         {\r
207           JButton button = (JButton)buttonPanel.getComponent(i);\r
208           out.println(button.getBackground().getRGB() + "");\r
209         }\r
210 \r
211         out.close();\r
212       }\r
213       catch(Exception ex)\r
214       {ex.printStackTrace();}\r
215     }\r
216 \r
217   }\r
218 \r
219   protected void cancelButton_actionPerformed(ActionEvent e)\r
220   {\r
221     UserColourScheme ucs = new UserColourScheme();\r
222     Color [] newColours = new Color[24];\r
223     for(int i=0; i<24; i++)\r
224     {\r
225           newColours[i] = (Color)oldColours.elementAt(i);\r
226           buttonPanel.getComponent(i).setBackground(newColours[i]);\r
227     }\r
228 \r
229     ucs.setColourScheme( newColours );\r
230     if (seqGroup != null)\r
231       seqGroup.cs = ucs;\r
232     else\r
233       ap.av.setGlobalColourScheme(ucs);\r
234 \r
235     ap.repaint();\r
236 \r
237     try{\r
238       frame.setClosed(true);\r
239     }catch(Exception ex){}\r
240   }\r
241 \r
242 \r
243 }\r