uses jalviewfilechooser
[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(JInternalFrame f, AlignmentPanel ap, SequenceGroup sg)\r
27   {\r
28     super();\r
29     colorChooser.getSelectionModel().addChangeListener(this);\r
30     this.ap = ap;\r
31     frame = f;\r
32     seqGroup = sg;\r
33 \r
34 \r
35       if (seqGroup != null)\r
36         oldColourScheme = seqGroup.cs;\r
37       else\r
38         oldColourScheme = ap.av.getGlobalColourScheme();\r
39 \r
40       for (int i = 0; i < 20; i++)\r
41         makeButton(ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i]) +\r
42                    "", ResidueProperties.aa[i]);\r
43 \r
44       makeButton("B", "B");\r
45       makeButton("Z", "Z");\r
46       makeButton("X", "X");\r
47       makeButton("'.','-',' '", "-");\r
48 \r
49       if(jalview.bin.Cache.getProperty("USER_DEFINED_COLOUR")!=null)\r
50       {\r
51         loadColour(jalview.bin.Cache.getProperty("USER_DEFINED_COLOUR"));\r
52       }\r
53 \r
54 \r
55   }\r
56 \r
57  public void stateChanged(ChangeEvent evt)\r
58  {\r
59    if(selectedButton!=null)\r
60      selectedButton.setBackground( colorChooser.getColor() );\r
61  }\r
62 \r
63   public void colourButtonPressed(MouseEvent e)\r
64   {\r
65      selectedButton = (JButton)e.getSource();\r
66      colorChooser.setColor(selectedButton.getBackground());\r
67   }\r
68 \r
69   void makeButton(String label, String aa)\r
70   {\r
71     final JButton button = new JButton();\r
72     Color col = Color.white;\r
73 \r
74 \r
75     try{\r
76       col = oldColourScheme.findColour(aa, -1, null);\r
77     }catch(Exception ex){}\r
78 \r
79     button.setBackground(  col );\r
80     oldColours.addElement( col );\r
81     button.setText( label );\r
82     button.setForeground( col.darker().darker().darker() );\r
83     button.setFont(new java.awt.Font("Verdana", 1, 10));\r
84     button.addMouseListener(new java.awt.event.MouseAdapter()\r
85     {\r
86       public void mouseClicked(MouseEvent e)\r
87       {\r
88         colourButtonPressed(e);\r
89       }\r
90     });\r
91 \r
92     buttonPanel.add(button);\r
93   }\r
94 \r
95 \r
96   protected void okButton_actionPerformed(ActionEvent e)\r
97   {\r
98     applyButton_actionPerformed(null);\r
99     try{\r
100       frame.setClosed(true);\r
101     }catch(Exception ex){}\r
102   }\r
103 \r
104   protected void applyButton_actionPerformed(ActionEvent e)\r
105   {\r
106     UserColourScheme ucs = new UserColourScheme();\r
107     Color [] newColours = new Color[24];\r
108     for(int i=0; i<24; i++)\r
109     {\r
110           JButton button = (JButton)buttonPanel.getComponent(i);\r
111           newColours[i] = button.getBackground();\r
112     }\r
113 \r
114     ucs.setThreshold(0);\r
115     ucs.setColourScheme( newColours );\r
116 \r
117     if(seqGroup!=null)\r
118       seqGroup.cs = ucs;\r
119     else\r
120       ap.av.setGlobalColourScheme(ucs);\r
121 \r
122     ap.RefreshPanels();\r
123   }\r
124 \r
125   protected void loadbutton_actionPerformed(ActionEvent e)\r
126   {\r
127     JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.getProperty("LAST_DIRECTORY"));\r
128     chooser.setFileView(new jalview.io.JalviewFileView());\r
129     chooser.setDialogTitle("Load colour scheme");\r
130     chooser.setToolTipText("Load");\r
131     int value = chooser.showOpenDialog(this);\r
132     if (value == JalviewFileChooser.APPROVE_OPTION)\r
133     {\r
134       String choice = chooser.getSelectedFile().getPath();\r
135       jalview.bin.Cache.setProperty("LAST_DIRECTORY",  choice);\r
136       loadColour(choice);\r
137     }\r
138 \r
139   }\r
140 \r
141   void loadColour(String file)\r
142   {\r
143     try\r
144     {\r
145       BufferedReader in = new BufferedReader(new FileReader(file));\r
146       for (int i = 0; i < 24; i++)\r
147       {\r
148         JButton button = (JButton) buttonPanel.getComponent(i);\r
149         Color c = new Color(Integer.parseInt(in.readLine()));\r
150         button.setBackground(c);\r
151       }\r
152     }\r
153     catch (Exception ex)\r
154     {}\r
155 \r
156   }\r
157 \r
158   protected void savebutton_actionPerformed(ActionEvent e)\r
159   {\r
160     JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.getProperty("LAST_DIRECTORY"));\r
161     chooser.setFileView(new jalview.io.JalviewFileView());\r
162     chooser.setDialogTitle("Save colour scheme");\r
163     chooser.setToolTipText("Save");\r
164     int value = chooser.showSaveDialog(this);\r
165     if (value == JalviewFileChooser.APPROVE_OPTION)\r
166     {\r
167       String choice = chooser.getSelectedFile().getPath();\r
168       jalview.bin.Cache.setProperty("USER_DEFINED_COLOUR", choice);\r
169 \r
170       try{\r
171         PrintWriter out = new PrintWriter(new FileWriter(choice));\r
172         for(int i=0; i<24; i++)\r
173         {\r
174           JButton button = (JButton)buttonPanel.getComponent(i);\r
175           out.println(button.getBackground().getRGB() + "");\r
176         }\r
177 \r
178         out.close();\r
179       }\r
180       catch(Exception ex)\r
181       {ex.printStackTrace();}\r
182     }\r
183 \r
184   }\r
185 \r
186   protected void cancelButton_actionPerformed(ActionEvent e)\r
187   {\r
188     UserColourScheme ucs = new UserColourScheme();\r
189     Color [] newColours = new Color[24];\r
190     for(int i=0; i<24; i++)\r
191     {\r
192           newColours[i] = (Color)oldColours.elementAt(i);\r
193           buttonPanel.getComponent(i).setBackground(newColours[i]);\r
194     }\r
195 \r
196     ucs.setColourScheme( newColours );\r
197     if (seqGroup != null)\r
198       seqGroup.cs = ucs;\r
199     else\r
200       ap.av.setGlobalColourScheme(ucs);\r
201 \r
202     ap.RefreshPanels();\r
203 \r
204   }\r
205 \r
206 \r
207 }\r