/* * Copyright (C) 2011 Peransin Nicolas. All rights reserved. * Use is subject to license terms. */ package org.mypsycho.swing.app.beans; import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.Action; /** * Class for ... * <p>Details</p> * * @author Peransin Nicolas * */ @SuppressWarnings("serial") public class ProxyAction extends AbstractTypedAction { final javax.swing.Action delegate; /** Bidrectional propagation for functional properties: select, enable*/ final PropertyChangeListener pcl = new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { Action other = evt.getSource() == ProxyAction.this ? delegate : ProxyAction.this; if (ENABLED_KEY.equals(evt.getPropertyName())) { other.setEnabled((Boolean) evt.getNewValue()); } else if (SELECTED_KEY.equals(evt.getPropertyName())) { other.putValue(SELECTED_KEY, evt.getNewValue()); } } }; public ProxyAction(javax.swing.Action toProxy) { delegate = toProxy; setEnabled(delegate.isEnabled()); for (String prop : new String[] { ACCELERATOR_KEY, ACTION_COMMAND_KEY, DISPLAYED_MNEMONIC_INDEX_KEY, LARGE_ICON_KEY, LONG_DESCRIPTION, MNEMONIC_KEY, NAME, SELECTED_KEY, SHORT_DESCRIPTION, SMALL_ICON }) { Object value = delegate.getValue(prop); if (value != null) { putValue(prop, value); } } delegate.addPropertyChangeListener(pcl); addPropertyChangeListener(pcl); } @Override public void actionPerformed(ActionEvent e) { delegate.actionPerformed(e); } }