Formatted source
[jalview.git] / src / jalview / appletgui / RedundancyPanel.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 \r
20 package jalview.appletgui;\r
21 \r
22 import java.util.*;\r
23 \r
24 import java.awt.event.*;\r
25 \r
26 import jalview.datamodel.*;\r
27 import jalview.jbappletgui.*;\r
28 \r
29 public class RedundancyPanel\r
30     extends GSliderPanel\r
31 {\r
32   AlignmentPanel ap;\r
33 \r
34   SequenceI[] oldAlignment;\r
35 \r
36   public RedundancyPanel(AlignmentPanel ap)\r
37   {\r
38     this.ap = ap;\r
39 \r
40     label.setText("Enter the redundancy threshold");\r
41 \r
42     slider.addAdjustmentListener(new AdjustmentListener()\r
43     {\r
44       public void adjustmentValueChanged(AdjustmentEvent evt)\r
45       {\r
46         valueField.setText(slider.getValue() + "");\r
47       }\r
48     });\r
49 \r
50     slider.setMinimum(0);\r
51     slider.setMaximum(100);\r
52     slider.setValue(100);\r
53 \r
54   }\r
55 \r
56   public void applyButton_actionPerformed(ActionEvent e)\r
57   {\r
58     float threshold = slider.getValue();\r
59     Vector del;\r
60 \r
61     oldAlignment = new SequenceI[ap.av.alignment.getHeight()];\r
62     for (int i = 0; i < ap.av.alignment.getHeight(); i++)\r
63     {\r
64       oldAlignment[i] = new Sequence(ap.av.alignment.getSequenceAt(i).getName(),\r
65                                      ap.av.alignment.getSequenceAt(i).\r
66                                      getSequence());\r
67     }\r
68 \r
69     undoButton.setEnabled(true);\r
70 \r
71     SequenceGroup sg = ap.av.getSelectionGroup();\r
72     if (sg != null && sg.getSize() > 1)\r
73     {\r
74 \r
75       del = ap.av.alignment.removeRedundancy(threshold, sg.sequences);\r
76       for (int i = 0; i < del.size(); i++)\r
77       {\r
78         if (sg.sequences.contains( (SequenceI) del.elementAt(i)))\r
79         {\r
80           sg.deleteSequence( (SequenceI) del.elementAt(i));\r
81         }\r
82       }\r
83 \r
84     }\r
85     else\r
86     {\r
87       Vector s = new Vector();\r
88       int i = 0;\r
89       while (i < ap.av.alignment.getHeight())\r
90       {\r
91         s.addElement(ap.av.alignment.getSequenceAt(i));\r
92         i++;\r
93       }\r
94       del = ap.av.alignment.removeRedundancy(threshold, s);\r
95       for (int j = 0; j < del.size(); j++)\r
96       {\r
97         if (sg.sequences.contains( (SequenceI) del.elementAt(j)))\r
98         {\r
99           sg.deleteSequence( (SequenceI) del.elementAt(j));\r
100         }\r
101 \r
102       }\r
103     }\r
104 \r
105     ap.repaint();\r
106 \r
107   }\r
108 \r
109   public void undoButton_actionPerformed(ActionEvent e)\r
110   {\r
111     undoButton.setEnabled(false);\r
112     ap.av.setAlignment(new Alignment(oldAlignment));\r
113     oldAlignment = null;\r
114     ap.repaint();\r
115   }\r
116 \r
117   public void valueField_actionPerformed(ActionEvent e)\r
118   {\r
119     try\r
120     {\r
121       int i = Integer.parseInt(valueField.getText());\r
122       slider.setValue(i);\r
123     }\r
124     catch (Exception ex)\r
125     {\r
126       valueField.setText(slider.getValue() + "");\r
127     }\r
128   }\r
129 }\r