/* * Projeto : Refine - Ferramenta Educacional para Refinamentos * * Tipo : TelaLeis * */ package circusRefine.gui; import java.awt.Dimension; import java.awt.Font; import javax.swing.JDialog; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JSeparator; import javax.swing.JTextField; import java.awt.SystemColor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JOptionPane; import net.sourceforge.czt.base.ast.Term; import net.sourceforge.czt.circuspatt.util.CircusLaw; import net.sourceforge.czt.rules.unification.UnificationException; import circusRefine.Tactic.Util.GerenciadorTaticas; import circusRefine.core.ExternalManager; import circusRefine.core.NoPrograma; import circusRefine.core.crules.CRulesException; import circusRefine.core.crules.CancelledApplException; import circusRefine.util.CRefineException; import circusRefine.util.CodigoParametro; /** * TelaLeis � um tipo que representa a tela que exibe todas as leis de c�lculo * de refinamentos que s�o suportadas pela ferramenta. * @author Alessandro */ public class CaixaLeis extends JTextField{ private static final long serialVersionUID = -1715076912517106544L; private ExternalManager gerInterface; private JDialog telaParametro; /*indica qual a tela de Parametro esta sendo usada */ private int numeroTelaParam = 0; private boolean changeFont; JPopupMenu popUpMenu; /* Itens utilizados no JPopMenu*/ private JMenuItem aplicar; private JMenuItem exibir; /** * Construtor da classe FapLeis. * * @param gerInterface Gerenciador de todas as telas do sistema. * */ public CaixaLeis(ExternalManager gerInterface) { try { this.gerInterface = gerInterface; this.changeFont = false; jbInit(); } catch (Exception e) { e.printStackTrace(); } } /** * Classe utilizada para os inserir tooltiptext nas celulas do JComboBox * - comentada apos mudanca de Caixa Leis para JTextField */ /*class MyComboBoxRenderer extends BasicComboBoxRenderer { private int quant; // quantidade de leis public MyComboBoxRenderer(int x) { quant = x; } public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); if (index > -1) { list.setToolTipText(tooltips[index]); } } else { setBackground(list.getBackground()); setForeground(list.getForeground()); } setFont(list.getFont()); setText((value == null) ? "" : value.toString()); return this; } }*/ /** * Metodo que realiza a plica��o de lei atrav�s da chamada de m�todos * de outras classes. * @param leiSelecionada lei que sera aplicada ao termo selecionado na tela * Desenvolvimento * @throws UnificationException * */ public void aplicarLei(CircusLaw leiSelecionada) { NoPrograma noPrograma = gerInterface.getSelectedProg(); GerenciadorTaticas.lastProcess = noPrograma.getPrograma(); if(noPrograma != null) { if(leiSelecionada != null) { try { gerInterface.applyLaw(noPrograma, leiSelecionada); gerInterface.updateScreen(); gerInterface.updateLawIdentifierGUI(false); gerInterface.atualizarTelaObrigacoes(); gerInterface.atualizarTelaCodigo(); gerInterface.atualizarOpcoesColeta(); } catch (CRefineException except) { except.printStackTrace(); ErrorDialog errorDialog = new ErrorDialog(this.gerInterface, "", except); errorDialog.setVisible(true); } catch (CancelledApplException e){ } catch (CRulesException except){ except.printStackTrace(); ErrorDialog errorDialog = new ErrorDialog(this.gerInterface, "", except); errorDialog.setVisible(true); } catch (Exception e){ ErrorDialog errorDialog = new ErrorDialog(this.gerInterface, e); errorDialog.setVisible(true); e.printStackTrace(); } } else { JOptionPane.showMessageDialog(null, this.retornarMensagem("COD0063"), "Erro", JOptionPane.ERROR_MESSAGE); gerInterface.setarStatus(""); gerInterface.setarFocus(); } } else { JOptionPane.showMessageDialog(null, this.retornarMensagem("COD0464"), "Erro", JOptionPane.ERROR_MESSAGE); gerInterface.setarStatus(""); gerInterface.setarFocus(); } } /** * Metodo que retornar a lei Selecionado no TextField de Leis * @return */ public String retornarLeiSelecionada (){ return this.getText(); } /** * Metodo que realiza a plica��o de lei atrav�s da chamada de m�todos * de outras classes. * @throws UnificationException * */ public void aplicarLei() { NoPrograma noPrograma = gerInterface.getSelectedProg(); if(noPrograma != null) { CircusLaw leiSelecionada = this.gerInterface.retornarLeiSelecionada(); if(leiSelecionada != null) { try { gerInterface.applyLaw(noPrograma, leiSelecionada); gerInterface.updateScreen(); gerInterface.atualizarTelaObrigacoes(); gerInterface.retornarTelaDesenvolvimento(). updateLawIdentifierGUI(false); gerInterface.atualizarTelaCodigo(); gerInterface.atualizarOpcoesColeta(); } catch(CRefineException e) { ErrorDialog errorDialog = new ErrorDialog(this.gerInterface, "", e); errorDialog.setVisible(true); e.printStackTrace(); } catch (CancelledApplException e){ } catch (CRulesException e){ ErrorDialog errorDialog = new ErrorDialog(this.gerInterface, "", e); errorDialog.setVisible(true); e.printStackTrace(); } catch (Exception e){ ErrorDialog errorDialog = new ErrorDialog(this.gerInterface, e); errorDialog.setVisible(true); e.printStackTrace(); } } else { JOptionPane.showMessageDialog(null, this.retornarMensagem("COD0063"), "Erro", JOptionPane.ERROR_MESSAGE); gerInterface.setarStatus(""); gerInterface.setarFocus(); } } else { JOptionPane.showMessageDialog(null, this.retornarMensagem("COD0464"), "Erro", JOptionPane.ERROR_MESSAGE); gerInterface.setarStatus(""); gerInterface.setarFocus(); } } /** * M�todo que executa a a��o de se clicar no botao Aplicar. * * @param e Evento do bot�o aplicar. * @throws UnificationException * */ public void btnAplicar_actionPerformed(ActionEvent e) throws UnificationException { gerInterface.setarStatus(this.retornarMensagem("COD0040")); this.aplicarLei(); } /** * M�todo que retorna o n�mero da janela de par�metro corrente. * */ public int getNumJanelaParam() { return numeroTelaParam; } /** * Torna o popmenu das leis visivel. */ private void mostrarPopMenu(MouseEvent e) { if (!(this.getText().equals(this.retornarMensagem("COD0592")))){ this.popUpMenu.show(e.getComponent(), e.getX(),e.getY()); } } /** * Metodo utilizado para tornar visivel a janela de inforama��es de leis * Bem como os minuciosos detalhes da lei; */ private void ExibirDetalhes_actionPerformed(){ CircusLaw leiSelecionada = this.gerInterface.retornarLeiSelecionada(); if (leiSelecionada != null) { InfoLei infoLei = new InfoLei(leiSelecionada, this.gerInterface); infoLei.setVisible(true); } } /** * Inicializa os atributos da tela de leis. * */ private void jbInit() throws Exception { this.setEditable(false); this.setEnabled(true); this.setBackground(SystemColor.WHITE); this.setText(this.retornarMensagem("COD0592")); this.setFont(new Font("",Font.ITALIC,10)); this.setMinimumSize(new Dimension(gerInterface.getTamanhoHorizontal()*8/100, 20)); this.setMaximumSize(new Dimension(gerInterface.getTamanhoHorizontal()*35/100, 20)); this.setPreferredSize(new Dimension(gerInterface.getTamanhoHorizontal()*20/100, 20)); popUpMenu = new JPopupMenu(); aplicar = new JMenuItem(); exibir = new JMenuItem(); aplicar.setText(this.retornarMensagem("COD0288")); exibir.setText(this.retornarMensagem("COD0273")); aplicar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { try { btnAplicar_actionPerformed(e); } catch (UnificationException e1) { e1.printStackTrace(); } } }); exibir.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { ExibirDetalhes_actionPerformed(); } }); popUpMenu.add(aplicar); popUpMenu.add(new JSeparator()); popUpMenu.add(exibir); this.addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent e) { /* Butao Esquerdo do Mouse*/ if (e.getButton() == e.BUTTON1) { mostrarLeis(e); } /*Butao Direito*/ else if (e.getButton()== e.BUTTON3){ mostrarPopMenu(e); } HabilitarAplicarLei(); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } }); } /** * Esse metodo serve para abrir um popMenu de selecao de leis. * A lei selecionada tera seu namo setado no JTextField de Lei * @param e */ protected void mostrarLeis(MouseEvent e) { JPopupMenu menuLeis = new JPopupMenu(); JMenu lei = new JMenu(); ActionListener action = new ActionListener(){ public void actionPerformed(ActionEvent e) { setarTexto(e); } }; this.gerInterface.inicializarMenuDeLeis(lei, action); menuLeis.add(lei); menuLeis.show(e.getComponent(), e.getX(),e.getY()); } /** * Seta o nome da Lei selecionada no TextField * @param e */ protected void setarTexto(ActionEvent e) { if (e.getSource() instanceof JMenuItem){ if (!changeFont){ this.setFont(new Font("",Font.PLAIN,10)); changeFont = true; } this.setText(((JMenuItem)e.getSource()).getText()); this.setToolTipText(((JMenuItem)e.getSource()).getText()); this.gerInterface.retornarTelaDesenvolvimento().atualizar_Selecao(); } } /** * Metodo que habilita o JmenuItem responsavel por aplica��o de lei. * */ private void HabilitarAplicarLei() { NoPrograma noProgramaSelecionado = this.gerInterface.getSelectedProg(); CircusLaw leiInBox = this.gerInterface.retornarLeiSelecionada(); Term termoSelecionado = null; if (noProgramaSelecionado != null) { termoSelecionado = noProgramaSelecionado.getPrograma(); } this.aplicar.setEnabled(false); if (termoSelecionado != null){ if (this.gerInterface.aplicableLaws(termoSelecionado).contains(leiInBox)){ this.gerInterface.HabilitarAplicarLei(); this.aplicar.setEnabled(true); this.gerInterface.retornarTelaDesenvolvimento().selecionarLinhas(); } else { this.gerInterface.DesabilitarAplicarLei(); } } } /** * Metodo que exibi a TelaParametro coom o correspondente codigo * @param cod codigo que representa o tipo de argumento a ser digitado * @param str Guarda o nome do argumento(nome da metavari�vel) * @return */ public String mostrarTelaParametro(CodigoParametro cod, String str){ telaParametro = new TelaParametro(gerInterface); ((TelaParametro)telaParametro).mostrarTelaParametro(cod, str); return ((TelaParametro)telaParametro).getArgument(); } /** * M�todo que retorna uma mensagem que ser� impressa na tela, tanto na forma * de t�tulo quanto na forma de mensagem de erro. * * @param codigo O c�digo da mensagem que ser� retornada. * * @return Uma String que representa a mensagem de retorno. * */ public String retornarMensagem(String codigo) { String mensagem = gerInterface.getMessage(codigo); return mensagem; } }