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 notifyNewRosterEntryHighlighted(RosterEntry re) { 094 updateImage(re); 095 } 096 097 @Override 098 public void notifyRosterEntryUpdated(RosterEntry re) { 099 updateImage(re); 100 } 101 102 @Override 103 public void notifyAddressReleased(LocoAddress la) { 104 setImagePath(null); 105 } 106 107 @Override 108 public void notifyAddressChosen(LocoAddress l) { 109 } 110 111 @Override 112 public void notifyConsistAddressChosen(LocoAddress l) { 113 if (addressPanel != null) { 114 updateImage(addressPanel.getRosterEntry()); 115 } 116 } 117 118 @Override 119 public void notifyConsistAddressReleased(LocoAddress l) { 120 updateImage(null); 121 } 122 123 @Override 124 public void notifyConsistAddressThrottleFound(DccThrottle t) { 125 if (addressPanel != null) { 126 updateImage(addressPanel.getRosterEntry()); 127 } 128 } 129 130 public void dispose() { 131 InstanceManager.getDefault(ThrottlesPreferences.class).removePropertyChangeListener(this); 132 if (addressPanel != null) { 133 addressPanel.removeAddressListener(this); 134 addressPanel = null; 135 } 136 } 137 138 @Override 139 public void propertyChange(PropertyChangeEvent e) { 140 if (e == null) { 141 return; 142 } 143// log.debug("Property change event received {} / {}", e.getPropertyName(), e.getNewValue()); 144 if (ThrottlesPreferences.prefPopertyName.compareTo(e.getPropertyName()) == 0) { 145 applyPreferences(); 146 } 147 } 148 149 // private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(BackgroundPanel.class); 150}