001package jmri.jmrix.sprog.update; 002 003import jmri.jmrix.sprog.SprogSystemConnectionMemo; 004import jmri.util.swing.JmriJOptionPane; 005 006/** 007 * Display the firmware version of the attached SPROG hardware. 008 * 009 * @author Andrew Crosland Copyright (C) 2008 010 */ 011public class SprogVersionFrame extends jmri.util.JmriJFrame implements SprogVersionListener { 012 013 private SprogSystemConnectionMemo _memo = null; 014 private volatile boolean disposed = false; 015 016 public SprogVersionFrame(SprogSystemConnectionMemo memo) { 017 super(); 018 _memo = memo; 019 } 020 021 /** 022 * {@inheritDoc} 023 */ 024 @Override 025 public void initComponents() { 026 setTitle(Bundle.getMessage("SprogVersionTitle")); 027 028 // add help menu to window 029 addHelpMenu("package.jmri.jmrix.sprog.update.SprogVersionFrame", true); 030 031 // Start the query 032 SprogVersionQuery query = _memo.getSprogVersionQuery(); 033 query.requestVersion(this); 034 } 035 036 /** 037 * Handle the version reply. May be called on any thread (serial event 038 * thread or Swing timer thread), so dispatch to the EDT to show the dialog 039 * and dispose the frame. Not synchronized — dispatching via 040 * runOnGUIEventually ensures neither the calling thread nor the EDT blocks 041 * waiting for a lock held by the other. 042 * {@inheritDoc} 043 */ 044 @Override 045 public void notifyVersion(SprogVersion v) { 046 log.debug("Version {} notified", v.toString()); 047 jmri.util.ThreadingUtil.runOnGUIEventually(() -> { 048 if (!disposed) { 049 JmriJOptionPane.showMessageDialog(SprogVersionFrame.this, 050 Bundle.getMessage("SprogVersionDialogString", v.toString()), 051 Bundle.getMessage("SprogVersionTitle"), JmriJOptionPane.INFORMATION_MESSAGE); 052 setVisible(false); 053 dispose(); 054 } 055 }); 056 } 057 058 /** 059 * Removes SprogVersionListener. 060 * {@inheritDoc} 061 */ 062 @Override 063 public void dispose() { 064 disposed = true; 065 _memo.getSprogVersionQuery().removeSprogVersionListener(this); 066 super.dispose(); 067 } 068 069 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(SprogVersionFrame.class); 070}