00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "PlayParameterRepository.h"
00017 #include "PlayParameters.h"
00018
00020
00022 #include "audioio/AudioGenerator.h"
00023
00024 #include <iostream>
00025
00026 PlayParameterRepository *
00027 PlayParameterRepository::m_instance = new PlayParameterRepository;
00028
00029 PlayParameterRepository *
00030 PlayParameterRepository::getInstance()
00031 {
00032 return m_instance;
00033 }
00034
00035 PlayParameterRepository::~PlayParameterRepository()
00036 {
00037 }
00038
00039 void
00040 PlayParameterRepository::addModel(const Model *model)
00041 {
00042
00043
00044 if (!getPlayParameters(model)) {
00045
00046
00047
00048
00049 if (AudioGenerator::canPlay(model)) {
00050
00051
00052
00053 PlayParameters *params = new PlayParameters;
00054 m_playParameters[model] = params;
00055
00056 params->setPlayPluginId
00057 (AudioGenerator::getDefaultPlayPluginId(model));
00058
00059 params->setPlayPluginConfiguration
00060 (AudioGenerator::getDefaultPlayPluginConfiguration(model));
00061
00062 connect(params, SIGNAL(playParametersChanged()),
00063 this, SLOT(playParametersChanged()));
00064
00065 connect(params, SIGNAL(playPluginIdChanged(QString)),
00066 this, SLOT(playPluginIdChanged(QString)));
00067
00068 connect(params, SIGNAL(playPluginConfigurationChanged(QString)),
00069 this, SLOT(playPluginConfigurationChanged(QString)));
00070
00071
00072
00073
00074 } else {
00075
00076
00077 }
00078 }
00079 }
00080
00081 void
00082 PlayParameterRepository::removeModel(const Model *model)
00083 {
00084 delete m_playParameters[model];
00085 m_playParameters.erase(model);
00086 }
00087
00088 void
00089 PlayParameterRepository::copyParameters(const Model *from, const Model *to)
00090 {
00091 if (!getPlayParameters(from)) {
00092 std::cerr << "ERROR: PlayParameterRepository::copyParameters: source model unknown" << std::endl;
00093 return;
00094 }
00095 if (!getPlayParameters(to)) {
00096 std::cerr << "WARNING: PlayParameterRepository::copyParameters: target model unknown, adding it now" << std::endl;
00097 addModel(to);
00098 }
00099 getPlayParameters(to)->copyFrom(getPlayParameters(from));
00100 }
00101
00102 PlayParameters *
00103 PlayParameterRepository::getPlayParameters(const Model *model)
00104 {
00105 if (m_playParameters.find(model) == m_playParameters.end()) return 0;
00106 return m_playParameters.find(model)->second;
00107 }
00108
00109 void
00110 PlayParameterRepository::playParametersChanged()
00111 {
00112 PlayParameters *params = dynamic_cast<PlayParameters *>(sender());
00113 emit playParametersChanged(params);
00114 }
00115
00116 void
00117 PlayParameterRepository::playPluginIdChanged(QString id)
00118 {
00119 PlayParameters *params = dynamic_cast<PlayParameters *>(sender());
00120 for (ModelParameterMap::iterator i = m_playParameters.begin();
00121 i != m_playParameters.end(); ++i) {
00122 if (i->second == params) {
00123 emit playPluginIdChanged(i->first, id);
00124 return;
00125 }
00126 }
00127 }
00128
00129 void
00130 PlayParameterRepository::playPluginConfigurationChanged(QString config)
00131 {
00132 PlayParameters *params = dynamic_cast<PlayParameters *>(sender());
00133
00134 for (ModelParameterMap::iterator i = m_playParameters.begin();
00135 i != m_playParameters.end(); ++i) {
00136 if (i->second == params) {
00137 emit playPluginConfigurationChanged(i->first, config);
00138 return;
00139 }
00140 }
00141 }
00142
00143 void
00144 PlayParameterRepository::clear()
00145 {
00146
00147 while (!m_playParameters.empty()) {
00148 delete m_playParameters.begin()->second;
00149 m_playParameters.erase(m_playParameters.begin());
00150 }
00151 }
00152