001: /*
002: * $Id: TargetableAction.java,v 1.3 2005/10/10 18:02:41 rbair Exp $
003: *
004: * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005: * Santa Clara, California 95054, U.S.A. All rights reserved.
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
020: */
021:
022: package org.jdesktop.swingx.action;
023:
024: import java.awt.event.ActionEvent;
025: import java.awt.event.ItemEvent;
026:
027: import javax.swing.Icon;
028:
029: /**
030: * A class that represents a dynamically targetable action. The invocation of this
031: * action will be dispatched to the <code>TargetManager</code> instance.
032: * <p>
033: * You would create instances of this class to let the TargetManager handle the
034: * action invocations from the ui components constructed with this action.
035: * The TargetManager could be configured depending on application state to
036: * handle these actions.
037: *
038: * @see TargetManager
039: * @author Mark Davidson
040: */
041: public class TargetableAction extends AbstractActionExt {
042:
043: private TargetManager targetManager;
044:
045: public TargetableAction() {
046: this ("action");
047: }
048:
049: public TargetableAction(String name) {
050: super (name);
051: }
052:
053: /**
054: * @param name display name of the action
055: * @param command the value of the action command key
056: */
057: public TargetableAction(String name, String command) {
058: super (name, command);
059: }
060:
061: /**
062: * @param name display name of the action
063: * @param command the value of the action command key
064: * @param icon icon to display
065: */
066: public TargetableAction(String name, String command, Icon icon) {
067: super (name, command, icon);
068: }
069:
070: public TargetableAction(String name, Icon icon) {
071: super (name, icon);
072: }
073:
074: /**
075: * Set target manager which will handle this command. This action
076: * may be reset to use the singleton instance if set to null.
077: *
078: * @param tm the target manager instance to dispatch the actions
079: */
080: public void setTargetManager(TargetManager tm) {
081: this .targetManager = tm;
082: }
083:
084: /**
085: * Returns the target manager instance which will be used for action
086: * dispatch. If the target manager has not previously been set then the
087: * singleton instance will be returned.
088: *
089: * @return a non null target manager
090: */
091: public TargetManager getTargetManager() {
092: if (targetManager == null) {
093: targetManager = TargetManager.getInstance();
094: }
095: return targetManager;
096: }
097:
098: // Callbacks...
099:
100: /**
101: * Callback for command actions. This event will be redispatched to
102: * the target manager along with the value of the Action.ACTION_COMMAND_KEY
103: *
104: * @param evt event which will be forwarded to the TargetManager
105: * @see TargetManager
106: */
107: public void actionPerformed(ActionEvent evt) {
108: if (!isStateAction()) {
109: // Do not process this event if it's a toggle action.
110: getTargetManager().doCommand(getActionCommand(), evt);
111: }
112: }
113:
114: /**
115: * Callback for toggle actions. This event will be redispatched to
116: * the target manager along with value of the the Action.ACTION_COMMAND_KEY
117: *
118: * @param evt event which will be forwarded to the TargetManager
119: * @see TargetManager
120: */
121: public void itemStateChanged(ItemEvent evt) {
122: // Update all objects that share this item
123: boolean newValue;
124: boolean oldValue = isSelected();
125:
126: if (evt.getStateChange() == ItemEvent.SELECTED) {
127: newValue = true;
128: } else {
129: newValue = false;
130: }
131:
132: if (oldValue != newValue) {
133: setSelected(newValue);
134:
135: getTargetManager().doCommand(getActionCommand(), evt);
136: }
137: }
138:
139: public String toString() {
140: return super.toString();
141: }
142: }
|