X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FFeatureColourChooser.java;h=c87803c8d2a3afde88ac84581016d2dbf37e03df;hb=b5d61763044c1d72f06ce0e50da2171422a3774b;hp=f4ad1d5162f2c2442050e241e5a9a277c8a7f2de;hpb=2de8acfae59aced665e4c37ad0f7dcc2ed68818e;p=jalview.git diff --git a/src/jalview/appletgui/FeatureColourChooser.java b/src/jalview/appletgui/FeatureColourChooser.java index f4ad1d5..c87803c 100644 --- a/src/jalview/appletgui/FeatureColourChooser.java +++ b/src/jalview/appletgui/FeatureColourChooser.java @@ -1,20 +1,22 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) - * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) + * Copyright (C) 2014 The Jalview Authors * - * 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 file is part of Jalview. * - * 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. + * Jalview 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 3 + * of the License, or (at your option) any later version. + * + * Jalview 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 + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.appletgui; @@ -25,41 +27,62 @@ import java.awt.event.*; import jalview.datamodel.*; import jalview.schemes.*; -import java.awt.Rectangle; +import jalview.util.MessageManager; -public class FeatureColourChooser extends Panel implements - ActionListener, AdjustmentListener, ItemListener, MouseListener +public class FeatureColourChooser extends Panel implements ActionListener, + AdjustmentListener, ItemListener, MouseListener { - Frame frame; + JVDialog frame; + + Frame owner; FeatureRenderer fr; - FeatureSettings fs; - AlignmentPanel ap; + + FeatureSettings fs = null; + + // AlignmentPanel ap; GraduatedColor cs; + Object oldcs; Hashtable oldgroupColours; - boolean adjusting = false; - private float min,max; - String type=null; - + + private float min, max; + + String type = null; + + private AlignFrame af = null; + + public FeatureColourChooser(AlignFrame af, String type) + { + this.af = af; + init(af.getSeqcanvas().getFeatureRenderer(), type); + } + public FeatureColourChooser(FeatureSettings fsettings, String type) { this.fs = fsettings; + init(fsettings.fr, type); + // this.ap = fsettings.ap; + } + + private void init(FeatureRenderer frenderer, String type) + { this.type = type; - fr = fsettings.fr; - ap = fsettings.ap; - float mm[] = ((float[][]) fr.minmax.get(type))[0]; + fr = frenderer; + float mm[] = ((float[][]) fr.getMinMax().get(type))[0]; min = mm[0]; max = mm[1]; - oldcs = fr.featureColours.get(type); + oldcs = fr.getFeatureColours().get(type); if (oldcs instanceof GraduatedColor) { cs = new GraduatedColor((GraduatedColor) oldcs, min, max); - } else { + } + else + { // promote original color to a graduated color Color bl = Color.black; if (oldcs instanceof Color) @@ -67,10 +90,13 @@ public class FeatureColourChooser extends Panel implements bl = (Color) oldcs; } // original colour becomes the maximum colour - cs = new GraduatedColor(Color.white,bl,mm[0],mm[1]); + cs = new GraduatedColor(Color.white, bl, mm[0], mm[1]); } minColour.setBackground(cs.getMinColor()); maxColour.setBackground(cs.getMaxColor()); + minColour.setForeground(cs.getMinColor()); + maxColour.setForeground(cs.getMaxColor()); + colourFromLabel.setState(cs.isColourByLabel()); adjusting = true; try @@ -79,16 +105,34 @@ public class FeatureColourChooser extends Panel implements } catch (Exception ex) { } - // To HERE! + threshold + .select(cs.getThreshType() == AnnotationColourGradient.NO_THRESHOLD ? 0 + : cs.getThreshType() == AnnotationColourGradient.ABOVE_THRESHOLD ? 1 + : 2); + adjusting = false; changeColour(); + colourFromLabel.addItemListener(this); slider.addAdjustmentListener(this); slider.addMouseListener(this); - frame = new Frame(); - frame.add(this); - jalview.bin.JalviewLite.addFrame(frame, "Graduated Feature Colour for "+type, 480, - 145); + owner = (af != null) ? af : fs.frame; + frame = new JVDialog(owner, MessageManager.formatMessage( + "label.graduated_color_for_params", new String[] + { type }), true, 480, 248); + frame.setMainPanel(this); validate(); + frame.setVisible(true); + if (frame.accept) + { + changeColour(); + } + else + { + // cancel + reset(); + PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId()); + frame.setVisible(false); + } } public FeatureColourChooser() @@ -104,69 +148,76 @@ public class FeatureColourChooser extends Panel implements private void jbInit() throws Exception { - minColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); - minColour.setLabel("Min Colour"); - minColour.addActionListener(this); + Label minLabel = new Label(MessageManager.getString("label.min")), maxLabel = new Label( + MessageManager.getString("label.max")); + minLabel.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); + maxLabel.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); + // minColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); + // minColour.setLabel("Min Colour"); + + minColour.setBounds(0, 0, 40, 27); + maxColour.setBounds(0, 0, 40, 27); + minColour.addMouseListener(this); maxColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); - maxColour.setLabel("Max Colour"); - maxColour.addActionListener(this); + maxColour.addMouseListener(this); thresholdIsMin.addItemListener(this); - ok.setLabel("OK"); - ok.addActionListener(this); - - cancel.setLabel("Cancel"); - cancel.addActionListener(this); - - this.setLayout(borderLayout1); - jPanel2.setLayout(flowLayout1); + this.setLayout(new GridLayout(4, 1)); + jPanel1.setLayout(new FlowLayout()); + jPanel2.setLayout(new FlowLayout()); + jPanel3.setLayout(new GridLayout(1, 1)); + jPanel4.setLayout(new FlowLayout()); jPanel1.setBackground(Color.white); jPanel2.setBackground(Color.white); + jPanel4.setBackground(Color.white); threshold.addItemListener(this); - threshold.addItem("No Threshold"); - threshold.addItem("Above Threshold"); - threshold.addItem("Below Threshold"); - jPanel3.setLayout(null); + threshold.addItem(MessageManager + .getString("label.threshold_feature_no_thereshold")); + threshold.addItem(MessageManager + .getString("label.threshold_feature_above_thereshold")); + threshold.addItem(MessageManager + .getString("label.threshold_feature_below_thereshold")); thresholdValue.addActionListener(this); - slider.setBackground(Color.white); slider.setEnabled(false); - slider.setBounds(new Rectangle(153, 3, 93, 21)); + slider.setSize(new Dimension(93, 21)); thresholdValue.setEnabled(false); - thresholdValue.setBounds(new Rectangle(248, 2, 79, 22)); + thresholdValue.setSize(new Dimension(79, 22)); // setBounds(new + // Rectangle(248, 2, 79, + // 22)); thresholdValue.setColumns(5); jPanel3.setBackground(Color.white); - //currentColours.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); - //currentColours.setLabel("Use Original Colours"); - //currentColours.addItemListener(this); - threshold.setBounds(new Rectangle(11, 3, 139, 22)); + colourFromLabel.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); + colourFromLabel.setLabel(MessageManager + .getString("label.colour_by_label")); + colourFromLabel.setSize(new Dimension(139, 22)); + // threshold.setBounds(new Rectangle(11, 3, 139, 22)); thresholdIsMin.setBackground(Color.white); - thresholdIsMin.setLabel("Threshold is min/max"); - thresholdIsMin.setBounds(new Rectangle(328, 3, 135, 23)); - jPanel1.add(ok); - jPanel1.add(cancel); - //jPanel2.add(currentColours); - jPanel2.add(minColour); - jPanel2.add(maxColour); - jPanel3.add(threshold); + thresholdIsMin.setLabel(MessageManager + .getString("label.threshold_minmax")); + thresholdIsMin.setSize(new Dimension(135, 23)); + // thresholdIsMin.setBounds(new Rectangle(328, 3, 135, 23)); + jPanel1.add(minLabel); + jPanel1.add(minColour); + jPanel1.add(maxLabel); + jPanel1.add(maxColour); + jPanel1.add(colourFromLabel); + jPanel2.add(threshold); jPanel3.add(slider); - jPanel3.add(thresholdValue); - jPanel3.add(thresholdIsMin); - this.add(jPanel2, java.awt.BorderLayout.NORTH); - this.add(jPanel3, java.awt.BorderLayout.CENTER); - this.add(jPanel1, java.awt.BorderLayout.SOUTH); + jPanel4.add(thresholdValue); + jPanel4.add(thresholdIsMin); + this.add(jPanel1);// , java.awt.BorderLayout.NORTH); + this.add(jPanel2);// , java.awt.BorderLayout.NORTH); + this.add(jPanel3);// , java.awt.BorderLayout.CENTER); + this.add(jPanel4);// , java.awt.BorderLayout.CENTER); } - Button minColour = new Button(); - - Button maxColour = new Button(); - - Button ok = new Button(); + Panel minColour = new Panel(); - Button cancel = new Button(); + Panel maxColour = new Panel(); Panel jPanel1 = new Panel(); @@ -174,19 +225,20 @@ public class FeatureColourChooser extends Panel implements Choice threshold = new Choice(); - FlowLayout flowLayout1 = new FlowLayout(); - Panel jPanel3 = new Panel(); + Panel jPanel4 = new Panel(); + Scrollbar slider = new Scrollbar(Scrollbar.HORIZONTAL); TextField thresholdValue = new TextField(20); - - BorderLayout borderLayout1 = new BorderLayout(); + // BorderLayout borderLayout1 = new BorderLayout(); Checkbox thresholdIsMin = new Checkbox(); + Checkbox colourFromLabel = new Checkbox(); + private GraphLine threshline; public void actionPerformed(ActionEvent evt) @@ -210,19 +262,6 @@ public class FeatureColourChooser extends Panel implements { maxColour_actionPerformed(null); } - - else if (evt.getSource() == ok) - { - changeColour(); - frame.setVisible(false); - } - else if (evt.getSource() == cancel) - { - reset(); - ap.paintAlignment(true); - frame.setVisible(false); - } - else { changeColour(); @@ -231,7 +270,8 @@ public class FeatureColourChooser extends Panel implements public void itemStateChanged(ItemEvent evt) { - + maxColour.setEnabled(!colourFromLabel.getState()); + minColour.setEnabled(!colourFromLabel.getState()); changeColour(); } @@ -243,37 +283,51 @@ public class FeatureColourChooser extends Panel implements valueChanged(); } } - protected void valueChanged() { - changeColour(); + + protected void valueChanged() + { threshline.value = (float) slider.getValue() / 1000f; - ap.paintAlignment(false); + cs.setThresh(threshline.value); + changeColour(); + PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId()); + // ap.paintAlignment(false); } + public void minColour_actionPerformed(Color newCol) { - if (newCol != null) + if (newCol == null) { - minColour.setBackground(newCol); - minColour.repaint(); - changeColour(); + UserDefinedColours udc = new UserDefinedColours(this, + minColour.getBackground(), owner, + MessageManager.getString("label.select_colour_minimum_value")); // frame.owner, } else { - new UserDefinedColours(this, "Select Colour for Minimum Value", minColour.getBackground()); + minColour.setBackground(newCol); + minColour.setForeground(newCol); + minColour.repaint(); + changeColour(); } } public void maxColour_actionPerformed(Color newCol) { - if (newCol != null) + if (newCol == null) { - maxColour.setBackground(newCol); - maxColour.repaint(); - changeColour(); + + // UserDefinedColours udc = new UserDefinedColours(this, + // "Select Colour for Maximum Value",maxColour.getBackground(),true); + UserDefinedColours udc = new UserDefinedColours(this, + maxColour.getBackground(), owner, + MessageManager.getString("label.select_colour_maximum_value")); } else { - new UserDefinedColours(this, "Select Colour for Maximum Value", maxColour.getBackground()); + maxColour.setBackground(newCol); + maxColour.setForeground(newCol); + maxColour.repaint(); + changeColour(); } } @@ -286,33 +340,36 @@ public class FeatureColourChooser extends Panel implements } int aboveThreshold = AnnotationColourGradient.NO_THRESHOLD; - if (threshold.getSelectedItem().equals("Above Threshold")) + if (threshold.getSelectedIndex() == 1) { aboveThreshold = AnnotationColourGradient.ABOVE_THRESHOLD; } - else if (threshold.getSelectedItem().equals("Below Threshold")) + else if (threshold.getSelectedIndex() == 2) { aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD; } slider.setEnabled(true); thresholdValue.setEnabled(true); - GraduatedColor acg = new GraduatedColor(minColour.getBackground(), maxColour.getBackground(), min, max); + GraduatedColor acg = new GraduatedColor(minColour.getBackground(), + maxColour.getBackground(), min, max); + acg.setColourByLabel(colourFromLabel.getState()); + maxColour.setEnabled(!colourFromLabel.getState()); + minColour.setEnabled(!colourFromLabel.getState()); if (aboveThreshold == AnnotationColourGradient.NO_THRESHOLD) { slider.setEnabled(false); thresholdValue.setEnabled(false); thresholdValue.setText(""); } - + else if (aboveThreshold != AnnotationColourGradient.NO_THRESHOLD && threshline == null) { // todo visual indication of feature threshold - threshline = new jalview.datamodel.GraphLine( - (max - min) / 2f, - "Threshold", Color.black); + threshline = new jalview.datamodel.GraphLine((max - min) / 2f, + "Threshold", Color.black); } if (aboveThreshold != AnnotationColourGradient.NO_THRESHOLD) @@ -320,8 +377,7 @@ public class FeatureColourChooser extends Panel implements adjusting = true; acg.setThresh(threshline.value); - float range = max * 1000f - - min * 1000f; + float range = max * 1000f - min * 1000f; slider.setMinimum((int) (min * 1000)); slider.setMaximum((int) (max * 1000)); @@ -333,25 +389,30 @@ public class FeatureColourChooser extends Panel implements } acg.setThreshType(aboveThreshold); - if (thresholdIsMin.getState() && aboveThreshold != AnnotationColourGradient.NO_THRESHOLD) + if (thresholdIsMin.getState() + && aboveThreshold != AnnotationColourGradient.NO_THRESHOLD) { - if (aboveThreshold==AnnotationColourGradient.ABOVE_THRESHOLD) - { + if (aboveThreshold == AnnotationColourGradient.ABOVE_THRESHOLD) + { acg = new GraduatedColor(acg, threshline.value, max); - } else { - acg = new GraduatedColor(acg, min,threshline.value); + } + else + { + acg = new GraduatedColor(acg, min, threshline.value); } } - - fr.featureColours.put(type,acg); + + fr.setColour(type, acg); cs = acg; - ap.paintAlignment(false); + PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId()); + // ap.paintAlignment(false); } void reset() { - fr.featureColours.put(type, oldcs); - ap.paintAlignment(true); + fr.setColour(type, oldcs); + PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId()); + // ap.paintAlignment(true); } @@ -365,7 +426,16 @@ public class FeatureColourChooser extends Panel implements public void mouseReleased(MouseEvent evt) { - ap.paintAlignment(true); + if (evt.getSource() == minColour || evt.getSource() == maxColour) + { + // relay the event + actionPerformed(new ActionEvent(evt.getSource(), 1, "Clicked")); + } + else + { + PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId()); + } + // ap.paintAlignment(true); } public void mouseEntered(MouseEvent evt)