public class OptionBox extends JPanel
implements MouseListener, ActionListener
{
- JCheckBox enabled = new JCheckBox();
+ JCheckBox enabled;
final URL finfo;
OptionI option;
- JLabel optlabel = new JLabel();
-
- JComboBox<String> val = new JComboBox<>();
+ JComboBox<String> val;
public OptionBox(OptionI opt)
{
option = opt;
setLayout(new FlowLayout(FlowLayout.LEFT));
+ enabled = new JCheckBox();
enabled.setSelected(opt.isRequired()); // TODO: lock required options
enabled.setFont(new Font("Verdana", Font.PLAIN, 11));
enabled.setText("");
}
}
add(enabled);
+
+ // todo combo or radio buttons?
+ val = new JComboBox<>();
for (String str : opt.getPossibleValues())
{
val.addItem(str);
boolean isIntegerParameter;
+ boolean isStringParameter;
+
boolean adjusting;
JComboBox<String> choicebox;
{
ValueType type = validator.getType();
isIntegerParameter = type == ValueType.Integer;
+ isStringParameter = type == ValueType.String;
/*
* ensure slider has an integer range corresponding to
* the min-max range of the parameter
*/
- if (validator.getMin() != null && !isIntegerParameter)
+ if (validator.getMin() != null && validator.getMax() != null
+ // && !isIntegerParameter
+ && !isStringParameter)
{
double min = validator.getMin().doubleValue();
double max = validator.getMax().doubleValue();
// todo scaleMin, scaleMax could also be final fields
}
}
- else
- {
- isChoiceParameter = parameter.getPossibleValues() != null;
- }
+
+ List<String> possibleValues = parameter.getPossibleValues();
+ isChoiceParameter = possibleValues != null
+ && !possibleValues.isEmpty();
if (compact)
{
*/
private void checkIfModified()
{
- Object newValue = updateSliderFromValueField();
- boolean modified = true;
- if (newValue.getClass() == lastVal.getClass())
+ if (!adjusting)
{
- modified = !newValue.equals(lastVal);
+ try
+ {
+ adjusting = true;
+ Object newValue = updateSliderFromValueField();
+ boolean modified = true;
+ if (newValue.getClass() == lastVal.getClass())
+ {
+ modified = !newValue.equals(lastVal);
+ }
+ pmdialogbox.argSetModified(this, modified);
+ } finally
+ {
+ adjusting = false;
+ }
}
- pmdialogbox.argSetModified(this, modified);
}
@Override
@Override
public void stateChanged(ChangeEvent e)
{
- if (!adjusting)
+ if (adjusting)
{
+ return;
+ }
+ try
+ {
+ adjusting = true;
if (!isLogarithmicParameter)
{
/*
valueField.setText(formatDouble(value));
}
checkIfModified();
+ } finally
+ {
+ adjusting = false;
}
}
@Override
public void keyReleased(KeyEvent e)
{
- if (e.isActionKey())
+ int keyCode = e.getKeyCode();
+ if (e.isActionKey() && keyCode != KeyEvent.VK_LEFT
+ && keyCode != KeyEvent.VK_RIGHT)
{
if (valueField.getText().trim().length() > 0)
{
*/
Object updateSliderFromValueField()
{
- if (validator == null)
+ if (validator == null || isStringParameter)
{
if (isChoiceParameter)
{