package circusRefine.gui; /* * Projeto : Refine - Ferramenta Educacional para Refinamentos * * Tipo : TelaCodigo * */ import circusRefine.core.ExternalManager; import circusRefine.core.print.Printer; //import circusRefine.core.printUni.PrinterUni; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.SystemColor; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import javax.swing.JTabbedPane; import javax.swing.JTextArea; import javax.swing.JScrollPane; import javax.swing.JTextField; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import jcircus.JCircusControllerFrame; import jcircus.gui.JCircusFrame; import net.sourceforge.czt.base.ast.Term; /** * TelaCodigo � um tipo que representa a tela do c�digo gerado. */ public class TelaCodigo extends JInternalFrame { /** * */ private static final long serialVersionUID = 1L; private ExternalManager gerInterface; public static final int Unicode = 1; public static final int Latex = 2; JTextArea TACodigo = new JTextArea(); JScrollPane rolagem; JCircusControllerCodigo controllerCodigo = new JCircusControllerCodigo (); JPopupMenu menuTraducao = new JPopupMenu (); //By Samuel Barrocas JMenu jcircus = new JMenu ("JCircus"); //By Samuel Barrocas JMenuItem translate = new JMenuItem ("Translate 2 Java"); //By Samuel Barrocas private String filePath = "";//By Samuel Barrocas public void setFilePath (String p) { //By Samuel Barrocas this.filePath = p; } public String getFilePath () { //By Samuel Barrocas return this.filePath; } /** * Construtor da classe TelaCodigo. * * @param gerInterface Gerenciador de todas as telas do sistema. * */ public TelaCodigo(ExternalManager gerInterface) { super (gerInterface.getMessage("COD0083"),true,false,true,true); //resizeble //maximizable //iconifiable try { this.gerInterface = gerInterface; jbInit(); } catch (Exception e) { e.printStackTrace(); } } /** * M�todo que retorna uma String representando todo o conte�do da tela de * c�digo. * * @return Uma String representando todo o conte�do da tela de * c�digo. * */ public String getTextoCodigo() { String textoCodigo = TACodigo.getText(); return textoCodigo; } public static String pathFromJFileChooser (JFileChooser jfc) { String path = ""; jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if(jfc.showOpenDialog(jfc) == JFileChooser.APPROVE_OPTION){ path = jfc.getSelectedFile().getPath(); } return path; } /** * Atualiza os campos de InfoTelas referentes a janela de Codigo */ public void atualizarInfoTela () { this.gerInterface.getInfoTelas().AtualizarCod(this); } /** * Inicializa os atributos da tela de c�digo. * */ private void jbInit() throws Exception { this.setBackground(SystemColor.scrollbar); this.setLocation( ( (gerInterface.getTamanhoHorizontal()*545)/800 ) , ( (gerInterface.getTamanhoVertical()*6)/600)); this.setSize(( (gerInterface.getTamanhoHorizontal()*240) /800) , ( (gerInterface.getTamanhoVertical()*477)/600) ); this.addHierarchyBoundsListener(new java.awt.event.HierarchyBoundsListener () { public void ancestorMoved(java.awt.event.HierarchyEvent e) { } public void ancestorResized(java.awt.event.HierarchyEvent e) { atualizarInfoTela(); } } ); translate.addActionListener( new ActionListener () { public void actionPerformed (ActionEvent e) { String path = ""; JFileChooser chooser = new JFileChooser (); path = pathFromJFileChooser (chooser); try { controllerCodigo.translate(getFilePath(), path, "paper", getNameFromPath (path), true, true, false/*, 0, max*/); } catch (Exception e1) { // TODO Auto-generated catch block System.out.println (e1); } } } ); jcircus.add(translate); menuTraducao.add(jcircus); TACodigo.addMouseListener ( new MouseListener () { public void mouseClicked(MouseEvent arg0) { //System.out.println ("Mouse Clicked"); if (arg0.getButton() == arg0.BUTTON1) { //System.out.println ("Esquerdo"); } else if (arg0.getButton() == arg0.BUTTON3) { //Botão direito do mouse menuTraducao.show(arg0.getComponent(), arg0.getX(), arg0.getY()); } } public void mouseEntered(MouseEvent arg0) { //System.out.println ("Mouse Entered"); } public void mouseExited(MouseEvent arg0) { //System.out.println ("Mouse Exited"); } public void mousePressed(MouseEvent arg0) { System.out.println ("Mouse Pressed"); } public void mouseReleased(MouseEvent arg0) { System.out.println ("Mouse Released"); } } ); this.add(menuTraducao); //this.setTitle(this.retornarMensagem("COD0083")); this.setLayout(new BorderLayout()); TACodigo.setBackground(Color.white); TACodigo.setBounds(-3, 0, 334, 218); TACodigo.setFont(new Font("CZT", 4, 12)); TACodigo.setEditable(false); rolagem = new JScrollPane(TACodigo); this.add(rolagem, BorderLayout.CENTER); } public String getNameFromPath (String path) { String str = ""; int b2 = path.length() - 1; int aux = b2; for (int i = b2; i >= 0; i--) { if (path.charAt(i) == '/') { aux = i; } } return path.substring (aux + 1, b2); } /** * Limpa o conte�do de texto que est� na tela de c�digo. * */ public void limparTexto() { TACodigo.setText(""); } /** * M�todo que funciona como uma esp�cie de reset da tela de c�digo. * Respons�vel por inicializar a maioria dos atributos desta tela. * * @param gerInterface Gerenciador de todas as telas do sistema. * */ public void novaTela(ExternalManager gerInterface) { TACodigo.setText(""); this.gerInterface = gerInterface; } /** * 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; } /** * M�todo que limpa o texto anterior da tela e coloca o novo texto. * * @param programa Programa � ser colocado na tela de c�digo. * */ public void setarTela(Term programa) { this.limparTexto(); this.setarTelaTexto(programa); } /** * M�todo que pega uma String obtida a partir de um programa e seta na * tela no formato padr�o de c�lculo de programas. * * @param programa Programa a ser colocado na tela. * */ private void setarTelaTexto(Term programa) { Printer printer = null; printer = new Printer(gerInterface.getMark(),false); String[] strProg = (String[])printer.visitTerm(programa); String strShow = ""; int tamTexto = strProg.length; for(int i=0; i