package nodebox.client.port;
import nodebox.node.Port;
import nodebox.ui.Theme;
import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
public class StringControl extends AbstractPortControl implements ActionListener {
private JTextComponent field;
public StringControl(String nodePath, Port port) {
super(nodePath, port);
setLayout(new BorderLayout());
field = createField();
add(field, BorderLayout.CENTER);
setValueForControl(port.getValue());
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
field.setEnabled(enabled);
}
public void setValueForControl(Object v) {
if (v == null) return;
field.setText(v.toString());
}
public void actionPerformed(ActionEvent e) {
commitTextFieldValue();
}
protected void commitTextFieldValue() {
setPortValue(field.getText());
}
protected JTextComponent createField() {
JTextField textField = new JTextField();
textField.putClientProperty("JComponent.sizeVariant", "small");
textField.setFont(Theme.SMALL_BOLD_FONT);
textField.addActionListener(this);
textField.addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent e) {
commitTextFieldValue();
}
});
return textField;
}
}