// -------------------------------------------------------------------------------------
// xsEasyCpp
// Demo de Objeto ContenedorFijo
// g++ -g ContenedorFijo.cpp -lxseasycpp -LC:/msys64/mingw64/lib -lgtk-3 -lgdk-3 -lz -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lpangowin32-1.0 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lintl -lglib-2.0 -o ContenedorFijo.exe
// g++ -g ContenedorFijo.cpp %PKG-XSEASYCPP% -o ContenedorFijo.exe
// -------------------------------------------------------------------------------------

// Incluye las librería de xsWindows
#include "include/xsEasyCpp.hpp"


// Función de Salida
Estatica Vacio fnSalida(xsObjetoGUI* ventana, xsApuntador datos);

// Función para controlar el Cierre de una Ventana
Estatica Entero fnCierre(xsObjetoGUI* ventana, xsEvento *evento);

// Función para mover la imagen de Derecha a Izquierda
Estatica Vacio fnDerechaIzquierda(xsObjetoGUI* botonNumerico, xsApuntador imagen);

// Función para mover la imagen de Abajo a Arriba
Estatica Vacio fnAbajoArriba(xsObjetoGUI* botonNumerico, xsApuntador imagen);

// El Contenedor Fijo
xsContenedorFijo oContenedorFijo;

// Función principal de xsEasyWindow
xsPrincipal
{
  // Iniciamos xsEasyWindows
  xsAppInicia;

  // Definimos un objeto de la Clase xsVentana
  xsVentana oVentana(XS_CON_CONTENEDOR);

  // Estableciendo un tamaño para la Ventana                                  
  oVentana.colocarDimensiones(350,430);
  
  // Mostramos la Ventana
  oVentana.centrar();

  // Coloca el Título
  oVentana.colocarTitulo("xsEasyCpp Demo Contenedor Fijo");

  // Establece el Icono
  oVentana.colocarIcono("img/js.ico");
    
  // Establece la función de Salida
  oVentana.colocarFuncionSalida(XS_FUNCION_RETORNO (fnSalida));

  // Establece la función de Cierre
  oVentana.colocarFuncionCierre(XS_FUNCION_RETORNO (fnCierre));

  // Creamos un Contenedor Fijo
  oContenedorFijo.crear();

  // Establececemos Dimensiones del Contenedor
  oContenedorFijo.colocarDimensiones(350,290);

  // Agregamos a la Ventana el Contenedor Fijo
  oVentana.agregarAlContenedor(oContenedorFijo.obtenerManejador());  

  // Creamos una imagen
  xsImagen   oImagenLogo("img/js32x32.jpg");
  
  // Agregamos la imagen al Contenedor Fijo
  oContenedorFijo.insertarEnEl(oImagenLogo.obtenerManejador(),0,0);
  
  // Mueve la imagen
  oContenedorFijo.moverEnEl(oImagenLogo.obtenerManejador(),50,75);
  
  // Creamos una Etiqueta
  xsEtiqueta etqDerechaIzquierda("Mover Imagen Derecha-Izquierda:");
  etqDerechaIzquierda.colocarMargenInferior(10);

  // Agregamos a la Ventana el Contenedor Fijo
  oVentana.agregarAlContenedor(etqDerechaIzquierda.obtenerManejador());  
  
  // Declara un botonº
  xsBotonNumerico btnDerechaIzquierda(0,318,10);
  btnDerechaIzquierda.colocarMargenInicial(10);
  btnDerechaIzquierda.colocarMargenFinal(10);
  btnDerechaIzquierda.colocarMargenInferior(10);

  // Colocarlo en 50
  btnDerechaIzquierda.colocarValor(50);

  // Agregamos a la Ventana el Contenedor Fijo
  oVentana.agregarAlContenedor(btnDerechaIzquierda.obtenerManejador());  

  // Creamos una Etiqueta
  xsEtiqueta etqAbajoArriba("Mover Imagen Abajo-Arriba:");
  etqAbajoArriba.colocarMargenInferior(10);

  // Agregamos a la Ventana el Contenedor Fijo
  oVentana.agregarAlContenedor(etqAbajoArriba.obtenerManejador());  
  
  // Declara un boton y establece margen inferior
  xsBotonNumerico btnAbajoArriba(0,258,10);
  btnAbajoArriba.colocarMargenInicial(10);
  btnAbajoArriba.colocarMargenFinal(10);
  btnAbajoArriba.colocarMargenInferior(10);

  // Colocar valor
  btnAbajoArriba.colocarValor(75);
  
  
  // Agregamos a la Ventana el Contenedor Fijo
  oVentana.agregarAlContenedor(btnAbajoArriba.obtenerManejador());  

  // Establece las Señales
  btnDerechaIzquierda.conectarSenal(XS_EVENTO_VALOR_CAMBIADO,XS_FUNCION_RETORNO(fnDerechaIzquierda),oImagenLogo.obtenerManejador());
  btnAbajoArriba.conectarSenal(XS_EVENTO_VALOR_CAMBIADO,XS_FUNCION_RETORNO(fnAbajoArriba),oImagenLogo.obtenerManejador());

  
  // Muestra todos los objetos
  oVentana.mostrarTodo();

  // Ciclo
  xsAppCiclo;

  // Finaliza retornando 0
  retorna 0;

}


// Detiene el Ciclo Principal iniciado por gtk_main cuando la ventana es destruida
Estatica Vacio fnSalida(xsObjetoGUI* ventana, xsApuntador datos)
{
	// Mensaje de Salida
	xsImprimir("Saliendo del Sistema (Estatica Vacio)...");

  // Llama a la función de la Librería que sale del Ciclo Main  
  xsAppSalida;
}

// Función para controlar el Cierre de una Ventana
Estatica Entero fnCierre(xsObjetoGUI* ventana, xsEvento *evento)
{
  // Para que se cierre, lo contrario para que no se cierre
  retorna Falso; 
}

// Función para mover la imagen de Derecha a Izquierda
Vacio fnDerechaIzquierda(xsObjetoGUI* botonNumerico, xsApuntador imagen)
{
    // Declaramos valores temporales
    xsBotonNumerico tmpBotonNumerico;        
    
    // Obtenemos los manejadores
    tmpBotonNumerico.asignarManejador(botonNumerico);    

    // Declaramos variable temporal de imagen
    xsImagen imgTemporal;

    // Asigna el Manejador
    imgTemporal.asignarManejador(XS_OBJETOGUI(imagen));

    // Obtiene la posición Y
    int posY = imgTemporal.obtenerLocalizacionY();
    int posX = tmpBotonNumerico.obtenerValor();
    
    // Mueve el Objeto en el Contenedor
    oContenedorFijo.moverEnEl(imgTemporal.obtenerManejador(),
                              posX,
                              posY);
    
}

// Función para mover la imagen de Abajo a Arriba
Vacio fnAbajoArriba(xsObjetoGUI* botonNumerico, xsApuntador imagen)
{
    // Declaramos valores temporales
    xsBotonNumerico tmpBotonNumerico;        
    
    // Obtenemos los manejadores
    tmpBotonNumerico.asignarManejador(botonNumerico);    

    // Declaramos variable temporal de imagen
    xsImagen imgTemporal;

    // Asigna el Manejador
    imgTemporal.asignarManejador(XS_OBJETOGUI(imagen));

    // Obtiene la posición X
    int posX = imgTemporal.obtenerLocalizacionX();
    int posY = tmpBotonNumerico.obtenerValor();

    // Mueve el Objeto en el Contenedor
    oContenedorFijo.moverEnEl(imgTemporal.obtenerManejador(),
                              posX,
                              posY);    
}
