001package jmri.jmrit.throttle.panels; 002 003import java.awt.Color; 004import java.beans.PropertyChangeEvent; 005import java.beans.PropertyChangeListener; 006 007import jmri.DccThrottle; 008import jmri.InstanceManager; 009import jmri.LocoAddress; 010import jmri.jmrit.roster.RosterEntry; 011import jmri.jmrit.throttle.interfaces.AddressListener; 012import jmri.jmrit.throttle.preferences.ThrottlesPreferences; 013import jmri.util.swing.ResizableImagePanel; 014 015/** 016 * A panel to be used as background for JMRI throttle frames 017 * 018 * <hr> 019 * This file is part of JMRI. 020 * <p> 021 * JMRI is free software; you can redistribute it and/or modify it under the 022 * terms of version 2 of the GNU General Public License as published by the Free 023 * Software Foundation. See the "COPYING" file for a copy of this license. 024 * <p> 025 * JMRI is distributed in the hope that it will be useful, but WITHOUT ANY 026 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 027 * A PARTICULAR PURPOSE. See the GNU General Public License for more details. 028 * 029 * @author Lionel Jeanson - 2009, 2026 030 * 031 */ 032 033public class BackgroundPanel extends ResizableImagePanel implements AddressListener, PropertyChangeListener { 034 035 AddressPanel addressPanel = null; 036 037 public BackgroundPanel() { 038 super(); 039 initGUI(); 040 InstanceManager.getDefault(ThrottlesPreferences.class).addPropertyChangeListener(this); 041 applyPreferences(); 042 } 043 044 private void initGUI() { 045 setBackground(Color.GRAY); 046 setRespectAspectRatio(true); 047 } 048 049 private void applyPreferences() { 050 final ThrottlesPreferences preferences = InstanceManager.getDefault(ThrottlesPreferences.class); 051 052 setResizingContainer(preferences.isResizingWindow()); 053 setVisible( (preferences.isUsingExThrottle()) && (preferences.isUsingRosterImage())); 054 } 055 056 public void setAddressPanel(AddressPanel ap) { 057 if (addressPanel != null) { 058 addressPanel.removeAddressListener(this); 059 } 060 addressPanel = ap; 061 if (addressPanel != null) { 062 addressPanel.addAddressListener(this); 063 updateImage(addressPanel.getRosterEntry()); 064 } 065 } 066 067 private void updateImage(RosterEntry rosterEntry) { 068 setImagePath(null); 069 if (rosterEntry != null) { 070 setImagePath(rosterEntry.getImagePath()); 071 } else if (addressPanel != null) { 072 DccThrottle t = addressPanel.getThrottle(); 073 if (t != null) { 074 if (t.getLocoAddress().toString().compareTo("3(S)") == 0) { // default DCC address 075 setImagePath(jmri.util.FileUtil.getExternalFilename("resources/icons/throttles/DCCImage.png")); 076 } 077 if (t.getLocoAddress().toString().compareTo("0(S)") == 0) { // default DC address 078 setImagePath(jmri.util.FileUtil.getExternalFilename("resources/icons/throttles/DCImage.png")); 079 } 080 } 081 } 082 } 083 084 085 @Override 086 public void notifyAddressThrottleFound(DccThrottle t) { 087 if (addressPanel != null) { 088 updateImage(addressPanel.getRosterEntry()); 089 } 090 } 091 092 @Override 093 public void notifyRosterEntrySelected(RosterEntry re) { 094 updateImage(re); 095 } 096 097 @Override 098 public void notifyAddressReleased(LocoAddress la) { 099 setImagePath(null); 100 } 101 102 @Override 103 public void notifyAddressChosen(LocoAddress l) { 104 } 105 106 @Override 107 public void notifyConsistAddressChosen(LocoAddress l) { 108 if (addressPanel != null) { 109 updateImage(addressPanel.getRosterEntry()); 110 } 111 } 112 113 @Override 114 public void notifyConsistAddressReleased(LocoAddress l) { 115 updateImage(null); 116 } 117 118 @Override 119 public void notifyConsistAddressThrottleFound(DccThrottle t) { 120 if (addressPanel != null) { 121 updateImage(addressPanel.getRosterEntry()); 122 } 123 } 124 125 public void dispose() { 126 InstanceManager.getDefault(ThrottlesPreferences.class).removePropertyChangeListener(this); 127 if (addressPanel != null) { 128 addressPanel.removeAddressListener(this); 129 addressPanel = null; 130 } 131 } 132 133 @Override 134 public void propertyChange(PropertyChangeEvent e) { 135 if (e == null) { 136 return; 137 } 138// log.debug("Property change event received {} / {}", e.getPropertyName(), e.getNewValue()); 139 if (ThrottlesPreferences.prefPopertyName.compareTo(e.getPropertyName()) == 0) { 140 applyPreferences(); 141 } 142 } 143 144 // private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(BackgroundPanel.class); 145}