X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Fgui%2FCalculationChooser.java;h=4e22a74485798aee2955faca65b64f61e9c802e4;hb=ef7125ccaa49531e0f0930955af7a1710f6c4372;hp=b7bb58fb94d0da854a7286f3189e3095e00365e8;hpb=e10ae7d68d38a30a4aed7eaef6a34f01b654eda9;p=jalview.git diff --git a/src/jalview/gui/CalculationChooser.java b/src/jalview/gui/CalculationChooser.java index b7bb58f..4e22a74 100644 --- a/src/jalview/gui/CalculationChooser.java +++ b/src/jalview/gui/CalculationChooser.java @@ -52,6 +52,7 @@ import javax.swing.JRadioButton; import javax.swing.event.InternalFrameAdapter; import javax.swing.event.InternalFrameEvent; +import jalview.analysis.AlignmentUtils; import jalview.analysis.TreeBuilder; import jalview.analysis.scoremodels.ScoreModels; import jalview.analysis.scoremodels.SimilarityParams; @@ -60,7 +61,6 @@ import jalview.api.analysis.SimilarityParamsI; import jalview.bin.Cache; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.SequenceGroup; -import jalview.datamodel.SequenceI; import jalview.util.MessageManager; /** @@ -81,6 +81,21 @@ public class CalculationChooser extends JPanel private static final int MIN_TREE_SELECTION = 3; private static final int MIN_PCA_SELECTION = 4; + + private String secondaryStructureModelName; + + private void getSecondaryStructureModelName() { + + ScoreModels scoreModels = ScoreModels.getInstance(); + for (ScoreModelI sm : scoreModels.getModels()) + { + if (sm.isSecondaryStructure()) + { + secondaryStructureModelName = sm.getName(); + } + } + + } AlignFrame af; @@ -91,6 +106,8 @@ public class CalculationChooser extends JPanel JRadioButton averageDistance; JComboBox modelNames; + + JComboBox ssSourceDropdown; JButton calculate; @@ -123,6 +140,7 @@ public class CalculationChooser extends JPanel this.af = alignFrame; init(); af.alignPanel.setCalculationDialog(this); + } /** @@ -130,6 +148,7 @@ public class CalculationChooser extends JPanel */ void init() { + getSecondaryStructureModelName(); setLayout(new BorderLayout()); frame = new JInternalFrame(); frame.setFrameIcon(null); @@ -210,16 +229,37 @@ public class CalculationChooser extends JPanel pca.addActionListener(calcChanged); neighbourJoining.addActionListener(calcChanged); averageDistance.addActionListener(calcChanged); + + + //to do + ssSourceDropdown = buildSSSourcesOptionsList(); + ssSourceDropdown.setVisible(false); // Initially hide the dropdown /* * score models drop-down - with added tooltips! */ modelNames = buildModelOptionsList(); + + // Step 3: Show or Hide Dropdown Based on Selection + modelNames.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String selectedModel = modelNames.getSelectedItem().toString(); + + if (selectedModel.equals(secondaryStructureModelName)) { + ssSourceDropdown.setVisible(true); + } else { + ssSourceDropdown.setVisible(false); + } + } + }); + JPanel scoreModelPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); scoreModelPanel.setOpaque(false); scoreModelPanel.add(modelNames); - + scoreModelPanel.add(ssSourceDropdown); + /* * score model parameters */ @@ -234,7 +274,7 @@ public class CalculationChooser extends JPanel paramsPanel.add(matchGaps); paramsPanel.add(includeGappedColumns); paramsPanel.add(shorterSequence); - + /* * OK / Cancel buttons */ @@ -272,7 +312,7 @@ public class CalculationChooser extends JPanel } this.add(actionPanel, BorderLayout.SOUTH); - int width = 350; + int width = 365; int height = includeParams ? 420 : 240; setMinimumSize(new Dimension(325, height - 10)); @@ -420,7 +460,38 @@ public class CalculationChooser extends JPanel return scoreModelsCombo; } + + + private JComboBox buildSSSourcesOptionsList() + { + final JComboBox comboBox = new JComboBox<>(); + Object curSel = comboBox.getSelectedItem(); + DefaultComboBoxModel sourcesModel = new DefaultComboBoxModel<>(); + + List ssSources = getApplicableSecondaryStructureSources(); + + boolean selectedIsPresent = false; + for (String source : ssSources) + { + if (curSel != null && source.equals(curSel)) + { + selectedIsPresent = true; + curSel = source; + } + sourcesModel.addElement(source); + + } + if (selectedIsPresent) + { + sourcesModel.setSelectedItem(curSel); + } + comboBox.setModel(sourcesModel); + + return comboBox; + } + + private void updateScoreModels(JComboBox comboBox, List toolTips) { @@ -432,24 +503,9 @@ public class CalculationChooser extends JPanel * select the score models applicable to the alignment type */ boolean nucleotide = af.getViewport().getAlignment().isNucleotide(); - AlignmentAnnotation[] alignmentAnnotation = af.getViewport().getAlignment().getAlignmentAnnotation(); - - boolean ssPresent = false; - - for (AlignmentAnnotation aa : alignmentAnnotation) - - { - if(ssPresent) { - break; - } + AlignmentAnnotation[] alignmentAnnotations = af.getViewport().getAlignment().getAlignmentAnnotation(); - if (aa.label.equals("Secondary Structure") || aa.label.equals("jnetpred")) - - { - ssPresent = true; - break; - } - } + boolean ssPresent = AlignmentUtils.isSecondaryStructurePresent(alignmentAnnotations); List models = getApplicableScoreModels(nucleotide, pca.isSelected(), ssPresent); @@ -487,6 +543,7 @@ public class CalculationChooser extends JPanel } // finally, update the model comboBox.setModel(model); + } /** @@ -531,6 +588,18 @@ public class CalculationChooser extends JPanel return filtered; } + + protected List getApplicableSecondaryStructureSources() + { + AlignmentAnnotation[] annotations = af.getViewport().getAlignment().getAlignmentAnnotation(); + + List ssSources = AlignmentUtils.getSecondaryStructureSources(annotations); + //List ssSources = AlignmentUtils.extractSSSourceInAlignmentAnnotation(annotations); + + + return ssSources; + } + /** * Open and calculate the selected tree or PCA on 'OK' */ @@ -538,8 +607,16 @@ public class CalculationChooser extends JPanel { boolean doPCA = pca.isSelected(); String modelName = modelNames.getSelectedItem().toString(); - SimilarityParamsI params = getSimilarityParameters(doPCA); - + String ssSource = ""; + Object selectedItem = ssSourceDropdown.getSelectedItem(); + if (selectedItem != null) { + ssSource = selectedItem.toString(); + } + SimilarityParams params = getSimilarityParameters(doPCA); + if(ssSource.length()>0) + { + params.setSecondaryStructureSource(ssSource); + } if (doPCA) { openPcaPanel(modelName, params); @@ -640,7 +717,7 @@ public class CalculationChooser extends JPanel * @param doPCA * @return */ - protected SimilarityParamsI getSimilarityParameters(boolean doPCA) + protected SimilarityParams getSimilarityParameters(boolean doPCA) { // commented out: parameter choices read from gui widgets // SimilarityParamsI params = new SimilarityParams(