/* Copyright (c) 2010, Carl Burch. License information is located in the
* com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */
package com.cburch.logisim.gui.opts;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ComboBoxModel;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.cburch.logisim.data.Attribute;
import com.cburch.logisim.data.AttributeEvent;
import com.cburch.logisim.data.AttributeListener;
import com.cburch.logisim.data.AttributeSet;
import com.cburch.logisim.file.Options;
import com.cburch.logisim.util.TableLayout;
class SimulateOptions extends OptionsPanel {
private class MyListener implements ActionListener, AttributeListener {
public void actionPerformed(ActionEvent event) {
Object source = event.getSource();
if (source == simLimit) {
Integer opt = (Integer) simLimit.getSelectedItem();
if (opt != null) {
AttributeSet attrs = getOptions().getAttributeSet();
getProject().doAction(OptionsActions.setAttribute(attrs,
Options.sim_limit_attr, opt));
}
} else if (source == simRandomness) {
AttributeSet attrs = getOptions().getAttributeSet();
Object val = simRandomness.isSelected() ? Options.sim_rand_dflt
: Integer.valueOf(0);
getProject().doAction(OptionsActions.setAttribute(attrs,
Options.sim_rand_attr, val));
} else if (source == gateUndefined) {
ComboOption opt = (ComboOption) gateUndefined.getSelectedItem();
if (opt != null) {
AttributeSet attrs = getOptions().getAttributeSet();
getProject().doAction(OptionsActions.setAttribute(attrs,
Options.ATTR_GATE_UNDEFINED, opt.getValue()));
}
}
}
public void attributeListChanged(AttributeEvent e) { }
public void attributeValueChanged(AttributeEvent e) {
Attribute<?> attr = e.getAttribute();
Object val = e.getValue();
if (attr == Options.sim_limit_attr) {
loadSimLimit((Integer) val);
} else if (attr == Options.sim_rand_attr) {
loadSimRandomness((Integer) val);
}
}
private void loadSimLimit(Integer val) {
int value = val.intValue();
ComboBoxModel model = simLimit.getModel();
for (int i = 0; i < model.getSize(); i++) {
Integer opt = (Integer) model.getElementAt(i);
if (opt.intValue() == value) {
simLimit.setSelectedItem(opt);
}
}
}
private void loadGateUndefined(Object val) {
ComboOption.setSelected(gateUndefined, val);
}
private void loadSimRandomness(Integer val) {
simRandomness.setSelected(val.intValue() > 0);
}
}
private MyListener myListener = new MyListener();
private JLabel simLimitLabel = new JLabel();
private JComboBox simLimit = new JComboBox(new Integer[] {
Integer.valueOf(200),
Integer.valueOf(500),
Integer.valueOf(1000),
Integer.valueOf(2000),
Integer.valueOf(5000),
Integer.valueOf(10000),
Integer.valueOf(20000),
Integer.valueOf(50000),
});
private JCheckBox simRandomness = new JCheckBox();
private JLabel gateUndefinedLabel = new JLabel();
private JComboBox gateUndefined = new JComboBox(new Object[] {
new ComboOption(Options.GATE_UNDEFINED_IGNORE),
new ComboOption(Options.GATE_UNDEFINED_ERROR)
});
public SimulateOptions(OptionsFrame window) {
super(window);
JPanel simLimitPanel = new JPanel();
simLimitPanel.add(simLimitLabel);
simLimitPanel.add(simLimit);
simLimit.addActionListener(myListener);
JPanel gateUndefinedPanel = new JPanel();
gateUndefinedPanel.add(gateUndefinedLabel);
gateUndefinedPanel.add(gateUndefined);
gateUndefined.addActionListener(myListener);
simRandomness.addActionListener(myListener);
setLayout(new TableLayout(1));
add(simLimitPanel);
add(gateUndefinedPanel);
add(simRandomness);
window.getOptions().getAttributeSet().addAttributeListener(myListener);
AttributeSet attrs = getOptions().getAttributeSet();
myListener.loadSimLimit(attrs.getValue(Options.sim_limit_attr));
myListener.loadGateUndefined(attrs.getValue(Options.ATTR_GATE_UNDEFINED));
myListener.loadSimRandomness(attrs.getValue(Options.sim_rand_attr));
}
@Override
public String getTitle() {
return Strings.get("simulateTitle");
}
@Override
public String getHelpText() {
return Strings.get("simulateHelp");
}
@Override
public void localeChanged() {
simLimitLabel.setText(Strings.get("simulateLimit"));
gateUndefinedLabel.setText(Strings.get("gateUndefined"));
simRandomness.setText(Strings.get("simulateRandomness"));
}
}