#include "enter_name.h" #include "utils.h" #include // Para size_t #include // Para max, min // Constructor EnterName::EnterName() : character_list_(" ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-+-*/=?¿<>!\"#$%&/()") {} // Inicializa el objeto void EnterName::init(const std::string &name) { // No se pasa ningún nombre if (name == "") { name_ = "A"; position_ = 0; } // Se pasa un nombre else { name_ = name; position_ = name_.length(); } // Inicializa el vector de indices con el nombre y espacios initCharacterIndex(name_); } // Incrementa la posición void EnterName::incPosition() { ++position_; position_ = std::min(position_, NAME_LENGHT + 1); if (position_ <= NAME_LENGHT) { character_index_[position_] = character_index_[position_ - 1]; } updateNameFromCharacterIndex(); } // Decrementa la posición void EnterName::decPosition() { --position_; position_ = std::max(position_, 0); character_index_[position_ + 1] = 0; updateNameFromCharacterIndex(); } // Incrementa el índice void EnterName::incIndex() { ++character_index_[position_]; if (character_index_[position_] >= character_list_.size()) { character_index_[position_] = 0; } updateNameFromCharacterIndex(); } // Decrementa el índice void EnterName::decIndex() { --character_index_[position_]; if (character_index_[position_] < 0) { character_index_[position_] = character_list_.size() - 1; } updateNameFromCharacterIndex(); } // Actualiza el nombre a partir de la lista de índices void EnterName::updateNameFromCharacterIndex() { name_.clear(); for (int i = 0; i < NAME_LENGHT; ++i) { name_.push_back(character_list_[character_index_[i]]); } name_ = trim(name_); } // Actualiza la variable void EnterName::initCharacterIndex(const std::string &name) { // Rellena de espacios for (size_t i = 0; i < NAME_LENGHT; ++i) { character_index_[i] = 0; } // Coloca los índices en función de los caracteres que forman el nombre for (size_t i = 0; i < name.substr(0, NAME_LENGHT).size(); ++i) { character_index_[i] = findIndex(name.at(i)); } } // Encuentra el indice de un caracter en "character_list_" int EnterName::findIndex(char character) const { for (size_t i = 0; i < character_list_.size(); ++i) if (character == character_list_.at(i)) return i; return 0; }