import java.awt.event.*; import java.awt.*; import java.io.*; import javax.swing.*; /** * Clase MenuProgramaCompilar * Permite guardar el programa y generar el codigo para enviar al robot. * @author Patricio A. Castillo Pizarro - Eric C. Maldonado Olguin * @version 1.7 - Jun 25th, 2007 */ class MenuProgramaCompilar implements MouseListener { private EditorPanel panel; private JTextArea textA1; private JTextArea textA2;; /** * Constructor. * @param p Panel en que se encuentra el programa grafico a compilar */ public MenuProgramaCompilar(EditorPanel p,JTextArea A1,JTextArea A2) { panel = p; textA1=A1; textA2=A2; } /** *Metodo que define las acciones a realizar al presiona el boton del mouse *@param event Parametro que indica la accion realizada por el mouse */ public void mousePressed(MouseEvent event){ //Primero se verifica que este presente el compilador String compiler = new String(); String sls = new String(System.getProperty("file.separator")); try{ String path = new File(".").getCanonicalPath(); compiler = path+sls+"nqc.exe"; if (!new File(compiler).exists()){ JOptionPane.showMessageDialog(null, "No se encuentra el programa interfaz.\nAsegurese que " +"\"nqc.exe\" se encuentra en la ruta desde la que se " +"esta ejecutando esta aplicacion:\n"+path+"\nSolo se " +"creara el archivo \".nqc\".", "Advertencia", JOptionPane.WARNING_MESSAGE); } }catch (IOException e) { e.printStackTrace(); } //Este codigo permite escoger el archivo JFileChooser fcSave = new JFileChooser(); fcSave.setSelectedFile(new File("*.nqc")); fcSave.setFileFilter(new FileFilterNQC()); int return_fcSave = fcSave.showSaveDialog(null); //Este codigo permite grabar el codigo en el archivo ".nqc" //y luego compilarlo en un archivo del mismo nombre ".rcx". File fileToSave = fcSave.getSelectedFile(); if (return_fcSave == JFileChooser.APPROVE_OPTION) { //Se graba el archivo ".nqc". try { BufferedWriter salida =new BufferedWriter( new FileWriter(fileToSave.getAbsolutePath())); salida.write(" //Programa Creado Con Lego JEP\n\n " + "task main(){\n "); Point temp[] = new Point[10]; int number = 0; int pos = 200; int max[] = new int[10]; panel.panelNQC = new String(); panel.panelNQC = panel.panelNQC + " Codigo NQC para su programa: " + panel.nombrePrograma + "\n\n task main(){\n "; for (int i=50; i < panel.getHeight(); i=i+50) { if (panel.find(new Point(pos,i)) != null) { salida.append( panel.find(new Point(pos,i)).getProgram()+ "\n "); panel.panelNQC = panel.panelNQC + panel.find(new Point(pos,i)).getProgram()+"\n "; String data = panel.find(new Point(pos,i)).getData(); if (data.substring(0, data.indexOf("---")).equals("SiNo")){ temp[number] = new Point(i,1); pos = pos - 50; number++; } } else { if(number > 0){ if (temp[number-1].getY() == 1){ max[number-1] = i; i = (int)temp[number-1].getX(); pos = pos + 100; temp[number-1].setLocation(i,0); salida.append("} else {\n "); panel.panelNQC = panel.panelNQC + "} else {\n "; } else { if (i < max[number-1]) i = max[number-1]-50; pos = pos - 50; number--; salida.append("}\n "); panel.panelNQC = panel.panelNQC + "\n "; } } } } panel.panelNQC = panel.panelNQC + "}"; textA1.setText(panel.panelNQC); salida.append("}"); salida.close(); } catch (IOException e) { System.out.println("No se puede escribir el archivo"); JOptionPane.showMessageDialog(null, "No se puede escribir el archivo.", "Error", JOptionPane.ERROR_MESSAGE); } //Finalmente se compila el archivo ".rcx" if (new File(compiler).exists()) { String nqcfile = new String(fileToSave.getName()); String rcxfile = new String(); int i = nqcfile.lastIndexOf("."); if ((i>0)&&(i