enums: implement operator{<<,>>} for VisualizerType and use it

This commit is contained in:
Andrzej Rybczak
2014-10-26 20:43:24 +01:00
parent 459aa706c0
commit 35fdddff87
6 changed files with 55 additions and 41 deletions

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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<std::string>(
visualizer_chars, "●▮", [](std::string &&s) {

View File

@@ -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;

View File

@@ -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);

View File

@@ -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)