From 05efde146d67d9ccac7e6ddb3d0b1daf940689aa Mon Sep 17 00:00:00 2001 From: gulliver-madrid <49131885+gulliver-madrid@users.noreply.github.com> Date: Fri, 19 Jan 2024 21:30:10 +0100 Subject: [PATCH] Empieza a implementar Etiqueta - EtiquetasPreparadas utiliza Etiqueta. --- src/templates/dibujar_elementos.h | 21 +++++----- src/vista/componentes/etiqueta.h | 38 +++++++++++++++++- src/vista/componentes/varios.cpp | 39 +++++++++++++++---- src/vista/componentes/varios.h | 30 +++++++++++--- src/vista/etiquetas/etiquetas.cpp | 1 + .../etiquetas/etiquetas_barra_estado.cpp | 1 + src/vista/etiquetas/etiquetas_contadores.cpp | 3 +- src/vista/etiquetas/etiquetas_contadores.h | 12 +++--- src/vista/etiquetas/etiquetas_info.cpp | 9 +++-- .../fabrica_etiquetas_contadores.cpp | 7 ++-- .../etiquetas/fabrica_etiquetas_contadores.h | 7 +++- 11 files changed, 128 insertions(+), 40 deletions(-) diff --git a/src/templates/dibujar_elementos.h b/src/templates/dibujar_elementos.h index c5247686..a79f1d7e 100644 --- a/src/templates/dibujar_elementos.h +++ b/src/templates/dibujar_elementos.h @@ -5,16 +5,17 @@ #include #include -// template -// void dibujar_elementos( -// sf::RenderTarget &target, // -// const std::map> &elementos // -// ) { -// for (const auto &[_, elemento] : elementos) { -// target.draw(*elemento); -// } -// } - +template +void dibujar_elementos( + sf::RenderTarget &target, // + const std::map> &elementos // +) { + for (const auto &[_, elemento] : elementos) { + if (elemento) { + target.draw(*elemento); + } + } +} template void dibujar_elementos( sf::RenderTarget &target, // diff --git a/src/vista/componentes/etiqueta.h b/src/vista/componentes/etiqueta.h index 49d328be..2333537c 100644 --- a/src/vista/componentes/etiqueta.h +++ b/src/vista/componentes/etiqueta.h @@ -1,26 +1,62 @@ #pragma once #include "../../shared/font.h" +#include "../componente.h" #include #include -struct Etiqueta : public sf::Drawable { +struct EstiloTexto { + const int tamano; + const sf::Color &color; +}; + +class Etiqueta : public ComponenteConFont { + private: sf::Text etiqueta; + + public: Etiqueta( const std::string &texto, // int tamano_fuente, // const OptionalFont &font // ) { + this->font = font; etiqueta.setString(texto); if (font.exists()) { etiqueta.setFont(*font.get_pointer()); etiqueta.setCharacterSize(tamano_fuente); }; } + Etiqueta( + const std::string &texto, // + int tamano_fuente, // + const sf::Color &color, // + const OptionalFont &font, // + const sf::Vector2f &posicion // + + ) + : Etiqueta(texto, tamano_fuente, font) { + etiqueta.setFillColor(color); + etiqueta.setPosition(posicion); + } + + /* Sobrecarga para usar EstiloTexto */ + Etiqueta( + const std::string &texto, // + const EstiloTexto &estilo, // + const OptionalFont &font, // + const sf::Vector2f &posicion // + ) + : Etiqueta(texto, estilo.tamano, estilo.color, font, posicion) {} + + void actualizar_texto(const std::string &texto) { // + etiqueta.setString(texto); + } virtual void draw( sf::RenderTarget &target, // sf::RenderStates states // ) const override { + assert(font.exists()); target.draw(etiqueta); }; }; diff --git a/src/vista/componentes/varios.cpp b/src/vista/componentes/varios.cpp index d7cc1720..2396d6a6 100644 --- a/src/vista/componentes/varios.cpp +++ b/src/vista/componentes/varios.cpp @@ -3,6 +3,37 @@ #include #include +std::shared_ptr crear_etiqueta( + const std::string &texto, // + int tamano_fuente, // + const OptionalFont &font // +) { + return std::make_shared(texto, tamano_fuente, font); +} + +std::shared_ptr crear_etiqueta( + const std::string &texto, // + int tamano_fuente, // + const sf::Color &color, // + const OptionalFont &font, // + const sf::Vector2f &posicion // + +) { + return std::make_shared( + texto, tamano_fuente, color, font, posicion + ); +} + +/* Sobrecarga para usar EstiloTexto */ +std::shared_ptr crear_etiqueta( + const std::string &texto, // + const EstiloTexto &estilo, // + const OptionalFont &font, // + const sf::Vector2f &posicion // +) { + return std::make_shared(texto, estilo, font, posicion); +} + sf::Text crearEtiqueta( const std::string &texto, // int tamano_fuente, // @@ -17,14 +48,6 @@ sf::Text crearEtiqueta( return etiqueta; } -Etiqueta crear_etiqueta( - const std::string &texto, // - int tamano_fuente, // - const OptionalFont &font // -) { - return Etiqueta(texto, tamano_fuente, font); -} - sf::Text crearEtiqueta( const std::string &texto, // int tamano_fuente, // diff --git a/src/vista/componentes/varios.h b/src/vista/componentes/varios.h index 2b89cb2b..c15821d4 100644 --- a/src/vista/componentes/varios.h +++ b/src/vista/componentes/varios.h @@ -13,25 +13,43 @@ namespace sf { class Text; } // namespace sf -struct Etiqueta; +class Etiqueta; namespace medidas { constexpr int TAMANO_TEXTO_GRANDE = 32; } // namespace medidas -struct EstiloTexto { - const int tamano; - const sf::Color &color; -}; +struct EstiloTexto; const auto Vector2f_CERO = sf::Vector2f(0, 0); -Etiqueta crear_etiqueta( +///// Creadores de Etiqueta ///// + +std::shared_ptr crear_etiqueta( const std::string &texto, // int tamano_fuente, // const OptionalFont & // ); +std::shared_ptr crear_etiqueta( + const std::string &texto, // + int tamano_fuente, // + const sf::Color &color, // + const OptionalFont &font, // + const sf::Vector2f &posicion // + +); + +/* Sobrecarga para usar EstiloTexto */ +std::shared_ptr crear_etiqueta( + const std::string &texto, // + const EstiloTexto &estilo, // + const OptionalFont &font, // + const sf::Vector2f &posicion // +); + +///// Creadores de sf::Text ///// + sf::Text crearEtiqueta( const std::string &texto, // int tamano_fuente, // diff --git a/src/vista/etiquetas/etiquetas.cpp b/src/vista/etiquetas/etiquetas.cpp index ba1a60a2..3bc284a7 100644 --- a/src/vista/etiquetas/etiquetas.cpp +++ b/src/vista/etiquetas/etiquetas.cpp @@ -1,6 +1,7 @@ #include "etiquetas.h" #include "../basicos_vista.h" #include "../cadenas.h" +#include "../componentes/etiqueta.h" #include "../componentes/varios.h" #include "../presentacion_vista.h" #include "etiquetas_barra_estado.h" diff --git a/src/vista/etiquetas/etiquetas_barra_estado.cpp b/src/vista/etiquetas/etiquetas_barra_estado.cpp index 22783ac7..b799d537 100644 --- a/src/vista/etiquetas/etiquetas_barra_estado.cpp +++ b/src/vista/etiquetas/etiquetas_barra_estado.cpp @@ -4,6 +4,7 @@ #include "../../tiempo.h" #include "../basicos_vista.h" #include "../cadenas.h" +#include "../componentes/etiqueta.h" #include "../componentes/varios.h" #include "../presentador.h" #include diff --git a/src/vista/etiquetas/etiquetas_contadores.cpp b/src/vista/etiquetas/etiquetas_contadores.cpp index f1b1f227..96ddea06 100644 --- a/src/vista/etiquetas/etiquetas_contadores.cpp +++ b/src/vista/etiquetas/etiquetas_contadores.cpp @@ -4,6 +4,7 @@ #include "../../templates/dibujar_elementos.h" #include "../../templates/helpers.h" #include "../basicos_vista.h" +#include "../componentes/etiqueta.h" #include "../componentes/varios.h" #include "../presentador.h" #include "fabrica_etiquetas_contadores.h" @@ -128,7 +129,7 @@ void EtiquetasPreparadas::setup(const dominio::TiposDePizza &tp_disponibles) { void EtiquetasPreparadas::actualizar(const PizzasToStrings &vista_preparadas) { for (auto &[tp, linea] : vista_preparadas) { assert(has_key(etiquetas_preparadas, tp)); - etiquetas_preparadas.at(tp).setString(linea); + etiquetas_preparadas.at(tp)->actualizar_texto(linea); } } diff --git a/src/vista/etiquetas/etiquetas_contadores.h b/src/vista/etiquetas/etiquetas_contadores.h index 591d3bf5..943b1edf 100644 --- a/src/vista/etiquetas/etiquetas_contadores.h +++ b/src/vista/etiquetas/etiquetas_contadores.h @@ -9,6 +9,7 @@ namespace sf { class RenderTarget; } +class Etiqueta; ///// TarjetaPedido ///// @@ -25,7 +26,7 @@ class TarjetaPedido : public sf::Drawable { ) const override; }; -///// EtiquetasContadores ///// +///// EtiquetasPreparadas ///// /* * Contiene las etiquetas que muestran las pizzas en area de @@ -33,7 +34,7 @@ class TarjetaPedido : public sf::Drawable { */ class EtiquetasPreparadas : public ComponenteConFont { using TipoPizza = dominio::TipoPizza; - using PizzasToLabels = std::map; + using PizzasToLabels = std::map>; public: PizzasToLabels etiquetas_preparadas; @@ -47,13 +48,14 @@ class EtiquetasPreparadas : public ComponenteConFont { sf::RenderStates states // ) const override; }; + +///// EtiquetasPedidos ///// + /* - * Contiene los elementos visuales que muestran las pizzas en area de - * preparadas, servidas y los pedidos. + * Contiene los elementos visuales que muestran los pedidos. */ class EtiquetasPedidos : public ComponenteConFont { using TipoPizza = dominio::TipoPizza; - using PizzasToLabels = std::map; private: void _actualizar_vista_pedidos(const modelo::Pedidos &); diff --git a/src/vista/etiquetas/etiquetas_info.cpp b/src/vista/etiquetas/etiquetas_info.cpp index 71fdb793..3cee4f35 100644 --- a/src/vista/etiquetas/etiquetas_info.cpp +++ b/src/vista/etiquetas/etiquetas_info.cpp @@ -2,6 +2,7 @@ #include "../../shared/log_init.h" #include "../../textos.h" #include "../basicos_vista.h" +#include "../componentes/etiqueta.h" #include "../componentes/varios.h" #include #include @@ -38,8 +39,8 @@ struct FabricaEtiquetasInfo : public ObjetoConFont { public: FabricaEtiquetasInfo(const OptionalFont &font) : ObjetoConFont(font) {} sf::Text crear_etiqueta_instrucciones( - const std::string &plantilla, // - const NumNivelOpcional& num_nivel // + const std::string &plantilla, // + const NumNivelOpcional &num_nivel // ) const { const auto estilo = estilos::INSTRUCCIONES; const auto texto = construir_texto_instrucciones(plantilla, num_nivel); @@ -63,8 +64,8 @@ struct FabricaEtiquetasInfo : public ObjetoConFont { EtiquetasInfo::EtiquetasInfo(const OptionalFont &font) : ObjetoConFont(font) {} void EtiquetasInfo::setup( - const std::string &instr, // - const NumNivelOpcional& num_nivel // + const std::string &instr, // + const NumNivelOpcional &num_nivel // ) { const auto fabrica = FabricaEtiquetasInfo(font); LOG(info) << "Construyendo instrucciones" << std::endl; diff --git a/src/vista/etiquetas/fabrica_etiquetas_contadores.cpp b/src/vista/etiquetas/fabrica_etiquetas_contadores.cpp index 86ae430f..47c48b54 100644 --- a/src/vista/etiquetas/fabrica_etiquetas_contadores.cpp +++ b/src/vista/etiquetas/fabrica_etiquetas_contadores.cpp @@ -1,5 +1,6 @@ #include "fabrica_etiquetas_contadores.h" #include "../basicos_vista.h" +#include "../componentes/etiqueta.h" #include "../componentes/varios.h" namespace medidas { @@ -38,10 +39,10 @@ sf::Vector2f FabricaEtiquetasContadores::_obtener_posicion_etiqueta( * Crea una etiqueta para un contador (dependiendo del panel tendra uno u * otro significado) */ -sf::Text FabricaEtiquetasContadores::_crear_etiqueta( // +std::shared_ptr FabricaEtiquetasContadores::_crear_etiqueta( // sf::Vector2f posicion ) const { - return crearEtiqueta("", estilos::CONTADORES, font, posicion); + return crear_etiqueta("", estilos::CONTADORES, font, posicion); } /////////////////////////////////////////// @@ -54,7 +55,7 @@ FabricaEtiquetasContadores::FabricaEtiquetasContadores(const OptionalFont &font) /* * Crea una etiqueta de pizzas preparadas */ -sf::Text +std::shared_ptr FabricaEtiquetasContadores::crearEtiquetaPizzasPreparadas(size_t indice_etiqueta ) const { const auto indice_panel = IndicePanel::PANEL_PREPARADAS; diff --git a/src/vista/etiquetas/fabrica_etiquetas_contadores.h b/src/vista/etiquetas/fabrica_etiquetas_contadores.h index 5aec693c..ca420a41 100644 --- a/src/vista/etiquetas/fabrica_etiquetas_contadores.h +++ b/src/vista/etiquetas/fabrica_etiquetas_contadores.h @@ -3,6 +3,8 @@ #include "../../shared/font.h" #include +class Etiqueta; + class FabricaEtiquetasContadores : public ObjetoConFont { private: sf::Vector2f _obtener_posicion_etiqueta( @@ -11,9 +13,10 @@ class FabricaEtiquetasContadores : public ObjetoConFont { int desplazamiento_vertical // ) const; - sf::Text _crear_etiqueta(sf::Vector2f posicion) const; + std::shared_ptr _crear_etiqueta(sf::Vector2f posicion) const; public: FabricaEtiquetasContadores(const OptionalFont &font); - sf::Text crearEtiquetaPizzasPreparadas(size_t indice_etiqueta) const; + std::shared_ptr + crearEtiquetaPizzasPreparadas(size_t indice_etiqueta) const; };