/*
* Teclado.java
*
* Created on 25 de junio de 2009, 10:55
*/
package Interfaz;
import Funcion.Barrido;
import Manejo.Movimiento;
import Manejo.MovimientoTablero;
import Manejo.Seleccion;
import Manejo.TratamientoDatosRun;
import Tipos.Tablero;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javax.swing.SpinnerListModel;
public class Teclado extends javax.swing.JDialog {
public static String[] teclas= {"ENTER","Q","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","�",
"Z","X","C","V","B","N","M","SPACE","flecha derecha","flecha izquierda",
"flecha arriba","flecha abajo","0","1","2","3","4","5","6","7","8","9"};
public static String[] disponibles= new String[44];
//public static String tecla="ENTER";
public static String teclaSel="ENTER";
public static String teclaBarr="ENTER";
public static TratamientoDatosRun tdr;
public static Tablero t = Tablero.getInstance();
//List<String> disponibles= new ArrayList<String>();
static {
try {
//System.load("c:\\driverTeclado.dll");
//System.load("/home/josh/isa/prueba.so");
System.loadLibrary("driverTeclado");
System.out.println("Libreria teclado cargada");
} catch (UnsatisfiedLinkError e) {
System.out.println("No se puede cargar la libreria dinamica");
}
}
public boolean alPulsar=true;
boolean cambioEstado=true;
public int tecladoUso;
// uso: 0= manejo; 1= barrer por filas; 2= barrer por columnas; 3= barrer por columnas 2D; 4= no se utiliza
public Teclado(javax.swing.JFrame parent, boolean modal, int uso){ // quitar el uso de aqui
super(parent, modal);
//tecladoUso=uso;
}
public void finalizar(){
unRegisterHook();
}
public void almacenarLibres(){
int j=0;
for (int i=0; i< teclas.length; i++){
if (teclaLibre(teclas[i])){
//System.out.println("libre");
this.disponibles[j]=teclas[i];
j++;
}
}
}
public class ThreadLanzar extends Thread {
Teclado tthread;
public ThreadLanzar(String str,Teclado t) {
super(str);
tthread=t;
}
public void run() {
System.out.println("Entro a run");
registerHook();
}
}
// <editor-fold defaultstate="collapsed" desc=" C�digo Generado ">//GEN-BEGIN:initComponents
private void initComponents() {
buttonGroupGenerar = new javax.swing.ButtonGroup();
jPanelSeleccionar = new javax.swing.JPanel();
jSpinnerTeclas = new javax.swing.JSpinner();
jButtonAceptar = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("");
setLocationByPlatform(true);
jPanelSeleccionar.setBorder(javax.swing.BorderFactory.createTitledBorder("Seleccione la tecla"));
jSpinnerTeclas.setModel(new SpinnerListModel(disponibles));
jSpinnerTeclas.setFocusCycleRoot(true);
jSpinnerTeclas.setFocusable(false);
javax.swing.GroupLayout jPanelSeleccionarLayout = new javax.swing.GroupLayout(jPanelSeleccionar);
jPanelSeleccionar.setLayout(jPanelSeleccionarLayout);
jPanelSeleccionarLayout.setHorizontalGroup(
jPanelSeleccionarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelSeleccionarLayout.createSequentialGroup()
.addGap(88, 88, 88)
.addComponent(jSpinnerTeclas, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(102, Short.MAX_VALUE))
);
jPanelSeleccionarLayout.setVerticalGroup(
jPanelSeleccionarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelSeleccionarLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jSpinnerTeclas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jButtonAceptar.setText("Aceptar");
jButtonAceptar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonAceptarActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButtonAceptar, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanelSeleccionar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanelSeleccionar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButtonAceptar)
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void jButtonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAceptarActionPerformed
// // Boton seleccionado
//tecla= jSpinnerTeclas.getValue().toString();
if (this.tecladoUso==t.SELECCIONAR){
System.out.println("Sel");
t.teclaSeleccion= ((String)jSpinnerTeclas.getValue());
teclaSel= t.teclaSeleccion;
} else if (this.tecladoUso==t.BARRER){
System.out.println("Barr");
t.teclaBarrido=((String)jSpinnerTeclas.getValue());
System.out.println("spinner justo despues: " + (String)jSpinnerTeclas.getValue());
teclaBarr= t.teclaBarrido;
}
System.out.println("tecladoUso: " + tecladoUso);
//System.out.println("tecla: " + tecla);
System.out.println("tecla Seleccion: " + t.teclaSeleccion);
System.out.println("tecla barrer: " + t.teclaBarrido);
System.out.println("Valor del spinner antes de salir: " + (String)jSpinnerTeclas.getValue());
this.dispose();
}//GEN-LAST:event_jButtonAceptarActionPerformed
// int processKey(int key, boolean pressed) {
// String s;
// System.out.println("uso: " + t.uso_teclado + " tecla reconocida: " + key + "tecla capt: "+ tecla);
// if (decodificar(key).equals(tecla)){
// return(1);
// }
// else return(0);
// }
int processKey(int key, boolean pressed) {
String s;
//System.out.println("---------------------He recibido: " + decodificar(key));
//System.out.println("uso: " + t.uso_teclado + " tecla reconocida: " + key + "tecla capt: "+ tecla);
if ((decodificar(key).equals("ESC"))){
System.out.println("He pulsado ESC desde driver teclado y lo dejo pasar");
return(0); // no capturo la tecla
}
else if (((decodificar(key).equals(teclaSel) && (t.uso_teclado==t.SELECCIONAR)))
|| ((decodificar(key).equals(teclaBarr) && (t.uso_teclado==t.BARRER)))
|| ((((decodificar(key).equals(teclaSel)||(decodificar(key).equals(teclaBarr))) && (t.uso_teclado==t.SELEC_BARRER))))
){
System.out.println("INFO: pressed: "+ pressed + " cambioEstado: "+ cambioEstado + " arrastrando: "+ Seleccion.arrastrando +" activo: "+ t.activo.getName());
if ((t.uso_teclado==t.SELECCIONAR) || ((t.uso_teclado== t.SELEC_BARRER) && (decodificar(key).equals(teclaSel)))){ // seleccionar
if (
(((((t.tipoMovimiento== t.NOMANTENIDOPULSAR)|| (t.tipoMovimiento==t.MANTENIDO))&& pressed && cambioEstado) ||
((t.tipoMovimiento== t.NOMANTENIDOSOLTAR)&& (!pressed)))
&& (!t.activo.getName().equals("Parar") ))
||
(
(
((t.tipoMovimiento== t.NOMANTENIDOPULSAR)&& pressed && cambioEstado) ||
(
((t.tipoMovimiento== t.NOMANTENIDOSOLTAR)|| (t.tipoMovimiento== t.MANTENIDO))&& (!pressed))
)
&& (t.activo.getName().equals("Parar"))
)
)
{
System.out.println("******************** Se toma en cuenta: "+ pressed);
if (pressed){
if (cambioEstado){
cambioEstado=false;
System.out.println("Pressed, cambiamos de estado a false");
}
} else{
cambioEstado=true;
}
if ((Barrido.barriendo)&& (t.barrido==t.AUTOMATICO)){
if (((t.tipoBarrido==t.B_FILAS)|| (t.tipoBarrido==t.B_COLUMNAS))&&(t.primeraFase)){
System.out.println("Barrido 2 fases en primera fase");
t.primeraFase=false;
Barrido.resetBarrido();
} else{
System.out.println("Barrido 2 fases en segunda fase");
System.out.println("___________________Activo: " + t.activo.getName());
//Manejo.TratamientoDatos.tratarEnter();
tdr= new TratamientoDatosRun("tenter");
tdr.start();
}
// }
}
// si estamos seleccionando y el barrido es manual
else if ((t.barrido==t.MANUAL_FILAS_COLUMNAS)|| (t.barrido== t.MANUAL_FILAS)|| (t.barrido==t.MANUAL_COLUMNAS)){
System.out.println("Es barrido manual y estoy seleccionando");
if ((t.barrido==t.MANUAL_FILAS_COLUMNAS)&& (t.seleccionandoFila)){
System.out.println("He elegido una fila");
//t.barrido= t.MANUAL_COLUMNAS;
t.seleccionandoFila=false;
// limpio todos los botones
int iter=0;
while((iter < t.coleccion.size())){
t.coleccion.get(iter).setOpaque(true);
t.coleccion.get(iter).setBackground(t.colorBot);
iter++;
}
// Revisar si la 1� es parar
MovimientoTablero.seleccionar(t.coleccion.get(t.filaBarrida*t.columnas));
} else { // si es manual: filas, columnas, o filas_columnas sin seleccionar fila
System.out.println("Elijo la activa");
System.out.println("___________________Activo: " + t.activo.getName());
//Manejo.TratamientoDatos.tratarEnter();
tdr= new TratamientoDatosRun("tenter");
tdr.start();
}
}
}
else if ((t.tipoMovimiento== t.NOMANTENIDOPULSAR)&& (!pressed)){
cambioEstado=true;
System.out.println("******************** Se deja pasar NOMANTENIDOPULSAR: "+ pressed);
return(0);
}
else if ((t.tipoMovimiento== t.NOMANTENIDOSOLTAR)&& (pressed)){
System.out.println("******************** Se deja pasar NOMANTENIDOSOLTAR: "+ pressed);
cambioEstado=false;
return(0);
}
else if ((t.tipoMovimiento== t.MANTENIDO)&& pressed){// && (t.activo.getName().equals("Parar"))){
System.out.println("******************** Se deja pasar MANTENIDO: "+ pressed);
cambioEstado=false;
return(0);
}
else if ((t.tipoMovimiento== t.MANTENIDO)&& (!pressed)){// && (!t.activo.getName().equals("Parar"))){
System.out.println("******************** Se deja pasar MANTENIDO: "+ pressed);
cambioEstado=true;
return(0);
}
// } // fin if grande
} // fin seleccionar
// si el teclado se usa para barrer manualmente
else if ((t.usoBarrer("teclado"))|| ((t.uso_teclado== t.SELEC_BARRER) && (decodificar(key).equals(teclaBarr)))) {
if (pressed && cambioEstado ){
cambioEstado=false;
System.out.println("Barro manualmente con el teclado");
// si barro por columnas
if (t.barrido==t.MANUAL_COLUMNAS){
System.out.println("Activo manualmente: " + t.activo.getName());
if (!t.enMovimiento){
MovimientoTablero.MoverDerecha();
}
} else if (t.barrido==t.MANUAL_FILAS){
System.out.println("Activo manualmente: " + t.activo.getName());
if (!t.enMovimiento){
MovimientoTablero.MoverAbajoCircular();
}
} else if (t.barrido==t.MANUAL_FILAS_COLUMNAS){
// si estoy seleccionando la fila
if (t.seleccionandoFila){ // falta manual en filas y columnas
if (t.filaBarrida<(t.filas-1)){
t.filaBarrida++;
} else {
t.filaBarrida=0;
}
System.out.println("Fila barrida: "+ t.filaBarrida);
MovimientoTablero.barridoManualPorFilas(t.filaBarrida);
System.out.println("Me movere por las filas");
//t.seleccionandoFila=false;
} else{ // ya no estoy seleccionando fila
if (!t.enMovimiento){
MovimientoTablero.barridoManualPorFilas(t.filaBarrida);
System.out.println("Me movere por las columnas de esa fila");
}
}
}
} // fin pressed de barrer
else if (!pressed){ // released
cambioEstado=true;
}
} // fin barrer
return(1);
}
// la tecla no es la que busco
else{
//cambioEstado=true;
System.out.println("Antes de return 0");
return(0); // no capturo la tecla
}
// System.out.println("NOOOOOO Capturada");
}
public static String decodificar(int tecla){
if (tecla==65) return "A";
else if (tecla==66) return "B";
else if (tecla==67) return "C";
else if (tecla==68) return "D";
else if (tecla==69) return "E";
else if (tecla==70) return "F";
else if (tecla==71) return "G";
else if (tecla==72) return "H";
else if (tecla==73) return "I";
else if (tecla==74) return "J";
else if (tecla==75) return "K";
else if (tecla==76) return "L";
else if (tecla==77) return "M";
else if (tecla==78) return "N";
else if (tecla==192) return "�";
else if (tecla==79) return "O";
else if (tecla==80) return "P";
else if (tecla==81) return "Q";
else if (tecla==82) return "R";
else if (tecla==83) return "S";
else if (tecla==84) return "T";
else if (tecla==85) return "U";
else if (tecla==86) return "V";
else if (tecla==87) return "W";
else if (tecla==88) return "X";
else if (tecla==89) return "Y";
else if (tecla==90) return "Z";
else if (tecla==32) return "SPACE";
else if (tecla==48) return "0";
else if (tecla==49) return "1";
else if (tecla==50) return "2";
else if (tecla==51) return "3";
else if (tecla==52) return "4";
else if (tecla==53) return "5";
else if (tecla==54) return "6";
else if (tecla==55) return "7";
else if (tecla==56) return "8";
else if (tecla==57) return "9";
else if (tecla==27) return "ESC";
else if (tecla==13) return "ENTER";
else if (tecla==39) return "flecha derecha";
else if (tecla==37) return "flecha izquierda";
else if (tecla==38) return "flecha arriba";
else if (tecla==40) return "flecha abajo";
else return(" ");
}
public void capturar(String mitecla){
capturaTecla(mitecla);
}
native boolean teclaLibre(String tecla);
native void capturaTecla(String tecla);
native void registerHook();
native void unRegisterHook();
public void lanzarRegister(){
ThreadLanzar tl=new ThreadLanzar("Lanzar",this);
tl.start();
}
public void crearInterfaz(int uso) {
if (this.jSpinnerTeclas != null){
System.out.println("Valor spinner ppio: " + ((String)this.jSpinnerTeclas.getValue()));
}
System.out.println("crearInterfaz con uso: " + uso);
tecladoUso=uso;
if (t.tipoMovimiento==t.NOMANTENIDOPULSAR) alPulsar= true;
else if (t.tipoMovimiento==t.NOMANTENIDOSOLTAR) alPulsar= false;
//manejoTeclado=teclado;
// ThreadLanzar tl=new ThreadLanzar("Lanzar",this);
// tl.start();
// miro a ver las teclas que estan libres
almacenarLibres();
initComponents();
ActualizarIdioma();
System.out.println("Valor spinner despues: " + ((String)this.jSpinnerTeclas.getValue()));
if (this.tecladoUso== t.SELECCIONAR){
System.out.println("Asigno sel");
jSpinnerTeclas.setValue((String)t.teclaSeleccion);
} else if (this.tecladoUso== t.BARRER){
System.out.println("Asigno barrido");
jSpinnerTeclas.setValue((String)t.teclaBarrido);
}
// Creamos la interfaz
if (this.tecladoUso==t.SELECCIONAR){
//this.setTitle("Manejo Teclado");
jPanelSeleccionar.setBorder(javax.swing.BorderFactory.createTitledBorder(ResourceBundle.getBundle("idiomas.fich_idiomas",t.Idiomas).getString("strSeleccionar")));
} else if (this.tecladoUso==t.BARRER){
System.out.println("Barrido");
//this.setTitle("Barrido manual con el teclado");
jPanelSeleccionar.setBorder(javax.swing.BorderFactory.createTitledBorder(ResourceBundle.getBundle("idiomas.fich_idiomas",t.Idiomas).getString("strSeleccionarManual")));
}
this.setVisible(true);
}
private void ActualizarIdioma() {
this.jPanelSeleccionar.setBorder(javax.swing.BorderFactory.createTitledBorder(ResourceBundle.getBundle("idiomas.fich_idiomas",t.Idiomas).getString("strSeleccionar")));
this.setTitle(ResourceBundle.getBundle("idiomas.fich_idiomas",t.Idiomas).getString("strTituloTeclado"));
this.jButtonAceptar.setText(ResourceBundle.getBundle("idiomas.fich_idiomas",t.Idiomas).getString("strAceptar"));
}
// Declaraci�n de varibales -no modificar//GEN-BEGIN:variables
private javax.swing.ButtonGroup buttonGroupGenerar;
private javax.swing.JButton jButtonAceptar;
private javax.swing.JPanel jPanelSeleccionar;
private static javax.swing.JSpinner jSpinnerTeclas;
// Fin de declaraci�n de variables//GEN-END:variables
}