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

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


// Detiene el Ciclo Principal iniciado por gtk_main cuando la ventana es destruida
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 Diálogo
Vacio fnMostrarDialogo(xsObjetoGUI *objeto,xsApuntador boton);

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

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

  // Establece el Icono
  oVentana.colocarIcono("img/js.ico");
  oVentana.centrar();
    
  // 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 (fnMostrarDialogo),(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)
{
  retorna Falso; // Para que se cierre, lo contrario para que no se cierre
}

// Función para mostrar el Aviso
Vacio fnMostrarDialogo(xsObjetoGUI *objeto, xsApuntador boton)
{
  // Declaro un Dialogo Nuevo
  xsDialogos dlgUsuario;

  // Creo el Dialogo
  dlgUsuario.crear("Inicio de Sesión",
                  XS_VENTANA(objeto),
                  XS_DIALOGO_DESTRUIR_CON_PADRE,
                  "Aceptar",
                  XS_BOTON_RESPUESTA_ACEPTAR);

  // Agregar el botón de Cancelar
  dlgUsuario.agregarBoton("Cancelar",XS_BOTON_RESPUESTA_CANCELAR);

  // Declara y creo el contenedor para el diálogo
  xsContenedorFluido contenedorDlg(XS_ORIENTACION_HORIZONTAL,8);

  // Asigna el Contenedor al Dialogo
  dlgUsuario.asignarContenedor(contenedorDlg.obtenerManejador());
  
  // Establece el borde
  contenedorDlg.colocarBorde(18);

  // Crea una imagen
  xsImagen imgDialogo("dialog-question",XS_TAMANIO_ICONO_48PX);

  // Agrega la imagen al contenedor
  contenedorDlg.insertarEnEl(imgDialogo.obtenerManejador());

  // Crea una matriz
  xsMatriz matriz;
  matriz.crear();

  // Coloca espaciamiento entre Renglones y Columnas
  matriz.colocarEspaciosEntreRenglones(4);
  matriz.colocarEspaciosEntreColumnas(4);

  // Se agrega la matriz al contenedor
  contenedorDlg.insertarEnEl(matriz.obtenerManejador());

  // Declaro 2 etiquetas
  xsEtiqueta etqIde("Ide :");
  xsEtiqueta etqCve("Cve :");

  // Agrega las etiquetas a la Matriz
  matriz.insertarEn(etqIde.obtenerManejador(),0,0,1,1);
  matriz.insertarEn(etqCve.obtenerManejador(),0,1,1,1);

  // Declaro 2 entradas
  xsEntrada entIde("");
  xsEntrada entCve("");
  entCve.colocarVisibilidad(Falso);

  // Se agregan las entradas a la matriz
  matriz.insertarEn(entIde.obtenerManejador(),1,0,1,1);
  matriz.insertarEn(entCve.obtenerManejador(),1,1,1,1);
   
  // Muestra todo el Contenedor
  contenedorDlg.mostrarTodo();

  // Ejecuta el Diálogo
  Entero respuesta = dlgUsuario.ejecutar();

  si (respuesta == XS_BOTON_RESPUESTA_ACEPTAR)
     xsVentana::mensajeInformacion("Demo Diálogos","Has presionado Aceptar");
  deOtroModo
     si (respuesta == XS_BOTON_RESPUESTA_CANCELAR)
        xsVentana::mensajeInformacion("Demo Diálogos","Has presionado Cancelar");
     deOtroModo
        xsVentana::mensajeInformacion("Demo Diálogos","Has cerrado la Ventana");

  xsVentana::mensajeInformacion("El valor de Ide",entIde.obtenerTexto());
  xsVentana::mensajeInformacion("El valor de Cve",entCve.obtenerTexto());

  // Se imprime el Contenido de las entradas
  xsImprimir(entIde.obtenerTexto());
  xsImprimir(entCve.obtenerTexto());
  
  // Destruye el diálogo
  dlgUsuario.destruir();
}