PopupListener.java
package de.japrost.amaot.ui.swing;
import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
 * 
 * FIXME merge with {@link SystemTrayMouseAdapter}.
 *
 */
public class PopupListener extends MouseAdapter {
	private final SwingUI swingUI;
	/**
	 * @param amaot the amaot
	 */
	public PopupListener(SwingUI amaot) {
		this.swingUI = amaot;
	}
	private boolean drag = false;
	/**
	 * {@inheritDoc}<br>
	 * <strong>This impelementation</strong>  sets dragging mode and shows popup if popup is triggered.
	 */
	@Override
	public void mousePressed(MouseEvent e) {
		if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0) {
			drag = true;
		} else {
			drag = false;
		}
		maybeShowPopup(e);
	}
	@Override
	public void mouseReleased(MouseEvent e) {
		drag = false;
		maybeShowPopup(e);
	}
	@Override
	public void mouseDragged(MouseEvent e) {
		if (drag) {
			Component component = (Component) e.getSource();
			component.setLocation(component.getX() + e.getX(), component.getY() + e.getY());
		}
	}
	private void maybeShowPopup(MouseEvent e) {
		if (e.isPopupTrigger()) {
			this.swingUI.getPopup().show(e.getComponent(), e.getX(), e.getY());
		}
	}
}