424c9b0e0e
for an action (we already let them have a crack at the icon). git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2930 542714f4-19e9-0310-aa3c-eee0fc999fb1
124 lines
3.5 KiB
Java
124 lines
3.5 KiB
Java
//
|
|
// $Id: ObjectActionHandler.java,v 1.2 2004/01/07 22:03:08 ray Exp $
|
|
|
|
package com.threerings.miso.client;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
import java.util.HashMap;
|
|
import javax.swing.Icon;
|
|
|
|
import com.samskivert.swing.RadialMenu;
|
|
import com.samskivert.util.StringUtil;
|
|
|
|
import com.threerings.miso.Log;
|
|
import com.threerings.miso.client.SceneObject;
|
|
|
|
/**
|
|
* Objects in scenes can be configured to generate action events. Those
|
|
* events are grouped into types and an object action handler can be
|
|
* registered to handle all actions of a particular type.
|
|
*/
|
|
public class ObjectActionHandler
|
|
{
|
|
/**
|
|
* Returns true if we should allow this object action, false if we
|
|
* should not. This is used to completely hide actions that should not
|
|
* be visible without the proper privileges.
|
|
*/
|
|
public boolean actionAllowed (String action)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Get the human readable object tip for the specified action.
|
|
*/
|
|
public String getTipText (String action)
|
|
{
|
|
return action;
|
|
}
|
|
|
|
/**
|
|
* Returns the tooltip icon for the specified action or null if the
|
|
* action has no tooltip icon.
|
|
*/
|
|
public Icon getTipIcon (String action)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Return a {@link RadialMenu} or null if no menu needed.
|
|
*/
|
|
public RadialMenu handlePressed (SceneObject sourceObject)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Called when an action is generated for an object.
|
|
*/
|
|
public void handleAction (SceneObject scobj, ActionEvent event)
|
|
{
|
|
Log.warning("Unknown object action [scobj=" + scobj +
|
|
", action=" + event + "].");
|
|
}
|
|
|
|
/**
|
|
* Returns the type associated with this action command (which is
|
|
* mapped to a registered object action handler) or the empty string
|
|
* if it has no type.
|
|
*/
|
|
public static String getType (String command)
|
|
{
|
|
int cidx = StringUtil.blank(command) ? -1 : command.indexOf(':');
|
|
return (cidx == -1) ? "" : command.substring(0, cidx);
|
|
}
|
|
|
|
/**
|
|
* Returns the unqualified object action (minus the type, see {@link
|
|
* #getType}).
|
|
*/
|
|
public static String getAction (String command)
|
|
{
|
|
int cidx = StringUtil.blank(command) ? -1 : command.indexOf(':');
|
|
return (cidx == -1) ? command : command.substring(cidx+1);
|
|
}
|
|
|
|
/**
|
|
* Looks up the object action handler associated with the specified
|
|
* command.
|
|
*/
|
|
public static ObjectActionHandler lookup (String command)
|
|
{
|
|
return (ObjectActionHandler)_oahandlers.get(getType(command));
|
|
}
|
|
|
|
/**
|
|
* Registers an object action handler which will be called when a user
|
|
* clicks on an object in a scene that has an associated action.
|
|
*/
|
|
public static void register (String prefix, ObjectActionHandler handler)
|
|
{
|
|
// make sure we know about potential funny business
|
|
if (_oahandlers.containsKey(prefix)) {
|
|
Log.warning("Warning! Overwriting previous object action " +
|
|
"handler registration, all hell could shortly " +
|
|
"break loose [prefix=" + prefix +
|
|
", handler=" + handler + "].");
|
|
}
|
|
_oahandlers.put(prefix, handler);
|
|
}
|
|
|
|
/**
|
|
* Removes an object action handler registration.
|
|
*/
|
|
public static void unregister (String prefix)
|
|
{
|
|
_oahandlers.remove(prefix);
|
|
}
|
|
|
|
/** Our registered object action handlers. */
|
|
protected static HashMap _oahandlers = new HashMap();
|
|
}
|