package com.baselet.diagram;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.baselet.control.enums.LineType;
import com.baselet.control.util.Utils;
/**
* @author unknown
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
@SuppressWarnings("serial")
public class SelectorFrame extends JComponent {
private static final Logger log = LoggerFactory.getLogger(SelectorFrame.class);
// If the frame is drawn from the right to the left or from bottom to top the offset is
// the distance from the drawing-start-point to the actual position of the mouse cursor
private int offset_left;
private int offset_top;
// If the lasso is started on an entity the starting position must be displaced by the coordinates of the entity
private int entity_displacement_x;
private int entity_displacement_y;
public SelectorFrame() {
super();
reset();
}
public void reset() {
offset_left = 0;
offset_top = 0;
entity_displacement_x = 0;
entity_displacement_y = 0;
}
public void setDisplacement(int x, int y) {
entity_displacement_x = x;
entity_displacement_y = y;
}
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.black);
g2.setStroke(Utils.getStroke(LineType.DASHED, 1));
g2.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
g2.setStroke(Utils.getStroke(LineType.SOLID, 1));
}
public void resizeTo(int x, int y) {
int locx = getX();
int locy = getY();
int sizx = entity_displacement_x + x - getX();
int sizy = entity_displacement_y + y - getY();
if (sizx - offset_left < 0) {
locx += sizx;
sizx = sizx * -1 + offset_left;
offset_left = sizx;
log.trace("LEFT (offset: " + offset_left + "px)");
}
else {
sizx -= offset_left;
locx += offset_left;
offset_left = 0;
log.trace("RIGHT");
}
if (sizy - offset_top < 0) {
locy += sizy;
sizy = sizy * -1 + offset_top;
offset_top = sizy;
log.trace("UP (offset: " + offset_top + "px)");
}
else {
sizy -= offset_top;
locy += offset_top;
offset_top = 0;
log.trace("DOWN");
}
log.trace("Starting point: (" + locx + "," + locy + ") Width: " + sizx + ", Height: " + sizy);
this.setLocation(locx, locy);
this.setSize(sizx, sizy);
// TODO Uncomment to see the real lasso border -> remove after implementing lasso on entity
// CurrentGui.getInstance().getGUI().getGraphics().drawRect(locx, locy, sizx, sizy);
}
}