svcore  1.9
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 #include "Playable.h"
00019 
00020 #include <iostream>
00021 
00022 PlayParameterRepository *
00023 PlayParameterRepository::m_instance = new PlayParameterRepository;
00024 
00025 PlayParameterRepository *
00026 PlayParameterRepository::getInstance()
00027 {
00028     return m_instance;
00029 }
00030 
00031 PlayParameterRepository::~PlayParameterRepository()
00032 {
00033 }
00034 
00035 void
00036 PlayParameterRepository::addPlayable(const Playable *playable)
00037 {
00038     cerr << "PlayParameterRepository:addPlayable playable = " << playable <<  endl;
00039 
00040     if (!getPlayParameters(playable)) {
00041 
00042         // Give all playables the same type of play parameters for the
00043         // moment
00044 
00045         cerr << "PlayParameterRepository:addPlayable: Adding play parameters for " << playable << endl;
00046 
00047         PlayParameters *params = new PlayParameters;
00048         m_playParameters[playable] = params;
00049 
00050         params->setPlayClipId
00051             (playable->getDefaultPlayClipId());
00052 
00053         params->setPlayAudible
00054             (playable->getDefaultPlayAudible());
00055         
00056         connect(params, SIGNAL(playParametersChanged()),
00057                 this, SLOT(playParametersChanged()));
00058         
00059         connect(params, SIGNAL(playClipIdChanged(QString)),
00060                 this, SLOT(playClipIdChanged(QString)));
00061 
00062         cerr << "Connected play parameters " << params << " for playable "
00063                      << playable << " to this " << this << endl;
00064     }
00065 }    
00066 
00067 void
00068 PlayParameterRepository::removePlayable(const Playable *playable)
00069 {
00070     if (m_playParameters.find(playable) == m_playParameters.end()) {
00071         cerr << "WARNING: PlayParameterRepository::removePlayable: unknown playable " << playable << endl;
00072         return;
00073     }
00074     delete m_playParameters[playable];
00075     m_playParameters.erase(playable);
00076 }
00077 
00078 void
00079 PlayParameterRepository::copyParameters(const Playable *from, const Playable *to)
00080 {
00081     if (!getPlayParameters(from)) {
00082         cerr << "ERROR: PlayParameterRepository::copyParameters: source playable unknown" << endl;
00083         return;
00084     }
00085     if (!getPlayParameters(to)) {
00086         cerr << "WARNING: PlayParameterRepository::copyParameters: target playable unknown, adding it now" << endl;
00087         addPlayable(to);
00088     }
00089     getPlayParameters(to)->copyFrom(getPlayParameters(from));
00090 }
00091 
00092 PlayParameters *
00093 PlayParameterRepository::getPlayParameters(const Playable *playable) 
00094 {
00095     if (m_playParameters.find(playable) == m_playParameters.end()) return 0;
00096     return m_playParameters.find(playable)->second;
00097 }
00098 
00099 void
00100 PlayParameterRepository::playParametersChanged()
00101 {
00102     PlayParameters *params = dynamic_cast<PlayParameters *>(sender());
00103     emit playParametersChanged(params);
00104 }
00105 
00106 void
00107 PlayParameterRepository::playClipIdChanged(QString id)
00108 {
00109     PlayParameters *params = dynamic_cast<PlayParameters *>(sender());
00110     for (PlayableParameterMap::iterator i = m_playParameters.begin();
00111          i != m_playParameters.end(); ++i) {
00112         if (i->second == params) {
00113             emit playClipIdChanged(i->first, id);
00114             return;
00115         }
00116     }
00117 }
00118 
00119 void
00120 PlayParameterRepository::clear()
00121 {
00122 //    cerr << "PlayParameterRepository: PlayParameterRepository::clear" << endl;
00123     while (!m_playParameters.empty()) {
00124         delete m_playParameters.begin()->second;
00125         m_playParameters.erase(m_playParameters.begin());
00126     }
00127 }
00128 
00129 PlayParameterRepository::EditCommand::EditCommand(PlayParameters *params) :
00130     m_params(params)
00131 {
00132     m_from.copyFrom(m_params);
00133     m_to.copyFrom(m_params);
00134 }
00135 
00136 void
00137 PlayParameterRepository::EditCommand::setPlayMuted(bool muted)
00138 {
00139     m_to.setPlayMuted(muted);
00140 }
00141 
00142 void
00143 PlayParameterRepository::EditCommand::setPlayAudible(bool audible)
00144 {
00145     m_to.setPlayAudible(audible);
00146 }
00147 
00148 void
00149 PlayParameterRepository::EditCommand::setPlayPan(float pan)
00150 {
00151     m_to.setPlayPan(pan);
00152 }
00153 
00154 void
00155 PlayParameterRepository::EditCommand::setPlayGain(float gain)
00156 {
00157     m_to.setPlayGain(gain);
00158 }
00159 
00160 void
00161 PlayParameterRepository::EditCommand::setPlayClipId(QString id)
00162 {
00163     m_to.setPlayClipId(id);
00164 }
00165 
00166 void
00167 PlayParameterRepository::EditCommand::execute()
00168 {
00169     m_params->copyFrom(&m_to);
00170 }
00171 
00172 void
00173 PlayParameterRepository::EditCommand::unexecute()
00174 {
00175     m_params->copyFrom(&m_from);
00176 }
00177     
00178 QString
00179 PlayParameterRepository::EditCommand::getName() const
00180 {
00181     QString name;
00182     QString multiname = tr("Adjust Playback Parameters");
00183 
00184     int changed = 0;
00185 
00186     if (m_to.isPlayAudible() != m_from.isPlayAudible()) {
00187         name = tr("Change Playback Mute State");
00188         if (++changed > 1) return multiname;
00189     }
00190 
00191     if (m_to.getPlayGain() != m_from.getPlayGain()) {
00192         name = tr("Change Playback Gain");
00193         if (++changed > 1) return multiname;
00194     }
00195 
00196     if (m_to.getPlayPan() != m_from.getPlayPan()) {
00197         name = tr("Change Playback Pan");
00198         if (++changed > 1) return multiname;
00199     }
00200 
00201     if (m_to.getPlayClipId() != m_from.getPlayClipId()) {
00202         name = tr("Change Playback Sample");
00203         if (++changed > 1) return multiname;
00204     }
00205 
00206     if (name == "") return multiname;
00207     return name;
00208 }
00209