bool ValidadorDeCapas::validarCapasDesde(Json::Value capasParseadas){
	float anchoCapas;
	std::string fondo;
	bool errorCapa = false;

	if (!capasParseadas || capasParseadas.size() == 0){
		Log::getInstancia().logearMensajeEnModo("  [BAD] Fallo el parseo de las capas", Log::MODO_WARNING);
		fondo = FONDO_DEFAULT;
		anchoCapas = ANCHO_CAPA;

		errorCapa = validarCapas(&anchoCapas, &fondo, 0);
		if (errorCapa){
			return false;
		}
		capas->push_back(new Capa(fondo, anchoCapas, 0));
		Log::getInstancia().logearMensajeEnModo("Se cargaron capas y ancho por defecto", Log::MODO_WARNING);
	}
	else{//se valida que exista el campo, que sea un tipo dedato correcto. De los rangos y existencia de archivo se encarga el validador
		for (size_t i = 0; i < capasParseadas.size(); i++) {

			std::string fondo(FONDO_DEFAULT);//asigno fondo por defecto

			//valido que exista el campo y que tenga un string
			if (capasParseadas[i].isMember("imagen_fondo") && capasParseadas[i].get("imagen_fondo", FONDO_DEFAULT).isString())
				fondo = (capasParseadas[i].get("imagen_fondo", FONDO_DEFAULT).asString());
			else
				Log::getInstancia().logearMensajeEnModo("Campo Imagen_fondo incorrecto en capa " + std::to_string(i) + " , se usa capa por defecto", Log::MODO_WARNING);
			//la capa por defecto se asigno arriba

			if (capasParseadas[i].isMember("ancho") && capasParseadas[i].get("ancho", ANCHO_CAPA).isNumeric() && capasParseadas[i].get("ancho", ANCHO_CAPA) < MAX_ANCHO_ESCENARIO)
				anchoCapas = (capasParseadas[i].get("ancho", ANCHO_CAPA).asFloat());
			else {
				anchoCapas = ANCHO_CAPA;
				Log::getInstancia().logearMensajeEnModo("Se carga ancho de capa " + std::to_string(i) + " , por defecto", Log::MODO_WARNING);
			}

			int zIndexCapa = ZINDEX_CAPA;
			if (!capasParseadas[i].isMember("zindex"))
				Log::getInstancia().logearMensajeEnModo("Se carga z-index de capa " + std::to_string(i) + "  por defecto ->" + std::to_string(ZINDEX_CAPA), Log::MODO_DEBUG);
			else {
				if (capasParseadas[i].get("zindex", ZINDEX_CAPA).isNumeric() && capasParseadas[i].get("zindex", ZINDEX_CAPA) < INT_MAX && capasParseadas[i].get("zindex", ZINDEX_CAPA) > -INT_MAX)
					zIndexCapa = (capasParseadas[i].get("zindex", ZINDEX_CAPA).asInt());
				else
					Log::getInstancia().logearMensajeEnModo("Se carga z-index de capa " + std::to_string(i) + "  por defecto ->" + std::to_string(ZINDEX_CAPA), Log::MODO_WARNING);
			}

			errorCapa = validarCapas(&anchoCapas, &fondo, i);
			if (errorCapa){
				return false;
			}
			capas->push_back(new Capa(fondo, anchoCapas, zIndexCapa));
		}
		Log::getInstancia().logearMensajeEnModo("Se cargaron capas correctamente", Log::MODO_DEBUG);
	}

	return true;
}
void Calendario::Render(wxDC& dc)
{
	if(fondo==1){
	wxString appdata=wxString::FromUTF8(getenv("HOME"));
	wxString rutapng=appdata+_("/Divel/Calendar/fondo.png");
	wxBitmap fondo(rutapng,wxBITMAP_TYPE_PNG);
	dc.DrawText(_("Cargando fondo de pantalla..."),wxPoint(610,400));
	dc.DrawBitmap(fondo,wxPoint(1,1));
	}

}
void VistaJuego::dibujarFondoInicio() {

	FondoInicio fondo(PATH_FONDO_INICIO, gRenderer);

	while( !jugar ) {
		SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF );
		//se limpia la pantalla
		SDL_RenderClear( gRenderer );
		fondo.render();
		//actualiza la pantalla
		SDL_RenderPresent( gRenderer );
	 }
}
Calendario::Calendario(const wxString& title, const wxPoint& pos, const wxSize& size)
       : wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
	
	//SetIcon(wxICON(ICONOCAL));
    wxMenu *archivo = new wxMenu;
	wxMenu* ventana=new wxMenu;
	wxMenu* ayuda=new wxMenu;
	this->SetTitle(_("Divel Calendar"));
	this->SetSize(800,600);
	
    ayuda->Append(ID_OPT, _("Configuracion"),_("Ajuste las configuraciones"));
	ayuda->Append( ID_About, _("&Acerca") );
	
	archivo->Append(ID_ADDEVT, _("&Anadir evento"));
	archivo->Append(ID_ADDREC, _("A&nadir recordatorio"));
    //archivo->AppendSeparator();
	//archivo->Append(ID_OPEN, "A&brir calendario");
	//archivo->Append(ID_SAVE, "&Guardar calendario");
	archivo->AppendSeparator();
    archivo->Append( ID_Quit, _("&Salir") );
	ventana->Append(ID_CHAT,_("&DivChat"),_("Abre la ventana de chat"));
	//ventana->Append(ID_EVENTS, "D&ivelEvents","Abre la ventana de eventos Divel");
	//ventana->Append(ID_NOTES, "Divel &Notes","Abre la ventana de apuntes");

    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append( archivo, _("&Archivo") );
	menuBar->Append(ventana,_("&Ventana"));
	menuBar->Append(ayuda,_("A&yuda"));
    SetMenuBar( menuBar );
	//Crear Frame principal
	wxInitAllImageHandlers();
	
	wxString appdata=wxString::FromUTF8(getenv("HOME"));
	if(wxDirExists(appdata+_("/Divel/Calendar"))==false)
	{
	
		wxMkdir(appdata+_("/Divel"));
		wxMkdir(appdata+_("/Divel/Calendar"));
		//wxCopyFile("./conf.cfg",appdata+"\\Divel\\Calendar\\conf.cfg");
	
	
	}else if(wxFileExists(appdata+_("/Divel/Calendar/conf.cfg"))==true){
		int fuente=0, color=0,posicion=0,premium=0;
		wxString situacionconf=appdata+_("/Divel/Calendar/conf.cfg");
		ifstream configfile(situacionconf.mb_str(),ifstream::in);
		if(configfile.good())
		{

			char buffer;
			buffer=configfile.get();
			wxString conffile=wxChar(buffer);
			while(!configfile.eof())
			{
				buffer=configfile.get();

				if(buffer=='1'){
					printf("Uno detectado");
				switch(posicion){
				case 0: {fondo=1;posicion++;}break;
				case 1: {fuente=1;posicion++;}break;
				case 2: {color=1;posicion++;}break;
				case 3: {premium=1;posicion++;}break;

				}}
				if(buffer=='0'){
					printf("Cero detectado");
				posicion++;
				}
				conffile+=buffer;
			}
			configfile.close();
			
		}
		
		if(fondo==1){
	
		}
		if(premium==1){
			wxMessageBox(_("Bienvenido usuario premium"));
		}
	
	}
	
	panel=new wxPanel(this);
	panel->SetBackgroundColour(wxColour(_("white")));
	calendar=new wxPanel(panel,1,1,600,400);
	//calendar->SetBackgroundColour(wxColour("red"));
	calendar->Connect(wxEVT_PAINT,wxPaintEventHandler(Calendario::Paint));


	/*this->SetFont(wxFont(14,1,1,3,true));
	this->SetFont(wxFont(12,2,1,3,true));
	panel->SetFont(wxFont(12,3,1,3,true));*/
	//wxFontPickerCtrl* fuentedlg=new wxFontPickerCtrl(panel,wxID_ANY,wxNullFont,wxPoint(-1,-1));


	//Sistema de fuentes
	/*
	wxFontDialog* fuente=new wxFontDialog();
	fuente->ShowModal();
	wxFontData mifuente=fuente->GetFontData();
	wxFont lafuente=mifuente.GetChosenFont();
	panel->SetFont(lafuente);
	this->SetFont(lafuente);
	*/
	if(fondo==1){
	wxBitmap fondo(appdata+_("/Divel/Calendar/fondo.png"),wxBITMAP_TYPE_PNG);
	wxStaticBitmap* fonpantalla=new wxStaticBitmap(panel,wxID_ANY,fondo,wxDefaultPosition,wxDefaultSize);
	}
	wxButton* anadirevt=new wxButton(panel,ID_ADDEVT,_("Anadir evento"),wxPoint(610,20),wxSize(150,50));
	wxButton* anadirrec=new wxButton(panel,ID_ADDREC,_("Anadir recordatorio"),wxPoint(610,80),wxSize(150,50));
	wxButton* del=new wxButton(panel,ID_DELETE,_("Borrar evento"),wxPoint(610,140),wxSize(150,50));
	wxButton* ver=new wxButton(panel,ID_VER,_("Ver evento"),wxPoint(610,200),wxSize(150,50));
	wxButton* divchat=new wxButton(panel,ID_CHAT,_("DivChat"),wxPoint(610,260),wxSize(150,50));
	desc=new wxStaticText(panel,wxID_ANY,_("Ningun evento seleccionado"),wxPoint(1,410));
	//wxPanel* calendar=new wxPanel(panel,-1,-1,600,400);
	/*wxMemoryDC* memoria=new wxMemoryDC;
	wxClientDC calendario(panel);
	//memoria->DrawCircle(wxPoint(1,1),wxCoord(32));
	//calendario.Blit(wxPoint(-1,-1),wxSize(600,400),memoria,wxPoint(-1,-1));
	calendario.DrawCircle(wxPoint(1,1),wxCoord(32));*/
	wxCalendarCtrl* calendarctrl=new wxCalendarCtrl(calendar,ID_CAL,wxDefaultDateTime,wxPoint(1,1),wxSize(600,400),wxCAL_MONDAY_FIRST);
	Connect(ID_ADDEVT, wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(Calendario::CrearEvento));
	Connect(ID_ADDREC, wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(Calendario::CrearRecordatorio));
	Connect(ID_VER, wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(Calendario::VerEvento));
	Connect(ID_DELETE, wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(Calendario::BorrarEvento));
	Connect(ID_CHAT,wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(Calendario::DivelChat));

    CreateStatusBar();
    SetStatusText(_("Bienvenido a Divel Calendar"));
}