- merged in geiss & sperl's idle preset

- preset chooser doesn't abort when preset dir is invalid
- added smooth preset switch cancellation when preset chooser empty (untested)
- changed preset construct to allow for custom preset name when using 
	input streams as source



git-svn-id: https://projectm.svn.sourceforge.net/svnroot/projectm/trunk@427 6778bc44-b910-0410-a7a0-be141de4315d
This commit is contained in:
w1z7ard
2007-09-14 19:45:45 +00:00
parent 94c6036ee8
commit 4cf4eeae80
7 changed files with 300 additions and 133 deletions

View File

@ -46,42 +46,35 @@ void PresetLoader::setScanDirectory(std::string dirname)
void PresetLoader::rescan()
{
std::cerr << "Rescanning..." << std::endl;
// std::cerr << "Rescanning..." << std::endl;
// Clear the directory entry collection
m_entries.clear();
std::cerr << "cleared!" << std::endl;
// If directory already opened, close it first
if (m_dir)
{
std::cerr << "m_dir" << std::endl;
closedir(m_dir);
m_dir = 0;
}
std::cerr << "opening " << m_dirname << std::endl;
// Allocate a new a stream given the current directory name
if ((m_dir = opendir(m_dirname.c_str())) == NULL)
{
handleDirectoryError();
abort();
return; // no files loaded. m_entries is empty
}
struct dirent * dir_entry;
std::set<std::string> alphaSortedFileSet;
while ((dir_entry = readdir(m_dir)) != NULL)
{
{
std::ostringstream out;
// Convert char * to friendly string
std::string filename(dir_entry->d_name);
// Verify extension is projectm or milkdrop
if ((filename.rfind(PROJECTM_FILE_EXTENSION) != (filename.length() - PROJECTM_FILE_EXTENSION.length()))
&& (filename.rfind(MILKDROP_FILE_EXTENSION) != (filename.length() - MILKDROP_FILE_EXTENSION.length())))
@ -118,8 +111,6 @@ std::auto_ptr<Preset> PresetLoader::loadPreset(unsigned int index, const PresetI
return std::auto_ptr<Preset>(new Preset(m_entries[index], presetInputs, presetOutputs));
}
void PresetLoader::handleDirectoryError()
{
switch (errno)
@ -135,10 +126,10 @@ void PresetLoader::handleDirectoryError()
break;
case ENFILE:
std::cerr << "[PresetLoader] Your system has reached its open file limit. Giving up..." << std::endl;
abort();
break;
case EMFILE:
std::cerr << "[PresetLoader] too many files in use by projectM! Bailing!" << std::endl;
abort();
break;
case EACCES:
std::cerr << "[PresetLoader] permissions issue reading the specified preset directory." << std::endl;
break;