// -------------------------------------------------------------------------------------
// xsEasyCpp
// Demo ContenedorFluido
// g++ -g ContenedorFluido.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 ContenedorFluido.exe
// g++ -g ContenedorFluido.cpp %PKG-XSEASYCPP% -o ContenedorFluido.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 Agregar Img Contenedor Vertical
Estatica Vacio fnAgregarImgContenedorV(xsObjetoGUI* boton, xsApuntador contenedor);

// Función Agregar Btn Contenedor Vertical
Estatica Vacio fnAgregarBtnContenedorV(xsObjetoGUI* boton, xsApuntador contenedor);

// Función Agregar Img Contenedor Horizontal
Estatica Vacio fnAgregarImgContenedorH(xsObjetoGUI* boton, xsApuntador contenedor);

// Función Agregar Btn Contenedor Horizontal
Estatica Vacio fnAgregarBtnContenedorH(xsObjetoGUI* boton, xsApuntador contenedor);

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

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

  // Establecer el Borde de la ventana
  oVentana.colocarBordeVentana(10);

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

  // Mostramos la Ventana
  oVentana.centrar();

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

  // 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 Fluido
  xsContenedorFluido oContenedorV(XS_ORIENTACION_VERTICAL,10);
  
  // Crea una Ventana de Desplazamiento (scroll)
  xsVentanaDesplazamiento scroll1(NULO,NULO);
  scroll1.colocarDimensiones(290,200);

  // Agrega el Contenedor a la Ventana de Desplazamiento
  scroll1.agregarEn(oContenedorV.obtenerManejador());

  // Creamos un Contenedor Fluido
  xsContenedorFluido oContenedorH(XS_ORIENTACION_HORIZONTAL,10);

  // Crea una Ventana de Desplazamiento (scroll)
  xsVentanaDesplazamiento scroll2(NULO,NULO);
  scroll2.colocarDimensiones(290,200);

  // Agrega el Contenedor a la Ventana de Desplazamiento
  scroll2.agregarEn(oContenedorH.obtenerManejador());

 
  // Creamos dos imagenes para el Contenedor Fluido Vertical
  xsImagen   oImagenV("img/js32x32.jpg");
  xsBoton    oBotonV("Boton en Contenedor Vertical",NO XS_CON_MNEMONICO);

  // Agregamos la imagen al Contenedor Fluido vertical
  oContenedorV.insertarEnEl(oImagenV.obtenerManejador());
  oContenedorV.insertarEnEl(oBotonV.obtenerManejador());

  // Creamos dos imagenes para el Contenedor Fluido Horizontal
  xsImagen   oImagenH("edit-cut",XS_TAMANIO_ICONO_24PX);
  xsBoton    oBotonH("Boton en Contenedor Horizontal",NO XS_CON_MNEMONICO);

  // Agregamos la imagen al Contenedor Fluido vertical
  oContenedorH.insertarEnEl(oImagenH.obtenerManejador());
  oContenedorH.insertarEnEl(oBotonH.obtenerManejador());

  // Declaramos 4 botones
  xsBoton btnAgregarImgContenedorV("Agregar Img al Contenedor Vertical",NO XS_CON_MNEMONICO);
  btnAgregarImgContenedorV.colocarMargenSuperior(10);
  xsBoton btnAgregarBtnContenedorV("Agregar Btn Contenedor Vertical",NO XS_CON_MNEMONICO);
  btnAgregarBtnContenedorV.colocarMargenSuperior(10);
  xsBoton btnAgregarImgContenedorH("Agregar Img al Contenedor Horizontal",NO XS_CON_MNEMONICO);
  btnAgregarImgContenedorH.colocarMargenSuperior(10);
  xsBoton btnAgregarBtnContenedorH("Agregar Btn al Contenedor Horizontal",NO XS_CON_MNEMONICO);
  btnAgregarBtnContenedorH.colocarMargenSuperior(10);

  
  // Agregar los scroll
  oVentana.agregarAlContenedor(scroll1.obtenerManejador());  
  oVentana.agregarAlContenedor(scroll2.obtenerManejador());  

  // Agregar los botones al Contenedor de la Ventana
  oVentana.agregarAlContenedor(btnAgregarImgContenedorV.obtenerManejador());
  oVentana.agregarAlContenedor(btnAgregarBtnContenedorV.obtenerManejador());
  oVentana.agregarAlContenedor(btnAgregarImgContenedorH.obtenerManejador());
  oVentana.agregarAlContenedor(btnAgregarBtnContenedorH.obtenerManejador());
  
  // Establece las Señales
  btnAgregarImgContenedorV.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnAgregarImgContenedorV),oContenedorV.obtenerManejador());
  btnAgregarBtnContenedorV.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnAgregarBtnContenedorV),oContenedorV.obtenerManejador());
  btnAgregarImgContenedorH.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnAgregarImgContenedorH),oContenedorH.obtenerManejador());
  btnAgregarBtnContenedorH.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnAgregarBtnContenedorH),oContenedorH.obtenerManejador());

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

  // Ciclo
  xsAppCiclo;

  // Finaliza retornando 0
  retorna 0;
}


