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

// Función para Activar
Estatica Vacio fnActivar(xsObjetoGUI* boton, xsApuntador botonInterruptor);

// Función para DesActivar
Estatica Vacio fnDesActivar(xsObjetoGUI* boton, xsApuntador botonInterruptor);

// Función para Colocar Relieve
Estatica Vacio fnRelieveOn(xsObjetoGUI* boton, xsApuntador botonInterruptor);

// Función para Eliminar Relieve
Estatica Vacio fnRelieveOff(xsObjetoGUI* boton, xsApuntador botonInterruptor);

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

  // Centrar la Ventana
  oVentana.centrar();

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

  // 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 Botón Interruptor
  xsBotonInterruptor btniInterruptor("_BotonInterruptor No Activo",XS_CON_MNEMONICO);

  // Colocamos su texto emergente
  btniInterruptor.colocarTextoEmergente("Alt-B para hacer Click");

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

  // Cargar una imagen
  btniInterruptor.colocarImagen("img/js16x16.jpg");

  // Creamos el Botón para Activar
  xsBoton btnActivar("Activar",NO XS_CON_MNEMONICO);
  
  // Cambia el Borde 
  btnActivar.colocarBorde(5);

  // Coloca la Imagen
  btnActivar.colocarImagen("call-start",XS_TAMANIO_ICONO_16PX);

  // Creamos el Botón para Desactivar
  xsBoton btnDesactivar("Desactivar",NO XS_CON_MNEMONICO);
  
  // Cambia el Borde 
  btnDesactivar.colocarBorde(5);

  // Coloca la Imagen
  btnDesactivar.colocarImagen("call-stop",XS_TAMANIO_ICONO_16PX);

  // Creamos el Botón para Colocar Relieve
  xsBoton btnRelieveOn("Colocar Relieve",NO XS_CON_MNEMONICO);
  
  // Cambia el Borde 
  btnRelieveOn.colocarBorde(5);

  // Coloca la Imagen
  btnRelieveOn.colocarImagen("edit-paste",XS_TAMANIO_ICONO_16PX);

  // Creamos el Botón para Eliminar Relieve
  xsBoton btnRelieveOff("Eliminar Relieve",NO XS_CON_MNEMONICO);
  
  // Cambia el Borde 
  btnRelieveOff.colocarBorde(5);

  // Coloca la Imagen
  btnRelieveOff.colocarImagen("edit-cut",XS_TAMANIO_ICONO_16PX);

  // Asocial la senal click al botón para cerrar la ventana
  btniInterruptor.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnBotonInterruptorControl),NULO);
  btnActivar.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnActivar),btniInterruptor.obtenerManejador());
  btnDesactivar.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnDesActivar),btniInterruptor.obtenerManejador());
  btnRelieveOn.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnRelieveOn),btniInterruptor.obtenerManejador());
  btnRelieveOff.conectarSenal(XS_EVENTO_CLICKED,XS_FUNCION_RETORNO(fnRelieveOff),btniInterruptor.obtenerManejador());

  // Agregar el BotonInterruptor a la Ventana Principal
  oVentana.agregarAlContenedor(btniInterruptor.obtenerManejador());
  oVentana.agregarAlContenedor(btnActivar.obtenerManejador());
  oVentana.agregarAlContenedor(btnDesactivar.obtenerManejador());
  oVentana.agregarAlContenedor(btnRelieveOff.obtenerManejador());
  oVentana.agregarAlContenedor(btnRelieveOn.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)
{
	// Mensaje de Salida
	xsImprimir("Saliendo del Sistema (Estatica Vacio)...");

   // 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 fnBotonInterruptorControl(xsObjetoGUI *objeto, xsApuntador datos)
{
    // Declara variable temporal
    xsBotonInterruptor btnTemporal;

    // Obtengo la referencia al objeto
    btnTemporal.asignarManejador(objeto);

    // Verifica si está activo
    si (btnTemporal.obtenerActivo())    
    {
       // Cambiamos el Titulo del Botón
       btnTemporal.colocarTexto("_BotonInterruptor Si Activo");            
    } 
    // Está desactiva
    deOtroModo
    {
       // Cambiamos el Titulo del Botón
       btnTemporal.colocarTexto("_BotonInterruptor No Activo");            
    }
}

// Función para Activar
Estatica Vacio fnActivar(xsObjetoGUI* boton, xsApuntador botonInterruptor)
{
   // Declara variable temporal
   xsBotonInterruptor btnTemporal;

   // Obtengo la referencia al objeto
   btnTemporal.asignarManejador(XS_OBJETOGUI(botonInterruptor));

   // Lo activa
   btnTemporal.colocarActivo(VERDAD);
}

// Función para DesActivar
Estatica Vacio fnDesActivar(xsObjetoGUI* boton, xsApuntador botonInterruptor)
{
   // Declara variable temporal
   xsBotonInterruptor btnTemporal;

   // Obtengo la referencia al objeto
   btnTemporal.asignarManejador(XS_OBJETOGUI(botonInterruptor));

   // Lo desactiva
   btnTemporal.colocarActivo(FALSO);
}


// Función para Activar Relieve
Estatica Vacio fnRelieveOn(xsObjetoGUI* boton, xsApuntador botonInterruptor)
{
   // Declara variable temporal
   xsBotonInterruptor btnTemporal;

   // Obtengo la referencia al objeto
   btnTemporal.asignarManejador(XS_OBJETOGUI(botonInterruptor));

   // Lo activa
   btnTemporal.colocarRelieve();
}

// Función para DesActivar Relieve
Estatica Vacio fnRelieveOff(xsObjetoGUI* boton, xsApuntador botonInterruptor)
{
   // Declara variable temporal
   xsBotonInterruptor btnTemporal;

   // Obtengo la referencia al objeto
   btnTemporal.asignarManejador(XS_OBJETOGUI(botonInterruptor));

   // Lo desactiva
   btnTemporal.eliminarRelieve();
}

