/* * Jalview - A Sequence Alignment Editor and Viewer * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package jalview.gui; import javax.swing.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.BorderLayout; import java.awt.*; import jalview.schemes.*; public class AnnotationColourChooser extends JPanel { JInternalFrame frame; AlignViewport av; AlignmentPanel ap; ColourSchemeI oldcs; public AnnotationColourChooser(AlignViewport av, AlignmentPanel ap) { oldcs = av.getGlobalColourScheme(); 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); try{ jbInit(); }catch(Exception ex){} if(av.alignment.getAlignmentAnnotation()==null) return; if(oldcs instanceof AnnotationColourGradient) { AnnotationColourGradient acg = (AnnotationColourGradient)oldcs; minColour.setBackground( acg.getMinColour() ); maxColour.setBackground( acg.getMaxColour() ); } else { minColour.setBackground(Color.orange); maxColour.setBackground(Color.red); } for (int i = 0; i < av.alignment.getAlignmentAnnotation().length; i++) { if(av.alignment.getAlignmentAnnotation()[i].graph>0) annotations.addItem(av.alignment.getAlignmentAnnotation()[i].label); } threshold.addItem("No Threshold"); threshold.addItem("Above Threshold"); threshold.addItem("Below Threshold"); } public AnnotationColourChooser() { try { jbInit(); } catch (Exception ex) { ex.printStackTrace(); } } private void jbInit() throws Exception { minColour.setBounds(new Rectangle(145, 5, 85, 25)); minColour.setToolTipText(""); minColour.setMargin(new Insets(2, 2, 2, 2)); minColour.setText("Min Colour"); minColour.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { minColour_actionPerformed(e); } }); maxColour.setBounds(new Rectangle(235, 5, 89, 25)); maxColour.setMargin(new Insets(2, 2, 2, 2)); maxColour.setText("Max Colour"); maxColour.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { maxColour_actionPerformed(e); } }); ok.setOpaque(false); ok.setText("OK"); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ok_actionPerformed(e); } }); cancel.setOpaque(false); cancel.setText("Cancel"); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cancel_actionPerformed(e); } }); this.setLayout(borderLayout1); jPanel2.setLayout(null); annotations.setBounds(new Rectangle(5, 7, 135, 21)); annotations.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { annotations_actionPerformed(e); } }); 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) { threshold_actionPerformed(e); } }); jPanel1.add(ok); jPanel1.add(cancel); jPanel2.add(annotations); jPanel2.add(minColour); jPanel2.add(maxColour); jPanel2.add(threshold); this.add(jPanel1, java.awt.BorderLayout.SOUTH); this.add(jPanel2, java.awt.BorderLayout.CENTER); } JComboBox annotations = new JComboBox(); JButton minColour = new JButton(); JButton maxColour = new JButton(); JButton ok = new JButton(); JButton cancel = new JButton(); JPanel jPanel1 = new JPanel(); JPanel jPanel2 = new JPanel(); BorderLayout borderLayout1 = new BorderLayout(); JComboBox threshold = new JComboBox(); public void minColour_actionPerformed(ActionEvent e) { Color col = JColorChooser.showDialog(this, "Select Colour for Minimum Value", minColour.getBackground()); if (col != null) minColour.setBackground(col); minColour.repaint(); changeColour(); } public void maxColour_actionPerformed(ActionEvent e) { Color col = JColorChooser.showDialog(this, "Select Colour for Maximum Value", maxColour.getBackground()); if (col != null) maxColour.setBackground(col); maxColour.repaint(); changeColour(); } void changeColour() { // Check if combobox is still adjusting if(threshold.getSelectedIndex()==-1) return; // We removed the non-graph annotations when filling the combobox // so allow for them again here int nograph = 0, graph = -1; for (int i = 0; i < av.alignment.getAlignmentAnnotation().length; i++) { if (av.alignment.getAlignmentAnnotation()[i].graph == 0) nograph ++; else graph ++; if(graph==annotations.getSelectedIndex()) break; } jalview.datamodel.AlignmentAnnotation aa = av.alignment.getAlignmentAnnotation()[graph+nograph]; int aboveThreshold = -1; if(threshold.getSelectedItem().equals("Above Threshold")) aboveThreshold = AnnotationColourGradient.ABOVE_THRESHOLD; else if(threshold.getSelectedItem().equals("Below Threshold")) aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD; if(aboveThreshold!=AnnotationColourGradient.NO_THRESHOLD && aa.graphLines==null) { aa.addGraphLine(new jalview.datamodel.GraphLine((aa.graphMax-aa.graphMin)/2f, "Threshold", Color.black)); } AnnotationColourGradient acg = new AnnotationColourGradient(aa, minColour.getBackground(), maxColour.getBackground(), aboveThreshold ); av.setGlobalColourScheme(acg); ap.repaint(); } public void ok_actionPerformed(ActionEvent e) { changeColour(); try{ frame.setClosed(true); }catch(Exception ex){} } public void cancel_actionPerformed(ActionEvent e) { av.setGlobalColourScheme(oldcs); try{ frame.setClosed(true); }catch(Exception ex){} } public void thresholdCheck_actionPerformed(ActionEvent e) { changeColour(); } public void annotations_actionPerformed(ActionEvent e) { changeColour(); } public void threshold_actionPerformed(ActionEvent e) { changeColour(); } }