001package jmri.jmrix.can.cbus.swing.simulator;
002
003import java.awt.event.ActionEvent;
004import java.util.ArrayList;
005
006import javax.swing.*;
007import javax.swing.event.ChangeEvent;
008
009import jmri.jmrix.can.cbus.simulator.CbusEventResponder;
010import jmri.util.swing.ComboBoxToolTipRenderer;
011import jmri.util.swing.JSpinnerUtil;
012
013/**
014 * Pane for viewing and setting simulated network objects.
015 * <p>
016 * Methods are subject to change and should not be relied on at present.
017 *
018 * @author Steve Young Copyright (C) 2018 2019
019 * @since 4.15.2
020 */
021public class EvResponderPane extends JPanel {
022
023    private final CbusEventResponder _evr;
024
025    public EvResponderPane( CbusEventResponder evr) {
026        super();
027
028        _evr = evr;
029        if ( _evr != null ){
030            init();
031        }
032
033    }
034
035    private void init() {
036        
037        int _mode = _evr.getMode();
038        
039        JLabel _nodeLabel = new JLabel("<html><h3>" + Bundle.getMessage("CbusNode") + " : </h3></html>");
040        _nodeLabel.setToolTipText(Bundle.getMessage("simNodeSelect"));
041    
042        JComboBox<String> _selectMode = new JComboBox<>();
043        _selectMode.setEditable(false);
044        
045        ComboBoxToolTipRenderer renderer = new ComboBoxToolTipRenderer();
046        _selectMode.setRenderer(renderer);
047    
048        ArrayList<String> tooltips = new ArrayList<>();
049        String getSelected="";
050
051        for (int i = 0; i < _evr.evModes.size(); i++) {
052            String option = _evr.evModes.get(i);
053            _selectMode.addItem(option);
054            tooltips.add(_evr.evModesTip.get(i));
055            if ( i == _mode ){
056                getSelected = option;
057            }
058        }
059
060        _selectMode.setSelectedItem(getSelected);
061        _selectMode.addActionListener ((ActionEvent e) -> {
062            String chosen = (String)_selectMode.getSelectedItem();
063            
064            for (int i = 0; i < _evr.evModes.size(); i++) {
065                String option = _evr.evModes.get(i);
066                if (option.equals(chosen)) {
067                    log.debug("chosen {} {}",i,chosen);
068                    _evr.setMode(i);
069                }
070            }
071        });
072        renderer.setTooltips(tooltips);
073
074        JSpinner _spinner = new JSpinner(new SpinnerNumberModel(_evr.getNode(), -1, 65535, 1));
075        JSpinner.NumberEditor editor = new JSpinner.NumberEditor(_spinner, "#");
076        _spinner.setEditor(editor);
077        JSpinnerUtil.setCommitsOnValidEdit(_spinner, true);
078        _spinner.addChangeListener((ChangeEvent e) -> {
079            int minmax = (Integer) _spinner.getValue();
080            log.debug("value {}",minmax);
081            _evr.setNode(minmax);
082        });
083        _spinner.setToolTipText(Bundle.getMessage("simNodeSelect"));
084
085        DirectionPane dp = new DirectionPane(_evr);
086
087        JPanel topPane = new JPanel();
088        topPane.add(_selectMode);
089        topPane.add(_nodeLabel);
090        topPane.add(_spinner);
091
092        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
093        setBorder(BorderFactory.createEtchedBorder());
094
095        add(topPane);
096        add(dp);
097
098    }
099
100    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(EvResponderPane.class);
101
102}