001: package net.refractions.udig.ui;
002:
003: import org.eclipse.core.runtime.IConfigurationElement;
004: import org.eclipse.core.runtime.IProgressMonitor;
005: import org.eclipse.jface.viewers.ViewerDropAdapter;
006: import org.eclipse.swt.dnd.DropTargetEvent;
007:
008: /**
009: *
010: * Defines the behaviour when a drag and drop event occurs. The extension declaration combined with the accepts method
011: * determines whether the Action will be ran for a given drag/drop event.
012: *
013: * <p>If the enablesFor is a anything other than null or 1 then an array of objects (all the same type)
014: * will be the data returned by getData, otherwise the data be a single object (not an array).
015: *
016: * @author jdeolive
017: * @since 1.0.0
018: */
019: public abstract class IDropAction {
020:
021: public static final String XPID = "net.refractions.udig.ui.dropAction"; //$NON-NLS-1$
022:
023: /** the extension info **/
024: IConfigurationElement element;
025:
026: private Object destination;
027:
028: private Object data;
029:
030: private DropTargetEvent event;
031:
032: private ViewerDropLocation location;
033:
034: /**
035: * Returns the Configuration element that definates the action in the extension declaration.
036: *
037: * @return the Configuration element that definates the action in the extension declaration.
038: */
039: public IConfigurationElement getElement() {
040: return element;
041: }
042:
043: /**
044: * Returns the name of the action.
045: *
046: * @return Returns the name of the action.
047: */
048: public String getName() {
049: if (element == null)
050: return ""; //$NON-NLS-1$
051: return element.getAttribute("name"); //$NON-NLS-1$
052: }
053:
054: /**
055: * Called if the action seems to be a good candidate for handling the drop event.
056: *
057: * @see #getData();
058: * @see #getData()
059: * @see #getEvent()
060: *
061: * @return true if the action this it should handle the drop event.
062: */
063: public abstract boolean accept();
064:
065: /**
066: * Performs the drop action.
067: *
068: * @param monitor a progress monitor for showing the progress of the current event.
069: */
070: public abstract void perform(IProgressMonitor monitor);
071:
072: /**
073: * Returns the dropped data. If the enablesFor is a anything other than null or 1 then an array of objects (all the same type)
074: * will be the data, otherwise the data will not be in an array.
075: *
076: * @return the dropped data.
077: */
078: public Object getData() {
079: return data;
080: }
081:
082: /**
083: * Returns the object that the data was dropped on.
084: *
085: * @return the object that the data was dropped on.
086: */
087: public Object getDestination() {
088: return destination;
089: }
090:
091: /**
092: * Called by framework to initialize the action.
093: *
094: * @param element2 the extension configuration element
095: * @param event2 the drop event.
096: * @param location wrt the destination.
097: * @param destination2 the object that the data was dropped on.
098: * @param data2 the data that was dropped.
099: */
100: public void init(IConfigurationElement element2,
101: DropTargetEvent event2, ViewerDropLocation location2,
102: Object destination2, Object data2) {
103: this .element = element2;
104: this .event = event2;
105: this .location = location2;
106: this .destination = destination2;
107: this .data = data2;
108: }
109:
110: /**
111: * The drop event.
112: * @return Returns the drop event.
113: */
114: public DropTargetEvent getEvent() {
115: return event;
116: }
117:
118: /**
119: * This does not always make sense for the drop event. But in the case that the component is a jface viewer then this method will indicate the
120: * location where the drop is taking place (before, on or after the destination object).
121: *
122: * @see ViewerDropAdapter#getCurrentLocation()
123: *
124: * @return If the component is not a viewer this will always return {@link ViewerDropAdapter#LOCATION_ON} otherwise it will be one of the LOCATION_*
125: * values.
126: */
127: public ViewerDropLocation getViewerLocation() {
128: return location;
129: }
130:
131: }
|