// -------------------------------------------------------------------------------------
// xsEasyCpp
// Demo de Objeto BotonSeleccion
// g++ -g BotonSeleccion.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 BotonSeleccion.exe
// g++ -g BotonSeleccion.cpp %PKG-XSEASYCPP% -o BotonSeleccion.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 controlar la accción del MenuChekItem y Ocultar/Visualizar la Barra de Herramientas
Vacio fnBotonSeleccionControl(xsObjetoGUI* objeto,xsApuntador etiqueta);

// Función para Cambiar texto
Estatica Vacio fnCambiarTexto(xsObjetoGUI* boton, xsApuntador entrada);

// Restaurar el Texto
Estatica Vacio fnRestaurarTexto(xsObjetoGUI* boton, xsApuntador entrada);

// Colocar la Imagen
Estatica Vacio fnCambiarImagen(xsObjetoGUI* boton, xsApuntador entrada);

// Creamos el Botón de Selcción
xsBotonSeleccion oBotonSeleccion;

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

  // Establecer el borde de la ventana
  oVentana.colocarBordeContenedor(10);

  // Centrar la Ventana
  oVentana.centrar();

  // Coloca el Título
  oVentana.colocarTitulo("xsEasyCpp Demo BotonSelección");

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

  // Se crea una entrada
  xsEntrada entMensaje("El Botón de Selección está sin Seleccionar");
  entMensaje.colocarMargenInferior(10);

  // Creamos el Botón
  oBotonSeleccion.crear("_Cambiar imagen desde Librería",XS_CON_MNEMONICO);

  // Establece el margen
  oBotonSeleccion.colocarMargenSuperior(10);
  oBotonSeleccion.colocarMargenInferior(10);

  // Coloca el Texto Emergente
  oBotonSeleccion.colocarTextoEmergente("Alt+C para ejecutar el botón");

  // Coloca el Borde (separación de su contenedor)
  oBotonSeleccion.colocarBorde(5);

  // Cargar una imagen
  oBotonSeleccion.colocarImagen("edit-cut", XS_TAMANIO_ICONO_16PX);
  oBotonSeleccion.colocarFoco();

  // Botón
  xsBoton btnCambiarTexto("Cambiar Texto del Botón de Seleccion",NO XS_CON_MNEMONICO);
  xsBoton btnRestaurarTexto("Restaurar Texto del Botón de Seleccion",NO XS_CON_MNEMONICO);
  xsBoton btnCambiarImagen("Cambiar Imagen del Botón de Seleccion",NO XS_CON_MNEMONICO);
  btnCambiarTexto.colocarMargenInferior(10);
  btnRestaurarTexto.colocarMargenInferior(10);
  btnCambiarImagen.colocarMargenInferior(10);
  
  // Asocial la senal click al botón para cerrar la ventana
  oBotonSeleccion.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnBotonSeleccionControl),entMensaje.obtenerManejador());
  btnCambiarTexto.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnCambiarTexto),entMensaje.obtenerManejador());
  btnRestaurarTexto.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnRestaurarTexto),entMensaje.obtenerManejador());
  btnCambiarImagen.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnCambiarImagen),entMensaje.obtenerManejador());

  // Agregar el BotonChk a la Ventana Principal  
  oVentana.agregarAlContenedor(oBotonSeleccion.obtenerManejador());
  oVentana.agregarAlContenedor(entMensaje.obtenerManejador());
  oVentana.agregarAlContenedor(btnCambiarTexto.obtenerManejador());
  oVentana.agregarAlContenedor(btnRestaurarTexto.obtenerManejador());
  oVentana.agregarAlContenedor(btnCambiarImagen.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 controlar la accción del MenuChekItem y Ocultar/Visualizar la Barra de Herramientas
Vacio fnBotonSeleccionControl(xsObjetoGUI *objeto, xsApuntador entrada)
{
    // Declara variable temporal
    xsEntrada entTemporal;

    // Obtengo la referencia al objeto
    entTemporal.asignarManejador(XS_OBJETOGUI(entrada));

    // Verifica si está activo
    si (oBotonSeleccion.obtenerActivo())    
    {
       // Cambiamos el Titulo de la Ventan
       entTemporal.colocarPlaceHolderTexto("El Botón de Selección está Seleccionado");     
    } 
    // Está desactiva
    deOtroModo
    {
       // Coloca que no está activo
       entTemporal.colocarPlaceHolderTexto("El Botón de Selección está sin Seleccionar");     
    }
}

// Cambiar el Texto
Estatica Vacio fnCambiarTexto(xsObjetoGUI* boton, xsApuntador entrada)
{
    // Declara variable temporal
    xsEntrada entTemporal;

    // Obtengo la referencia al objeto
    entTemporal.asignarManejador(XS_OBJETOGUI(entrada));

    // Verifica si hay texto capturado
    si (entTemporal.obtenerLongitudTexto()>0)    
    {
       // Cambiamos el Texto del boton de Seleccion
       oBotonSeleccion.colocarTexto(entTemporal.obtenerTexto());     
    } 
    // Mensaje
    deOtroModo
    {
       xsVentana::mensajeInformacion("xsEasyCpp Demo BotonSelección","Capture el Texto para cambiar");
    }	
}

// Restaurar Texto
Estatica Vacio fnRestaurarTexto(xsObjetoGUI* boton, xsApuntador entrada)
{
    // Declara variable temporal
    xsEntrada entTemporal;

    // Obtengo la referencia al objeto
    entTemporal.asignarManejador(XS_OBJETOGUI(entrada));

    // Cambiamos el Texto del boton de Seleccion
    oBotonSeleccion.colocarTexto("_Cambiar imagen desde Librería");              	
}


// Cambiar Imagen
Estatica Vacio fnCambiarImagen(xsObjetoGUI* boton, xsApuntador entrada)
{
    // Declara variable temporal
    xsEntrada entTemporal;

    // Obtengo la referencia al objeto
    entTemporal.asignarManejador(XS_OBJETOGUI(entrada));

    // Verifica si hay texto capturado
    si (entTemporal.obtenerLongitudTexto()>0)    
    {
       // Verifica si es desde libreria
       si (oBotonSeleccion.obtenerActivo())
          // Cambiar la Imagen
          oBotonSeleccion.colocarImagen(entTemporal.obtenerTexto(),XS_TAMANIO_ICONO_16PX);
       deOtroModo   
          // Cambiar la Imagen
          oBotonSeleccion.colocarImagen(entTemporal.obtenerTexto());
          
    } 
    // Mensaje
    deOtroModo
    {
       xsVentana::mensajeInformacion("xsEasyCpp Demo BotonSelección","Capture el Texto para cambiar");
    }	
}
