diff --git a/src/projectM-engine/PresetChooser.hpp b/src/projectM-engine/PresetChooser.hpp index f1771b413..5f6064963 100644 --- a/src/projectM-engine/PresetChooser.hpp +++ b/src/projectM-engine/PresetChooser.hpp @@ -121,6 +121,11 @@ public: template std::auto_ptr weightedRandom(const PresetInputs & presetInputs, PresetOutputs & preseOutputs); + + + /// True if no presets in directory + bool empty() const; + private: template std::auto_ptr doWeightedSample(WeightFunctor & weightFunctor, const PresetInputs & presetInputs, PresetOutputs & presetOutputs); @@ -191,6 +196,11 @@ std::auto_ptr PresetChooser::weightedRandom(const PresetInputs & presetI return doWeightedSample(weightFunctor); } +inline bool PresetChooser::empty() const { + return m_presetLoader->getNumPresets() == 0; + +} + template inline std::auto_ptr PresetChooser::weightedRandom(const PresetInputs & presetInputs, PresetOutputs & presetOutputs){ @@ -202,7 +212,7 @@ inline std::auto_ptr PresetChooser::weightedRandom(const PresetInputs & inline std::auto_ptr PresetChooser::directoryIndex(std::size_t index, const PresetInputs & presetInputs, PresetOutputs & presetOutputs) const { - return m_presetLoader->loadPreset(index,presetInputs, presetOutputs); + return m_presetLoader->loadPreset(index, presetInputs, presetOutputs); } template diff --git a/src/projectM-engine/console_interface.cpp b/src/projectM-engine/console_interface.cpp index 33af4714d..8599e26fc 100755 --- a/src/projectM-engine/console_interface.cpp +++ b/src/projectM-engine/console_interface.cpp @@ -169,7 +169,6 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode if (((*m_presetPos) == m_presetChooser->end())) { *m_presetPos = m_presetChooser->begin(); } - m_activePreset = std::auto_ptr(0); m_activePreset = m_presetPos->allocate(this->presetInputs, this->presetOutputs); @@ -178,13 +177,19 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode break; case PROJECTM_K_r: + + if (m_presetChooser->empty()) + break; + m_activePreset = m_presetChooser->weightedRandom (this->presetInputs, this->presetOutputs); presetInputs.frame = 0; smoothFrame = 0; break; case PROJECTM_K_p: - + if (m_presetChooser->empty()) + break; + if (*m_presetPos != m_presetChooser->begin()) { --(*m_presetPos); } else {