JAL-1933 JAL-2432 code tidy
[jalview.git] / src / jalview / appletgui / AnnotationRowFilter.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.appletgui;
22
23 import jalview.schemes.AnnotationColourGradient;
24 import jalview.util.MessageManager;
25
26 import java.awt.Button;
27 import java.awt.Checkbox;
28 import java.awt.Choice;
29 import java.awt.Frame;
30 import java.awt.Panel;
31 import java.awt.Scrollbar;
32 import java.awt.TextField;
33 import java.awt.event.ActionEvent;
34
35 @SuppressWarnings("serial")
36 public abstract class AnnotationRowFilter extends Panel
37 {
38   protected AlignViewport av;
39
40   protected AlignmentPanel ap;
41
42   protected int[] annmap;
43
44   protected boolean enableSeqAss = false;
45
46   private jalview.datamodel.AlignmentAnnotation currentAnnotation;
47
48   protected boolean adjusting = false;
49
50   protected Checkbox currentColours = new Checkbox();
51
52   protected Panel minColour = new Panel();
53
54   protected Panel maxColour = new Panel();
55
56   protected Checkbox seqAssociated = new Checkbox();
57
58   protected Checkbox thresholdIsMin = new Checkbox();
59
60   protected Scrollbar slider = new Scrollbar(Scrollbar.HORIZONTAL);
61
62   protected Checkbox percentThreshold = new Checkbox();
63
64   protected TextField thresholdValue = new TextField(20);
65
66   protected Frame frame;
67
68   protected Button ok = new Button();
69
70   protected Button cancel = new Button();
71
72   /**
73    * enabled if the user is dragging the slider - try to keep updates to a
74    * minimun
75    */
76   protected boolean sliderDragging = false;
77
78   public AnnotationRowFilter(AlignViewport av, final AlignmentPanel ap)
79   {
80     this.av = av;
81     this.ap = ap;
82   }
83
84   public AnnotationRowFilter()
85   {
86
87   }
88
89   protected int getSelectedThresholdItem(int indexValue)
90   {
91     int selectedThresholdItem = -1;
92     if (indexValue == 1)
93     {
94       selectedThresholdItem = AnnotationColourGradient.ABOVE_THRESHOLD;
95     }
96     else if (indexValue == 2)
97     {
98       selectedThresholdItem = AnnotationColourGradient.BELOW_THRESHOLD;
99     }
100     return selectedThresholdItem;
101   }
102
103   public void modelChanged()
104   {
105     seqAssociated.setEnabled(enableSeqAss);
106   }
107
108   public void ok_actionPerformed(ActionEvent e)
109   {
110     updateView();
111     frame.setVisible(false);
112   }
113
114   public void cancel_actionPerformed(ActionEvent e)
115   {
116     reset();
117     ap.paintAlignment(true);
118     frame.setVisible(false);
119   }
120
121   public void thresholdCheck_actionPerformed(ActionEvent e)
122   {
123     updateView();
124   }
125
126   public void annotations_actionPerformed(ActionEvent e)
127   {
128     updateView();
129   }
130
131   public void threshold_actionPerformed(ActionEvent e)
132   {
133     updateView();
134   }
135
136   protected void setThresholdValueText()
137   {
138     adjusting = true;
139     if (percentThreshold.getState())
140     {
141       double scl = slider.getMaximum() - slider.getMinimum();
142       scl = (slider.getValue() - slider.getMinimum()) / scl;
143       thresholdValue.setText(100 * scl + "");
144     }
145     else
146     {
147       thresholdValue.setText((slider.getValue() / 1000f) + "");
148     }
149     thresholdValue.setCaretPosition(0);
150     adjusting = false;
151   }
152   
153   public void thresholdValue_actionPerformed(ActionEvent e)
154   {
155     try
156     {
157       float f = Float.parseFloat(thresholdValue.getText());
158       if (percentThreshold.getState())
159       {
160         slider.setValue(slider.getMinimum()
161                 + ((int) ((f / 100f) * (slider.getMaximum() - slider
162                         .getMinimum()))));
163       }
164       else
165       {
166         slider.setValue((int) (f * 1000));
167       }
168       updateView();
169     } catch (NumberFormatException ex)
170     {
171     }
172   }
173
174   protected void percentageValue_actionPerformed()
175   {
176     setThresholdValueText();
177   }
178
179   protected void populateThresholdComboBox(Choice threshold)
180   {
181     threshold.addItem(MessageManager
182             .getString("label.threshold_feature_no_threshold"));
183     threshold.addItem(MessageManager
184             .getString("label.threshold_feature_above_threshold"));
185     threshold.addItem(MessageManager
186             .getString("label.threshold_feature_below_threshold"));
187   }
188
189   public jalview.datamodel.AlignmentAnnotation getCurrentAnnotation()
190   {
191     return currentAnnotation;
192   }
193
194   public void setCurrentAnnotation(
195           jalview.datamodel.AlignmentAnnotation currentAnnotation)
196   {
197     this.currentAnnotation = currentAnnotation;
198   }
199
200   public abstract void valueChanged(boolean updateAllAnnotation);
201
202   public abstract void updateView();
203
204   public abstract void reset();
205 }