<commit_before>/**
 * 
 */
package sibtra.gps;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import sibtra.util.EligeSerial;
import sibtra.util.LabelDato;
import sibtra.util.LabelDatoFormato;
import sibtra.util.PanelDatos;
import Jama.Matrix;

/**
 * {@link JPanel} para mostrar los datos más significativos de un GPSData.
 * @author alberto
 *
 */
public class PanelMuestraGPSData extends PanelDatos implements GpsEventListener {

	/** Para seleccionar se sólo se muestran datos espaciales */
	private JCheckBox jcbSoloEspa;
	/** Hora del ultimo dato presentado */
	private Object horaUltima="";
	
	/**
	 * constructor por defecto. Se actualiza con todos los puntos.
	 */
	public PanelMuestraGPSData() {
		this(false);
	}
	
	/**
	 * Constructor donde indicamos si sólo queremos actualizarnos con los espaciales
	 * @param soloEspaciales
	 */
	public PanelMuestraGPSData(boolean soloEspaciales) {
		super();
		//empezamos con 3 columnas
		setPanelPorDefecto(new JPanel(new GridLayout(0,3)));
		setLayout(new BorderLayout());
//		angulo=aCopiar.angulo;
//		cadenaNMEA=aCopiar.cadenaNMEA;
//		coordECEF=(Matrix)aCopiar.coordECEF.clone();
//		coordLocal=(Matrix)aCopiar.coordLocal.clone();
//		desvAltura=aCopiar.desvAltura;
//		desvEjeMayor=aCopiar.desvEjeMayor;
//		desvEjeMenor=aCopiar.desvEjeMenor;
//		desvLatitud=aCopiar.desvLatitud;
//		desvLongitud=aCopiar.desvLongitud;
//		hdgPoloM=aCopiar.hdgPoloM;
//		hdgPoloN=aCopiar.hdgPoloN;
//		hdoP=aCopiar.hdoP;
//		hGeoide=aCopiar.hGeoide;
//		msL=aCopiar.msL;
//		orientacionMayor=aCopiar.orientacionMayor;
//		pdoP=aCopiar.pdoP;
//		sysTime=aCopiar.sysTime;
//		vdoP=aCopiar.vdoP;
//		velocidad=aCopiar.velocidad;
//		velocidadGPS=aCopiar.velocidadGPS;		
		//hora
		LabelDato lda=new LabelDatoFormato("??:??:??.??",GPSData.class,"getHora","%s");
		añadeAPanel(lda,"Hora");

		//Latitud
		añadeAPanel(new LabelDatoFormato("+?? ??.?????",GPSData.class,"getLatitudText","%s")
		, "Latitud");
		//Longitud
		añadeAPanel(new LabelDatoFormato("+??? ??.?????",GPSData.class,"getLongitudText","%s")
		,"Longitud");
		//RMS
		añadeAPanel(new LabelDatoFormato("?.?",GPSData.class,"getRms","%2.3f")
		,"RMS");
		//Número satélites
		añadeAPanel(new LabelDatoFormato("?",GPSData.class,"getSatelites","%1d")
		,"Num Satelites");
		//Edad correción diferencial
		añadeAPanel(new LabelDatoFormato("??? sg",GPSData.class,"getAge","%3.0f sg")
		, "Edad Correccion");
		//Coordenadas locales
		añadeAPanel(new LabelDato("(???.??, ???.??, ???.??)") {
			public void Actualiza(Object oa,boolean hayCambio) {
				setEnabled(hayCambio);
				if(!hayCambio) return;
				Matrix cl=((GPSData)oa).getCoordLocal();
				if(cl!=null && cl.get(0, 0)<Double.MAX_VALUE) {
					setText(String.format("(%3.3f %3.3f %3.3f)"
							, cl.get(0,0), cl.get(1,0), cl.get(2,0)));
				} else 
					setEnabled(false);
			}
		}
		,"Locales");
		//altura
		añadeAPanel(new LabelDatoFormato("+????.??",GPSData.class,"getAltura","%+8.2f"), "Altura");

		//Velocidad m/€s
		añadeAPanel(new LabelDatoFormato("+??.??",GPSData.class,"getVelocidad","%+6.2f")
		, "Velocidad m/s");
//		Yaw
		añadeAPanel(new LabelDato("+????.??") {
			public void Actualiza(Object oa, boolean hayCambio) {
				setEnabled(hayCambio);
				if(!hayCambio) return;
				GPSData pto=(GPSData)oa;
				if(pto.getAngulosIMU()!=null) {
					setText(String.format("%+8.2f", pto.getAngulosIMU().getYaw()));
				} else {
					setEnabled(false);
				}
			}
		}
		,"Yaw IMU");
		//Angulo calculado
		añadeAPanel(new LabelDatoFormato("+????.??",GPSData.class,"getAngulo","%+8.2f")
		,"Angulo Calc.");
		//Diff angulos
		añadeAPanel(new LabelDato("+????.??"){<commit_msg>Mostramos desviación en cada dimensión<commit_after>/**
 * 
 */
package sibtra.gps;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import sibtra.util.EligeSerial;
import sibtra.util.LabelDato;
import sibtra.util.LabelDatoFormato;
import sibtra.util.PanelDatos;
import Jama.Matrix;

/**
 * {@link JPanel} para mostrar los datos más significativos de un GPSData.
 * @author alberto
 *
 */
public class PanelMuestraGPSData extends PanelDatos implements GpsEventListener {

	/** Para seleccionar se sólo se muestran datos espaciales */
	private JCheckBox jcbSoloEspa;
	/** Hora del ultimo dato presentado */
	private Object horaUltima="";
	
	/**
	 * constructor por defecto. Se actualiza con todos los puntos.
	 */
	public PanelMuestraGPSData() {
		this(false);
	}
	
	/**
	 * Constructor donde indicamos si sólo queremos actualizarnos con los espaciales
	 * @param soloEspaciales
	 */
	public PanelMuestraGPSData(boolean soloEspaciales) {
		super();
		//empezamos con 3 columnas
		setPanelPorDefecto(new JPanel(new GridLayout(0,3)));
		setLayout(new BorderLayout());
//		angulo=aCopiar.angulo;
//		cadenaNMEA=aCopiar.cadenaNMEA;
//		coordECEF=(Matrix)aCopiar.coordECEF.clone();
//		coordLocal=(Matrix)aCopiar.coordLocal.clone();
//		desvAltura=aCopiar.desvAltura;
//		desvEjeMayor=aCopiar.desvEjeMayor;
//		desvEjeMenor=aCopiar.desvEjeMenor;
//		desvLatitud=aCopiar.desvLatitud;
//		desvLongitud=aCopiar.desvLongitud;
//		hdgPoloM=aCopiar.hdgPoloM;
//		hdgPoloN=aCopiar.hdgPoloN;
//		hdoP=aCopiar.hdoP;
//		hGeoide=aCopiar.hGeoide;
//		msL=aCopiar.msL;
//		orientacionMayor=aCopiar.orientacionMayor;
//		pdoP=aCopiar.pdoP;
//		sysTime=aCopiar.sysTime;
//		vdoP=aCopiar.vdoP;
//		velocidad=aCopiar.velocidad;
//		velocidadGPS=aCopiar.velocidadGPS;		
		//hora
		LabelDato lda=new LabelDatoFormato("??:??:??.??",GPSData.class,"getHora","%s");
		añadeAPanel(lda,"Hora");

		//Latitud
		añadeAPanel(new LabelDatoFormato("+?? ??.?????",GPSData.class,"getLatitudText","%s")
		, "Latitud");
		//Longitud
		añadeAPanel(new LabelDatoFormato("+??? ??.?????",GPSData.class,"getLongitudText","%s")
		,"Longitud");
		//RMS
		añadeAPanel(new LabelDatoFormato("?.?",GPSData.class,"getRms","%2.3f")
		,"RMS");
		//Número satélites
		añadeAPanel(new LabelDatoFormato("?",GPSData.class,"getSatelites","%1d")
		,"Num Satelites");
		//Edad correción diferencial
		añadeAPanel(new LabelDatoFormato("??? sg",GPSData.class,"getAge","%3.0f sg")
		, "Edad Correccion");
		//Coordenadas locales
		añadeAPanel(new LabelDato("(???.??, ???.??, ???.??)") {
			public void Actualiza(Object oa,boolean hayCambio) {
				setEnabled(hayCambio);
				if(!hayCambio) return;
				Matrix cl=((GPSData)oa).getCoordLocal();
				if(cl!=null && cl.get(0, 0)<Double.MAX_VALUE) {
					setText(String.format("(%3.3f %3.3f %3.3f)"
							, cl.get(0,0), cl.get(1,0), cl.get(2,0)));
				} else 
					setEnabled(false);
			}
		}
		,"Locales");
		//altura
		añadeAPanel(new LabelDatoFormato("+????.??",GPSData.class,"getAltura","%+8.2f"), "Altura");

		//Velocidad m/€s
		añadeAPanel(new LabelDatoFormato("+??.??",GPSData.class,"getVelocidad","%+6.2f")
		, "Velocidad m/s");

		añadeAPanel(new LabelDatoFormato("+??.??",GPSData.class,"getDesvLatitud","%+7.3f")
		, "Desv. Latitud");

		añadeAPanel(new LabelDatoFormato("+??.??",GPSData.class,"getDesvLongitud","%+7.3f")
		, "Des. Longitud");

		añadeAPanel(new LabelDatoFormato("+??.??",GPSData.class,"getDesvAltura","%+7.3f")
		, "Desv. Altura");
//		Yaw
		añadeAPanel(new LabelDato("+????.??") {
			public void Actualiza(Object oa, boolean hayCambio) {
				setEnabled(hayCambio);
				if(!hayCambio) return;
				GPSData pto=(GPSData)oa;
				if(pto.getAngulosIMU()!=null) {
					setText(String.format("%+8.2f", pto.getAngulosIMU().getYaw()));
				} else {
					setEnabled(false);
				}
			}
		}
		,"Yaw IMU");
		//Angulo calculado
		añadeAPanel(new LabelDatoFormato("+????.??",GPSData.class,"getAngulo","%+8.2f")
		,"Angulo Calc.");
		//Diff angulos
		añadeAPanel(new LabelDato("+????.??"){
{'fraction_non_alphanumeric': 0.18064985451018428, 'fraction_numerical': 0.008001939864209506, 'mean_word_length': 4.669415807560138, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6071551', 'n_tokens_mistral': 3669, 'n_tokens_neox': 3389, 'n_words': 483}