From 35fdddff872af90863136f0ad298abbc85dba7bc Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Sun, 26 Oct 2014 20:43:24 +0100 Subject: [PATCH] enums: implement operator{<<,>>} for VisualizerType and use it --- src/enums.cpp | 37 ++++++++++++++++++++++++++++++++ src/enums.h | 2 ++ src/settings.cpp | 5 ++--- src/utility/type_conversions.cpp | 14 ------------ src/utility/type_conversions.h | 1 - src/visualizer.cpp | 37 ++++++++++++-------------------- 6 files changed, 55 insertions(+), 41 deletions(-) diff --git a/src/enums.cpp b/src/enums.cpp index 4e37a074..485b9bf5 100644 --- a/src/enums.cpp +++ b/src/enums.cpp @@ -137,3 +137,40 @@ std::istream &operator>>(std::istream &is, Design &ui) is.setstate(std::ios::failbit); return is; } + +std::ostream &operator<<(std::ostream& os, VisualizerType vt) +{ + switch (vt) + { + case VisualizerType::Wave: + os << "sound wave"; + break; + case VisualizerType::WaveFilled: + os << "sound wave filled"; + break; + case VisualizerType::Spectrum: + os << "frequency spectrum"; + break; + case VisualizerType::Ellipse: + os << "sound ellipse"; + break; + } + return os; +} + +std::istream &operator>>(std::istream& is, VisualizerType &vt) +{ + std::string svt; + is >> svt; + if (svt == "wave") + vt = VisualizerType::Wave; + else if (svt == "wave_filled") + vt = VisualizerType::WaveFilled; + else if (svt == "spectrum") + vt = VisualizerType::Spectrum; + else if (svt == "ellipse") + vt = VisualizerType::Ellipse; + else + is.setstate(std::ios::failbit); + return is; +} diff --git a/src/enums.h b/src/enums.h index 3fd96ea1..50b3e9ce 100644 --- a/src/enums.h +++ b/src/enums.h @@ -40,5 +40,7 @@ std::ostream &operator<<(std::ostream &os, Design ui); std::istream &operator>>(std::istream &is, Design &ui); enum class VisualizerType { Wave, WaveFilled, Spectrum, Ellipse }; +std::ostream &operator<<(std::ostream &os, VisualizerType vt); +std::istream &operator>>(std::istream &is, VisualizerType &vt); #endif // NCMPCPP_ENUMS_H diff --git a/src/settings.cpp b/src/settings.cpp index 1bdeae22..58c9471f 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -230,9 +230,8 @@ bool Configuration::read(const std::string &config_path) visualizer_sync_interval, 30, [](unsigned v) { return boost::posix_time::seconds(v); })); - p.add("visualizer_type", option_parser::worker([this](std::string &&v) { - visualizer_type = stringToVisualizerType( v ); - }, defaults_to(visualizer_type, VisualizerType::Wave) + p.add("visualizer_type", assign_default( + visualizer_type, VisualizerType::Wave )); p.add("visualizer_look", assign_default( visualizer_chars, "●▮", [](std::string &&s) { diff --git a/src/utility/type_conversions.cpp b/src/utility/type_conversions.cpp index e6ca4e39..398bab7e 100644 --- a/src/utility/type_conversions.cpp +++ b/src/utility/type_conversions.cpp @@ -43,20 +43,6 @@ NC::Color stringToColor(const std::string &color) return result; } -VisualizerType stringToVisualizerType(const std::string &visualizerType) -{ - VisualizerType result = VisualizerType::Wave; - if (visualizerType == "wave") - result = VisualizerType::Wave; - else if (visualizerType == "spectrum") - result = VisualizerType::Spectrum; - else if (visualizerType == "wave_filled") - result = VisualizerType::WaveFilled; - else if (visualizerType == "ellipse") - result = VisualizerType::Ellipse; - return result; -} - NC::Border stringToBorder(const std::string &border) { NC::Border result = NC::Border::None; diff --git a/src/utility/type_conversions.h b/src/utility/type_conversions.h index e9a580d7..de5de368 100644 --- a/src/utility/type_conversions.h +++ b/src/utility/type_conversions.h @@ -27,7 +27,6 @@ #include "enums.h" NC::Color stringToColor(const std::string &color); -VisualizerType stringToVisualizerType(const std::string &visualizerType); NC::Border stringToBorder(const std::string &border); std::string tagTypeToString(mpd_tag_type tag); diff --git a/src/visualizer.cpp b/src/visualizer.cpp index bb184bfa..02fa9848 100644 --- a/src/visualizer.cpp +++ b/src/visualizer.cpp @@ -189,31 +189,22 @@ int Visualizer::windowTimeout() void Visualizer::spacePressed() { - std::string visualizerName; - if (Config.visualizer_type == VisualizerType::Wave) + switch (Config.visualizer_type) { - Config.visualizer_type = VisualizerType::WaveFilled; - visualizerName = "sound wave filled"; + case VisualizerType::Wave: + Config.visualizer_type = VisualizerType::WaveFilled; + break; + case VisualizerType::WaveFilled: + Config.visualizer_type = VisualizerType::Spectrum; + break; + case VisualizerType::Spectrum: + Config.visualizer_type = VisualizerType::Ellipse; + break; + case VisualizerType::Ellipse: + Config.visualizer_type = VisualizerType::Wave; + break; } - else if (Config.visualizer_type == VisualizerType::WaveFilled && Config.visualizer_in_stereo) - { - Config.visualizer_type = VisualizerType::Ellipse; - visualizerName = "sound ellipse"; - } -# ifdef HAVE_FFTW3_H - else if (Config.visualizer_type == VisualizerType::Ellipse || Config.visualizer_type == VisualizerType::WaveFilled) - { - Config.visualizer_type = VisualizerType::Spectrum; - visualizerName = "frequency spectrum"; - } -# endif // HAVE_FFTW3_H - else - { - Config.visualizer_type = VisualizerType::Wave; - visualizerName = "sound wave"; - } - - Statusbar::printf("Visualization type: %1%", visualizerName.c_str()); + Statusbar::printf("Visualization type: %1%", Config.visualizer_type); } void Visualizer::DrawSoundWaveStereo(int16_t *buf_left, int16_t *buf_right, ssize_t samples, size_t height)