001package jmri.jmrix.can.cbus.swing; 002 003import java.awt.event.ActionEvent; 004import javax.swing.*; 005import javax.swing.event.ChangeEvent; 006 007import jmri.jmrix.can.cbus.swing.eventrequestmonitor.CbusEventRequestTablePane; 008import jmri.jmrix.can.cbus.swing.eventtable.CbusEventTablePane; 009import jmri.util.swing.JSpinnerUtil; 010 011/** 012 * Creates Panel for displaying New Event JSpinners and Button. 013 * @author Steve Young Copyright (C) 2018, 2020 014 */ 015public class CbusNewEventPane extends JPanel { 016 017 private JSpinner newnodenumberSpinner; 018 private JSpinner newevnumberSpinner; 019 private JButton newevbutton; 020 021 private final CbusEventTablePane _evPanel; 022 private final CbusEventRequestTablePane _evReqPanel; 023 024 private jmri.UserPreferencesManager p; 025 private static final String EVENTNUM_PREF = "EventNum"; // NOI18N 026 private static final String NODENUM_PREF = "NodeNum"; // NOI18N 027 028 public CbusNewEventPane(CbusEventTablePane evPanel){ 029 super(); 030 _evPanel = evPanel; 031 _evReqPanel = null; 032 init(); 033 034 } 035 036 public CbusNewEventPane( CbusEventRequestTablePane evReqPanel ){ 037 super(); 038 _evPanel = null; 039 _evReqPanel = evReqPanel; 040 init(); 041 } 042 043 final void init() { 044 045 p = jmri.InstanceManager.getDefault(jmri.UserPreferencesManager.class); 046 int nodenum = 0; // default node 0 047 int eventnum = 1; // default event 1 048 Object nn = p.getProperty(this.getClass().getName(), NODENUM_PREF); 049 if ( nn!=null ){ 050 nodenum = (Integer) nn; 051 } 052 Object en = p.getProperty(this.getClass().getName(), EVENTNUM_PREF); 053 if ( en!=null ){ 054 eventnum = (Integer) en; 055 } 056 057 newnodenumberSpinner = new JSpinner(new SpinnerNumberModel(nodenum, 0, 65535, 1)); 058 newevnumberSpinner = new JSpinner(new SpinnerNumberModel(eventnum, 0, 65535, 1)); 059 060 this.setBorder(BorderFactory.createTitledBorder( 061 BorderFactory.createEtchedBorder(), (Bundle.getMessage("NewEvent")))); 062 063 newevbutton = new JButton((Bundle.getMessage("NewEvent"))); 064 newevbutton.addActionListener((ActionEvent e) -> newEvent()); 065 066 this.add(newSpinnerPanel(newnodenumberSpinner, 067 Bundle.getMessage("CbusNode"), Bundle.getMessage("NewNodeTip"))); 068 this.add(newSpinnerPanel(newevnumberSpinner, 069 Bundle.getMessage("CbusEvent"), null)); 070 this.add(newevbutton); 071 072 } 073 074 private JPanel newSpinnerPanel( final JSpinner spinner, String label, String tip ){ 075 JPanel newnode = new JPanel(); 076 newnode.add(new JLabel(label)); 077 JSpinnerUtil.setCommitsOnValidEdit(spinner, true); 078 spinner.addChangeListener((ChangeEvent e) -> eventChanged() ); 079 newnode.add(spinner); 080 newnode.setToolTipText(tip); 081 spinner.setToolTipText(tip); 082 return newnode; 083 } 084 085 private void eventChanged(){ 086 if (_evPanel!=null){ 087 _evPanel.cbEvTable.tableChanged(null); 088 } 089 else if (_evReqPanel!=null){ 090 _evReqPanel.tableChanged(null); 091 } 092 p.setProperty(this.getClass().getName(), NODENUM_PREF, newnodenumberSpinner.getValue()); 093 p.setProperty(this.getClass().getName(), EVENTNUM_PREF, newevnumberSpinner.getValue()); 094 } 095 096 public void setNewButtonActive(boolean newState){ 097 newevbutton.setEnabled(newState); 098 } 099 100 public int getNn(){ 101 return (Integer) newnodenumberSpinner.getValue(); 102 } 103 104 public int getEn(){ 105 return (Integer) newevnumberSpinner.getValue(); 106 } 107 108 private void newEvent(){ 109 if (_evPanel!=null){ 110 _evPanel.cbEvTable.addEvent(getNn(),getEn()); 111 } 112 else if (_evReqPanel!=null){ 113 _evReqPanel.addEvent(getNn(),getEn()); 114 } 115 } 116 117 // private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(CbusNewEventPane.class); 118}