X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Fappletgui%2FAnnotationColumnChooser.java;h=b4c1d54dabea6c3d29ee229b3441a06567dbfb32;hb=584c1b0136786968958e22e52b6ce51bd24511e5;hp=496d4a4619a5f08b4e53b8b2db8a641ce5301454;hpb=1d4b37e9bd54c095aa00e643b741c931eb61c58b;p=jalview.git
diff --git a/src/jalview/appletgui/AnnotationColumnChooser.java b/src/jalview/appletgui/AnnotationColumnChooser.java
index 496d4a4..b4c1d54 100644
--- a/src/jalview/appletgui/AnnotationColumnChooser.java
+++ b/src/jalview/appletgui/AnnotationColumnChooser.java
@@ -1,8 +1,27 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * 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 Jalview. If not, see .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.appletgui;
import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.ColumnSelection;
-import jalview.gui.JvSwingUtils;
+import jalview.datamodel.HiddenColumns;
import jalview.schemes.AnnotationColourGradient;
import jalview.util.MessageManager;
import jalview.viewmodel.annotationfilter.AnnotationFilterParameter;
@@ -27,10 +46,12 @@ import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
-import java.util.Iterator;
+import java.util.ArrayList;
import java.util.Vector;
-import net.miginfocom.swing.MigLayout;
+//import javax.swing.JPanel;
+
+//import net.miginfocom.swing.MigLayout;
public class AnnotationColumnChooser extends AnnotationRowFilter implements
ActionListener, AdjustmentListener, ItemListener, MouseListener
@@ -55,6 +76,10 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
private BorderLayout borderLayout1 = new BorderLayout();
+ private BorderLayout gBorderLayout = new BorderLayout();
+
+ private BorderLayout ngBorderLayout = new BorderLayout();
+
private Choice threshold = new Choice();
private StructureFilterPanel gStructureFilterPanel;
@@ -85,7 +110,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
private int actionOption = ACTION_OPTION_SELECT;
- private ColumnSelection oldColumnSelection;
+ private HiddenColumns oldHiddenColumns;
public AnnotationColumnChooser()
{
@@ -110,17 +135,22 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
slider.addAdjustmentListener(this);
slider.addMouseListener(this);
- if (av.getAlignment().getAlignmentAnnotation() == null)
+ AlignmentAnnotation[] anns = av.getAlignment().getAlignmentAnnotation();
+ if (anns == null)
{
return;
}
- setOldColumnSelection(av.getColumnSelection());
+ setOldHiddenColumns(av.getAlignment().getHiddenColumns());
adjusting = true;
- Vector list = new Vector();
+ Vector list = new Vector<>();
int index = 1;
- for (int i = 0; i < av.getAlignment().getAlignmentAnnotation().length; i++)
+ for (int i = 0; i < anns.length; i++)
{
- String label = av.getAlignment().getAlignmentAnnotation()[i].label;
+ String label = anns[i].label;
+ if (anns[i].sequenceRef != null)
+ {
+ label = label + "_" + anns[i].sequenceRef.getName();
+ }
if (!list.contains(label))
{
list.addElement(label);
@@ -137,20 +167,18 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
}
populateThresholdComboBox(threshold);
-
+ AnnotationColumnChooser lastChooser = av
+ .getAnnotationColumnSelectionState();
// restore Object state from the previous session if one exists
- if (av.getAnnotationColumnSelectionState() != null)
+ if (lastChooser != null)
{
- currentSearchPanel = av.getAnnotationColumnSelectionState()
- .getCurrentSearchPanel();
- currentStructureFilterPanel = av.getAnnotationColumnSelectionState()
+ currentSearchPanel = lastChooser.getCurrentSearchPanel();
+ currentStructureFilterPanel = lastChooser
.getCurrentStructureFilterPanel();
- annotations.select(av.getAnnotationColumnSelectionState()
- .getAnnotations().getSelectedIndex());
- threshold.select(av.getAnnotationColumnSelectionState()
- .getThreshold().getSelectedIndex());
- actionOption = av.getAnnotationColumnSelectionState()
- .getActionOption();
+ annotations.select(lastChooser.getAnnotations().getSelectedIndex());
+ threshold.select(lastChooser.getThreshold().getSelectedIndex());
+ actionOption = lastChooser.getActionOption();
+ percentThreshold.setState(lastChooser.percentThreshold.getState());
}
try
@@ -174,6 +202,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
thresholdValue.setEnabled(false);
thresholdValue.setColumns(7);
+ thresholdValue.setCaretPosition(0);
ok.addActionListener(this);
cancel.addActionListener(this);
@@ -186,20 +215,23 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
slider.setPreferredSize(new Dimension(100, 32));
thresholdPanel.setBackground(Color.white);
- thresholdPanel.setFont(JvSwingUtils.getLabelFont());
- thresholdPanel.setLayout(new MigLayout("", "[left][right]", "[][]"));
+ // thresholdPanel.setFont(JvSwingUtils.getLabelFont());
+ // thresholdPanel.setLayout(new MigLayout("", "[left][right]", "[][]"));
+
+ percentThreshold.setLabel("As percentage");
+ percentThreshold.addItemListener(this);
actionPanel.setBackground(Color.white);
- actionPanel.setFont(JvSwingUtils.getLabelFont());
+ // actionPanel.setFont(JvSwingUtils.getLabelFont());
- graphFilterView.setLayout(new MigLayout("", "[left][right]", "[][]"));
+ graphFilterView.setLayout(gBorderLayout);
graphFilterView.setBackground(Color.white);
- noGraphFilterView.setLayout(new MigLayout("", "[left][right]", "[][]"));
+ noGraphFilterView.setLayout(ngBorderLayout);
noGraphFilterView.setBackground(Color.white);
annotationComboBoxPanel.setBackground(Color.white);
- annotationComboBoxPanel.setFont(JvSwingUtils.getLabelFont());
+ // annotationComboBoxPanel.setFont(JvSwingUtils.getLabelFont());
gSearchPanel = new SearchPanel(this);
ngSearchPanel = new SearchPanel(this);
@@ -209,21 +241,30 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
ngStructureFilterPanel = new StructureFilterPanel(this);
thresholdPanel.setTitle("Threshold Filter");
- thresholdPanel.add(getThreshold(), "grow");
- thresholdPanel.add(thresholdValue, "grow, wrap");
- thresholdPanel.add(slider, "grow, span, wrap");
+ thresholdPanel.add(getThreshold());
+ thresholdPanel.add(slider);
+ thresholdPanel.add(thresholdValue);
+ thresholdPanel.add(percentThreshold);
actionPanel.add(ok);
actionPanel.add(cancel);
- graphFilterView.add(gSearchPanel, "grow, span, wrap");
- graphFilterView.add(gStructureFilterPanel, "grow, span, wrap");
- graphFilterView.add(thresholdPanel, "grow, span, wrap");
- graphFilterView.add(gFurtherActionPanel);
+ Panel staticPanel = new Panel();
+ staticPanel.setLayout(new BorderLayout());
+ staticPanel.setBackground(Color.white);
- noGraphFilterView.add(ngSearchPanel, "grow, span, wrap");
- noGraphFilterView.add(ngStructureFilterPanel, "grow, span, wrap");
- noGraphFilterView.add(ngFurtherActionPanel);
+ staticPanel.add(gSearchPanel, java.awt.BorderLayout.NORTH);
+ staticPanel.add(gStructureFilterPanel, java.awt.BorderLayout.SOUTH);
+
+ graphFilterView.add(staticPanel, java.awt.BorderLayout.NORTH);
+ graphFilterView.add(thresholdPanel, java.awt.BorderLayout.CENTER);
+ graphFilterView.add(gFurtherActionPanel, java.awt.BorderLayout.SOUTH);
+
+ noGraphFilterView.add(ngSearchPanel, java.awt.BorderLayout.PAGE_START);
+ noGraphFilterView.add(ngStructureFilterPanel,
+ java.awt.BorderLayout.CENTER);
+ noGraphFilterView.add(ngFurtherActionPanel,
+ java.awt.BorderLayout.CENTER);
annotationComboBoxPanel.add(getAnnotations());
switchableViewsPanel.add(noGraphFilterView,
@@ -240,40 +281,42 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
this.validate();
}
+ @Override
@SuppressWarnings("unchecked")
public void reset()
{
- if (this.getOldColumnSelection() != null)
+ if (this.getOldHiddenColumns() != null)
{
av.getColumnSelection().clear();
if (av.getAnnotationColumnSelectionState() != null)
{
- ColumnSelection oldSelection = av
- .getAnnotationColumnSelectionState()
- .getOldColumnSelection();
- if (oldSelection != null && oldSelection.getHiddenColumns() != null
- && !oldSelection.getHiddenColumns().isEmpty())
+ HiddenColumns oldHidden = av.getAnnotationColumnSelectionState()
+ .getOldHiddenColumns();
+ if (oldHidden != null)
{
- for (Iterator itr = oldSelection.getHiddenColumns()
- .iterator(); itr.hasNext();)
+ ArrayList regions = oldHidden.getHiddenColumnsCopy();
+ for (int[] positions : regions)
{
- int positions[] = itr.next();
av.hideColumns(positions[0], positions[1]);
}
}
- av.setColumnSelection(oldSelection);
+ // TODO not clear why we need to hide all the columns (above) if we are
+ // going to copy the hidden columns over wholesale anyway
+ av.getAlignment().setHiddenColumns(oldHidden);
}
+ av.sendSelection();
ap.paintAlignment(true);
}
}
+ @Override
public void adjustmentValueChanged(AdjustmentEvent evt)
{
if (!adjusting)
{
- thresholdValue.setText((slider.getValue() / 1000f) + "");
+ setThresholdValueText();
valueChanged(!sliderDragging);
}
}
@@ -310,6 +353,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
});
}
+ @Override
public void valueChanged(boolean updateAllAnnotation)
{
if (slider.isEnabled())
@@ -350,63 +394,66 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
}
AnnotationFilterParameter filterParams = new AnnotationFilterParameter();
- setCurrentAnnotation(av.getAlignment().getAlignmentAnnotation()[getAnnotations()
- .getSelectedIndex()]);
+ setCurrentAnnotation(av.getAlignment()
+ .getAlignmentAnnotation()[getAnnotations().getSelectedIndex()]);
- int selectedThresholdItem = getSelectedThresholdItem(getThreshold()
- .getSelectedIndex());
+ int selectedThresholdItem = getSelectedThresholdItem(
+ getThreshold().getSelectedIndex());
slider.setEnabled(true);
thresholdValue.setEnabled(true);
+ percentThreshold.setEnabled(true);
if (selectedThresholdItem == AnnotationColourGradient.NO_THRESHOLD)
{
slider.setEnabled(false);
thresholdValue.setEnabled(false);
thresholdValue.setText("");
+ percentThreshold.setEnabled(false);
// build filter params
}
else if (selectedThresholdItem != AnnotationColourGradient.NO_THRESHOLD)
{
if (getCurrentAnnotation().threshold == null)
{
- getCurrentAnnotation()
- .setThreshold(
- new jalview.datamodel.GraphLine(
- (getCurrentAnnotation().graphMax - getCurrentAnnotation().graphMin) / 2f,
- "Threshold", Color.black));
+ getCurrentAnnotation().setThreshold(new jalview.datamodel.GraphLine(
+ (getCurrentAnnotation().graphMax
+ - getCurrentAnnotation().graphMin) / 2f,
+ "Threshold", Color.black));
}
adjusting = true;
- float range = getCurrentAnnotation().graphMax * 1000
- - getCurrentAnnotation().graphMin * 1000;
+ // float range = getCurrentAnnotation().graphMax * 1000
+ // - getCurrentAnnotation().graphMin * 1000;
slider.setMinimum((int) (getCurrentAnnotation().graphMin * 1000));
slider.setMaximum((int) (getCurrentAnnotation().graphMax * 1000));
- slider.setValue((int) (getCurrentAnnotation().threshold.value * 1000));
- thresholdValue.setText(getCurrentAnnotation().threshold.value + "");
+ slider.setValue(
+ (int) (getCurrentAnnotation().threshold.value * 1000));
+ setThresholdValueText();
// slider.setMajorTickSpacing((int) (range / 10f));
slider.setEnabled(true);
thresholdValue.setEnabled(true);
+ percentThreshold.setEnabled(true);
adjusting = false;
// build filter params
- filterParams
- .setThresholdType(AnnotationFilterParameter.ThresholdType.NO_THRESHOLD);
- if (getCurrentAnnotation().graph != AlignmentAnnotation.NO_GRAPH)
+ filterParams.setThresholdType(
+ AnnotationFilterParameter.ThresholdType.NO_THRESHOLD);
+ if (getCurrentAnnotation().isQuantitative())
{
filterParams
.setThresholdValue(getCurrentAnnotation().threshold.value);
if (selectedThresholdItem == AnnotationColourGradient.ABOVE_THRESHOLD)
{
- filterParams
- .setThresholdType(AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD);
+ filterParams.setThresholdType(
+ AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD);
}
else if (selectedThresholdItem == AnnotationColourGradient.BELOW_THRESHOLD)
{
- filterParams
- .setThresholdType(AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD);
+ filterParams.setThresholdType(
+ AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD);
}
}
}
@@ -437,13 +484,13 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
filterParams.setRegexString(currentSearchPanel.searchBox.getText());
if (currentSearchPanel.displayName.getState())
{
- filterParams
- .addRegexSearchField(AnnotationFilterParameter.SearchableAnnotationField.DISPLAY_STRING);
+ filterParams.addRegexSearchField(
+ AnnotationFilterParameter.SearchableAnnotationField.DISPLAY_STRING);
}
if (currentSearchPanel.description.getState())
{
- filterParams
- .addRegexSearchField(AnnotationFilterParameter.SearchableAnnotationField.DESCRIPTION);
+ filterParams.addRegexSearchField(
+ AnnotationFilterParameter.SearchableAnnotationField.DESCRIPTION);
}
}
else
@@ -453,10 +500,13 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
}
}
+ // show hidden columns here, before changing the column selection in
+ // filterAnnotations, because showing hidden columns has the side effect of
+ // adding them to the selection
+ av.showAllHiddenColumns();
av.getColumnSelection().filterAnnotations(
getCurrentAnnotation().annotations, filterParams);
- av.showAllHiddenColumns();
if (getActionOption() == ACTION_OPTION_HIDE)
{
av.hideSelectedColumns();
@@ -464,19 +514,20 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
filterParams = null;
av.setAnnotationColumnSelectionState(this);
+ av.sendSelection();
ap.paintAlignment(true);
}
- public ColumnSelection getOldColumnSelection()
+ public HiddenColumns getOldHiddenColumns()
{
- return oldColumnSelection;
+ return oldHiddenColumns;
}
- public void setOldColumnSelection(ColumnSelection currentColumnSelection)
+ public void setOldHiddenColumns(HiddenColumns currentHiddenColumns)
{
- if (currentColumnSelection != null)
+ if (currentHiddenColumns != null)
{
- this.oldColumnSelection = new ColumnSelection(currentColumnSelection);
+ this.oldHiddenColumns = new HiddenColumns(currentHiddenColumns);
}
}
@@ -533,13 +584,21 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
{
threshold_actionPerformed(null);
}
+ else if (e.getSource() == percentThreshold)
+ {
+ if (!adjusting)
+ {
+ percentageValue_actionPerformed();
+ }
+
+ }
}
public void selectedAnnotationChanged()
{
String currentView = AnnotationColumnChooser.NO_GRAPH_VIEW;
if (av.getAlignment().getAlignmentAnnotation()[getAnnotations()
- .getSelectedIndex()].graph != AlignmentAnnotation.NO_GRAPH)
+ .getSelectedIndex()].isQuantitative())
{
currentView = AnnotationColumnChooser.GRAPH_VIEW;
}
@@ -556,8 +615,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
updateView();
}
- public class FurtherActionPanel extends Panel implements
- ItemListener
+ public class FurtherActionPanel extends Panel implements ItemListener
{
private AnnotationColumnChooser aColChooser;
@@ -579,7 +637,8 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
public void syncState()
{
- if (aColChooser.getActionOption() == AnnotationColumnChooser.ACTION_OPTION_HIDE)
+ if (aColChooser
+ .getActionOption() == AnnotationColumnChooser.ACTION_OPTION_HIDE)
{
furtherAction.select("Hide");
}
@@ -607,8 +666,8 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
}
}
- public class StructureFilterPanel extends TitledPanel implements
- ItemListener
+ public class StructureFilterPanel extends TitledPanel
+ implements ItemListener
{
private AnnotationColumnChooser aColChooser;
@@ -643,7 +702,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
this.setBackground(Color.white);
this.setTitle("Structure Filter");
- this.setFont(JvSwingUtils.getLabelFont());
+ // this.setFont(JvSwingUtils.getLabelFont());
this.add(all);
this.add(alphaHelix);
@@ -770,7 +829,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
});
- displayName.setLabel(MessageManager.getString("label.display_name"));
+ displayName.setLabel(MessageManager.getString("label.label"));
displayName.setEnabled(false);
displayName.addItemListener(this);
@@ -778,7 +837,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
description.setEnabled(false);
description.addItemListener(this);
this.setTitle("Search Filter");
- this.setFont(JvSwingUtils.getLabelFont());
+ // this.setFont(JvSwingUtils.getLabelFont());
syncState();
this.add(searchBox);
@@ -834,21 +893,11 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
}
}
+ @Override
public void actionPerformed(ActionEvent evt)
{
- if (evt.getSource() == thresholdValue)
- {
- try
- {
- float f = new Float(thresholdValue.getText()).floatValue();
- slider.setValue((int) (f * 1000));
- adjustmentValueChanged(null);
- } catch (NumberFormatException ex)
- {
- }
- }
- else if (evt.getSource() == ok)
+ if (evt.getSource() == ok)
{
ok_actionPerformed(null);
}