// Función de Salida
Estatica Vacio fnSalida(xsObjetoGUI *ventana, xsApuntador datos)
{
  // 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)
{
  retorna Falso; // Para que se cierre, lo contrario para que no se cierre
}

// Función Agregar Img Contenedor Vertical
Estatica Vacio fnAgregarImgContenedorV(xsObjetoGUI* boton, xsApuntador contenedor)
{
  // Declara una Imagen Temporal
  xsImagen tmpImagen("img/js32x32.jpg");

  // Declara un objeto temporal para el Contenedor Fluido
  xsContenedorFluido tmpContenedor;

  // Le Coloca el Manejador
  tmpContenedor.asignarManejador(XS_OBJETOGUI(contenedor));

  // Agrega la Imagen
  tmpContenedor.insertarEnEl(tmpImagen.obtenerManejador());

  // Actualiza el Contenedor
  tmpContenedor.mostrarTodo();
}

// Función Agregar Btn Contenedor Vertical
Estatica Vacio fnAgregarBtnContenedorV(xsObjetoGUI* boton, xsApuntador contenedor)
{
  // Declara una Imagen Temporal
  xsBoton tmpBoton("Botón en el Contenedor Vertical",NO XS_CON_MNEMONICO);

  // Declara un objeto temporal para el Contenedor Fluido
  xsContenedorFluido tmpContenedor;

  // Le Coloca el Manejador
  tmpContenedor.asignarManejador(XS_OBJETOGUI(contenedor));

  // Agrega la Imagen
  tmpContenedor.insertarEnEl(tmpBoton.obtenerManejador());

  // Actualiza el Contenedor
  tmpContenedor.mostrarTodo();
}

// Función Agregar Img Contenedor Horizontal
Estatica Vacio fnAgregarImgContenedorH(xsObjetoGUI* boton, xsApuntador contenedor)
{
  // Declara una Imagen Temporal
  xsImagen tmpImagen("img/js32x32.jpg");

  // Declara un objeto temporal para el Contenedor Fluido
  xsContenedorFluido tmpContenedor;

  // Le Coloca el Manejador
  tmpContenedor.asignarManejador(XS_OBJETOGUI(contenedor));

  // Agrega la Imagen
  tmpContenedor.insertarEnEl(tmpImagen.obtenerManejador());

  // Actualiza el Contenedor
  tmpContenedor.mostrarTodo();
}

// Función Agregar Btn Contenedor Horizontal
Estatica Vacio fnAgregarBtnContenedorH(xsObjetoGUI* boton, xsApuntador contenedor)
{
  // Declara una Imagen Temporal
  xsBoton tmpBoton("Botón en el Contenedor Horizontal",NO XS_CON_MNEMONICO);

  // Declara un objeto temporal para el Contenedor Fluido
  xsContenedorFluido tmpContenedor;

  // Le Coloca el Manejador
  tmpContenedor.asignarManejador(XS_OBJETOGUI(contenedor));

  // Agrega la Imagen
  tmpContenedor.insertarEnEl(tmpBoton.obtenerManejador());

  // Actualiza el Contenedor
  tmpContenedor.mostrarTodo();
}
