// -------------------------------------------------------------------------------------------------
// xsTablaGenerica.hpp
// -------------------------------------------------------------------------------------------------

// Se incluye la librería
#include "xsEasyCpp.hpp"

#ifndef __xsTablaGenerica_hpp__
#define __xsTablaGenerica_hpp__

Clase xsTablaGenerica : Publica xsObjeto
{
	Privada:
	    // Modelo para los datos de la Tabla
	    xsListaDatos* listaDatos; 		

        // Función para obtener un dato por lado de acuerdo a separador
		xsCadena fnObtenerDato(xsCadena cadena,Caracter separador,Caracter lado);

		// Función para separar Claves en una cadena de sus valores
		vector<xsCadena> fnObtenerClavesValores(xsCadena cadena, Caracter dato);

		// Numero de Columnas de la tabla
		Entero numeroColumnas;

	Publica:
								
	    // Constructor vacío para variable Global
	    xsTablaGenerica();

        // Constructor vacío para variable Global
	    xsTablaGenerica(xsListaDatos* lista, Entero columnas); 

		// Crear la Tabla
	    Vacio crear(xsListaDatos* lista, Entero columnas);

		// Agregar una columna a la Tabla
		Vacio agregarColumna(xsCadena            titulo,
			                 Entero              ancho,
							 Entero              alto,
			                 Flotante            alineamiento,
			                 Flotante            xCeldaAlineamiento,
			                 Flotante            yCeldaAlineamiento,
			                 Entero              ordenamiento,
			                 xsCadena            atributos,
							 xsTablaFuncionCelda funcion);		


		// Insertar un renglon al modelo
		Vacio insertarRenglon();

		// Insertar un renglon al modelo
		Vacio insertarRenglon(xsCadena renglon[]);

		// Obtener el Modelo
		xsListaDatos* obtenerListaDatos();

		// Función para visualizar lineas en la Tabla
		Vacio visualizarLineas(Logico visualizar);

        // Función para Seleccionar un Elemento
		Vacio seleccionar(xsCadena elemento);

        // Longitud de la tabla
		Entero longitud();

        // Función para Eliminar
		Vacio eliminar(xsCadena elemento);		

        // Función para limpiar los datos
		Vacio limpiar();

        // Función para eliminar el Seleccionado
		Vacio eliminarRenglonSeleccionado();

		// Modificar el Renglón Seleccionado
		Vacio modificarRenglonSeleccionado(xsCadena renglon[]);

		// Modificar el Renglón 
		Vacio modificarRenglon(Entero indice, xsCadena renglon[]);

        // Obtener un Renglón
		xsArbolIterador obtenerRenglon(Entero indice);

		// Obtener una Celda
		xsCadena obtenerCelda(Entero renglon, Entero columna);
		Entero   obtenerCeldaEntero(Entero renglon, Entero columna);
		Flotante obtenerCeldaFlotante(Entero renglon, Entero columna);

		// Colocar dato en una Celda
		Vacio colocarCelda(xsCadena dato, Entero renglon, Entero columna);

		// Colocar atributo
		Vacio colocarAtributo(xsCadena atributo, Entero renglon, Entero columna);
		Vacio colocarAtributoEntero(Entero   atributo, Entero renglon, Entero columna);
		Vacio colocarAtributoFlotante(Flotante atributo, Entero renglon, Entero columna);

};

// Fin de la Definición del Archivo
#endif
