private static final Font VERDANA_11PT = new Font("Verdana", 0, 11);
+ private static final int MIN_TREE_SELECTION = 3;
+
+ private static final int MIN_PCA_SELECTION = 4;
+
AlignFrame af;
JRadioButton pca;
JComboBox<String> modelNames;
- JButton ok;
+ JButton calculate;
private JInternalFrame frame;
private JCheckBox shorterSequence;
+ final ComboBoxTooltipRenderer renderer = new ComboBoxTooltipRenderer();
+
+ List<String> tips = new ArrayList<String>();
+
/**
* Constructor
*
pca.setOpaque(false);
neighbourJoining = new JRadioButton(
MessageManager.getString("label.tree_calc_nj"));
+ neighbourJoining.setSelected(true);
averageDistance = new JRadioButton(
MessageManager.getString("label.tree_calc_av"));
neighbourJoining.setOpaque(false);
pcaBorderless.add(pca, FlowLayout.LEFT);
calcChoicePanel.add(pcaBorderless, FlowLayout.LEFT);
-
treePanel.add(neighbourJoining);
treePanel.add(averageDistance);
pca.addActionListener(calcChanged);
neighbourJoining.addActionListener(calcChanged);
averageDistance.addActionListener(calcChanged);
+
/*
* score models drop-down - with added tooltips!
*/
/*
* OK / Cancel buttons
*/
- ok = new JButton(MessageManager.getString("action.calculate"));
- ok.setFont(VERDANA_11PT);
- ok.addActionListener(new java.awt.event.ActionListener()
+ calculate = new JButton(MessageManager.getString("action.calculate"));
+ calculate.setFont(VERDANA_11PT);
+ calculate.addActionListener(new java.awt.event.ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
- ok_actionPerformed();
+ calculate_actionPerformed();
}
});
- JButton cancel = new JButton(MessageManager.getString("action.close"));
- cancel.setFont(VERDANA_11PT);
- cancel.addActionListener(new java.awt.event.ActionListener()
+ JButton close = new JButton(MessageManager.getString("action.close"));
+ close.setFont(VERDANA_11PT);
+ close.addActionListener(new java.awt.event.ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
- cancel_actionPerformed(e);
+ close_actionPerformed();
}
});
JPanel actionPanel = new JPanel();
actionPanel.setOpaque(false);
- actionPanel.add(ok);
- actionPanel.add(cancel);
+ actionPanel.add(calculate);
+ actionPanel.add(close);
boolean includeParams = false;
this.add(calcChoicePanel, BorderLayout.CENTER);
{
size = af.getViewport().getSelectionGroup().getSize();
}
- if (!(checkEnabled(pca, size, 4)
- | checkEnabled(neighbourJoining, size, 3) | checkEnabled(
- averageDistance, size, 3)))
+
+ /*
+ * disable calc options for which there is insufficient input data
+ * return value of true means enabled and selected
+ */
+ boolean checkPca = checkEnabled(pca, size, MIN_PCA_SELECTION);
+ boolean checkNeighbourJoining = checkEnabled(neighbourJoining, size,
+ MIN_TREE_SELECTION);
+ boolean checkAverageDistance = checkEnabled(averageDistance, size,
+ MIN_TREE_SELECTION);
+
+ if (checkPca || checkNeighbourJoining || checkAverageDistance)
{
- ok.setToolTipText(null);
- ok.setEnabled(true);
+ calculate.setToolTipText(null);
+ calculate.setEnabled(true);
}
else
{
- ok.setEnabled(false);
+ calculate.setEnabled(false);
}
- updateScoreModels(comboBox, tips);
+ updateScoreModels(modelNames, tips);
}
/**
* - size of input to calculation
* @param minsize
* - minimum size for calculation
- * @return true if size < minsize *and* calc.isSelected
+ * @return true if size >= minsize and calc.isSelected
*/
private boolean checkEnabled(JRadioButton calc, int size, int minsize)
{
String ttip = MessageManager.formatMessage(
- "label.you_need_more_than_n_sequences", minsize);
+ "label.you_need_at_least_n_sequences", minsize);
calc.setEnabled(size >= minsize);
if (!calc.isEnabled())
if (calc.isSelected())
{
modelNames.setEnabled(calc.isEnabled());
- if (!calc.isEnabled())
+ if (calc.isEnabled())
{
- ok.setEnabled(false);
- ok.setToolTipText(ttip);
return true;
}
+ else
+ {
+ calculate.setToolTipText(ttip);
+ }
}
return false;
}
- final JComboBox<String> comboBox = new JComboBox<String>();
-
- final ComboBoxTooltipRenderer renderer = new ComboBoxTooltipRenderer();
-
- List<String> tips = new ArrayList<String>();
-
/**
* A rather elaborate helper method (blame Swing, not me) that builds a
* drop-down list of score models (by name) with descriptions as tooltips.
*/
protected JComboBox<String> buildModelOptionsList()
{
- comboBox.setRenderer(renderer);
+ final JComboBox<String> scoreModelsCombo = new JComboBox<String>();
+ scoreModelsCombo.setRenderer(renderer);
/*
* show tooltip on mouse over the combobox
@Override
public void mouseEntered(MouseEvent e)
{
- comboBox.setToolTipText(tips.get(comboBox.getSelectedIndex()));
+ scoreModelsCombo.setToolTipText(tips.get(scoreModelsCombo.getSelectedIndex()));
}
@Override
public void mouseExited(MouseEvent e)
{
- comboBox.setToolTipText(null);
+ scoreModelsCombo.setToolTipText(null);
}
};
- for (Component c : comboBox.getComponents())
+ for (Component c : scoreModelsCombo.getComponents())
{
c.addMouseListener(mouseListener);
}
- updateScoreModels(comboBox, tips);
+ updateScoreModels(scoreModelsCombo, tips);
/*
* set the list of tooltips on the combobox's renderer
*/
renderer.setTooltips(tips);
- return comboBox;
+ return scoreModelsCombo;
}
- private void updateScoreModels(JComboBox comboBox, List<String> tips)
+ private void updateScoreModels(JComboBox<String> comboBox,
+ List<String> toolTips)
{
Object curSel = comboBox.getSelectedItem();
- tips.clear();
- DefaultComboBoxModel model = new DefaultComboBoxModel();
+ toolTips.clear();
+ DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
/*
* now we can actually add entries to the combobox,
tooltip = MessageManager.getStringOrReturn("label.score_model_",
sm.getName());
}
- tips.add(tooltip);
+ toolTips.add(tooltip);
}
}
if (selectedIsPresent)
/**
* Open and calculate the selected tree or PCA on 'OK'
*/
- protected void ok_actionPerformed()
+ protected void calculate_actionPerformed()
{
boolean doPCA = pca.isSelected();
String modelName = modelNames.getSelectedItem().toString();
*/
protected void openTreePanel(String modelName, SimilarityParamsI params)
{
+ /*
+ * gui validation shouldn't allow insufficient sequences here, but leave
+ * this check in in case this method gets exposed programmatically in future
+ */
+ AlignViewport viewport = af.getViewport();
+ if (viewport.getSelectionGroup().getSize() < MIN_TREE_SELECTION)
+ {
+ JvOptionPane
+ .showMessageDialog(
+ Desktop.desktop,
+ MessageManager
+ .formatMessage("label.you_need_at_least_n_sequences",
+ MIN_TREE_SELECTION),
+ MessageManager
+ .getString("label.not_enough_sequences"),
+ JvOptionPane.WARNING_MESSAGE);
+ return;
+ }
+
String treeType = neighbourJoining.isSelected() ? TreeBuilder.NEIGHBOUR_JOINING
: TreeBuilder.AVERAGE_DISTANCE;
af.newTreePanel(treeType, modelName, params);
protected void openPcaPanel(String modelName, SimilarityParamsI params)
{
AlignViewport viewport = af.getViewport();
+
+ /*
+ * gui validation shouldn't allow insufficient sequences here, but leave
+ * this check in in case this method gets exposed programmatically in future
+ */
if (((viewport.getSelectionGroup() != null)
- && (viewport.getSelectionGroup().getSize() < 4) && (viewport
+ && (viewport.getSelectionGroup().getSize() < MIN_PCA_SELECTION) && (viewport
.getSelectionGroup().getSize() > 0))
- || (viewport.getAlignment().getHeight() < 4))
+ || (viewport.getAlignment().getHeight() < MIN_PCA_SELECTION))
{
- JvOptionPane
- .showInternalMessageDialog(
- this,
- MessageManager
- .getString("label.principal_component_analysis_must_take_least_four_input_sequences"),
- MessageManager
- .getString("label.sequence_selection_insufficient"),
- JvOptionPane.WARNING_MESSAGE);
+ JvOptionPane.showInternalMessageDialog(this, MessageManager
+ .formatMessage("label.you_need_at_least_n_sequences",
+ MIN_PCA_SELECTION), MessageManager
+ .getString("label.sequence_selection_insufficient"),
+ JvOptionPane.WARNING_MESSAGE);
return;
}
new PCAPanel(af.alignPanel, modelName, params);
}
/**
- * Closes dialog on cancel
- *
- * @param e
+ * Closes dialog on Close button press
*/
- protected void cancel_actionPerformed(ActionEvent e)
+ protected void close_actionPerformed()
{
try
{