5d266f87a06d7c7503d7a8bc5f3efc91268cd897
[jalview.git] / src / jalview / gui / RedundancyPanel.java
1 package jalview.gui;\r
2 \r
3 import jalview.jbgui.*;\r
4 import jalview.datamodel.*;\r
5 import java.awt.event.*;\r
6 import java.util.*;\r
7 import javax.swing.event.*;\r
8 \r
9 public class RedundancyPanel\r
10     extends GSliderPanel\r
11 {\r
12   AlignFrame af;\r
13   AlignmentPanel ap;\r
14   Stack historyList = new Stack(); // simpler than synching with alignFrame.\r
15 \r
16   public RedundancyPanel(AlignmentPanel ap, AlignFrame af)\r
17   {\r
18     this.ap = ap;\r
19     this.af = af;\r
20     label.setText("Enter the redundancy threshold");\r
21 \r
22     slider.addChangeListener(new ChangeListener()\r
23     {\r
24       public void stateChanged(ChangeEvent evt)\r
25       {\r
26         valueField.setText(slider.getValue() + "");\r
27       }\r
28     });\r
29 \r
30     slider.setMinimum(0);\r
31     slider.setMaximum(100);\r
32     slider.setValue(100);\r
33 \r
34   }\r
35 \r
36   public void applyButton_actionPerformed(ActionEvent e)\r
37   {\r
38     float threshold = slider.getValue();\r
39     Vector del;\r
40     HistoryItem it;\r
41     historyList.push(it=new HistoryItem("Remove redundancy",\r
42                                       ap.av.alignment, HistoryItem.HIDE));\r
43     if (historyList.size()==1\r
44         || !af.historyList.contains(historyList.firstElement())) {\r
45       af.addHistoryItem((HistoryItem) historyList.firstElement());\r
46       af.updateEditMenuBar();\r
47     }\r
48     undoButton.setEnabled(true);\r
49     SequenceGroup sg = ap.av.getSelectionGroup();\r
50     if (sg != null && sg.getSize() >= 1)\r
51     {\r
52 \r
53       del = ap.av.alignment.removeRedundancy(threshold, sg.sequences);\r
54       for (int i = 0; i < del.size(); i++)\r
55       {\r
56         if (sg.sequences.contains( (SequenceI) del.elementAt(i)))\r
57         {\r
58           sg.deleteSequence( (SequenceI) del.elementAt(i));\r
59         }\r
60       }\r
61 \r
62     }\r
63     else\r
64     {\r
65       Vector s = new Vector();\r
66       int i = 0;\r
67       while (i < ap.av.alignment.getHeight())\r
68       {\r
69         s.addElement(ap.av.alignment.getSequenceAt(i));\r
70         i++;\r
71       }\r
72       del = ap.av.alignment.removeRedundancy(threshold, s);\r
73     }\r
74 \r
75     // This has to be done before the restoreHistoryItem method of alignFrame will\r
76     // actually restore these sequences.\r
77 \r
78     if (del.size()>0)\r
79       for (int i=0,j=del.size(); i<j; i++) {\r
80         SequenceI sq = (SequenceI) del.elementAt(i);\r
81         sq.deleteChars(0,sq.getLength());\r
82       }\r
83 \r
84     ap.av.firePropertyChange("alignment", null,\r
85                              ap.av.getAlignment().getSequences());\r
86     ap.av.resetSeqLimits(ap.seqPanel.seqCanvas.getHeight());\r
87     if (ap.av.getAlignment().getHeight() < 1)\r
88     {\r
89       try\r
90       {\r
91         af.setClosed(true);\r
92       }\r
93       catch (Exception ex)\r
94       {}\r
95     }\r
96     ap.av.updateConservation();\r
97     ap.av.updateConsensus();\r
98     af.updateEditMenuBar();\r
99     ap.repaint();\r
100 \r
101   }\r
102 \r
103   public void undoButton_actionPerformed(ActionEvent e)\r
104   {\r
105     HistoryItem hi = (HistoryItem) historyList.pop();\r
106     af.restoreHistoryItem(hi);\r
107     if (historyList.size() == 0)\r
108     {\r
109       undoButton.setEnabled(false);\r
110       if (af.historyList.contains(hi))\r
111       {\r
112         af.historyList.remove(hi);\r
113         af.updateEditMenuBar();\r
114       }\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