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}