/*******************************************************************************
 * Copyright (c) 2007, 2008 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.dnd;

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;

/**
 * This class provides default implementations to display a drag source
 * effect during a drag and drop operation. The current implementation
 * does not provide any visual feedback.
 *
 * <p>The drag source effect has the same API as the
 * <code>DragSourceAdapter</code> so that it can provide custom visual
 * feedback when a <code>DragSourceEvent</code> occurs.
 * </p>
 *
 * <p>Classes that wish to provide their own drag source effect such as
 * displaying a default source image during a drag can extend the <code>DragSourceEffect</code>
 * class, override the <code>DragSourceAdapter.dragStart</code> method and set
 * the field <code>DragSourceEvent.image</code> with their own image.
 * The image should be disposed when <code>DragSourceAdapter.dragFinished</code> is called.
 * </p>
 *
 * @see DragSourceAdapter
 * @see DragSourceEvent
 * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
 *
 * @since 3.3
 */
public class DragSourceEffect extends DragSourceAdapter {
	Control control = null;

	/**
	 * Creates a new <code>DragSourceEffect</code> to handle drag effect from the specified <code>Control</code>.
	 *
	 * @param control the <code>Control</code> that the user clicks on to initiate the drag
	 *
	 * @exception IllegalArgumentException <ul>
	 *    <li>ERROR_NULL_ARGUMENT - if the control is null</li>
	 * </ul>
	 */
	public DragSourceEffect(Control control) {
		if (control == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
		this.control = control;
	}

	/**
	 * Returns the Control which is registered for this DragSourceEffect.  This is the control that the
	 * user clicks in to initiate dragging.
	 *
	 * @return the Control which is registered for this DragSourceEffect
	 */
	public Control getControl() {
		return control;
	}
}
