package fr.unistra.pelican.interfaces.application.inputs;
import java.awt.GridLayout;
import java.awt.Point;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import fr.unistra.pelican.BooleanImage;
import fr.unistra.pelican.interfaces.application.GlobalController;
public class InputFlatStructuringElement extends JPanel implements InputType{
/**
* Reference to the view object.
*/
GlobalController controller;
/**
* This attribute defines the range of this parameter among the other
* Parameters.
*/
int parameterNumber;
/**
* This attribute represents the resulting parameter.
*/
BooleanImage result;
/**
* This text field is the user seizing interface.
*/
JTextField rows;
/**
* This text field is the user seizing interface.
*/
JTextField cols;
/**
* This text field is the user seizing interface for the x coordonate.
*/
JTextField x;
/**
* This text field is the user seizing interface for the x coordonate.
*/
JTextField y;
/**
* This use to know if the parameter is called as an option or not
*/
boolean option;
/**
* Input constructor.
*
* @param view
* Reference to the main panel.
* @param algoName
* Name of the algorithm which needs this parameter.
* @param parameterName
* Name of the parameter.
* @param parameterNumber
* Rank of this parameter between the other parameter of the algorithm.
* @param option
* This paramter is an option or not.
*/
public InputFlatStructuringElement(GlobalController controller, String algoName,
String parameterName, int parameterNumber, boolean option) {
super();
this.setLayout(new GridLayout(1,5,5,5));
// Initializes the attributes
this.controller = controller;
this.parameterNumber = parameterNumber;
this.option = option;
parameterSeizing(controller, algoName, parameterName, parameterNumber, option);
}
/**
* This method allows the seize of the parameter by the user.
*
* @param view
* Reference to the main panel.
* @param algoName
* Name of the algorithm which needs this parameter.
* @param parameterName
* Name of the parameter.
* @param parameterNumber
* Rank of this parameter between the other parameter of the algorithm.
* @param option
* This paramter is an option or not.
*/
public void parameterSeizing(GlobalController controller, String algoName, String parameterName,
int parameterNumber, boolean option) {
JLabel lab = new JLabel(parameterName);
this.add(lab);
lab.setToolTipText(controller.getJavadoc(algoName, parameterName));
rows = new JTextField("Default");
this.add(rows);
rows.setToolTipText("number of rows of the FlatStructuringElement");
cols = new JTextField("Default");
this.add(cols);
cols.setToolTipText("number of columns of the FlatStructuringElement");
x = new JTextField("Default");
this.add(x);
x.setToolTipText("x parameter of the Point of the FlatStructuringElement");
y = new JTextField("Default");
this.add(y);
y.setToolTipText("y parameter of the Point of the FlatStructuringElement");
//This instance is added to input instances array
if (option == false) {
controller.parameterInstanceArray[parameterNumber] = this;
} else {
controller.parameterInstanceArray[parameterNumber - 1] = this;
}
}
/**
*
*/
public void fire() {
if (rows.getText().equals("Default") || cols.getText().equals("Default") || x.getText().equals("Default") || y.getText().equals("Default")) {
if (option == false) {
System.err.println("ERROR: The integer parameter is mandatory");
} else {
controller.parameterArray.add(parameterNumber - 1, null);
}
} else {
result = new BooleanImage(Integer.parseInt(rows.getText()),Integer.parseInt(cols.getText()),1,1,1);
result.setCenter(new Point(Integer.parseInt(x.getText()), Integer.parseInt(y.getText())));
if (option == false) {
controller.parameterArray.add(parameterNumber, result);
} else {
controller.parameterArray.add(parameterNumber - 1, result);
}
}
}
}