/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
- * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
+import javax.swing.border.LineBorder;
import javax.swing.event.*;
import jalview.datamodel.*;
import jalview.schemes.*;
+import jalview.util.MessageManager;
+
import java.awt.Dimension;
-public class FeatureColourChooser extends JPanel
+public class FeatureColourChooser extends JalviewDialog
{
- JInternalFrame frame;
-
+ // FeatureSettings fs;
FeatureRenderer fr;
- FeatureSettings fs;
+ private GraduatedColor cs;
- GraduatedColor cs;
- Object oldcs;
+ private Object oldcs;
+
+ /**
+ *
+ * @return the last colour setting selected by user - either oldcs (which may
+ * be a java.awt.Color) or the new GraduatedColor
+ */
+ public Object getLastColour()
+ {
+ if (cs == null)
+ {
+ return oldcs;
+ }
+ return cs;
+ }
Hashtable oldgroupColours;
-
+
AlignmentPanel ap;
-
boolean adjusting = false;
private float min;
private float max;
+
String type = null;
- public FeatureColourChooser(FeatureSettings fsettings, String type)
+
+ public FeatureColourChooser(FeatureRenderer frender, String type)
{
- this.fs = fsettings;
+ this(frender, false, type);
+ }
+
+ public FeatureColourChooser(FeatureRenderer frender, boolean block,
+ String type)
+ {
+ this.fr = frender;
this.type = type;
- fr = fsettings.fr;
ap = fr.ap;
- frame = new JInternalFrame();
- frame.setContentPane(this);
- frame.setLayer(JLayeredPane.PALETTE_LAYER);
- Desktop.addInternalFrame(frame, "Graduated Feature Colour for "+type, 480, 145);
+ initDialogFrame(this, true, block, "Graduated Feature Colour for "
+ + type, 480, 185);
+ // frame.setLayer(JLayeredPane.PALETTE_LAYER);
+ // Desktop.addInternalFrame(frame, "Graduated Feature Colour for "+type,
+ // 480, 145);
slider.addChangeListener(new ChangeListener()
{
{
public void mouseReleased(MouseEvent evt)
{
- if (fr.ap!=null) { fr.ap.paintAlignment(true); };
+ if (ap != null)
+ {
+ ap.paintAlignment(true);
+ }
+ ;
}
});
- float mm[] = ((float[][]) fr.minmax.get(type))[0];
+ 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 {
+ if (((GraduatedColor) oldcs).isAutoScale())
+ {
+ // update the scale
+ cs = new GraduatedColor((GraduatedColor) oldcs, min, max);
+ }
+ else
+ {
+ cs = new GraduatedColor((GraduatedColor) oldcs);
+ }
+ }
+ else
+ {
// promote original color to a graduated color
Color bl = Color.black;
if (oldcs instanceof Color)
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]);
+ cs.setColourByLabel(false);
}
- minColour.setBackground(cs.getMinColor());
- maxColour.setBackground(cs.getMaxColor());
+ minColour.setBackground(oldminColour = cs.getMinColor());
+ maxColour.setBackground(oldmaxColour = cs.getMaxColor());
adjusting = true;
-
+
try
{
jbInit();
} catch (Exception ex)
{
}
+ // update the gui from threshold state
+ thresholdIsMin.setSelected(!cs.isAutoScale());
+ colourByLabel.setSelected(cs.isColourByLabel());
+ if (cs.getThreshType() != AnnotationColourGradient.NO_THRESHOLD)
+ {
+ // initialise threshold slider and selector
+ threshold
+ .setSelectedIndex(cs.getThreshType() == AnnotationColourGradient.ABOVE_THRESHOLD ? 1
+ : 2);
+ slider.setEnabled(true);
+ thresholdValue.setEnabled(true);
+ threshline = new jalview.datamodel.GraphLine((max - min) / 2f,
+ "Threshold", Color.black);
+
+ }
adjusting = false;
changeColour();
-
+ waitForInput();
}
public FeatureColourChooser()
private void jbInit() throws Exception
{
- minColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
- minColour.setBorder(BorderFactory.createEtchedBorder());
+
+ minColour.setFont(JvSwingUtils.getLabelFont());
+ minColour.setBorder(BorderFactory.createLineBorder(Color.black));
minColour.setPreferredSize(new Dimension(40, 20));
- minColour.setToolTipText("Minimum Colour");
+ minColour.setToolTipText(MessageManager.getString("label.min_colour"));
minColour.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
}
}
});
- maxColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
- maxColour.setBorder(BorderFactory.createEtchedBorder());
+ maxColour.setFont(JvSwingUtils.getLabelFont());
+ maxColour.setBorder(BorderFactory.createLineBorder(Color.black));
maxColour.setPreferredSize(new Dimension(40, 20));
- maxColour.setToolTipText("Maximum Colour");
+ maxColour.setToolTipText(MessageManager.getString("label.max_colour"));
maxColour.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent 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);
- }
- });
+ maxColour.setBorder(new LineBorder(Color.black));
+ minText.setText(MessageManager.getString("label.min"));
+ minText.setFont(JvSwingUtils.getLabelFont());
+ maxText.setText(MessageManager.getString("label.max"));
+ maxText.setFont(JvSwingUtils.getLabelFont());
this.setLayout(borderLayout1);
jPanel2.setLayout(flowLayout1);
jPanel1.setBackground(Color.white);
threshold_actionPerformed(e);
}
});
- threshold.addItem("No Threshold");
- threshold.addItem("Above Threshold");
- threshold.addItem("Below Threshold");
+ threshold.setToolTipText(MessageManager
+ .getString("label.threshold_feature_display_by_score"));
+ threshold.addItem(MessageManager
+ .getString("label.threshold_feature_no_thereshold")); // index 0
+ threshold.addItem(MessageManager
+ .getString("label.threshold_feature_above_thereshold")); // index 1
+ threshold.addItem(MessageManager
+ .getString("label.threshold_feature_below_thereshold")); // index 2
jPanel3.setLayout(flowLayout2);
thresholdValue.addActionListener(new ActionListener()
{
slider.setEnabled(false);
slider.setOpaque(false);
slider.setPreferredSize(new Dimension(100, 32));
+ slider.setToolTipText(MessageManager
+ .getString("label.adjust_thereshold"));
thresholdValue.setEnabled(false);
thresholdValue.setColumns(7);
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()
+ thresholdIsMin.setBackground(Color.white);
+ thresholdIsMin.setText(MessageManager
+ .getString("label.threshold_minmax"));
+ thresholdIsMin.setToolTipText(MessageManager
+ .getString("label.toggle_absolute_relative_display_threshold"));
+ thresholdIsMin.addActionListener(new ActionListener()
{
- public void actionPerformed(ActionEvent e)
+ public void actionPerformed(ActionEvent actionEvent)
{
- currentColours_actionPerformed(e);
+ thresholdIsMin_actionPerformed(actionEvent);
}
});
- thresholdIsMin.setBackground(Color.white);
- thresholdIsMin.setText("Threshold is Min/Max");
- thresholdIsMin.addActionListener(new ActionListener()
+ colourByLabel.setBackground(Color.white);
+ colourByLabel
+ .setText(MessageManager.getString("label.colour_by_label"));
+ colourByLabel
+ .setToolTipText(MessageManager
+ .getString("label.display_features_same_type_different_label_using_different_colour"));
+ colourByLabel.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent actionEvent)
{
- thresholdIsMin_actionPerformed(actionEvent);
+ colourByLabel_actionPerformed(actionEvent);
}
});
+ colourPanel.setBackground(Color.white);
jPanel1.add(ok);
jPanel1.add(cancel);
- // jPanel2.add(currentColours);
- jPanel2.add(minColour);
- jPanel2.add(maxColour);
+ jPanel2.add(colourByLabel, java.awt.BorderLayout.WEST);
+ jPanel2.add(colourPanel, java.awt.BorderLayout.EAST);
+ colourPanel.add(minText);
+ colourPanel.add(minColour);
+ colourPanel.add(maxText);
+ colourPanel.add(maxColour);
this.add(jPanel3, java.awt.BorderLayout.CENTER);
jPanel3.add(threshold);
jPanel3.add(slider);
this.add(jPanel2, java.awt.BorderLayout.NORTH);
}
+ JLabel minText = new JLabel();
+
+ JLabel maxText = new JLabel();
JPanel minColour = new JPanel();
JPanel maxColour = new JPanel();
- JButton ok = new JButton();
-
- JButton cancel = new JButton();
+ JPanel colourPanel = new JPanel();
JPanel jPanel1 = new JPanel();
JSlider slider = new JSlider();
JTextField thresholdValue = new JTextField(20);
- // TODO refactor to tolower flag
- JCheckBox currentColours = new JCheckBox();
+
+ // TODO implement GUI for tolower flag
+ // JCheckBox toLower = new JCheckBox();
JCheckBox thresholdIsMin = new JCheckBox();
+ JCheckBox colourByLabel = new JCheckBox();
+
private GraphLine threshline;
+ private Color oldmaxColour;
+
+ private Color oldminColour;
+
public void minColour_actionPerformed()
{
Color col = JColorChooser.showDialog(this,
- "Select Colour for Minimum Value", minColour.getBackground());
+ MessageManager.getString("label.select_colour_minimum_value"),
+ minColour.getBackground());
if (col != null)
{
minColour.setBackground(col);
+ minColour.setForeground(col);
}
minColour.repaint();
changeColour();
public void maxColour_actionPerformed()
{
Color col = JColorChooser.showDialog(this,
- "Select Colour for Maximum Value", maxColour.getBackground());
+ MessageManager.getString("label.select_colour_maximum_value"),
+ maxColour.getBackground());
if (col != null)
{
maxColour.setBackground(col);
+ maxColour.setForeground(col);
}
maxColour.repaint();
changeColour();
return;
}
-
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;
+ if (cs.isColourByLabel())
+ {
+ acg = new GraduatedColor(oldminColour, oldmaxColour, min, max);
+ }
+ else
+ {
+ acg = new GraduatedColor(oldminColour = minColour.getBackground(),
+ oldmaxColour = maxColour.getBackground(), min, max);
+
+ }
if (aboveThreshold == AnnotationColourGradient.NO_THRESHOLD)
{
slider.setEnabled(false);
thresholdValue.setEnabled(false);
thresholdValue.setText("");
+ thresholdIsMin.setEnabled(false);
}
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)
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));
slider.setMajorTickSpacing((int) (range / 10f));
slider.setEnabled(true);
thresholdValue.setEnabled(true);
+ thresholdIsMin.setEnabled(!colourByLabel.isSelected());
adjusting = false;
}
acg.setThreshType(aboveThreshold);
- if (thresholdIsMin.isSelected() && aboveThreshold != AnnotationColourGradient.NO_THRESHOLD)
+ if (thresholdIsMin.isSelected()
+ && aboveThreshold != AnnotationColourGradient.NO_THRESHOLD)
{
- if (aboveThreshold==AnnotationColourGradient.ABOVE_THRESHOLD)
- {
+ acg.setAutoScaled(false);
+ 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);
+ }
+ }
+ else
+ {
+ acg.setAutoScaled(true);
+ }
+ acg.setColourByLabel(colourByLabel.isSelected());
+ if (acg.isColourByLabel())
+ {
+ maxColour.setEnabled(false);
+ minColour.setEnabled(false);
+ maxColour.setBackground(this.getBackground());
+ maxColour.setForeground(this.getBackground());
+ minColour.setBackground(this.getBackground());
+ minColour.setForeground(this.getBackground());
+
+ }
+ else
+ {
+ maxColour.setEnabled(true);
+ minColour.setEnabled(true);
+ maxColour.setBackground(oldmaxColour);
+ minColour.setBackground(oldminColour);
+ maxColour.setForeground(oldmaxColour);
+ minColour.setForeground(oldminColour);
}
-
- fr.featureColours.put(type,acg);
+ fr.setColour(type, acg);
cs = acg;
ap.paintAlignment(false);
}
- public void ok_actionPerformed(ActionEvent e)
+ protected void raiseClosed()
{
- changeColour();
- try
- {
- frame.setClosed(true);
- } catch (Exception ex)
+ if (this.colourEditor != null)
{
+ colourEditor.actionPerformed(new ActionEvent(this, 0, "CLOSED"));
}
}
- public void cancel_actionPerformed(ActionEvent e)
+ public void okPressed()
+ {
+ changeColour();
+ }
+
+ public void cancelPressed()
{
reset();
- try
- {
- frame.setClosed(true);
- } catch (Exception ex)
- {
- }
}
void reset()
{
- fr.featureColours.put(type, oldcs);
+ fr.setColour(type, oldcs);
+ ap.paintAlignment(false);
+ cs = null;
}
public void thresholdCheck_actionPerformed(ActionEvent e)
ap.paintAlignment(false);
}
- public void currentColours_actionPerformed(ActionEvent e)
+ public void thresholdIsMin_actionPerformed(ActionEvent actionEvent)
{
- if (currentColours.isSelected())
- {
- reset();
- }
-
- maxColour.setEnabled(!currentColours.isSelected());
- minColour.setEnabled(!currentColours.isSelected());
-
changeColour();
}
- public void thresholdIsMin_actionPerformed(ActionEvent actionEvent)
+ public void colourByLabel_actionPerformed(ActionEvent actionEvent)
{
changeColour();
}
+ ActionListener colourEditor = null;
+
+ public void addActionListener(ActionListener graduatedColorEditor)
+ {
+ if (colourEditor != null)
+ {
+ System.err
+ .println("IMPLEMENTATION ISSUE: overwriting action listener for FeatureColourChooser");
+ }
+ colourEditor = graduatedColorEditor;
+ }
+
}