001package jmri.jmrix.tams.swing.monitor;
002
003import javax.swing.JCheckBox;
004import javax.swing.JPanel;
005import jmri.jmrix.tams.TamsListener;
006import jmri.jmrix.tams.TamsMessage;
007import jmri.jmrix.tams.TamsReply;
008import jmri.jmrix.tams.TamsSystemConnectionMemo;
009import jmri.jmrix.tams.swing.TamsPanelInterface;
010
011/**
012 * Swing action to create and register a MonFrame object.
013 *
014 * Based on work by Bob Jacobsen
015 *
016 * @author Kevin Dickerson Copyright (C) 2012
017 */
018public class TamsMonPane extends jmri.jmrix.AbstractMonPane implements TamsListener, TamsPanelInterface {
019
020    private TamsMessage tm; // Keeping a local copy of the latest TamsMessage for helping with decoding
021
022    public TamsMonPane() {
023        super();
024    }
025
026    @Override
027    public String getHelpTarget() {
028        return null;
029    }
030
031    @Override
032    public String getTitle() {
033        return Bundle.getMessage("CommandMonitor");
034    }
035
036    @Override
037    public void dispose() {
038        // disconnect from the TamsTrafficController
039        memo.getTrafficController().removeTamsListener(this);
040        // and unwind swing
041        super.dispose();
042    }
043
044    @Override
045    public void init() {
046    }
047
048    TamsSystemConnectionMemo memo;
049
050    JCheckBox disablePollingCheckBox = new JCheckBox();
051
052    @Override
053    public void initContext(Object context) {
054        if (context instanceof TamsSystemConnectionMemo) {
055            initComponents((TamsSystemConnectionMemo) context);
056        }
057    }
058
059    @Override
060    public void initComponents(TamsSystemConnectionMemo memo) {
061        this.memo = memo;
062        // connect to the TamsTrafficController
063        memo.getTrafficController().addTamsListener(this);
064        disablePollingCheckBox.setSelected(memo.getTrafficController().getPollQueueDisabled());
065    }
066
067    @Override
068    public void initComponents() {
069        super.initComponents();
070        JPanel check = new JPanel();
071        disablePollingCheckBox.setText(Bundle.getMessage("DisablePollingBoxLabel"));
072        disablePollingCheckBox.setVisible(true);
073        disablePollingCheckBox.setToolTipText(Bundle.getMessage("DisablePollingToolTip"));
074        disablePollingCheckBox.addActionListener(new java.awt.event.ActionListener() {
075            @Override
076            public void actionPerformed(java.awt.event.ActionEvent e) {
077                if (memo != null) {
078                    memo.getTrafficController().setPollQueueDisabled(disablePollingCheckBox.isSelected());
079                }
080            }
081        });
082        check.add(disablePollingCheckBox);
083        add(check);
084    }
085
086    @Override
087    public synchronized void message(TamsMessage tm) {  // receive a message and log it
088        if (tm.isBinary()) {
089            logMessage("Binary cmd: ", tm);
090        } else {
091            logMessage("ASCII cmd: ", tm);
092        }
093    }
094
095    @Override
096    public synchronized void reply(TamsReply l) {  // receive a reply message and log it
097        String raw = "";
098        for (int i = 0; i < l.getNumDataElements(); i++) {
099            if (i > 0) {
100                raw += " ";
101            }
102            raw = jmri.util.StringUtil.appendTwoHexFromInt(l.getElement(i) & 0xFF, raw);
103        }
104        if (l.isUnsolicited()) {
105            logMessage("msg: ", l);
106        } else {
107            if (tm.isBinary()){
108                logMessage("Binary rep: ", l);
109            } else {
110                logMessage("ASCII rep: " , l);
111            }
112        }
113    }
114
115}