// -------------------------------------------------------------------------------------
// xsEasyWindows
// Demo de Objeto Aviso
// g++ -g Aviso.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 Aviso.exe
// g++ -g Aviso.cpp %PKG-XSEASYCPP% -o Aviso.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 Mostrar el Aviso
Vacio fnMostrarAviso(xsObjetoGUI* objeto,xsApuntador boton);

// Función para controlar los Click en los botones del Aviso
Vacio fnBotonClick(xsObjetoGUI* objeto, xsApuntador ventana);

// Función para Salida del Aviso
Vacio fnSalidaAviso(xsObjetoGUI* objeto, xsApuntador ventana);

// 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(600,600);

  // Centrar la Ventana
  oVentana.centrar();

  // Coloca el Título
  oVentana.colocarTitulo("xsEasyCpp Demo Aviso (Da Click en la Ventana)");

  // 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));

  // Conecta una señal a la ventana
  oVentana.conectarSenal(XS_EVENTO_BOTON_PRESIONADO,XS_FUNCION_RETORNO (fnMostrarAviso),(gpointer)oVentana.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)
{
  // 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 mostrar el Aviso
Vacio fnMostrarAviso(xsObjetoGUI* objeto, xsApuntador boton)
{
  // Define la Ventana de Aviso
  xsAviso oAviso;

  // Crea la Ventana con tipo y mensaje
  oAviso.crear(xsError,"Error del Sistema","Archivo ejecutable corrupto.", 
               XS_FUNCION_RETORNO(fnSalidaAviso),
               XS_FUNCION_RETORNO(fnBotonClick),
               XS_FUNCION_RETORNO(fnBotonClick));

  // Muestra la ventana
  oAviso.mostrar();
}

// Función para controlar click en Boton Barra
Vacio fnBotonClick(xsObjetoGUI* objeto, xsApuntador ventana)
{
    // Variable temporal de boton
    xsBoton temporal;
    xsVentana tmpVentana;

    // Asigna el Manejador
    temporal.asignarManejador(objeto);
  
    // Despliega el Mensaje
    xsVentana::mensajeInformacion("xsEasyCpp Demo Aviso","Presionaste:"+temporal.obtenerTexto());

    // Destruye la ventana
    tmpVentana.asignarManejador(XS_OBJETOGUI(ventana));
    tmpVentana.ocultar();

}

// Función para Salida del Aviso
Vacio fnSalidaAviso(xsObjetoGUI* objeto, xsApuntador ventana)
{
    // Imprime Mensaje
    xsVentana::mensajeInformacion("xsEasyCpp Demo Aviso","Saliendo del Aviso sin presionar botón");
}

