X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationColumnChooser.java;h=8b66b8e540f48cffad5d6a72c02e756bfb37c1c9;hb=6b13a606027284408286d1cd2833470d1f9b9bfe;hp=6fc5fada40a2fa3ab2c23beb75ec76ab6c53fa8b;hpb=54dd5d7c3c4384ef383ead7cf3d150ac5fddb3da;p=jalview.git diff --git a/src/jalview/gui/AnnotationColumnChooser.java b/src/jalview/gui/AnnotationColumnChooser.java index 6fc5fad..8b66b8e 100644 --- a/src/jalview/gui/AnnotationColumnChooser.java +++ b/src/jalview/gui/AnnotationColumnChooser.java @@ -21,10 +21,12 @@ package jalview.gui; +import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.HiddenColumns; import jalview.io.cache.JvCacheableInputBox; import jalview.schemes.AnnotationColourGradient; import jalview.util.MessageManager; +import jalview.util.Platform; import jalview.viewmodel.annotationfilter.AnnotationFilterParameter; import java.awt.BorderLayout; @@ -33,10 +35,11 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.KeyEvent; -import java.util.ArrayList; import javax.swing.ButtonGroup; import javax.swing.JCheckBox; @@ -50,8 +53,8 @@ import javax.swing.border.TitledBorder; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") -public class AnnotationColumnChooser extends AnnotationRowFilter implements - ItemListener +public class AnnotationColumnChooser extends AnnotationRowFilter + implements ItemListener { private JPanel switchableViewsPanel = new JPanel(new CardLayout()); @@ -87,9 +90,8 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements private HiddenColumns oldHiddenColumns; - protected int MIN_WIDTH = 420; - - protected int MIN_HEIGHT = 430; + protected static int MIN_WIDTH = (Platform.isJS() ? 370 : 420); + protected static int MIN_HEIGHT = (Platform.isJS() ? 370 : 430); public AnnotationColumnChooser(AlignViewport av, final AlignmentPanel ap) { @@ -98,8 +100,10 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements frame.setContentPane(this); frame.setLayer(JLayeredPane.PALETTE_LAYER); Desktop.addInternalFrame(frame, - MessageManager.getString("label.select_by_annotation"), 520, - 215); + MessageManager.getString("label.select_by_annotation"), 0, + 0); + // BH note: MIGLayout ignores this completely, + // possibly creating a frame smaller than specified: frame.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT)); addSliderChangeListener(); @@ -119,18 +123,16 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements // restore Object state from the previous session if one exists if (lastChooser != null) { - currentSearchPanel = lastChooser - .getCurrentSearchPanel(); + currentSearchPanel = lastChooser.getCurrentSearchPanel(); currentStructureFilterPanel = lastChooser .getCurrentStructureFilterPanel(); - annotations.setSelectedIndex(lastChooser - .getAnnotations().getSelectedIndex()); - threshold.setSelectedIndex(lastChooser - .getThreshold().getSelectedIndex()); - actionOption = lastChooser - .getActionOption(); - percentThreshold.setSelected(lastChooser.percentThreshold - .isSelected()); + annotations.setSelectedIndex( + lastChooser.getAnnotations().getSelectedIndex()); + threshold.setSelectedIndex( + lastChooser.getThreshold().getSelectedIndex()); + actionOption = lastChooser.getActionOption(); + percentThreshold + .setSelected(lastChooser.percentThreshold.isSelected()); } try @@ -152,11 +154,11 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements super.jbInit(); JPanel thresholdPanel = new JPanel(); - thresholdPanel.setBorder(new TitledBorder(MessageManager - .getString("label.threshold_filter"))); + thresholdPanel.setBorder(new TitledBorder( + MessageManager.getString("label.threshold_filter"))); thresholdPanel.setBackground(Color.white); thresholdPanel.setFont(JvSwingUtils.getLabelFont()); - thresholdPanel.setLayout(new MigLayout("", "[left][right]", "[][]")); + thresholdPanel.setLayout(new MigLayout("", "[left][right]", "[][]") ); percentThreshold.setBackground(Color.white); percentThreshold.setFont(JvSwingUtils.getLabelFont()); @@ -205,7 +207,6 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements AnnotationColumnChooser.NO_GRAPH_VIEW); switchableViewsPanel.add(graphFilterView, AnnotationColumnChooser.GRAPH_VIEW); - this.setLayout(new BorderLayout()); this.add(annotationComboBoxPanel, java.awt.BorderLayout.PAGE_START); this.add(switchableViewsPanel, java.awt.BorderLayout.CENTER); @@ -241,23 +242,12 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements if (av.getAnnotationColumnSelectionState() != null) { - HiddenColumns oldHidden = av - .getAnnotationColumnSelectionState() + HiddenColumns oldHidden = av.getAnnotationColumnSelectionState() .getOldHiddenColumns(); - if (oldHidden != null) - { - ArrayList regions = oldHidden.getHiddenColumnsCopy(); - for (int[] positions : regions) - { - av.hideColumns(positions[0], positions[1]); - } - } - // 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); + ap.paintAlignment(true, true); } } @@ -266,11 +256,11 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements { if (slider.isEnabled()) { - getCurrentAnnotation().threshold.value = slider.getValue() / 1000f; + getCurrentAnnotation().threshold.value = getSliderValue(); updateView(); propagateSeqAssociatedThreshold(updateAllAnnotation, getCurrentAnnotation()); - ap.paintAlignment(false); + ap.paintAlignment(false, false); } } @@ -285,16 +275,18 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements AnnotationFilterParameter filterParams = new AnnotationFilterParameter(); - setCurrentAnnotation(av.getAlignment().getAlignmentAnnotation()[annmap[getAnnotations() - .getSelectedIndex()]]); + setCurrentAnnotation(av.getAlignment() + .getAlignmentAnnotation()[annmap[getAnnotations() + .getSelectedIndex()]]); - int selectedThresholdItem = getSelectedThresholdItem(getThreshold() - .getSelectedIndex()); + int selectedThresholdItem = getSelectedThresholdItem( + getThreshold().getSelectedIndex()); slider.setEnabled(true); thresholdValue.setEnabled(true); percentThreshold.setEnabled(true); + final AlignmentAnnotation currentAnnotation = getCurrentAnnotation(); if (selectedThresholdItem == AnnotationColourGradient.NO_THRESHOLD) { slider.setEnabled(false); @@ -305,47 +297,43 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements } else if (selectedThresholdItem != AnnotationColourGradient.NO_THRESHOLD) { - if (getCurrentAnnotation().threshold == null) + if (currentAnnotation.threshold == null) { - getCurrentAnnotation() - .setThreshold( - new jalview.datamodel.GraphLine( - (getCurrentAnnotation().graphMax - getCurrentAnnotation().graphMin) / 2f, - "Threshold", Color.black)); + currentAnnotation.setThreshold(new jalview.datamodel.GraphLine( + (currentAnnotation.graphMax + - currentAnnotation.graphMin) / 2f, + "Threshold", Color.black)); } adjusting = true; - 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)); - + setSliderModel(currentAnnotation.graphMin, + currentAnnotation.graphMax, + currentAnnotation.threshold.value); + setThresholdValueText(); - slider.setMajorTickSpacing((int) (range / 10f)); slider.setEnabled(true); thresholdValue.setEnabled(true); adjusting = false; // build filter params - filterParams - .setThresholdType(AnnotationFilterParameter.ThresholdType.NO_THRESHOLD); - if (getCurrentAnnotation().isQuantitative()) + filterParams.setThresholdType( + AnnotationFilterParameter.ThresholdType.NO_THRESHOLD); + if (currentAnnotation.isQuantitative()) { filterParams - .setThresholdValue(getCurrentAnnotation().threshold.value); + .setThresholdValue(currentAnnotation.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); } } } @@ -371,17 +359,17 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements { if (!currentSearchPanel.searchBox.getUserInput().isEmpty()) { - filterParams.setRegexString(currentSearchPanel.searchBox - .getUserInput()); + filterParams.setRegexString( + currentSearchPanel.searchBox.getUserInput()); if (currentSearchPanel.displayName.isSelected()) { - filterParams - .addRegexSearchField(AnnotationFilterParameter.SearchableAnnotationField.DISPLAY_STRING); + filterParams.addRegexSearchField( + AnnotationFilterParameter.SearchableAnnotationField.DISPLAY_STRING); } if (currentSearchPanel.description.isSelected()) { - filterParams - .addRegexSearchField(AnnotationFilterParameter.SearchableAnnotationField.DESCRIPTION); + filterParams.addRegexSearchField( + AnnotationFilterParameter.SearchableAnnotationField.DESCRIPTION); } } } @@ -391,9 +379,10 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements // adding them to the selection av.showAllHiddenColumns(); av.getColumnSelection().filterAnnotations( - getCurrentAnnotation().annotations, filterParams); + currentAnnotation.annotations, filterParams); - if (getActionOption() == ACTION_OPTION_HIDE) + boolean hideCols = getActionOption() == ACTION_OPTION_HIDE; + if (hideCols) { av.hideSelectedColumns(); } @@ -401,7 +390,8 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements filterParams = null; av.setAnnotationColumnSelectionState(this); - ap.paintAlignment(true); + // only update overview and structures if columns were hidden + ap.paintAlignment(hideCols, hideCols); } public HiddenColumns getOldHiddenColumns() @@ -489,8 +479,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements public void selectedAnnotationChanged() { String currentView = AnnotationColumnChooser.NO_GRAPH_VIEW; - if (av.getAlignment() - .getAlignmentAnnotation()[annmap[getAnnotations() + if (av.getAlignment().getAlignmentAnnotation()[annmap[getAnnotations() .getSelectedIndex()]].isQuantitative()) { currentView = AnnotationColumnChooser.GRAPH_VIEW; @@ -506,7 +495,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements CardLayout switchableViewsLayout = (CardLayout) switchableViewsPanel .getLayout(); - switchableViewsLayout.show(switchableViewsPanel, currentView); + switchableViewsLayout.show(switchableViewsPanel, currentView); updateView(); } @@ -568,7 +557,8 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements public void syncState() { - if (aColChooser.getActionOption() == AnnotationColumnChooser.ACTION_OPTION_HIDE) + if (aColChooser + .getActionOption() == AnnotationColumnChooser.ACTION_OPTION_HIDE) { this.optionsGroup.setSelected(this.hideOption.getModel(), true); } @@ -635,8 +625,8 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements } }); - this.setBorder(new TitledBorder(MessageManager - .getString("label.structures_filter"))); + this.setBorder(new TitledBorder( + MessageManager.getString("label.structures_filter"))); JvSwingUtils.jvInitComponent(this); this.add(all); @@ -729,21 +719,19 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements private static final String FILTER_BY_ANN_CACHE_KEY = "CACHE.SELECT_FILTER_BY_ANNOT"; public JvCacheableInputBox searchBox = new JvCacheableInputBox<>( - FILTER_BY_ANN_CACHE_KEY); + FILTER_BY_ANN_CACHE_KEY, 23); public SearchPanel(AnnotationColumnChooser aColChooser) { this.aColChooser = aColChooser; JvSwingUtils.jvInitComponent(this); - this.setBorder(new TitledBorder(MessageManager - .getString("label.search_filter"))); - - searchBox.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXX"); - searchBox.setToolTipText(MessageManager - .getString("info.enter_search_text_here")); - searchBox.getEditor().getEditorComponent() - .addKeyListener(new java.awt.event.KeyAdapter() + this.setBorder(new TitledBorder( + MessageManager.getString("label.search_filter"))); + + searchBox.getComponent().setToolTipText( + MessageManager.getString("info.enter_search_text_here")); + searchBox.addKeyListener(new java.awt.event.KeyAdapter() { @Override public void keyPressed(KeyEvent e) @@ -755,8 +743,14 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements } } }); - - + searchBox.addFocusListener(new FocusAdapter() + { + @Override + public void focusLost(FocusEvent e) + { + searchStringAction(); + } + }); JvSwingUtils.jvInitComponent(displayName, "label.label"); displayName.addActionListener(new ActionListener() @@ -774,12 +768,12 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements @Override public void actionPerformed(ActionEvent actionEvent) { - discriptionCheckboxAction(); + descriptionCheckboxAction(); } }); syncState(); - this.add(searchBox); + this.add(searchBox.getComponent()); this.add(displayName); this.add(description); } @@ -790,7 +784,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements aColChooser.updateView(); } - public void discriptionCheckboxAction() + public void descriptionCheckboxAction() { aColChooser.setCurrentSearchPanel(this); aColChooser.updateView(); @@ -825,15 +819,15 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements String defaultTtip = MessageManager .getString("info.enter_search_text_to_enable"); String labelTtip = MessageManager.formatMessage( - "info.search_in_annotation_label", annotations - .getSelectedItem().toString()); + "info.search_in_annotation_label", + annotations.getSelectedItem().toString()); String descTtip = MessageManager.formatMessage( - "info.search_in_annotation_description", annotations - .getSelectedItem().toString()); - displayName.setToolTipText(displayName.isEnabled() ? labelTtip - : defaultTtip); - description.setToolTipText(description.isEnabled() ? descTtip - : defaultTtip); + "info.search_in_annotation_description", + annotations.getSelectedItem().toString()); + displayName.setToolTipText( + displayName.isEnabled() ? labelTtip : defaultTtip); + description.setToolTipText( + description.isEnabled() ? descTtip : defaultTtip); } }