001package jmri.jmrix.openlcb.swing; 002 003import javax.swing.JLabel; 004import javax.swing.Timer; 005 006import jmri.jmrix.can.CanListener; 007import jmri.jmrix.can.CanMessage; 008import jmri.jmrix.can.CanReply; 009import jmri.jmrix.can.CanSystemConnectionMemo; 010import jmri.util.ThreadingUtil; 011 012/** 013 * 014 * @author Bob Jacobsen 015 */ 016public class TrafficStatusLabel extends JLabel implements CanListener { 017 018 private static final int INTERVAL = 200; 019 CanSystemConnectionMemo memo; 020 Timer timer; 021 boolean active; 022 023 public TrafficStatusLabel(CanSystemConnectionMemo memo) { 024 super("Active"); 025 this.setEnabled(false); 026 this.memo = memo; 027 this.active = false; 028 029 // set up traffic listener 030 memo.getTrafficController().addCanConsoleListener(this); 031 032 // start the process 033 displayActive(); 034 } 035 036 void traffic() { 037 if (timer != null) { // only null at startup 038 timer.stop(); 039 } 040 active = true; 041 displayActive(); 042 } 043 044 void displayActive() { 045 if (active != isEnabled()) setEnabled(active); // reduce redisplays 046 timer = ThreadingUtil.runOnLayoutDelayed(() -> { active = false; displayActive(); }, INTERVAL); 047 } 048 049 @Override 050 public synchronized void message(CanMessage l) { 051 traffic(); 052 } 053 054 @Override 055 public synchronized void reply(CanReply l) { 056 traffic(); 057 } 058 059 // private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(TrafficStatusLabel.class); 060}