From 5dfd1bdf67e6e0c916d22e67d498c0e956917c21 Mon Sep 17 00:00:00 2001 From: jprocter Date: Mon, 29 Aug 2011 15:41:22 +0100 Subject: [PATCH] JAL-633, JAL-591 - refactored ArgumentI.getValue from jabaws .getDefaultValue Introduced 'compact' parameter display mode and more refactoring --- src/jalview/gui/OptsAndParamsPage.java | 285 +++++++++++++++++++++++--------- src/jalview/gui/WsJobParameters.java | 23 +-- 2 files changed, 211 insertions(+), 97 deletions(-) diff --git a/src/jalview/gui/OptsAndParamsPage.java b/src/jalview/gui/OptsAndParamsPage.java index f0fd3a7..e4782a0 100644 --- a/src/jalview/gui/OptsAndParamsPage.java +++ b/src/jalview/gui/OptsAndParamsPage.java @@ -1,22 +1,25 @@ package jalview.gui; +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.Container; import java.awt.Dimension; -import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +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; @@ -37,15 +40,22 @@ import javax.swing.border.TitledBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import compbio.metadata.ValueConstrain.Type; +import net.miginfocom.swing.MigLayout; /** - * GUI generator/manager for options and parameters. Originally abstracted from the WsJobParameters dialog box. - * @author jprocter - * + * GUI generator/manager for options and parameters. Originally abstracted from + * the WsJobParameters dialog box. + * + * @author jprocter + * */ public class OptsAndParamsPage { + /** + * compact or verbose style parameters + */ + boolean compact = false; + public class OptionBox extends JPanel implements MouseListener, ActionListener { @@ -75,20 +85,27 @@ public class OptsAndParamsPage enabled.setText(opt.getName()); enabled.addActionListener(this); finfo = option.getFurtherDetails(); + String desc = opt.getDescription(); if (finfo != null) { hasLink = true; + enabled.setToolTipText("" - + JvSwingUtils.wrapTooltip(opt.getDescription() - + "
") + + JvSwingUtils + .wrapTooltip(((desc == null) ? "see further details by right-clicking" + : desc) + + "
") + ""); enabled.addMouseListener(this); } else { - enabled.setToolTipText("" - + JvSwingUtils.wrapTooltip(opt.getDescription()) - + ""); + if (desc != null) + { + enabled.setToolTipText("" + + JvSwingUtils.wrapTooltip(opt.getDescription()) + + ""); + } } add(enabled, BorderLayout.NORTH); if (opt.getPossibleValues().size() > 1) @@ -98,7 +115,7 @@ public class OptsAndParamsPage { val.addItem((String) str); } - val.setSelectedItem((String) opt.getDefaultValue()); + val.setSelectedItem((String) opt.getValue()); val.addActionListener(this); add(val, BorderLayout.SOUTH); } @@ -129,8 +146,8 @@ public class OptsAndParamsPage else { // compare against default service setting - notmod &= option.getDefaultValue() == null - || option.getDefaultValue().equals(val.getSelectedItem()); + notmod &= option.getValue() == null + || option.getValue().equals(val.getSelectedItem()); } } else @@ -150,7 +167,7 @@ public class OptsAndParamsPage if (val.getSelectedItem() != null) { - opt.setDefaultValue((String) val.getSelectedItem()); + opt.setValue((String) val.getSelectedItem()); } return opt; } @@ -193,7 +210,7 @@ public class OptsAndParamsPage if (option.isRequired()) { // Apply default value - selectOption(option, option.getDefaultValue()); + selectOption(option, option.getValue()); } } @@ -207,7 +224,7 @@ public class OptsAndParamsPage } else { - initVal = (initEnabled) ? option.getDefaultValue() : null; + initVal = (initEnabled) ? option.getValue() : null; } } @@ -253,6 +270,59 @@ public class OptsAndParamsPage public ParamBox(final OptsParametersContainerI pmlayout, ParameterI parm) { pmdialogbox = pmlayout; + finfo = parm.getFurtherDetails(); + validator = parm.getValidValue(); + parameter = parm; + if (validator != null) + { + integ = validator.getType() == ValueType.Integer; + } + else + { + if (parameter.getPossibleValues() != null) + { + choice = true; + } + } + + if (!compact) + { + makeExpanderParam(parm); + } + else + { + makeCompactParam(parm); + + } + } + + private void makeCompactParam(ParameterI parm) + { + setLayout(new MigLayout("","[][grow]")); + + String ttipText=null; + + controlPanel.setLayout(new BorderLayout()); + + if (parm.getDescription() != null + && parm.getDescription().trim().length() > 0) + { + // Only create description boxes if there actually is a description. + ttipText = ("" + + JvSwingUtils + .wrapTooltip(parm.getDescription()+(finfo!=null ?"
Right click for further information.":"")) + + ""); + } + + JvSwingUtils.mgAddtoLayout(this, ttipText, new JLabel(parm.getName()),controlPanel, ""); + updateControls(parm); + validate(); + } + + private void makeExpanderParam(ParameterI parm) + { setPreferredSize(new Dimension(PARAM_WIDTH, PARAM_CLOSEDHEIGHT)); setBorder(new TitledBorder(parm.getName())); setLayout(null); @@ -263,62 +333,68 @@ public class OptsAndParamsPage string.setEditable(false); descPanel.getViewport().setView(string); - + descPanel.setVisible(false); - - final ParamBox me = this; - finfo = parm.getFurtherDetails(); - if (finfo != null) - { - showDesc.setToolTipText("" - + JvSwingUtils - .wrapTooltip("Click to show brief description
Right click for further information.") - + ""); - showDesc.addMouseListener(this); - } - else - { - showDesc.setToolTipText("" - + JvSwingUtils - .wrapTooltip("Click to show brief description.") - + ""); - } - showDesc.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - descisvisible = !descisvisible; - descPanel.setVisible(descisvisible); - descPanel.getVerticalScrollBar().setValue(0); - me.setPreferredSize(new Dimension(PARAM_WIDTH, - (descisvisible) ? PARAM_HEIGHT : PARAM_CLOSEDHEIGHT)); - me.validate(); - pmlayout.refreshParamLayout(); - } - }); - string.setWrapStyleWord(true); - string.setLineWrap(true); - string.setColumns(32); - string.setText(parm.getDescription()); JPanel firstrow = new JPanel(); firstrow.setLayout(null); controlPanel.setLayout(new BorderLayout()); controlPanel.setBounds(new Rectangle(39, 10, PARAM_WIDTH - 70, PARAM_CLOSEDHEIGHT - 50)); - showDesc.setBounds(new Rectangle(10, 10, 16, 16)); - firstrow.add(showDesc); firstrow.add(controlPanel); firstrow.setBounds(new Rectangle(10, 20, PARAM_WIDTH - 30, PARAM_CLOSEDHEIGHT - 30)); + + final ParamBox me = this; + + if (parm.getDescription() != null + && parm.getDescription().trim().length() > 0) + { + // Only create description boxes if there actually is a description. + if (finfo != null) + { + showDesc.setToolTipText("" + + JvSwingUtils + .wrapTooltip("Click to show brief description
Right click for further information.") + + ""); + showDesc.addMouseListener(this); + } + else + { + showDesc.setToolTipText("" + + JvSwingUtils + .wrapTooltip("Click to show brief description.") + + ""); + } + showDesc.addActionListener(new ActionListener() + { + + public void actionPerformed(ActionEvent e) + { + descisvisible = !descisvisible; + descPanel.setVisible(descisvisible); + descPanel.getVerticalScrollBar().setValue(0); + me.setPreferredSize(new Dimension(PARAM_WIDTH, + (descisvisible) ? PARAM_HEIGHT : PARAM_CLOSEDHEIGHT)); + me.validate(); + pmdialogbox.refreshParamLayout(); + } + }); + string.setWrapStyleWord(true); + string.setLineWrap(true); + string.setColumns(32); + string.setText(parm.getDescription()); + showDesc.setBounds(new Rectangle(10, 10, 16, 16)); + firstrow.add(showDesc); + } add(firstrow); validator = parm.getValidValue(); parameter = parm; if (validator != null) { - integ = validator.getType() == Type.Integer; + integ = validator.getType() == ValueType.Integer; } else { @@ -370,15 +446,18 @@ public class OptsAndParamsPage } @Override - public int getBaseline(int width, int height) { - return 0; + public int getBaseline(int width, int height) + { + return 0; } - // from http://stackoverflow.com/questions/2743177/top-alignment-for-flowlayout + // from + // http://stackoverflow.com/questions/2743177/top-alignment-for-flowlayout // helpful hint of using the Java 1.6 alignBaseLine property of FlowLayout @Override - public Component.BaselineResizeBehavior getBaselineResizeBehavior() { - return Component.BaselineResizeBehavior.CONSTANT_ASCENT; + public Component.BaselineResizeBehavior getBaselineResizeBehavior() + { + return Component.BaselineResizeBehavior.CONSTANT_ASCENT; } public int getBoxHeight() @@ -391,11 +470,11 @@ public class OptsAndParamsPage ParameterI prm = parameter.copy(); if (choice) { - prm.setDefaultValue((String) choicebox.getSelectedItem()); + prm.setValue((String) choicebox.getSelectedItem()); } else { - prm.setDefaultValue(valueField.getText()); + prm.setValue(valueField.getText()); } return prm; } @@ -449,6 +528,7 @@ public class OptsAndParamsPage } } + public void updateControls(ParameterI parm) { adjusting = true; @@ -467,6 +547,28 @@ public class OptsAndParamsPage slider.addChangeListener(this); valueField = new JTextField(); valueField.addActionListener(this); + valueField.addKeyListener(new KeyListener() + { + + @Override + public void keyTyped(KeyEvent e) + { + } + + @Override + public void keyReleased(KeyEvent e) + { + if (valueField.getText().trim().length()>0) + { + actionPerformed(null); + } + } + + @Override + public void keyPressed(KeyEvent e) + { + } + }); valueField.setPreferredSize(new Dimension(60, 25)); controlPanel.add(slider, BorderLayout.WEST); controlPanel.add(valueField, BorderLayout.EAST); @@ -487,14 +589,14 @@ public class OptsAndParamsPage } } - if (parm.getDefaultValue() != null) + if (parm.getValue() != null) { - choicebox.setSelectedItem(parm.getDefaultValue()); + choicebox.setSelectedItem(parm.getValue()); } } else { - valueField.setText(parm.getDefaultValue()); + valueField.setText(parm.getValue()); } } lastVal = updateSliderFromValueField(); @@ -601,14 +703,20 @@ public class OptsAndParamsPage } } - static final int PARAM_WIDTH = 340; + public static final int PARAM_WIDTH = 340; + + public static final int PARAM_HEIGHT = 150; - private static final int PARAM_HEIGHT = 150; + public static final int PARAM_CLOSEDHEIGHT = 80; - static final int PARAM_CLOSEDHEIGHT = 80; - public OptsAndParamsPage(OptsParametersContainerI wsJobParameters) + public OptsAndParamsPage(OptsParametersContainerI paramContainer) + { + this(paramContainer,false); + } + public OptsAndParamsPage(OptsParametersContainerI paramContainer, boolean compact) { - poparent = wsJobParameters; + poparent = paramContainer; + this.compact=compact; } public static void showUrlPopUp(JComponent invoker, final String finfo, @@ -631,7 +739,6 @@ public class OptsAndParamsPage mnu.show(invoker, x, y); } - URL linkImageURL = getClass().getResource("/images/link.gif"); Map optSet = new Hashtable(); @@ -658,7 +765,6 @@ public class OptsAndParamsPage this.paramSet = paramSet; } - OptsParametersContainerI poparent; OptionBox addOption(OptionI opt) @@ -680,7 +786,7 @@ public class OptsAndParamsPage { pb = new ParamBox(poparent, arg); paramSet.put(arg.getName(), pb); -// paramList.add(pb); + // paramList.add(pb); } pb.init(); // take the defaults from the parameter @@ -729,5 +835,32 @@ public class OptsAndParamsPage } + /** + * recover options and parameters from GUI + * + * @return + */ + public List getCurrentSettings() + { + List argSet = new ArrayList(); + for (OptionBox opts : getOptSet().values()) + { + OptionI opt = opts.getOptionIfEnabled(); + if (opt != null) + { + argSet.add(opt); + } + } + for (ParamBox parambox : getParamSet().values()) + { + ParameterI parm = parambox.getParameter(); + if (parm != null) + { + argSet.add(parm); + } + } + + return argSet; + } } diff --git a/src/jalview/gui/WsJobParameters.java b/src/jalview/gui/WsJobParameters.java index 2529de9..ca5e8b1 100644 --- a/src/jalview/gui/WsJobParameters.java +++ b/src/jalview/gui/WsJobParameters.java @@ -637,7 +637,7 @@ public class WsJobParameters extends JPanel implements ItemListener, // System.out.println("Setting option " // + System.identityHashCode(arg) + ":" + arg.getName() // + " with " + arg.getDefaultValue()); - opanp.selectOption((OptionI) arg, arg.getDefaultValue()); + opanp.selectOption((OptionI) arg, arg.getValue()); } } @@ -1073,26 +1073,7 @@ public class WsJobParameters extends JPanel implements ItemListener, public List getJobParams() { - List argSet = new ArrayList(); - // recover options and parameters from GUI - for (OptionBox opts : opanp.getOptSet().values()) - { - OptionI opt = opts.getOptionIfEnabled(); - if (opt != null) - { - argSet.add(opt); - } - } - for (ParamBox parambox : opanp.getParamSet().values()) - { - ParameterI parm = parambox.getParameter(); - if (parm != null) - { - argSet.add(parm); - } - } - - return argSet; + return opanp.getCurrentSettings(); } String lastParmSet = null; -- 1.7.10.2