X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FOptsAndParamsPage.java;h=e0427cc1db362eae25ee395c7ed931d633288fae;hb=57738a1f3c19b1c3a00bd3ac5108f8cd0af32f99;hp=d2f04a19e67751aae87e39e9726e8402cf2738f0;hpb=defbcc5ef50f2287ea40d4a196495ba33b986eb7;p=jalview.git diff --git a/src/jalview/gui/OptsAndParamsPage.java b/src/jalview/gui/OptsAndParamsPage.java index d2f04a1..e0427cc 100644 --- a/src/jalview/gui/OptsAndParamsPage.java +++ b/src/jalview/gui/OptsAndParamsPage.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -20,13 +20,6 @@ */ package jalview.gui; -import jalview.util.MessageManager; -import jalview.ws.params.ArgumentI; -import jalview.ws.params.OptionI; -import jalview.ws.params.ParameterI; -import jalview.ws.params.ValueConstrainI; -import jalview.ws.params.ValueConstrainI.ValueType; - import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; @@ -35,13 +28,14 @@ import java.awt.GridLayout; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.net.URL; import java.util.ArrayList; -import java.util.Hashtable; import java.util.List; import java.util.Map; @@ -54,13 +48,18 @@ import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; -import javax.swing.JSlider; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.border.TitledBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import jalview.util.MessageManager; +import jalview.ws.params.ArgumentI; +import jalview.ws.params.OptionI; +import jalview.ws.params.ParameterI; +import jalview.ws.params.ValueConstrainI; +import jalview.ws.params.ValueConstrainI.ValueType; import net.miginfocom.swing.MigLayout; /** @@ -77,8 +76,8 @@ public class OptsAndParamsPage */ boolean compact = false; - public class OptionBox extends JPanel implements MouseListener, - ActionListener + public class OptionBox extends JPanel + implements MouseListener, ActionListener { JCheckBox enabled = new JCheckBox(); @@ -94,7 +93,7 @@ public class OptsAndParamsPage JLabel optlabel = new JLabel(); - JComboBox val = new JComboBox(); + JComboBox val = new JComboBox<>(); public OptionBox(OptionI opt) { @@ -111,12 +110,12 @@ public class OptsAndParamsPage { hasLink = true; - enabled.setToolTipText( - JvSwingUtils - .wrapTooltip(true, ((desc == null || desc.trim().length() == 0) ? MessageManager.getString("label.opt_and_params_further_details ") - : desc) - + "
") - ); + enabled.setToolTipText(JvSwingUtils.wrapTooltip(true, + ((desc == null || desc.trim().length() == 0) + ? MessageManager.getString( + "label.opt_and_params_further_details") + : desc) + "
")); enabled.addMouseListener(this); } else @@ -124,16 +123,15 @@ public class OptsAndParamsPage if (desc != null && desc.trim().length() > 0) { enabled.setToolTipText( - JvSwingUtils.wrapTooltip(true, opt.getDescription()) - ); + JvSwingUtils.wrapTooltip(true, opt.getDescription())); } } add(enabled, BorderLayout.NORTH); - for (Object str : opt.getPossibleValues()) + for (String str : opt.getPossibleValues()) { - val.addItem((String) str); + val.addItem(str); } - val.setSelectedItem((String) opt.getValue()); + val.setSelectedItem(opt.getValue()); if (opt.getPossibleValues().size() > 1) { setLayout(new GridLayout(1, 2)); @@ -146,6 +144,7 @@ public class OptsAndParamsPage setInitialValue(); } + @Override public void actionPerformed(ActionEvent e) { if (e.getSource() != enabled) @@ -207,36 +206,41 @@ public class OptsAndParamsPage return opt; } + @Override public void mouseClicked(MouseEvent e) { - if (javax.swing.SwingUtilities.isRightMouseButton(e)) + if (e.isPopupTrigger()) // for Windows { showUrlPopUp(this, finfo.toString(), e.getX(), e.getY()); } } + @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } + @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } + @Override public void mousePressed(MouseEvent e) { - // TODO Auto-generated method stub - + if (e.isPopupTrigger()) // Mac + { + showUrlPopUp(this, finfo.toString(), e.getX(), e.getY()); + } } + @Override public void mouseReleased(MouseEvent e) { - // TODO Auto-generated method stub - } public void resetToDefault(boolean setDefaultParams) @@ -266,14 +270,14 @@ public class OptsAndParamsPage } - public class ParamBox extends JPanel implements ChangeListener, - ActionListener, MouseListener + public class ParamBox extends JPanel + implements ChangeListener, ActionListener, MouseListener { boolean adjusting = false; boolean choice = false; - JComboBox choicebox; + JComboBox choicebox; JPanel controlPanel = new JPanel(); @@ -285,7 +289,7 @@ public class OptsAndParamsPage boolean integ = false; - Object lastVal; + String lastVal; ParameterI parameter; @@ -295,7 +299,7 @@ public class OptsAndParamsPage JButton showDesc = new JButton(); - JSlider slider = null; + Slider slider = null; JTextArea string = new JTextArea(); @@ -303,7 +307,8 @@ public class OptsAndParamsPage JTextField valueField = null; - public ParamBox(final OptsParametersContainerI pmlayout, ParameterI parm) + public ParamBox(final OptsParametersContainerI pmlayout, + ParameterI parm) { pmdialogbox = pmlayout; finfo = parm.getFurtherDetails(); @@ -344,21 +349,21 @@ public class OptsAndParamsPage && parm.getDescription().trim().length() > 0) { // Only create description boxes if there actually is a description. - ttipText = (JvSwingUtils - .wrapTooltip(true, parm.getDescription() - + (finfo != null ? "
"+MessageManager.getString("label.opt_and_params_further_detail") - : ""))); + ttipText = (JvSwingUtils.wrapTooltip(true, + parm.getDescription() + (finfo != null ? "
" + + MessageManager.getString( + "label.opt_and_params_further_details") + : ""))); } - JvSwingUtils.mgAddtoLayout(this, ttipText, - new JLabel(parm.getName()), controlPanel, ""); + JvSwingUtils.mgAddtoLayout(this, ttipText, new JLabel(parm.getName()), + controlPanel, ""); updateControls(parm); validate(); } - private void makeExpanderParam(ParameterI parm) + private void makeExpanderParam(final ParameterI parm) { setPreferredSize(new Dimension(PARAM_WIDTH, PARAM_CLOSEDHEIGHT)); setBorder(new TitledBorder(parm.getName())); @@ -390,16 +395,23 @@ public class OptsAndParamsPage // Only create description boxes if there actually is a description. if (finfo != null) { - showDesc.setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.formatMessage("label.opt_and_params_show_brief_desc_image_link", new String[]{linkImageURL.toExternalForm()}))); + showDesc.setToolTipText(JvSwingUtils.wrapTooltip(true, + MessageManager.formatMessage( + "label.opt_and_params_show_brief_desc_image_link", + new String[] + { linkImageURL.toExternalForm() }))); showDesc.addMouseListener(this); } else { - showDesc.setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.getString("label.opt_and_params_show_brief_desc"))); + showDesc.setToolTipText( + JvSwingUtils.wrapTooltip(true, MessageManager.getString( + "label.opt_and_params_show_brief_desc"))); } showDesc.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { descisvisible = !descisvisible; @@ -439,6 +451,10 @@ public class OptsAndParamsPage validate(); } + /** + * Action on input in text field + */ + @Override public void actionPerformed(ActionEvent e) { if (adjusting) @@ -454,24 +470,20 @@ public class OptsAndParamsPage private void checkIfModified() { - Object cstate = updateSliderFromValueField(); - boolean notmod = false; - if (cstate.getClass() == lastVal.getClass()) - { - if (cstate instanceof int[]) - { - notmod = (((int[]) cstate)[0] == ((int[]) lastVal)[0]); - } - else if (cstate instanceof float[]) - { - notmod = (((float[]) cstate)[0] == ((float[]) lastVal)[0]); - } - else if (cstate instanceof String[]) - { - notmod = (((String[]) cstate)[0].equals(((String[]) lastVal)[0])); - } - } - pmdialogbox.argSetModified(this, !notmod); + Object cstate = getCurrentValue(); + boolean modified = !cstate.equals(lastVal); + pmdialogbox.argSetModified(this, modified); + } + + /** + * Answers the current value of the parameter, as text + * + * @return + */ + private String getCurrentValue() + { + return choice ? (String) choicebox.getSelectedItem() + : valueField.getText(); } @Override @@ -514,48 +526,58 @@ public class OptsAndParamsPage lastVal = null; } + @Override public void mouseClicked(MouseEvent e) { - if (javax.swing.SwingUtilities.isRightMouseButton(e)) + if (e.isPopupTrigger()) // for Windows { showUrlPopUp(this, finfo.toString(), e.getX(), e.getY()); } } + @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } + @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } + @Override public void mousePressed(MouseEvent e) { - // TODO Auto-generated method stub - + if (e.isPopupTrigger()) // for Mac + { + showUrlPopUp(this, finfo.toString(), e.getX(), e.getY()); + } } + @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } + /** + * Action on change of slider value + */ + @Override public void stateChanged(ChangeEvent e) { if (!adjusting) { - valueField.setText("" - + ((integ) ? ("" + (int) slider.getValue()) - : ("" + (float) (slider.getValue() / 1000f)))); + float value = slider.getSliderValue(); + valueField.setText(integ ? Integer.toString((int) value) + : Float.toString(value)); checkIfModified(); } - } public void updateControls(ParameterI parm) @@ -566,14 +588,12 @@ public class OptsAndParamsPage { if (choice) { - choicebox = new JComboBox(); + choicebox = new JComboBox<>(); choicebox.addActionListener(this); controlPanel.add(choicebox, BorderLayout.CENTER); } else { - slider = new JSlider(); - slider.addChangeListener(this); valueField = new JTextField(); valueField.addActionListener(this); valueField.addKeyListener(new KeyListener() @@ -601,10 +621,24 @@ public class OptsAndParamsPage { } }); + valueField.addFocusListener(new FocusAdapter() + { + + @Override + public void focusLost(FocusEvent e) + { + actionPerformed(null); + } + + }); valueField.setPreferredSize(new Dimension(60, 25)); + valueField.setText(parm.getValue()); + slider = makeSlider(parm.getValidValue()); + updateSliderFromValueField(); + slider.addChangeListener(this); + controlPanel.add(slider, BorderLayout.WEST); controlPanel.add(valueField, BorderLayout.EAST); - } } @@ -614,8 +648,8 @@ public class OptsAndParamsPage { if (init) { - List vals = parm.getPossibleValues(); - for (Object val : vals) + List vals = parm.getPossibleValues(); + for (String val : vals) { choicebox.addItem(val); } @@ -631,98 +665,102 @@ public class OptsAndParamsPage valueField.setText(parm.getValue()); } } - lastVal = updateSliderFromValueField(); + lastVal = getCurrentValue(); adjusting = false; } - public Object updateSliderFromValueField() + private Slider makeSlider(ValueConstrainI validValue) + { + if (validValue != null) + { + final Number minValue = validValue.getMin(); + final Number maxValue = validValue.getMax(); + if (minValue != null && maxValue != null) + { + return new Slider(minValue.floatValue(), maxValue.floatValue(), + minValue.floatValue()); + } + } + + /* + * otherwise, a nominal slider which will not be visible + */ + return new Slider(0, 100, 50); + } + + public void updateSliderFromValueField() { - int iVal; - float fVal; if (validator != null) { + final Number minValue = validator.getMin(); + final Number maxValue = validator.getMax(); if (integ) { - iVal = 0; + int iVal = 0; try { valueField.setText(valueField.getText().trim()); iVal = Integer.valueOf(valueField.getText()); - if (validator.getMin() != null - && validator.getMin().intValue() > iVal) + if (minValue != null && minValue.intValue() > iVal) { - iVal = validator.getMin().intValue(); + iVal = minValue.intValue(); // TODO: provide visual indication that hard limit was reached for // this parameter } - if (validator.getMax() != null - && validator.getMax().intValue() < iVal) + if (maxValue != null && maxValue.intValue() < iVal) { - iVal = validator.getMax().intValue(); - // TODO: provide visual indication that hard limit was reached for - // this parameter + iVal = maxValue.intValue(); } - } catch (Exception e) + } catch (NumberFormatException e) { + System.err.println(e.toString()); } - ; - // update value field to reflect any bound checking we performed. - valueField.setText("" + iVal); - if (validator.getMin() != null && validator.getMax() != null) + if (minValue != null || maxValue != null) { - slider.getModel().setRangeProperties(iVal, 1, - validator.getMin().intValue(), - validator.getMax().intValue() + 1, true); + valueField.setText(String.valueOf(iVal)); + slider.setSliderValue(iVal); } else { slider.setVisible(false); } - return new int[] - { iVal }; } else { - fVal = 0f; + float fVal = 0f; try { valueField.setText(valueField.getText().trim()); fVal = Float.valueOf(valueField.getText()); - if (validator.getMin() != null - && validator.getMin().floatValue() > fVal) + if (minValue != null && minValue.floatValue() > fVal) { - fVal = validator.getMin().floatValue(); + fVal = minValue.floatValue(); // TODO: provide visual indication that hard limit was reached for // this parameter // update value field to reflect any bound checking we performed. valueField.setText("" + fVal); } - if (validator.getMax() != null - && validator.getMax().floatValue() < fVal) + if (maxValue != null && maxValue.floatValue() < fVal) { - fVal = validator.getMax().floatValue(); + fVal = maxValue.floatValue(); // TODO: provide visual indication that hard limit was reached for // this parameter // update value field to reflect any bound checking we performed. valueField.setText("" + fVal); } - } catch (Exception e) + } catch (NumberFormatException e) { + System.err.println(e.toString()); } - ; - if (validator.getMin() != null && validator.getMax() != null) + if (minValue != null && maxValue != null) { - slider.getModel().setRangeProperties((int) (fVal * 1000f), 1, - (int) (validator.getMin().floatValue() * 1000f), - 1 + (int) (validator.getMax().floatValue() * 1000f), - true); + slider.setSliderModel(minValue.floatValue(), + maxValue.floatValue(), fVal); } else { slider.setVisible(false); } - return new float[] - { fVal }; } } else @@ -730,16 +768,8 @@ public class OptsAndParamsPage if (!choice) { slider.setVisible(false); - return new String[] - { valueField.getText().trim() }; - } - else - { - return new String[] - { (String) choicebox.getSelectedItem() }; } } - } } @@ -766,8 +796,8 @@ public class OptsAndParamsPage { JPopupMenu mnu = new JPopupMenu(); - JMenuItem mitem = new JMenuItem(MessageManager.formatMessage( - "label.view_params", new String[] + JMenuItem mitem = new JMenuItem( + MessageManager.formatMessage("label.view_params", new String[] { finfo })); mitem.addActionListener(new ActionListener() { @@ -785,9 +815,9 @@ public class OptsAndParamsPage URL linkImageURL = getClass().getResource("/images/link.gif"); - Map optSet = new java.util.LinkedHashMap(); + Map optSet = new java.util.LinkedHashMap<>(); - Map paramSet = new java.util.LinkedHashMap(); + Map paramSet = new java.util.LinkedHashMap<>(); public Map getOptSet() { @@ -854,7 +884,9 @@ public class OptsAndParamsPage } else { - throw new Error(MessageManager.formatMessage("error.invalid_value_for_option", new String[]{string,option.getName()})); + throw new Error(MessageManager.formatMessage( + "error.invalid_value_for_option", new String[] + { string, option.getName() })); } } @@ -886,7 +918,7 @@ public class OptsAndParamsPage */ public List getCurrentSettings() { - List argSet = new ArrayList(); + List argSet = new ArrayList<>(); for (OptionBox opts : getOptSet().values()) { OptionI opt = opts.getOptionIfEnabled();