package pipe.handlers;
import pipe.controllers.AbstractConnectableController;
import pipe.views.ConnectableView;
import pipe.views.TextLabel;
import uk.ac.imperial.pipe.models.petrinet.Connectable;
import javax.swing.*;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
/**
* Handler for connectable views name label
*/
public class LabelHandler<T extends Connectable> extends javax.swing.event.MouseInputAdapter {
/**
* Connectable the name label refers to
*/
private final ConnectableView<T> connectable;
private final AbstractConnectableController<T> controller;
/**
* Name label for the corresponding connectable
*/
private final TextLabel textLabel;
/**
* Constructor
* @param textLabel name label for the connectable
* @param connectable connectable with a name label
* @param controller for the connectable
*/
public LabelHandler(TextLabel textLabel, ConnectableView<T> connectable,
AbstractConnectableController<T> controller) {
this.connectable = connectable;
this.textLabel = textLabel;
this.controller = controller;
}
/**
* When the mouse wheel is moved the event is dispatched to its connectable
* @param e mouse event
*/
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
connectable.dispatchEvent(e);
}
/**
* Drags the components name label
* @param e mouse event
*/
@Override
public void mouseDragged(MouseEvent e) {
Point point = SwingUtilities.convertPoint(e.getComponent(), e.getPoint(), connectable.getParent());
controller.moveNameLabel(point);
}
}