// -------------------------------------------------------------------------------------
// xsEasyCpp
// Demo de Mensajes de Clase VentanaMensajes
// g++ -g VentanaMensajes.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 VentanaMensajes.exe
// g++ -g VentanaMensajes.cpp %PKG-XSEASYCPP% -o VentanaMensajes.exe
// -------------------------------------------------------------------------------------

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

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

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

// Funciones diversas del Demo
Vacio fnMensajeInformacion(xsObjetoGUI* objeto);
Vacio fnMensajeError(xsObjetoGUI* objeto);
Vacio fnMensajeAdvertencia(xsObjetoGUI* objeto);
Vacio fnMensajePregunta(xsObjetoGUI* objeto);

// Crea una entrada para el Título de la Ventana y Borde
xsEntrada entTitulo;
xsEntrada entMensaje;

// Para las coordenadas de mover
xsBotonNumerico posX, posY;

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

  // Colocar que no es dimensionable
  oVentana.colocarDimensionable(Falso);

  // Establecer el Borde
  oVentana.colocarBordeVentana(10);

  // Mostramos la Ventana
  oVentana.centrar();

  // Coloca el Título
  oVentana.colocarTitulo("xsEasyCpp Demo Ventana Mensajes");
  
  // Establece el Icono
  oVentana.colocarIcono("img/js.ico");

  // Crea una entrada para el Título de la Ventana y Borde
  entTitulo.crear("Título del Mensaje");
  entTitulo.colocarTexto("Titulo del Mensaje");
  entMensaje.crear("Contenido del Mensaje");
  entMensaje.colocarTexto("Contenido del Mensaje");

  // Crea los botones para agregarlos al Contenedor
  xsBoton btnMensajeInformacion("Mensaje Información",NO XS_CON_MNEMONICO);
  xsBoton btnMensajeError("Mensaje de Error",NO XS_CON_MNEMONICO);
  xsBoton btnMensajeAdvertencia("Mensaje de Advertencia",NO XS_CON_MNEMONICO);
  xsBoton btnMensajePregunta("Mensaje con Pregunta",NO XS_CON_MNEMONICO);
  
  // Agrega la entrada al Contenedor
  oVentana.agregarAlContenedor(entTitulo.obtenerManejador());
  oVentana.agregarAlContenedor(entMensaje.obtenerManejador());
  oVentana.agregarAlContenedor(btnMensajeInformacion.obtenerManejador());
  oVentana.agregarAlContenedor(btnMensajeError.obtenerManejador());  
  oVentana.agregarAlContenedor(btnMensajeAdvertencia.obtenerManejador());
  oVentana.agregarAlContenedor(btnMensajePregunta.obtenerManejador());
  
  // Asocia la función para verificar si está activo
  btnMensajeInformacion.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO (fnMensajeInformacion),oVentana.obtenerManejador());
  btnMensajeError.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO (fnMensajeError),oVentana.obtenerManejador());
  btnMensajeAdvertencia.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO (fnMensajeAdvertencia),oVentana.obtenerManejador());
  btnMensajePregunta.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO (fnMensajePregunta),oVentana.obtenerManejador());
  
  // Establece la función de Salida
  oVentana.colocarFuncionSalida(XS_FUNCION_RETORNO (fnSalida));

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

  // 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)
{    
    retorna Falso; // Para que se cierre, lo contrario para que no se cierre
}

// Función para Mensaje de Información
Vacio fnMensajeInformacion(xsObjetoGUI* objeto)
{
    // Despliega el Mensaje de Información
    xsVentana::mensajeInformacion(entTitulo.obtenerTexto(),entMensaje.obtenerTexto());        
}

// Función para Mensaje de Error
Vacio fnMensajeError(xsObjetoGUI* objeto)
{
    // Despliega el Mensaje de Información
    xsVentana::mensajeError(entTitulo.obtenerTexto(),entMensaje.obtenerTexto());        
}

// Función para Mensaje de Advertencia
Vacio fnMensajeAdvertencia(xsObjetoGUI* objeto)
{
    // Despliega el Mensaje de Información
    xsVentana::mensajeAdvertencia(entTitulo.obtenerTexto(),entMensaje.obtenerTexto());        
}

// Función para Mensaje con Pregunta
Vacio fnMensajePregunta(xsObjetoGUI* objeto)
{
    // VAriable para respuesta
    Entero respuesta;
    
    // Despliega el Mensaje Pregunta y obtiene la respuesta
    respuesta = xsVentana::mensajePregunta(entTitulo.obtenerTexto(),entMensaje.obtenerTexto());        

    // Verifica que contesto
    si (respuesta==xsVentana::BOTON_NO)                               
        // Contestó que no
        xsVentana::mensajeInformacion("Demo Ventana Mensajes","La respuesta es NO");
    deOtroModo
        // Contestó que si
        xsVentana::mensajeInformacion("Demo Ventana Mensajes","La respuesta es SI");
}