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

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

// Función para Mostrar la Ventana de Diálogo
Vacio fnMostrarDialogoColor(xsObjetoGUI* objeto);

// Función para procesar la respuesta del Dialogo de Color
// No es necesario que sea estática
Estatica Vacio fnProcesaRespuestaDialogo (xsDialogo*  dialogo, 
                                          Entero      respuesta,  
                                          xsApuntador datos);

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

  // Definimos un objeto de la Clase xsVentana
  xsVentana oVentana(NO XS_CON_CONTENEDOR);
  
  // Estableciendo un tamaño para la Ventana                                  
  oVentana.colocarDimensiones(400,400);

  // Centrar la Ventana
  oVentana.centrar();

  // Colocar texto emergente
  oVentana.colocarTextoEmergente("Da Click en la Ventana");

  // Coloca el Título
  oVentana.colocarTitulo("xsEasyCpp Demo Dialogo Color");

  // 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 el Objeto CSS
  xsCSS oProveedorCSS;
  oProveedorCSS.crear();

  // Cargamos las reglas CSS
  oProveedorCSS.cargarArchivo("css/reglas.css");

  // Agregamos una Clase al Contexto de la Barra de Herramientas
  oVentana.agregarClaseCSS("ventanaPrincipal");

  // Agrego la Ventana al Proveedor de CSS
  oProveedorCSS.agregarContexto(oVentana.obtenerContexto());

  // Modifico la clase(si lo permite despues)
  //oVentana.agregarClaseCSS("barraEstado");

  // Conecta una señal a la ventana
  oVentana.conectarSenal(XS_EVENTO_BOTON_PRESIONADO,
                         XS_FUNCION_RETORNO (fnMostrarDialogoColor),
                         NULO);
  
  // 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)
{
  // 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)
{
  retorna Falso; // Para que se cierre, lo contrario para que no se cierre
}

// Función para controlar la accción del MenuChekItem y Ocultar/Visualizar la Barra de Herramientas
Vacio fnMostrarDialogoColor(xsObjetoGUI* objeto)
{
  // Creo una ventana temporal
  xsVentana  tmpVentana(NO XS_CON_CONTENEDOR);

  // Obtengo la referencia a la ventana
  tmpVentana.asignarManejador(objeto);

  // Manipulamos el Titulo
  tmpVentana.colocarTitulo("Seleccionando Color ...");

  // Crea la Ventana de Dialogo Acerca de
  xsDialogoColor dlg("Selecciona el Color para la Ventana",NULO);
  
  // Ejecuta el Dialogo
  dlg.ejecutar(XS_FUNCION_RETORNO(fnProcesaRespuestaDialogo), objeto);
  
}

// Función para procesar la respuesta del Color
Estatica Vacio fnProcesaRespuestaDialogo (xsDialogo*  dialogo, 
                                          Entero      respuesta,  
                                          xsApuntador datos)
{
  // Declaramos una variable para leer el Color
  xsCadena elColor;
  
  // Creo una ventana temporal
  xsVentana  tmpVentana(NO XS_CON_CONTENEDOR);

  // Obtengo la referencia a la ventana
  tmpVentana.asignarManejador((xsObjetoGUI*)datos);
  
  // Define una variable para el Color
  xsColorRGBA color;

  // Verifica la repuesta
  si (respuesta == XS_RESPUESTA_OK)
  {         
     // Obtenemos el Color desde el diálogo
     xsObjeto_DialogoColor_obtener_rgba (XS_SELECCIONAR_COLOR (dialogo), &color);
     
     // Obtenemos el Color Seleccionado   
     elColor = xsConvertir_rgba_a_cadena(&color);
     
     // Imprimimos el Color en Pantalla
     xsImprimir("Se ha seleccionado un color:");          
     xsImprimir(elColor);

     // Creamos el Objeto CSS
     xsCSS oProveedorCSS;
     oProveedorCSS.crear();

     // // Cargamos las reglas CSS
     //oProveedorCSS.cargarArchivo("reglas2.css");
     oProveedorCSS.cargarReglas(".ventanaPrincipal\n"   
                                "{\n"
                                "   background:"+elColor+";\n"
                                "}\n");


     // Agregamos una Clase al Contexto de la Barra de Herramientas
     tmpVentana.agregarClaseCSS("ventanaPrincipal");

     // Agrego la Ventana al Proveedor de CSS
     //oProveedorCSS.agregarContexto(xsObjeto_obtener_contexto((xsObjetoGUI*)datos));
     oProveedorCSS.agregarContexto(xsObjeto_obtener_contexto(tmpVentana.obtenerManejador()));

  }
  deOtroModo
     xsVentana::mensajeInformacion("Demo DialogoColor","Se ha cancelado el proceso de seleccionar color");

  // Restauramos titulo
  tmpVentana.colocarTitulo("xsEasyGUI Demo Dialogo Color");
    
  // Destruye el dialog
  xsObjeto_destruir (XS_OBJETOGUI (dialogo));
}
