package tirateima.gui.alerta;
import java.awt.Color;
import javax.swing.JTextPane;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import tirateima.IEstado;
import tirateima.ui.Som;
/**
* Classe que mostra um alerta e que controla a hora de tocar um som, caso especificado
* @author Andrew
*
*/
@SuppressWarnings("serial")
public class Alerta extends JTextPane implements IEstado {
private Color corFundo = new Color(160, 0, 0);
private Color corTexto = Color.white;
private String comentario = null;
private boolean som = false;
private boolean somAtivado = true;
/**
* Seta valores ao construtor da superclasse
*/
public Alerta(){
super();
setBackground(corFundo);
setForeground(corTexto);
setEditable(false);
setFontStyle();
setText("");
}
/**
* Faz a renderização da fonte que será mostrada no alerta
*/
public void setFontStyle(){
SimpleAttributeSet bSet = new SimpleAttributeSet();
StyleConstants.setAlignment(bSet, StyleConstants.ALIGN_CENTER);
StyleConstants.setFontFamily(bSet, "lucida bold");
StyleConstants.setFontSize(bSet, 12);
StyledDocument doc = getStyledDocument();
doc.setParagraphAttributes(0, 104, bSet, false);
}
public Alerta(String s){
this();
setText(s);
}
/**
* @param s: texto que será mostrado no painel de alerta
*/
public void print(String s){
comentario = s;
}
/**
* Faz a limpeza das variáveis para que elas não influenciem no próximo
* estado
*/
public void limpar(){
comentario = null;
som = false;
}
/**
* Implementação do método setEstado da interface IEstado
* Para o estado de alerta são carregados o comentário e o som
*
*/
public void setEstado(Object estado){
if (estado != null) {
EstadoAlerta e = (EstadoAlerta) estado;
if(e.comentario != null){
//Mostra comentario
super.setText(e.comentario);
}else{
super.setText("");
}
if(e.som){
//Toca som se estiver ativo
if(isSomAtivado()){
new Som(true).start();
}
}
}
}
public void tocaSom(){
som = true;
}
public boolean isTocarSom() {
return som;
}
/**
* Implementa o metodo da interface
* A funçao retorna um objeto da classe EstadoAlerta
*
* @return Object
*/
public Object getEstado(){
return new EstadoAlerta(comentario, som);
}
/**
* Retorna o valor da variável somAtivado que indicará se o som será
* emitido ou não no programa
*
* @return booleano
*/
public boolean isSomAtivado() {
return somAtivado;
}
public void setSomAtivado(boolean somAtivado) {
this.somAtivado = somAtivado;
}
/**
* Recebe o comentario mostrado
* Recebe o som mostrado
* Ao final limpa as variaveis salvas nesse estado para que nao influenciem nos
* estados futuros
*
* @author Lucas
*
*/
private class EstadoAlerta {
public String comentario;
public boolean som;
public EstadoAlerta(String comentario, boolean som) {
this.comentario = comentario;
this.som = som;
//limpa as variáveis externas para evitar lixo nos proximos estados
limpar();
}
}
}