Casi completo falta implementar los listeners