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