import javax.swing.*; import java.awt.*; import java.io.*; import java.awt.event.*; import java.util.ArrayList; import java.awt.geom.*; /** * Clase EditorPanel * Panel en que se dibujan las formas que conforman el diagrama de bloques. * @author Patricio A. Castillo Pizarro - Eric C. Maldonado Olguin * @version 1.4 - Jun 16th, 2007 */ public class EditorPanel extends JPanel { private JTextArea textA1; private JTextArea textA2; private ArrayList formas; private MouseListener currentMouseListener; private MouseMotionListener currentMouseMotionListener; private int seleccion = -1; private int contador = 0; public File archivoGuardado = null; public String nombrePrograma = new String("Nuevo Programa"); public String panelNQC = new String(); public String panelOUT = new String(); public String tipo = new String("RCX"); public String slot = new String("1"); public String puerto = new String("usb"); /** * Constructor de clase. */ public EditorPanel(JTextArea A1, JTextArea A2) { super(); textA1 = A1; textA2 = A2; setBackground(Color.BLACK); formas = new ArrayList(); currentMouseListener = null; currentMouseMotionListener = null; contador = 0; } /** * Dibuja los componentes graficos. * @param g el grafico en que se dibujan los componentes. */ public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d=(Graphics2D) g; for ( int i=0; i50){ textA1.setText(this.generarNQC()); contador = 0; } } /** * Cambia el listener de las acciones del mouse en el panel. * @param listener nuevo listener asignado. */ public void changeMouseListener(MouseListener listener) { if (currentMouseListener != null) removeMouseListener(currentMouseListener); currentMouseListener = listener; addMouseListener(currentMouseListener); } /** * Cambia el listener de los movimientos del mouse en el panel. * @param listener nuevo listener asignado. */ public void changeMouseMotionListener(MouseMotionListener listener) { if (currentMouseMotionListener != null) removeMouseMotionListener(currentMouseMotionListener); currentMouseMotionListener = listener; addMouseMotionListener(currentMouseMotionListener); } /** * Incorpora una forma en la lista de componentes y se vuelve a dibujar. * @param forma forma que se agrega. */ public void incorpore (Forma forma) { formas.add(forma); repaint(); } /** * Remueve una forma de la lista de componentes y se vuelve a dibujar. * @param forma forma que se remueve. */ public void remueva (Forma forma) { formas.remove(forma); repaint(); } /** * Activa la manipulacion de los componentes. * El circuito se vuelve a dibujar para mostrar los puntos de manipulacion. * Los puntos de manipulacion se han comentado en las clases, este metodo fue util para el diseno de la aplicacion y queda disponible para futuros usos. */ public void manipulating() { for(int i=0; i getFormas(){ return formas; } /* * Permite limpiar los datos almacenados en el panel. */ public void limpiar(){ formas.clear(); removeMouseMotionListener(currentMouseMotionListener); removeMouseListener(currentMouseListener); seleccion = -1; archivoGuardado = null; nombrePrograma = new String("Nuevo Programa"); panelNQC = new String(); panelOUT = new String(); tipo = new String("RCX"); slot = new String("1"); puerto = new String("usb"); repaint(); } /* * Verifica si ya existe un bloque "variable" con el nombre indicado. * @param var El nombre de la variable. * @return Retorna verdadero si ya existe un bloque "variable" con el * mismo nombre o falso si no lo hay. */ public boolean checkName(String var) { String data = new String(); String program = new String(); String nombre = new String(); String previousVar = new String(); for(int i=0; i getFiguras(){ return formas; } public String generarNQC () { Point temp[] = new Point[10]; int number = 0; int pos = 200; int max[] = new int[10]; panelNQC = new String(); panelNQC = panelNQC + " Codigo NQC para su programa: " + nombrePrograma + "\n\n task main(){\n "; for (int i=50; i < this.getHeight(); i=i+50) { if (find(new Point(pos,i)) != null) { panelNQC = panelNQC + this.find(new Point(pos,i)).getProgram()+"\n "; String data = this.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); panelNQC = panelNQC + "} else {\n "; } else { if (i < max[number-1]) i = max[number-1]-50; pos = pos - 50; number--; panelNQC = panelNQC + "\n "; } } } } panelNQC = panelNQC + "}"; return panelNQC; } } //Fin clase EditorPanel