package circusRefine.gui; /* * Projeto : Refine - Ferramenta Educacional para Refinamentos * * Tipo : FDesenvolvimento * */ import circusRefine.Tactic.Principal.Tatica; import circusRefine.core.ExternalManager; import circusRefine.core.InsertAnswer; import circusRefine.core.InsertCommentAnswer; import circusRefine.core.NoPrograma; import circusRefine.core.RemoveCommentAnswer; import circusRefine.core.developments.PODevelopmentTree; import circusRefine.gui.util.UnicodeCharacterCodeUtils; import circusRefine.util.CRefineException; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.SystemColor; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Stack; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JInternalFrame; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JOptionPane; import javax.swing.JTabbedPane; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import net.sourceforge.czt.base.ast.Term; /** * TelaDesenvolvimento � um tipo que representa a tela de desenvolvimento da * ferramenta. Apenas a Janela Interna * @author Alessandro * @author Manuela Xavier */ public class TelaDesenvolvimento extends JInternalFrame { /** * */ private static final long serialVersionUID = 1L; /* gerenciador de interface */ private ExternalManager gerInterface; /* Abas de Desenvolvimento*/ private JTabbedPane desenvolvimentos; private String path = "images/"; /** * Construtor da classe TelaDesenvolvimento * * @param gerInterface Gerenciador de todas as telas do sistema. * */ public TelaDesenvolvimento(ExternalManager gerInterface) { super (gerInterface.getMessage("COD0001"),true,false,true,true); //resizeble //maximizable //iconifiable try { this.gerInterface = gerInterface; jbInit(); } catch (Exception e) { e.printStackTrace(); } } /** * Atualiza os campos de InfoTelas referentes a janela de Desenvolvimento */ public void atualizarInfoTela () { this.gerInterface.getInfoTelas().AtualizarDes(this); } /** * Inicializa os atributos da tela de desenvolvimento. * */ private void jbInit() throws Exception { this.setLocation((gerInterface.getTamanhoHorizontal()*10)/800,(gerInterface.getTamanhoVertical()*6)/600); this.setSize( ( (gerInterface.getTamanhoHorizontal()*520) /800) , ( (gerInterface.getTamanhoVertical()*300)/600) ); this.setBackground(SystemColor.scrollbar); this.addHierarchyBoundsListener(new java.awt.event.HierarchyBoundsListener () { public void ancestorMoved(java.awt.event.HierarchyEvent e) { } public void ancestorResized(java.awt.event.HierarchyEvent e) { atualizarInfoTela(); } } ); desenvolvimentos = new JTabbedPane(); desenvolvimentos.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e) { mudarAba(e); } }); desenvolvimentos.addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent e) { //JOptionPane.showMessageDialog (null, "Clicou no botão direito do mouse"); int tabNumber=desenvolvimentos.getUI().tabForCoordinate(desenvolvimentos, e.getX(), e.getY()); if (tabNumber < 0) return ; Rectangle rect=((CloseTabIcon)desenvolvimentos.getIconAt(tabNumber)).getBounds(); if (rect.contains(e.getX(), e.getY())) { close(tabNumber, true); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } }); this.add(desenvolvimentos); } /** *Fecha o desenvolvimento perguntando se o usu�rio deseja salvar *alguma coisa */ public void close(int tabNumber, boolean askForSave) { /* Verifica se o usu�rio deseja salvar o desenvolvimento */ boolean close = true; if (gerInterface.isSubDevelopment(tabNumber)){ askForSave = false; } if (askForSave) { close = gerInterface.askforSaveDevelopment(false); } if (close){ gerInterface.removeDevelopment(tabNumber); desenvolvimentos.removeTabAt(tabNumber); gerInterface.removeAbaObri(tabNumber); if (desenvolvimentos.getTabCount() == 0){ gerInterface.limparTelaCodigo(); gerInterface.limparOpcoesColeta(); gerInterface.limparOpcoes(); } } } /** * M�todo que realiza as mudan�as necess�rias quando h� alguma mudan�a de aba *@param e evento de Mudanca de Aba */ protected void mudarAba(ChangeEvent e) { if (desenvolvimentos.getTabCount() > 0) { int id = desenvolvimentos.getSelectedIndex(); try { this.gerInterface.verificarHabilitacaoSalvar(id); this.gerInterface.mudarAbaObri(id); this.gerInterface.atualizarOpcoes(); this.gerInterface.atualizarTelaCodigo(id); this.gerInterface.inicializarOptComboBox(); this.gerInterface.atualizarOpcoesColeta(); } catch (CRefineException e1) { e1.printStackTrace(); } } } /** * 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; } public void showError(String title, String str, int tipo) { JOptionPane.showMessageDialog(null, str, title, tipo); gerInterface.setarStatus(""); gerInterface.setarFocus(); } /** * Adiciona uma aba com o desenvolvimento referenciado pelo * identificador id * @param id */ public void adicionarNovoDesenvolvimento(int id) { PanelDesenvolvimento panel = new PanelDesenvolvimento(gerInterface ,id, this.getWidth(), this.getHeight()); String nome = gerInterface.getDevelopment(id).getNome(); nome = verificarNome(nome); gerInterface.getDevelopment(id).setNome(nome); desenvolvimentos.addTab(nome, new CloseTabIcon(null), panel, nome); desenvolvimentos.setSelectedIndex(id); panel.specificationScreen(gerInterface.getDevelopment(id).getProgAtual()); } /** * Verifica se j� h� alguma aba com o mesmo nome * @param nome nome da aba a ser inserida */ private String verificarNome(String nome) { int contnames = 0; for (int i=0;i< desenvolvimentos.getTabCount();i++){ String nomeAba = desenvolvimentos.getTitleAt(i); if (contnames == 0) { if (nome.equals(nomeAba)){ contnames++; } } else { if (nomeAba.equals(nome + "(" + contnames + ")")){ contnames++; } } } if (contnames >0) nome += "(" + contnames + ")"; return nome; } /** * Atualiza a tela do Desenvolvimento identificado por i * @param id */ public void updateScreen(int id) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getComponentAt(id); des.updateScreen(); } /** * The class which generates the 'X' icon for the tabs. The constructor * accepts an icon which is extra to the 'X' icon, so you can have tabs * like in JBuilder. This value is null if no extra icon is required. */ class CloseTabIcon implements Icon { private int x_pos; private int y_pos; private int width; private int height; private Icon fileIcon; public CloseTabIcon(Icon fileIcon) { this.fileIcon=fileIcon; width=16; height=16; } public void paintIcon(Component c, Graphics g, int x, int y) { this.x_pos=x; this.y_pos=y; Color col=g.getColor(); g.setColor(Color.black); int y_p=y+2; g.drawLine(x+1, y_p, x+12, y_p); g.drawLine(x+1, y_p+13, x+12, y_p+13); g.drawLine(x, y_p+1, x, y_p+12); g.drawLine(x+13, y_p+1, x+13, y_p+12); g.drawLine(x+3, y_p+3, x+10, y_p+10); g.drawLine(x+3, y_p+4, x+9, y_p+10); g.drawLine(x+4, y_p+3, x+10, y_p+9); g.drawLine(x+10, y_p+3, x+3, y_p+10); g.drawLine(x+10, y_p+4, x+4, y_p+10); g.drawLine(x+9, y_p+3, x+3, y_p+9); g.setColor(col); if (fileIcon != null) { fileIcon.paintIcon(c, g, x+width, y_p); } } public int getIconWidth() { return width + (fileIcon != null? fileIcon.getIconWidth() : 0); } public int getIconHeight() { return height; } public Rectangle getBounds() { return new Rectangle(x_pos, y_pos, width, height); } } /** * Atualiza a sele��o da aba selecionada */ public void atualizar_Selecao() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.atualizar_Selecao(); } /** * Seleciona linhas da Aba selecionada */ public void selecionarLinhas() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.selecionarLinhas(); } /** * Pega o indice da aba selecionada. */ public int getSelectedDevelopment() { return desenvolvimentos.getSelectedIndex(); } /** * Pega o indice da aba selecionado * @param . */ public NoPrograma retornarProgSelecionado(int id) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); return des.retornarProgSelecionado(id); } /** * * @return as linhas selecionadas da aba selecionada */ public int[] retornarLinhasSelecionadas() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); return des.retornarLinhaSelecionada(); } /** * * @param i linha inicial * @param j linha final * @return se h� coment�rio que compreende as linhas i e j */ public boolean temComentario(int i, int j) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); return des.temComentario(i, j); } /** * Atualiza a aba selecionada * */ public void updateSelectedScreen() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.updateScreen(); } public boolean hasProgram() { if (desenvolvimentos.getTabCount() > 0) return true; return false; } /** * Atualiza identificador de Lei do texto da aba Selecionada * @param b caso esse m�todo tenha sido invocado numa a��o de undo */ public void updateLawIdentifierGUI(boolean b) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.updateLawIdentifierGUI(b); } /** * Constroi o texto resultante de alguma a��o do programa no * PanelDesenvolvimento * @param termoResultante termo de que se extrair� o texto * @param string indica o tipo de a��o * @param linhaInicial a linha Identificada por uma possivel lei * @param b booleano auxiliar que indica se haver� armazenamento * de rela��o */ public void buildProgText(Term termoResultante, String string, int linhaInicial, boolean b) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.buildProgText(termoResultante, string, linhaInicial, b); } /** * * @return Identificador de Lei */ public int getIdt() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); return des.getIdt(); } /** * Retira a sele��o do desenvolvimento utilizado * */ public void tirarSelecao() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.tirarSelecao(); } public void esvaziarRedoPilhas() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.esvaziarRedoPilhas(); } /** * M�todo que coloca a barrinha de rolagem pra baixo apos aplica��o de uma lei */ public void desceRoll() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); JScrollBar bar = des.getRoll().getVerticalScrollBar(); bar.setValue(bar.getMaximum()); } /** * Produz o texto do termo coletado * @param termoColetado */ public void collectedScreen(Term termoColetado) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.collectedScreen(termoColetado); } /** * Esvazia as Pilhas do panel desenvolvimento * */ public void esvaziarPilhas() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.esvaziarPilhas(); } /** * Desfaz a aplicacao de Lei * */ public void desfazerAplicLei() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.desfazerAplicLei(); } /** * Atualiza identificadores de comentario na linha passado como par�metro * @param linha */ public void updateCommentIdentifierGUI(int linha) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.updateCommentIdentifierGUI(linha); } /** * Invoca o metodo do pael Desenvolvimento para * recontruir o texto de um termo passado como par�metro * @param progResultante termo resultante de aplica��o de uma lei */ public void reappplyScreen(Term progResultante) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.reappplyScreen(progResultante); } /** * Retira as ultimas Linhas do Desenvolvimento * */ public void retirarUltimasLinhas() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.retirarUltimasLinhas(); } /** * Seleciona a linha passada como par�metro do * Desenvolvimento utilizado * @param toSelect linha a ser selecionada */ public void selecionarLinha(int toSelect) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.selecionarLinha(toSelect); } public void normalizarSelecao(int toSelect) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.normalizarSelecao(toSelect); } /** * Seleciona a aba passada como par�metro * @param id */ public void selecionarAba(int id) { if (id < desenvolvimentos.getTabCount()){ desenvolvimentos.setSelectedIndex(id); } } /** * Pega o comentario do desenvolvimento em quest�o * cuja linha inicial � i a linha final � j * @param i linha inicial do comentario * @param j linha final do comentario * @return comentario selecionado */ public Comentario getComentario(int i, int j) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); return des.getComentario(i, j); } /** * Insere um coment�rio * @param text texto do comentario * @param linhaInicial * @param linhaFinal * @return passo de execu��o do programa que representa a inser��o do coment�rio */ public InsertCommentAnswer inserirComentario(String text, int linhaInicial, int linhaFinal) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); return des.inserirComentario(text, linhaInicial, linhaFinal); } /** * Edita um coment�rio explicitando as linhas inicial e final do * coment�rio * * @param text o novo conte�do do coment�rio * @param linhaInicial a linha inicial do coment�rio * @param linhaFinal a linha final do coment�rio */ public Comentario editarComentario(String text, int linhaInicial, int linhaFinal) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); return des.editarComentario(text, linhaInicial, linhaFinal); } /** * * @param comment comentario a ser removido * @return passo de execu��o que representa a remo��o do coment�rio */ public RemoveCommentAnswer removerComentario(Comentario comment) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); return des.removerComentario(comment); } /** * desfaz a inser��o do �ltimo coment�rio * */ public void desfazerAdicaoComentario() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.desfazerAdicaoComentario(); } /** * refaz a inser��o do �ltimo coment�rio * */ public void refazerAdicaoComentario() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.refazerAdicaoComentario(); } /** * Desfaz a remo��o do �ltimo Coment�rio * */ public void desfazerRemocaoComentario() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.desfazerRemocaoComentario(); } /** * Refaz a remo��o do �ltimo Coment�rio * */ public void refazerRemocaoComentario() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.refazerRemocaoComentario(); } /** * * @return a lista de comentarios do aba selecionada */ public ArrayList getComentarios() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); return des.getComentarios(); } public Stack getRemovedComments() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); return des.getRemovedComments(); } /** * Imprime o texto na tela como um carregamento inicial * @param ast */ public void setarTelaTextoDePrograma(Term ast) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.setarTelaTextoDePrograma(ast); } /** * Exibi o paragrafo inserido na tela Desenvolvimento * @param resposta */ public void displayParagraph(InsertAnswer resposta) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.displayParagraph(resposta); } /** * * @return Um array de Strign que contem o texto Selecionado na Tela Desenvolvimento */ public ArrayList getTextoSelecionado() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); return des.getTextoSelecionado(); } /** * * @return se todas as abas foram fechadas */ public void fecharAbas() { int size = desenvolvimentos.getTabCount(); for (int i=0; i < size;i++){ desenvolvimentos.setSelectedIndex(i); gerInterface.askforSaveDevelopment(true); } } public void showProvedTitle() { /** * Mudando o Title; */ int index = this.desenvolvimentos.getSelectedIndex(); this.desenvolvimentos.setTitleAt(index, this.desenvolvimentos.getTitleAt(index) + UnicodeCharacterCodeUtils.heavyCheckedMark); } public void bloquearDesenvolvimento() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.bloquearDesenvolvimento(); } public void liberarDesenvolvimento() { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.liberarDesenvolvimento(); } public void updateLawIdentifierGUITactic(boolean b, int linha) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.updateLawIdentifierGUITactic(b, linha); } public void buildProgTextTatica(Term termoResultante, String string, int linhaInicial, boolean b, Tatica tatica) { PanelDesenvolvimento des = (PanelDesenvolvimento)desenvolvimentos.getSelectedComponent(); des.buildProgTextTatica(termoResultante, string, linhaInicial, b, tatica); } }