package qls.gui.widget.input; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JComboBox; import javax.swing.JComponent; import ql.gui.DefaultComponent; import ql.value.BooleanValue; import ql.value.StringValue; import qls.ast.statement.widget.styling.StyleProperties; import qls.gui.widget.InputWidget; import qls.gui.widget.WidgetStylizer; public class Dropdown extends DefaultComponent implements InputWidget<BooleanValue>, ActionListener { private WidgetStylizer stylizer; private JComboBox<String> comboBox; private String[] labels; public Dropdown(StringValue trueValue, StringValue falseValue) { stylizer = new WidgetStylizer(); labels = new String[]{trueValue.getPrimitive(), falseValue.getPrimitive()}; comboBox = new JComboBox<String>(labels); comboBox.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { handleChange(getValue(), this); } @Override public void disable() { comboBox.setEnabled(false); } @Override public void setValue(BooleanValue value) { comboBox.setSelectedItem(value.toString()); } @Override public BooleanValue getValue() { switch (comboBox.getSelectedIndex()) { case 0 : return new BooleanValue(true); default : return new BooleanValue(false); } } @Override public void updateComponent() { comboBox.revalidate(); comboBox.repaint(); } @Override public JComponent getComponent() { return comboBox; } @Override public void setStyle(StyleProperties properties) { stylizer.setStyle(comboBox, properties); } }