JAL-1807 still testing
[jalviewjs.git] / unused / appletgui / AnnotationColumnChooser.java
1 package jalview.appletgui;\r
2 \r
3 import jalview.bin.JalviewLite;\r
4 import jalview.datamodel.AlignmentAnnotation;\r
5 import jalview.datamodel.ColumnSelection;\r
6 import jalview.datamodel.GraphLine;\r
7 import jalview.schemes.AnnotationColourGradient;\r
8 import jalview.util.MessageManager;\r
9 import jalview.viewmodel.annotationfilter.AnnotationFilterParameter;\r
10 \r
11 import java.awt.BorderLayout;\r
12 import java.awt.CardLayout;\r
13 import java.awt.Checkbox;\r
14 import java.awt.Choice;\r
15 import java.awt.Color;\r
16 import java.awt.Dimension;\r
17 import java.awt.Frame;\r
18 import java.awt.Panel;\r
19 import java.awt.TextField;\r
20 import java.awt.event.ActionEvent;\r
21 import java.awt.event.ActionListener;\r
22 import java.awt.event.AdjustmentEvent;\r
23 import java.awt.event.AdjustmentListener;\r
24 import java.awt.event.ItemEvent;\r
25 import java.awt.event.ItemListener;\r
26 import java.awt.event.MouseAdapter;\r
27 import java.awt.event.MouseEvent;\r
28 import java.awt.event.MouseListener;\r
29 import java.awt.event.TextEvent;\r
30 import java.awt.event.TextListener;\r
31 import java.util.Iterator;\r
32 import java.util.Vector;\r
33 \r
34 import javax.swing.JPanel;\r
35 \r
36 //import net.miginfocom.swing.MigLayout;\r
37 \r
38 public class AnnotationColumnChooser extends AnnotationRowFilter implements\r
39         ActionListener, AdjustmentListener, ItemListener, MouseListener\r
40 {\r
41 \r
42   private Choice annotations = new Choice();\r
43 \r
44   private Panel actionPanel = new Panel();\r
45 \r
46   private TitledPanel thresholdPanel = new TitledPanel();\r
47 \r
48   private Panel switchableViewsPanel = new Panel(new CardLayout());\r
49 \r
50   private CardLayout switchableViewsLayout = (CardLayout) (switchableViewsPanel\r
51           .getLayout());\r
52 \r
53   private Panel noGraphFilterView = new Panel();\r
54 \r
55   private Panel graphFilterView = new Panel();\r
56 \r
57   private Panel annotationComboBoxPanel = new Panel();\r
58 \r
59   private BorderLayout borderLayout1 = new BorderLayout();\r
60 \r
61   private BorderLayout gBorderLayout = new BorderLayout();\r
62 \r
63   private BorderLayout ngBorderLayout = new BorderLayout();\r
64 \r
65   private Choice threshold = new Choice();\r
66 \r
67   private StructureFilterPanel gStructureFilterPanel;\r
68 \r
69   private StructureFilterPanel ngStructureFilterPanel;\r
70 \r
71   private StructureFilterPanel currentStructureFilterPanel;\r
72 \r
73   private SearchPanel currentSearchPanel;\r
74 \r
75   private SearchPanel gSearchPanel;\r
76 \r
77   private SearchPanel ngSearchPanel;\r
78 \r
79   private FurtherActionPanel currentFurtherActionPanel;\r
80 \r
81   private FurtherActionPanel gFurtherActionPanel;\r
82 \r
83   private FurtherActionPanel ngFurtherActionPanel;\r
84 \r
85   public static final int ACTION_OPTION_SELECT = 1;\r
86 \r
87   public static int ACTION_OPTION_HIDE = 2;\r
88 \r
89   public static String NO_GRAPH_VIEW = "0";\r
90 \r
91   public static String GRAPH_VIEW = "1";\r
92 \r
93   private int actionOption = ACTION_OPTION_SELECT;\r
94 \r
95   private ColumnSelection oldColumnSelection;\r
96 \r
97   public AnnotationColumnChooser()\r
98   {\r
99     try\r
100     {\r
101       jbInit();\r
102     } catch (Exception ex)\r
103     {\r
104       ex.printStackTrace();\r
105     }\r
106   }\r
107 \r
108   public AnnotationColumnChooser(AlignViewport av, final AlignmentPanel ap)\r
109   {\r
110     super(av, ap);\r
111     frame = new JFrame();\r
112     frame.add(this);\r
113     JalviewLite.addFrame(frame,\r
114             MessageManager.getString("label.select_by_annotation"), 520,\r
115             215);\r
116 \r
117     slider.addAdjustmentListener(this);\r
118     slider.addMouseListener(this);\r
119 \r
120     if (av.getAlignment().getAlignmentAnnotation() == null)\r
121     {\r
122       return;\r
123     }\r
124     setOldColumnSelection(av.getColumnSelection());\r
125     adjusting = true;\r
126     Vector list = new Vector();\r
127     int index = 1;\r
128     for (int i = 0; i < av.getAlignment().getAlignmentAnnotation().length; i++)\r
129     {\r
130       String label = av.getAlignment().getAlignmentAnnotation()[i].label;\r
131       if (!list.contains(label))\r
132       {\r
133         list.addElement(label);\r
134       }\r
135       else\r
136       {\r
137         list.addElement(label + "_" + (index++));\r
138       }\r
139     }\r
140 \r
141     for (int i = 0; i < list.size(); i++)\r
142     {\r
143       annotations.addItem(list.elementAt(i).toString());\r
144     }\r
145 \r
146     populateThresholdComboBox(threshold);\r
147 \r
148     // restore Object state from the previous session if one exists\r
149     if (av.getAnnotationColumnSelectionState() != null)\r
150     {\r
151       currentSearchPanel = av.getAnnotationColumnSelectionState()\r
152               .getCurrentSearchPanel();\r
153       currentStructureFilterPanel = av.getAnnotationColumnSelectionState()\r
154               .getCurrentStructureFilterPanel();\r
155       annotations.select(av.getAnnotationColumnSelectionState()\r
156               .getAnnotations().getSelectedIndex());\r
157       threshold.select(av.getAnnotationColumnSelectionState()\r
158               .getThreshold().getSelectedIndex());\r
159       actionOption = av.getAnnotationColumnSelectionState()\r
160               .getActionOption();\r
161     }\r
162 \r
163     try\r
164     {\r
165       jbInit();\r
166     } catch (Exception ex)\r
167     {\r
168     }\r
169     adjusting = false;\r
170 \r
171     updateView();\r
172     frame.invalidate();\r
173     frame.pack();\r
174   }\r
175 \r
176   private void jbInit() throws Exception\r
177   {\r
178     ok.setLabel(MessageManager.getString("action.ok"));\r
179 \r
180     cancel.setLabel(MessageManager.getString("action.cancel"));\r
181 \r
182     thresholdValue.setEnabled(false);\r
183     thresholdValue.setColumns(7);\r
184 \r
185     ok.addActionListener(this);\r
186     cancel.addActionListener(this);\r
187     annotations.addItemListener(this);\r
188     thresholdValue.addActionListener(this);\r
189     threshold.addItemListener(this);\r
190 \r
191     slider.setBackground(Color.white);\r
192     slider.setEnabled(false);\r
193     slider.setPreferredSize(new Dimension(100, 32));\r
194 \r
195     thresholdPanel.setBackground(Color.white);\r
196     // thresholdPanel.setFont(JvSwingUtils.getLabelFont());\r
197     // thresholdPanel.setLayout(new MigLayout("", "[left][right]", "[][]"));\r
198 \r
199     actionPanel.setBackground(Color.white);\r
200     // actionPanel.setFont(JvSwingUtils.getLabelFont());\r
201 \r
202     graphFilterView.setLayout(gBorderLayout);\r
203     graphFilterView.setBackground(Color.white);\r
204 \r
205     noGraphFilterView.setLayout(ngBorderLayout);\r
206     noGraphFilterView.setBackground(Color.white);\r
207 \r
208     annotationComboBoxPanel.setBackground(Color.white);\r
209     // annotationComboBoxPanel.setFont(JvSwingUtils.getLabelFont());\r
210 \r
211     gSearchPanel = new SearchPanel(this);\r
212     ngSearchPanel = new SearchPanel(this);\r
213     gFurtherActionPanel = new FurtherActionPanel(this);\r
214     ngFurtherActionPanel = new FurtherActionPanel(this);\r
215     gStructureFilterPanel = new StructureFilterPanel(this);\r
216     ngStructureFilterPanel = new StructureFilterPanel(this);\r
217 \r
218     thresholdPanel.setTitle("Threshold Filter");\r
219     thresholdPanel.add(getThreshold());\r
220     thresholdPanel.add(slider);\r
221     thresholdPanel.add(thresholdValue);\r
222 \r
223     actionPanel.add(ok);\r
224     actionPanel.add(cancel);\r
225 \r
226     JPanel staticPanel = new JPanel();\r
227     staticPanel.setLayout(new BorderLayout());\r
228     staticPanel.setBackground(Color.white);\r
229 \r
230     staticPanel.add(gSearchPanel, java.awt.BorderLayout.NORTH);\r
231     staticPanel.add(gStructureFilterPanel, java.awt.BorderLayout.SOUTH);\r
232 \r
233     graphFilterView.add(staticPanel, java.awt.BorderLayout.NORTH);\r
234     graphFilterView.add(thresholdPanel, java.awt.BorderLayout.CENTER);\r
235     graphFilterView.add(gFurtherActionPanel, java.awt.BorderLayout.SOUTH);\r
236 \r
237     noGraphFilterView.add(ngSearchPanel, java.awt.BorderLayout.PAGE_START);\r
238     noGraphFilterView.add(ngStructureFilterPanel,\r
239             java.awt.BorderLayout.CENTER);\r
240     noGraphFilterView.add(ngFurtherActionPanel,\r
241             java.awt.BorderLayout.CENTER);\r
242 \r
243     annotationComboBoxPanel.add(getAnnotations());\r
244     switchableViewsPanel.add(noGraphFilterView,\r
245             AnnotationColumnChooser.NO_GRAPH_VIEW);\r
246     switchableViewsPanel.add(graphFilterView,\r
247             AnnotationColumnChooser.GRAPH_VIEW);\r
248 \r
249     this.setLayout(borderLayout1);\r
250     this.add(annotationComboBoxPanel, java.awt.BorderLayout.PAGE_START);\r
251     this.add(switchableViewsPanel, java.awt.BorderLayout.CENTER);\r
252     this.add(actionPanel, java.awt.BorderLayout.SOUTH);\r
253 \r
254     selectedAnnotationChanged();\r
255     this.validate();\r
256   }\r
257 \r
258   @SuppressWarnings("unchecked")\r
259   public void reset()\r
260   {\r
261     if (this.getOldColumnSelection() != null)\r
262     {\r
263       av.getColumnSelection().clear();\r
264 \r
265       if (av.getAnnotationColumnSelectionState() != null)\r
266       {\r
267         ColumnSelection oldSelection = av\r
268                 .getAnnotationColumnSelectionState()\r
269                 .getOldColumnSelection();\r
270         if (oldSelection != null && oldSelection.getHiddenColumns() != null\r
271                 && !oldSelection.getHiddenColumns().isEmpty())\r
272         {\r
273           for (Iterator<int[]> itr = oldSelection.getHiddenColumns()\r
274                   .iterator(); itr.hasNext();)\r
275           {\r
276             int positions[] = itr.next();\r
277             av.hideColumns(positions[0], positions[1]);\r
278           }\r
279         }\r
280         av.setColumnSelection(oldSelection);\r
281       }\r
282       ap.paintAlignment(true);\r
283     }\r
284 \r
285   }\r
286 \r
287   public void adjustmentValueChanged(AdjustmentEvent evt)\r
288   {\r
289     if (!adjusting)\r
290     {\r
291       thresholdValue.setText((slider.getValue() / 1000f) + "");\r
292       valueChanged(!sliderDragging);\r
293     }\r
294   }\r
295 \r
296   protected void addSliderMouseListeners()\r
297   {\r
298 \r
299     slider.addMouseListener(new MouseAdapter()\r
300     {\r
301       @Override\r
302       public void mousePressed(MouseEvent e)\r
303       {\r
304         sliderDragging = true;\r
305         super.mousePressed(e);\r
306       }\r
307 \r
308       @Override\r
309       public void mouseDragged(MouseEvent e)\r
310       {\r
311         sliderDragging = true;\r
312         super.mouseDragged(e);\r
313       }\r
314 \r
315       @Override\r
316       public void mouseReleased(MouseEvent evt)\r
317       {\r
318         if (sliderDragging)\r
319         {\r
320           sliderDragging = false;\r
321           valueChanged(true);\r
322         }\r
323         ap.paintAlignment(true);\r
324       }\r
325     });\r
326   }\r
327 \r
328   public void valueChanged(boolean updateAllAnnotation)\r
329   {\r
330     if (slider.isEnabled())\r
331     {\r
332       getCurrentAnnotation().threshold.value = slider.getValue() / 1000f;\r
333       updateView();\r
334       ap.paintAlignment(false);\r
335     }\r
336   }\r
337 \r
338   public Choice getThreshold()\r
339   {\r
340     return threshold;\r
341   }\r
342 \r
343   public void setThreshold(Choice threshold)\r
344   {\r
345     this.threshold = threshold;\r
346   }\r
347 \r
348   public Choice getAnnotations()\r
349   {\r
350     return annotations;\r
351   }\r
352 \r
353   public void setAnnotations(Choice annotations)\r
354   {\r
355     this.annotations = annotations;\r
356   }\r
357 \r
358   @Override\r
359   public void updateView()\r
360   {\r
361     // Check if combobox is still adjusting\r
362     if (adjusting)\r
363     {\r
364       return;\r
365     }\r
366 \r
367     AnnotationFilterParameter filterParams = new AnnotationFilterParameter();\r
368     setCurrentAnnotation(av.getAlignment().getAlignmentAnnotation()[getAnnotations()\r
369             .getSelectedIndex()]);\r
370 \r
371     int selectedThresholdItem = getSelectedThresholdItem(getThreshold()\r
372             .getSelectedIndex());\r
373 \r
374     slider.setEnabled(true);\r
375     thresholdValue.setEnabled(true);\r
376 \r
377     if (selectedThresholdItem == AnnotationColourGradient.NO_THRESHOLD)\r
378     {\r
379       slider.setEnabled(false);\r
380       thresholdValue.setEnabled(false);\r
381       thresholdValue.setText("");\r
382       // build filter params\r
383     }\r
384     else if (selectedThresholdItem != AnnotationColourGradient.NO_THRESHOLD)\r
385     {\r
386       if (getCurrentAnnotation().threshold == null)\r
387       {\r
388         getCurrentAnnotation()\r
389                 .setThreshold(\r
390                         new GraphLine(\r
391                                 (getCurrentAnnotation().graphMax - getCurrentAnnotation().graphMin) / 2f,\r
392                                 "Threshold", Color.black));\r
393       }\r
394 \r
395       adjusting = true;\r
396       float range = getCurrentAnnotation().graphMax * 1000\r
397               - getCurrentAnnotation().graphMin * 1000;\r
398 \r
399       slider.setMinimum((int) (getCurrentAnnotation().graphMin * 1000));\r
400       slider.setMaximum((int) (getCurrentAnnotation().graphMax * 1000));\r
401       slider.setValue((int) (getCurrentAnnotation().threshold.value * 1000));\r
402       thresholdValue.setText(getCurrentAnnotation().threshold.value + "");\r
403       // slider.setMajorTickSpacing((int) (range / 10f));\r
404       slider.setEnabled(true);\r
405       thresholdValue.setEnabled(true);\r
406       adjusting = false;\r
407 \r
408       // build filter params\r
409       filterParams\r
410               .setThresholdType(AnnotationFilterParameter.ThresholdType.NO_THRESHOLD);\r
411       if (getCurrentAnnotation().graph != AlignmentAnnotation.NO_GRAPH)\r
412       {\r
413         filterParams\r
414                 .setThresholdValue(getCurrentAnnotation().threshold.value);\r
415 \r
416         if (selectedThresholdItem == AnnotationColourGradient.ABOVE_THRESHOLD)\r
417         {\r
418           filterParams\r
419                   .setThresholdType(AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD);\r
420         }\r
421         else if (selectedThresholdItem == AnnotationColourGradient.BELOW_THRESHOLD)\r
422         {\r
423           filterParams\r
424                   .setThresholdType(AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD);\r
425         }\r
426       }\r
427     }\r
428 \r
429     if (currentStructureFilterPanel != null)\r
430     {\r
431       if (currentStructureFilterPanel.alphaHelix.getState())\r
432       {\r
433         filterParams.setFilterAlphaHelix(true);\r
434       }\r
435       if (currentStructureFilterPanel.betaStrand.getState())\r
436       {\r
437         filterParams.setFilterBetaSheet(true);\r
438       }\r
439       if (currentStructureFilterPanel.turn.getState())\r
440       {\r
441         filterParams.setFilterTurn(true);\r
442       }\r
443     }\r
444 \r
445     if (currentSearchPanel != null)\r
446     {\r
447 \r
448       if (!currentSearchPanel.searchBox.getText().isEmpty())\r
449       {\r
450         currentSearchPanel.description.setEnabled(true);\r
451         currentSearchPanel.displayName.setEnabled(true);\r
452         filterParams.setRegexString(currentSearchPanel.searchBox.getText());\r
453         if (currentSearchPanel.displayName.getState())\r
454         {\r
455           filterParams\r
456                   .addRegexSearchField(AnnotationFilterParameter.SearchableAnnotationField.DISPLAY_STRING);\r
457         }\r
458         if (currentSearchPanel.description.getState())\r
459         {\r
460           filterParams\r
461                   .addRegexSearchField(AnnotationFilterParameter.SearchableAnnotationField.DESCRIPTION);\r
462         }\r
463       }\r
464       else\r
465       {\r
466         currentSearchPanel.description.setEnabled(false);\r
467         currentSearchPanel.displayName.setEnabled(false);\r
468       }\r
469     }\r
470 \r
471     av.getColumnSelection().filterAnnotations(\r
472             getCurrentAnnotation().annotations, filterParams);\r
473 \r
474     av.showAllHiddenColumns();\r
475     if (getActionOption() == ACTION_OPTION_HIDE)\r
476     {\r
477       av.hideSelectedColumns();\r
478     }\r
479 \r
480     filterParams = null;\r
481     av.setAnnotationColumnSelectionState(this);\r
482     ap.paintAlignment(true);\r
483   }\r
484 \r
485   public ColumnSelection getOldColumnSelection()\r
486   {\r
487     return oldColumnSelection;\r
488   }\r
489 \r
490   public void setOldColumnSelection(ColumnSelection currentColumnSelection)\r
491   {\r
492     if (currentColumnSelection != null)\r
493     {\r
494       this.oldColumnSelection = new ColumnSelection(currentColumnSelection);\r
495     }\r
496   }\r
497 \r
498   public FurtherActionPanel getCurrentFutherActionPanel()\r
499   {\r
500     return currentFurtherActionPanel;\r
501   }\r
502 \r
503   public void setCurrentFutherActionPanel(\r
504           FurtherActionPanel currentFutherActionPanel)\r
505   {\r
506     this.currentFurtherActionPanel = currentFutherActionPanel;\r
507   }\r
508 \r
509   public SearchPanel getCurrentSearchPanel()\r
510   {\r
511     return currentSearchPanel;\r
512   }\r
513 \r
514   public void setCurrentSearchPanel(SearchPanel currentSearchPanel)\r
515   {\r
516     this.currentSearchPanel = currentSearchPanel;\r
517   }\r
518 \r
519   public int getActionOption()\r
520   {\r
521     return actionOption;\r
522   }\r
523 \r
524   public void setActionOption(int actionOption)\r
525   {\r
526     this.actionOption = actionOption;\r
527   }\r
528 \r
529   public StructureFilterPanel getCurrentStructureFilterPanel()\r
530   {\r
531     return currentStructureFilterPanel;\r
532   }\r
533 \r
534   public void setCurrentStructureFilterPanel(\r
535           StructureFilterPanel currentStructureFilterPanel)\r
536   {\r
537     this.currentStructureFilterPanel = currentStructureFilterPanel;\r
538   }\r
539 \r
540   @Override\r
541   public void itemStateChanged(ItemEvent e)\r
542   {\r
543     if (e.getSource() == annotations)\r
544     {\r
545       selectedAnnotationChanged();\r
546     }\r
547     else if (e.getSource() == threshold)\r
548     {\r
549       threshold_actionPerformed(null);\r
550     }\r
551   }\r
552 \r
553   public void selectedAnnotationChanged()\r
554   {\r
555     String currentView = AnnotationColumnChooser.NO_GRAPH_VIEW;\r
556     if (av.getAlignment().getAlignmentAnnotation()[getAnnotations()\r
557             .getSelectedIndex()].graph != AlignmentAnnotation.NO_GRAPH)\r
558     {\r
559       currentView = AnnotationColumnChooser.GRAPH_VIEW;\r
560     }\r
561 \r
562     gSearchPanel.syncState();\r
563     gFurtherActionPanel.syncState();\r
564     gStructureFilterPanel.syncState();\r
565 \r
566     ngSearchPanel.syncState();\r
567     ngFurtherActionPanel.syncState();\r
568     ngStructureFilterPanel.syncState();\r
569 \r
570     switchableViewsLayout.show(switchableViewsPanel, currentView);\r
571     updateView();\r
572   }\r
573 \r
574   public class FurtherActionPanel extends Panel implements\r
575           ItemListener\r
576   {\r
577     private AnnotationColumnChooser aColChooser;\r
578 \r
579     private Choice furtherAction = new Choice();\r
580 \r
581     public FurtherActionPanel(AnnotationColumnChooser aColChooser)\r
582     {\r
583       this.aColChooser = aColChooser;\r
584       furtherAction.addItem("Select");\r
585       furtherAction.addItem("Hide");\r
586       furtherAction.addItemListener(this);\r
587       syncState();\r
588 \r
589       // this.setTitle("Filter Actions");\r
590       // this.setFont(JvSwingUtils.getLabelFont());\r
591 \r
592       this.add(furtherAction);\r
593     }\r
594 \r
595     public void syncState()\r
596     {\r
597       if (aColChooser.getActionOption() == AnnotationColumnChooser.ACTION_OPTION_HIDE)\r
598       {\r
599         furtherAction.select("Hide");\r
600       }\r
601       else\r
602       {\r
603         furtherAction.select("Select");\r
604       }\r
605     }\r
606 \r
607     @Override\r
608     public void itemStateChanged(ItemEvent e)\r
609     {\r
610       aColChooser.setCurrentFutherActionPanel(this);\r
611       if (furtherAction.getSelectedItem().equalsIgnoreCase("Select"))\r
612       {\r
613         setActionOption(ACTION_OPTION_SELECT);\r
614         updateView();\r
615       }\r
616       else\r
617       {\r
618         setActionOption(ACTION_OPTION_HIDE);\r
619         updateView();\r
620       }\r
621 \r
622     }\r
623   }\r
624 \r
625   public class StructureFilterPanel extends TitledPanel implements\r
626           ItemListener\r
627   {\r
628     private AnnotationColumnChooser aColChooser;\r
629 \r
630     private Checkbox alphaHelix = new Checkbox();\r
631 \r
632     private Checkbox betaStrand = new Checkbox();\r
633 \r
634     private Checkbox turn = new Checkbox();\r
635 \r
636     private Checkbox all = new Checkbox();\r
637 \r
638     public StructureFilterPanel(AnnotationColumnChooser aColChooser)\r
639     {\r
640       this.aColChooser = aColChooser;\r
641 \r
642       alphaHelix.setLabel(MessageManager.getString("label.alpha_helix"));\r
643       alphaHelix.setBackground(Color.white);\r
644 \r
645       alphaHelix.addItemListener(this);\r
646 \r
647       betaStrand.setLabel(MessageManager.getString("label.beta_strand"));\r
648       betaStrand.setBackground(Color.white);\r
649       betaStrand.addItemListener(this);\r
650 \r
651       turn.setLabel(MessageManager.getString("label.turn"));\r
652       turn.setBackground(Color.white);\r
653       turn.addItemListener(this);\r
654 \r
655       all.setLabel(MessageManager.getString("label.select_all"));\r
656       all.setBackground(Color.white);\r
657       all.addItemListener(this);\r
658 \r
659       this.setBackground(Color.white);\r
660       this.setTitle("Structure Filter");\r
661       // this.setFont(JvSwingUtils.getLabelFont());\r
662 \r
663       this.add(all);\r
664       this.add(alphaHelix);\r
665       this.add(betaStrand);\r
666       this.add(turn);\r
667     }\r
668 \r
669     public void alphaHelix_actionPerformed()\r
670     {\r
671       updateSelectAllState();\r
672       aColChooser.setCurrentStructureFilterPanel(this);\r
673       aColChooser.updateView();\r
674     }\r
675 \r
676     public void betaStrand_actionPerformed()\r
677     {\r
678       updateSelectAllState();\r
679       aColChooser.setCurrentStructureFilterPanel(this);\r
680       aColChooser.updateView();\r
681     }\r
682 \r
683     public void turn_actionPerformed()\r
684     {\r
685       updateSelectAllState();\r
686       aColChooser.setCurrentStructureFilterPanel(this);\r
687       aColChooser.updateView();\r
688     }\r
689 \r
690     public void all_actionPerformed()\r
691     {\r
692       if (all.getState())\r
693       {\r
694         alphaHelix.setState(true);\r
695         betaStrand.setState(true);\r
696         turn.setState(true);\r
697       }\r
698       else\r
699       {\r
700         alphaHelix.setState(false);\r
701         betaStrand.setState(false);\r
702         turn.setState(false);\r
703       }\r
704       aColChooser.setCurrentStructureFilterPanel(this);\r
705       aColChooser.updateView();\r
706     }\r
707 \r
708     public void updateSelectAllState()\r
709     {\r
710       if (alphaHelix.getState() && betaStrand.getState() && turn.getState())\r
711       {\r
712         all.setState(true);\r
713       }\r
714       else\r
715       {\r
716         all.setState(false);\r
717       }\r
718     }\r
719 \r
720     public void syncState()\r
721     {\r
722       StructureFilterPanel sfp = aColChooser\r
723               .getCurrentStructureFilterPanel();\r
724       if (sfp != null)\r
725       {\r
726         alphaHelix.setState(sfp.alphaHelix.getState());\r
727         betaStrand.setState(sfp.betaStrand.getState());\r
728         turn.setState(sfp.turn.getState());\r
729         if (sfp.all.getState())\r
730         {\r
731           all.setState(true);\r
732           alphaHelix.setState(true);\r
733           betaStrand.setState(true);\r
734           turn.setState(true);\r
735         }\r
736       }\r
737 \r
738     }\r
739 \r
740     @Override\r
741     public void itemStateChanged(ItemEvent e)\r
742     {\r
743       if (e.getSource() == alphaHelix)\r
744       {\r
745         alphaHelix_actionPerformed();\r
746       }\r
747       else if (e.getSource() == betaStrand)\r
748       {\r
749         betaStrand_actionPerformed();\r
750       }\r
751       else if (e.getSource() == turn)\r
752       {\r
753         turn_actionPerformed();\r
754       }\r
755       else if (e.getSource() == all)\r
756       {\r
757         all_actionPerformed();\r
758       }\r
759     }\r
760   }\r
761 \r
762   public class SearchPanel extends TitledPanel implements ItemListener\r
763   {\r
764     private AnnotationColumnChooser aColChooser;\r
765 \r
766     private Checkbox displayName = new Checkbox();\r
767 \r
768     private Checkbox description = new Checkbox();\r
769 \r
770     private TextField searchBox = new TextField(10);\r
771 \r
772     public SearchPanel(AnnotationColumnChooser aColChooser)\r
773     {\r
774 \r
775       this.aColChooser = aColChooser;\r
776       searchBox.addTextListener(new TextListener()\r
777       {\r
778 \r
779         @Override\r
780         public void textValueChanged(TextEvent e)\r
781         {\r
782           searchStringAction();\r
783 \r
784         }\r
785 \r
786       });\r
787 \r
788       displayName.setLabel(MessageManager.getString("label.display_name"));\r
789       displayName.setEnabled(false);\r
790       displayName.addItemListener(this);\r
791 \r
792       description.setLabel(MessageManager.getString("label.description"));\r
793       description.setEnabled(false);\r
794       description.addItemListener(this);\r
795       this.setTitle("Search Filter");\r
796       // this.setFont(JvSwingUtils.getLabelFont());\r
797 \r
798       syncState();\r
799       this.add(searchBox);\r
800       this.add(displayName);\r
801       this.add(description);\r
802     }\r
803 \r
804     public void displayNameCheckboxAction()\r
805     {\r
806       aColChooser.setCurrentSearchPanel(this);\r
807       aColChooser.updateView();\r
808     }\r
809 \r
810     public void discriptionCheckboxAction()\r
811     {\r
812       aColChooser.setCurrentSearchPanel(this);\r
813       aColChooser.updateView();\r
814     }\r
815 \r
816     public void searchStringAction()\r
817     {\r
818       aColChooser.setCurrentSearchPanel(this);\r
819       aColChooser.updateView();\r
820     }\r
821 \r
822     public void syncState()\r
823     {\r
824       SearchPanel sp = aColChooser.getCurrentSearchPanel();\r
825       if (sp != null)\r
826       {\r
827         description.setEnabled(sp.description.isEnabled());\r
828         description.setState(sp.description.getState());\r
829 \r
830         displayName.setEnabled(sp.displayName.isEnabled());\r
831         displayName.setState(sp.displayName.getState());\r
832 \r
833         searchBox.setText(sp.searchBox.getText());\r
834       }\r
835     }\r
836 \r
837     @Override\r
838     public void itemStateChanged(ItemEvent e)\r
839     {\r
840       if (e.getSource() == displayName)\r
841       {\r
842         displayNameCheckboxAction();\r
843       }\r
844       else if (e.getSource() == description)\r
845       {\r
846         discriptionCheckboxAction();\r
847       }\r
848 \r
849     }\r
850   }\r
851 \r
852   public void actionPerformed(ActionEvent evt)\r
853   {\r
854     if (evt.getSource() == thresholdValue)\r
855     {\r
856       try\r
857       {\r
858         float f = new Float(thresholdValue.getText()).floatValue();\r
859         slider.setValue((int) (f * 1000));\r
860         adjustmentValueChanged(null);\r
861       } catch (NumberFormatException ex)\r
862       {\r
863       }\r
864     }\r
865 \r
866     else if (evt.getSource() == ok)\r
867     {\r
868       ok_actionPerformed(null);\r
869     }\r
870     else if (evt.getSource() == cancel)\r
871     {\r
872       cancel_actionPerformed(null);\r
873     }\r
874     else if (evt.getSource() == thresholdValue)\r
875     {\r
876       thresholdValue_actionPerformed(null);\r
877     }\r
878     else\r
879     {\r
880       updateView();\r
881     }\r
882   }\r
883 \r
884   @Override\r
885   public void mouseClicked(MouseEvent e)\r
886   {\r
887     // TODO Auto-generated method stub\r
888 \r
889   }\r
890 \r
891   @Override\r
892   public void mousePressed(MouseEvent e)\r
893   {\r
894     if (e.getSource() == slider)\r
895     {\r
896       updateView();\r
897     }\r
898 \r
899   }\r
900 \r
901   @Override\r
902   public void mouseReleased(MouseEvent e)\r
903   {\r
904     if (e.getSource() == slider)\r
905     {\r
906       updateView();\r
907     }\r
908   }\r
909 \r
910   @Override\r
911   public void mouseEntered(MouseEvent e)\r
912   {\r
913     if (e.getSource() == slider)\r
914     {\r
915       updateView();\r
916     }\r
917   }\r
918 \r
919   @Override\r
920   public void mouseExited(MouseEvent e)\r
921   {\r
922     if (e.getSource() == slider)\r
923     {\r
924       updateView();\r
925     }\r
926   }\r
927 \r
928 }\r