From: amwaterhouse Date: Thu, 16 Feb 2006 15:50:44 +0000 (+0000) Subject: Incorporated threshold slider X-Git-Tag: Root_VamJalview_2_07b+~116 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=09003bd97d75ad14cd000fc581d6ec93b7a08bcb;p=jalview.git Incorporated threshold slider --- diff --git a/src/jalview/gui/AnnotationColourChooser.java b/src/jalview/gui/AnnotationColourChooser.java index 25eee10..49e835d 100755 --- a/src/jalview/gui/AnnotationColourChooser.java +++ b/src/jalview/gui/AnnotationColourChooser.java @@ -19,12 +19,13 @@ package jalview.gui; import javax.swing.*; -import java.awt.event.ActionListener; -import java.awt.event.ActionEvent; -import java.awt.BorderLayout; +import java.awt.event.*; import java.awt.*; import jalview.schemes.*; +import javax.swing.event.*; +import java.util.*; +import jalview.datamodel.SequenceGroup; public class AnnotationColourChooser extends JPanel @@ -33,29 +34,54 @@ public class AnnotationColourChooser AlignViewport av; AlignmentPanel ap; ColourSchemeI oldcs; + Hashtable oldgroupColours; + jalview.datamodel.AlignmentAnnotation currentAnnotation; public AnnotationColourChooser(AlignViewport av, AlignmentPanel ap) { oldcs = av.getGlobalColourScheme(); + if (av.alignment.getGroups() != null) + { + oldgroupColours = new Hashtable(); + Vector allGroups = ap.av.alignment.getGroups(); + SequenceGroup sg; + for (int g = 0; g < allGroups.size(); g++) + { + sg = (SequenceGroup) allGroups.get(g); + oldgroupColours.put(sg, sg.cs); + } + } this.av = av; this.ap = ap; frame = new JInternalFrame(); frame.setContentPane(this); frame.setLayer(JLayeredPane.PALETTE_LAYER); - Desktop.addInternalFrame(frame, "Colour by Annotation", 480, 110, false); + Desktop.addInternalFrame(frame, "Colour by Annotation", 480, 145, false); - try{ + try + { jbInit(); - }catch(Exception ex){} + } + catch (Exception ex) + {} + + slider.addChangeListener(new ChangeListener() + { + public void stateChanged(ChangeEvent evt) + { + thresholdValue.setText( ( (float) slider.getValue() / 1000f) + ""); + valueChanged(); + } + }); - if(av.alignment.getAlignmentAnnotation()==null) + if (av.alignment.getAlignmentAnnotation() == null) return; - if(oldcs instanceof AnnotationColourGradient) + if (oldcs instanceof AnnotationColourGradient) { - AnnotationColourGradient acg = (AnnotationColourGradient)oldcs; - minColour.setBackground( acg.getMinColour() ); - maxColour.setBackground( acg.getMaxColour() ); + AnnotationColourGradient acg = (AnnotationColourGradient) oldcs; + minColour.setBackground(acg.getMinColour()); + maxColour.setBackground(acg.getMaxColour()); } else { @@ -65,7 +91,7 @@ public class AnnotationColourChooser for (int i = 0; i < av.alignment.getAlignmentAnnotation().length; i++) { - if(av.alignment.getAlignmentAnnotation()[i].graph>0) + if (av.alignment.getAlignmentAnnotation()[i].graph > 0) annotations.addItem(av.alignment.getAlignmentAnnotation()[i].label); } @@ -90,7 +116,7 @@ public class AnnotationColourChooser private void jbInit() throws Exception { - minColour.setBounds(new Rectangle(145, 5, 85, 25)); + minColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); minColour.setToolTipText(""); minColour.setMargin(new Insets(2, 2, 2, 2)); minColour.setText("Min Colour"); @@ -101,7 +127,7 @@ public class AnnotationColourChooser minColour_actionPerformed(e); } }); - maxColour.setBounds(new Rectangle(235, 5, 89, 25)); + maxColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); maxColour.setMargin(new Insets(2, 2, 2, 2)); maxColour.setText("Max Colour"); maxColour.addActionListener(new ActionListener() @@ -130,8 +156,7 @@ public class AnnotationColourChooser } }); this.setLayout(borderLayout1); - jPanel2.setLayout(null); - annotations.setBounds(new Rectangle(5, 7, 135, 21)); + jPanel2.setLayout(flowLayout1); annotations.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -141,7 +166,6 @@ public class AnnotationColourChooser }); jPanel1.setBackground(Color.white); jPanel2.setBackground(Color.white); - threshold.setBounds(new Rectangle(328, 6, 125, 22)); threshold.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -149,14 +173,43 @@ public class AnnotationColourChooser threshold_actionPerformed(e); } }); + jPanel3.setLayout(flowLayout2); + thresholdValue.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + thresholdValue_actionPerformed(e); + } + }); + slider.setPaintTicks(true); + slider.setBackground(Color.white); + slider.setEnabled(false); + slider.setOpaque(false); + thresholdValue.setEnabled(false); + thresholdValue.setColumns(10); + jPanel3.setBackground(Color.white); + currentColours.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); + currentColours.setOpaque(false); + currentColours.setText("Use Original Colours"); + currentColours.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + currentColours_actionPerformed(e); + } + }); jPanel1.add(ok); jPanel1.add(cancel); jPanel2.add(annotations); + jPanel2.add(currentColours); jPanel2.add(minColour); jPanel2.add(maxColour); - jPanel2.add(threshold); + this.add(jPanel3, java.awt.BorderLayout.CENTER); + jPanel3.add(threshold); + jPanel3.add(slider); + jPanel3.add(thresholdValue); this.add(jPanel1, java.awt.BorderLayout.SOUTH); - this.add(jPanel2, java.awt.BorderLayout.CENTER); + this.add(jPanel2, java.awt.BorderLayout.NORTH); } JComboBox annotations = new JComboBox(); @@ -168,6 +221,12 @@ public class AnnotationColourChooser JPanel jPanel2 = new JPanel(); BorderLayout borderLayout1 = new BorderLayout(); JComboBox threshold = new JComboBox(); + FlowLayout flowLayout1 = new FlowLayout(); + JPanel jPanel3 = new JPanel(); + FlowLayout flowLayout2 = new FlowLayout(); + JSlider slider = new JSlider(); + JTextField thresholdValue = new JTextField(20); + JCheckBox currentColours = new JCheckBox(); public void minColour_actionPerformed(ActionEvent e) { @@ -194,8 +253,8 @@ public class AnnotationColourChooser void changeColour() { // Check if combobox is still adjusting - if(threshold.getSelectedIndex()==-1) - return; + if (threshold.getSelectedIndex() == -1) + return; // We removed the non-graph annotations when filling the combobox // so allow for them again here @@ -203,56 +262,131 @@ public class AnnotationColourChooser for (int i = 0; i < av.alignment.getAlignmentAnnotation().length; i++) { if (av.alignment.getAlignmentAnnotation()[i].graph == 0) - nograph ++; + nograph++; else - graph ++; + graph++; - if(graph==annotations.getSelectedIndex()) + if (graph == annotations.getSelectedIndex()) break; } - jalview.datamodel.AlignmentAnnotation aa - = av.alignment.getAlignmentAnnotation()[graph+nograph]; - + currentAnnotation = av.alignment.getAlignmentAnnotation()[graph + nograph]; int aboveThreshold = -1; - if(threshold.getSelectedItem().equals("Above Threshold")) + if (threshold.getSelectedItem().equals("Above Threshold")) aboveThreshold = AnnotationColourGradient.ABOVE_THRESHOLD; - else if(threshold.getSelectedItem().equals("Below Threshold")) + else if (threshold.getSelectedItem().equals("Below Threshold")) aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD; - if(aboveThreshold!=AnnotationColourGradient.NO_THRESHOLD && aa.threshold==null) - { - aa.setThreshold(new jalview.datamodel.GraphLine((aa.graphMax-aa.graphMin)/2f, "Threshold", Color.black)); - } - - AnnotationColourGradient acg = new AnnotationColourGradient(aa, - minColour.getBackground(), - maxColour.getBackground(), - aboveThreshold ); + if (aboveThreshold == AnnotationColourGradient.NO_THRESHOLD) + { + currentAnnotation.threshold = null; + slider.setEnabled(false); + thresholdValue.setEnabled(false); + thresholdValue.setText(""); + } + else if (aboveThreshold != AnnotationColourGradient.NO_THRESHOLD && + currentAnnotation.threshold == null) + { + currentAnnotation.setThreshold(new jalview.datamodel.GraphLine + ( (currentAnnotation.graphMax - + currentAnnotation.graphMin) / 2f, + "Threshold", + Color.black)); + float range = currentAnnotation.graphMax * 1000 - + currentAnnotation.graphMin * 1000; + + slider.setMinimum( (int) (currentAnnotation.graphMin * 1000)); + slider.setMaximum( (int) (currentAnnotation.graphMax * 1000)); + slider.setValue( (int) (currentAnnotation.threshold.value * 1000)); + thresholdValue.setText(currentAnnotation.threshold.value + ""); + slider.setMajorTickSpacing( (int) (range / 10f)); + slider.setMinorTickSpacing( (int) (range / 100f)); + slider.setEnabled(true); + thresholdValue.setEnabled(true); + } + AnnotationColourGradient acg = null; + if (currentColours.isSelected()) + acg = new AnnotationColourGradient( + currentAnnotation, + av.getGlobalColourScheme(), aboveThreshold); + else + acg = + new AnnotationColourGradient( + currentAnnotation, + minColour.getBackground(), + maxColour.getBackground(), + aboveThreshold); + av.setGlobalColourScheme(acg); + if (av.alignment.getGroups() != null) + { + Vector allGroups = ap.av.alignment.getGroups(); + SequenceGroup sg; + for (int g = 0; g < allGroups.size(); g++) + { + sg = (SequenceGroup) allGroups.get(g); + + if (sg.cs == null) + { + continue; + } + + if (currentColours.isSelected()) + sg.cs = new AnnotationColourGradient( + currentAnnotation, + sg.cs, aboveThreshold); + else + sg.cs = new AnnotationColourGradient( + currentAnnotation, + minColour.getBackground(), + maxColour.getBackground(), + aboveThreshold); - av.setGlobalColourScheme(acg); - ap.repaint(); + } + } + ap.repaint(); } public void ok_actionPerformed(ActionEvent e) { changeColour(); - try{ + try + { frame.setClosed(true); - }catch(Exception ex){} + } + catch (Exception ex) + {} } public void cancel_actionPerformed(ActionEvent e) { - av.setGlobalColourScheme(oldcs); - try{ + reset(); + try + { frame.setClosed(true); - }catch(Exception ex){} + } + catch (Exception ex) + {} + } + + + void reset() + { + av.setGlobalColourScheme(oldcs); + if (av.alignment.getGroups() != null) + { + Vector allGroups = ap.av.alignment.getGroups(); + SequenceGroup sg; + for (int g = 0; g < allGroups.size(); g++) + { + sg = (SequenceGroup) allGroups.get(g); + sg.cs = (ColourSchemeI)oldgroupColours.get(sg); + } + } } public void thresholdCheck_actionPerformed(ActionEvent e) @@ -262,6 +396,8 @@ public class AnnotationColourChooser public void annotations_actionPerformed(ActionEvent e) { + if(currentAnnotation!=null) + currentAnnotation.threshold = null; changeColour(); } @@ -270,4 +406,34 @@ public class AnnotationColourChooser changeColour(); } + public void thresholdValue_actionPerformed(ActionEvent e) + { + try + { + float f = Float.parseFloat(thresholdValue.getText()); + slider.setValue( (int) (f * 1000)); + } + catch (NumberFormatException ex) + {} + } + + public void valueChanged() + { + currentAnnotation.threshold.value = (float)slider.getValue()/1000f; + ap.repaint(); + } + + public void currentColours_actionPerformed(ActionEvent e) + { + if(currentColours.isSelected()) + { + reset(); + } + + maxColour.setEnabled(!currentColours.isSelected()); + minColour.setEnabled(!currentColours.isSelected()); + + changeColour(); + } + }