CC_FILE_ERROR FileIOFilter::SaveToFile( ccHObject* entities, const QString& filename, SaveParameters& parameters, Shared filter) { if (!entities || filename.isEmpty() || !filter) return CC_FERR_BAD_ARGUMENT; //if the file name has no extension, we had a default one! QString completeFileName(filename); if (QFileInfo(filename).suffix().isEmpty()) completeFileName += QString(".%1").arg(filter->getDefaultExtension()); CC_FILE_ERROR result = CC_FERR_NO_ERROR; try { result = filter->saveToFile(entities, completeFileName, parameters); } catch(...) { ccLog::Warning(QString("[I/O] CC has caught an unhandled exception while saving file '%1'").arg(filename)); result = CC_FERR_CONSOLE_ERROR; } if (result == CC_FERR_NO_ERROR) { ccLog::Print(QString("[I/O] File '%1' saved successfully").arg(filename)); } else { DisplayErrorMessage(result,"saving",filename); } return result; }
void FileIOFilter::Register(Shared filter) { if (!filter) { assert(false); return; } //filters are uniquely recognized by their 'file filter' string QStringList fileFilters = filter->getFileFilters(true); QString filterName = filter->getDefaultExtension().toUpper(); for (FilterContainer::const_iterator it=s_ioFilters.begin(); it!=s_ioFilters.end(); ++it) { bool error = false; if (*it == filter) { ccLog::Warning(QString("[FileIOFilter::Register] I/O filter '%1' is already registered").arg(filterName)); error = true; } else { //we are going to compare the file filters as they should remain unique! QStringList otherFilters = (*it)->getFileFilters(true); for (int i=0; i<fileFilters.size(); ++i) { if (otherFilters.contains(fileFilters[i])) { QString otherFilterName = (*it)->getDefaultExtension().toUpper();; ccLog::Warning(QString("[FileIOFilter::Register] Internal error: file filter '%1' of filter '%2' is already handled by another filter ('%3')!").arg(fileFilters[i]).arg(filterName).arg(otherFilterName)); error = true; break; } } } if (error) return; } //insert filter s_ioFilters.push_back(filter); }