package tirateima.gui.variaveis;
import java.awt.Color;
import java.util.List;
import java.util.ListIterator;
import tirateima.controlador.Type;
import tirateima.controlador.TypeId;
import tirateima.gui.arquivos.FileBorder;
/**
* Modela uma função do Tira-Teima.
*
* Uma função, do ponto de vista da interface, nada mais é que um
* Mostrador com borda.
*
* @author Luciano Santos
*/
@SuppressWarnings("serial")
public class Function extends Mostrador {
private static Color COR_BORDA = Color.lightGray;
public Function(
String nome,
Type tipoRetorno,
List<Variavel> params,
List<Variavel> vars) {
super.setBorder(new FileBorder(
gerarTitulo(nome, tipoRetorno, params),
COR_BORDA));
for (Variavel v : params) {
this.adicionarVariavel(v);
}
for (Variavel v : vars) {
this.adicionarVariavel(v);
}
}
private static String gerarTitulo(
String nome,
Type type,
List<Variavel> params) {
StringBuffer titulo = new StringBuffer();
boolean is_void = (type.getId().equals(TypeId.VOID));
titulo.append(is_void ? "procedimento " : "função ");
titulo.append(nome);
titulo.append("(");
ListIterator<Variavel> i = params.listIterator();
Variavel v;
while (i.hasNext()) {
v = i.next();
titulo.append(v.signature());
if (i.hasNext()) {
titulo.append(", ");
}
}
titulo.append(")");
if (!is_void) {
titulo.append(" : ");
titulo.append(type.toString());
}
return titulo.toString();
}
}