PlayParameterRepository.cpp

Go to the documentation of this file.
00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
00002 
00003 /*
00004     Sonic Visualiser
00005     An audio file viewer and annotation editor.
00006     Centre for Digital Music, Queen Mary, University of London.
00007     This file copyright 2006 Chris Cannam.
00008     
00009     This program is free software; you can redistribute it and/or
00010     modify it under the terms of the GNU General Public License as
00011     published by the Free Software Foundation; either version 2 of the
00012     License, or (at your option) any later version.  See the file
00013     COPYING included with this distribution for more information.
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 //    std::cerr << "PlayParameterRepository:addModel " << model <<  std::endl;
00043 
00044     if (!getPlayParameters(model)) {
00045 
00046         // Give all models the same type of play parameters for the
00047         // moment, provided they can be played at all
00048 
00049         if (AudioGenerator::canPlay(model)) {
00050 
00051 //          std::cerr << "PlayParameterRepository: Adding play parameters for " << model << std::endl;
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 //            std::cerr << "Connected play parameters " << params << " for model "
00072 //                      << model << " to this " << this << std::endl;
00073 
00074         } else {
00075 
00076 //          std::cerr << "PlayParameterRepository: Model " << model << " not playable" <<  std::endl;
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 //    std::cerr << "PlayParameterRepository::playPluginConfigurationChanged" << std::endl;
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 //    std::cerr << "PlayParameterRepository: PlayParameterRepository::clear" << std::endl;
00147     while (!m_playParameters.empty()) {
00148         delete m_playParameters.begin()->second;
00149         m_playParameters.erase(m_playParameters.begin());
00150     }
00151 }
00152 

Generated on Wed Feb 20 15:45:27 2008 for SonicVisualiser by  doxygen 1.5.1