package pipe.views;
import pipe.constants.GUIConstants;
import javax.swing.*;
import java.awt.Color;
import java.awt.Font;
/**
* Text label for displaying component information on the canvas
* <p>
* This can be used for component ids, arc weights and so on
* </p>
*/
@SuppressWarnings("serial")
public class TextLabel extends JTextArea {
/**
* Label name
*/
private String name;
/**
* Label text, i.e. the components id
*/
private String text;
/**
* x location
*/
private double positionX;
/**
* y location
*/
private double positionY;
/**
* Default constructor setting x, y to (0,0)
*
* @param text text for the label
*/
public TextLabel(String text) {
this(text, 0, 0);
}
/**
* Constructor
*
* @param text text to display
* @param nameOffsetX x location
* @param nameOffsetY y location
*/
public TextLabel(String text, double nameOffsetX, double nameOffsetY) {
super(text);
this.name = text;
positionX = nameOffsetX;
positionY = nameOffsetY;
this.text = "";
Font font = new Font("Dialog", Font.BOLD, 10);
setFont(getFont().deriveFont(GUIConstants.LABEL_DEFAULT_FONT_SIZE));
setFont(font);
setCursor(new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));
setEditable(false);
setFocusable(false);
setOpaque(false);
setBackground(GUIConstants.BACKGROUND_COLOR);
}
/**
* @param color color of the text
*/
public void setColor(Color color) {
this.setForeground(color);
}
/**
* Set the coordinates of the label
*
* @param x coordinate
* @param y coordinate
*/
public void setPosition(double x, double y) {
positionX = x;
positionY = y;
updatePosition();
}
/**
* Update the position of the text label relative to its set x,y
*/
public void updatePosition() {
setBounds((int) (positionX - getPreferredSize().width), (int) (positionY - GUIConstants.NAMELABEL_OFFSET),
(int) getPreferredSize().getWidth(), (int) getPreferredSize().getHeight());
}
/**
* Update the size of the text label
*/
public void updateSize() {
// To get around Java bug #4352983 the size had to be expanded a bit
setSize((int) (getPreferredSize().width * 1.2), (int) (getPreferredSize().height * 1.2));
updatePosition();
}
/**
* Set the text displayed
* @param text new text to display
*/
@Override
public void setText(String text) {
this.text = text;
super.setText(text);
updateSize();
}
}