comparison src/MainWindow.cpp @ 291:cddada03e222

Fix to the button enabling problem from feature #835
author Chris Cannam
date Tue, 03 Jun 2014 15:28:01 +0100
parents 634e9adfdc84
children 2895ca89b024
comparison
equal deleted inserted replaced
290:634e9adfdc84 291:cddada03e222
1018 connect(this, SIGNAL(canPlay(bool)), m_showAudio, SLOT(setEnabled(bool))); 1018 connect(this, SIGNAL(canPlay(bool)), m_showAudio, SLOT(setEnabled(bool)));
1019 1019
1020 m_playAudio = toolbar->addAction(il.load("speaker"), tr("Play Audio")); 1020 m_playAudio = toolbar->addAction(il.load("speaker"), tr("Play Audio"));
1021 m_playAudio->setCheckable(true); 1021 m_playAudio->setCheckable(true);
1022 connect(m_playAudio, SIGNAL(triggered()), this, SLOT(playAudioToggled())); 1022 connect(m_playAudio, SIGNAL(triggered()), this, SLOT(playAudioToggled()));
1023 connect(this, SIGNAL(canPlay(bool)), m_playAudio, SLOT(setEnabled(bool))); 1023 connect(this, SIGNAL(canPlayWaveform(bool)), m_playAudio, SLOT(setEnabled(bool)));
1024 1024
1025 toolbar->addWidget(m_gainAudio); 1025 toolbar->addWidget(m_gainAudio);
1026 toolbar->addWidget(m_panAudio); 1026 toolbar->addWidget(m_panAudio);
1027 1027
1028 // Pitch (f0) 1028 // Pitch (f0)
1036 connect(this, SIGNAL(canPlay(bool)), m_showPitch, SLOT(setEnabled(bool))); 1036 connect(this, SIGNAL(canPlay(bool)), m_showPitch, SLOT(setEnabled(bool)));
1037 1037
1038 m_playPitch = toolbar->addAction(il.load("speaker"), tr("Play Pitch Track")); 1038 m_playPitch = toolbar->addAction(il.load("speaker"), tr("Play Pitch Track"));
1039 m_playPitch->setCheckable(true); 1039 m_playPitch->setCheckable(true);
1040 connect(m_playPitch, SIGNAL(triggered()), this, SLOT(playPitchToggled())); 1040 connect(m_playPitch, SIGNAL(triggered()), this, SLOT(playPitchToggled()));
1041 connect(this, SIGNAL(canPlay(bool)), m_playPitch, SLOT(setEnabled(bool))); // JTEST: this resets the enabled state of m_playPitch. 1041 connect(this, SIGNAL(canPlayPitch(bool)), m_playPitch, SLOT(setEnabled(bool)));
1042 1042
1043 toolbar->addWidget(m_gainPitch); 1043 toolbar->addWidget(m_gainPitch);
1044 toolbar->addWidget(m_panPitch); 1044 toolbar->addWidget(m_panPitch);
1045 1045
1046 // Notes 1046 // Notes
1054 connect(this, SIGNAL(canPlay(bool)), m_showNotes, SLOT(setEnabled(bool))); 1054 connect(this, SIGNAL(canPlay(bool)), m_showNotes, SLOT(setEnabled(bool)));
1055 1055
1056 m_playNotes = toolbar->addAction(il.load("speaker"), tr("Play Notes")); 1056 m_playNotes = toolbar->addAction(il.load("speaker"), tr("Play Notes"));
1057 m_playNotes->setCheckable(true); 1057 m_playNotes->setCheckable(true);
1058 connect(m_playNotes, SIGNAL(triggered()), this, SLOT(playNotesToggled())); 1058 connect(m_playNotes, SIGNAL(triggered()), this, SLOT(playNotesToggled()));
1059 connect(this, SIGNAL(canPlay(bool)), m_playNotes, SLOT(setEnabled(bool))); 1059 connect(this, SIGNAL(canPlayNotes(bool)), m_playNotes, SLOT(setEnabled(bool)));
1060 1060
1061 toolbar->addWidget(m_gainNotes); 1061 toolbar->addWidget(m_gainNotes);
1062 toolbar->addWidget(m_panNotes); 1062 toolbar->addWidget(m_panNotes);
1063 1063
1064 // Spectrogram 1064 // Spectrogram
1181 Layer *currentLayer = 0; 1181 Layer *currentLayer = 0;
1182 1182
1183 if (m_paneStack) currentPane = m_paneStack->getCurrentPane(); 1183 if (m_paneStack) currentPane = m_paneStack->getCurrentPane();
1184 if (currentPane) currentLayer = currentPane->getSelectedLayer(); 1184 if (currentPane) currentLayer = currentPane->getSelectedLayer();
1185 1185
1186 bool haveMainModel =
1187 (getMainModel() != 0);
1188 bool havePlayTarget =
1189 (m_playTarget != 0);
1186 bool haveCurrentPane = 1190 bool haveCurrentPane =
1187 (currentPane != 0); 1191 (currentPane != 0);
1188 bool haveCurrentLayer = 1192 bool haveCurrentLayer =
1189 (haveCurrentPane && 1193 (haveCurrentPane &&
1190 (currentLayer != 0)); 1194 (currentLayer != 0));
1210 emit canChangePlaybackSpeed(true); 1214 emit canChangePlaybackSpeed(true);
1211 int v = m_playSpeed->value(); 1215 int v = m_playSpeed->value();
1212 emit canSpeedUpPlayback(v < m_playSpeed->maximum()); 1216 emit canSpeedUpPlayback(v < m_playSpeed->maximum());
1213 emit canSlowDownPlayback(v > m_playSpeed->minimum()); 1217 emit canSlowDownPlayback(v > m_playSpeed->minimum());
1214 1218
1219 bool haveWaveform =
1220 m_analyser->isVisible(Analyser::Audio) &&
1221 m_analyser->getLayer(Analyser::Audio);
1222
1215 bool havePitchTrack = 1223 bool havePitchTrack =
1216 m_analyser->isVisible(Analyser::PitchTrack) && 1224 m_analyser->isVisible(Analyser::PitchTrack) &&
1217 m_analyser->getLayer(Analyser::PitchTrack); 1225 m_analyser->getLayer(Analyser::PitchTrack);
1218 1226
1219 bool haveNotes = 1227 bool haveNotes =
1221 m_analyser->getLayer(Analyser::Notes); 1229 m_analyser->getLayer(Analyser::Notes);
1222 1230
1223 emit canExportPitchTrack(havePitchTrack); 1231 emit canExportPitchTrack(havePitchTrack);
1224 emit canExportNotes(haveNotes); 1232 emit canExportNotes(haveNotes);
1225 emit canSnapNotes(haveSelection && haveNotes); 1233 emit canSnapNotes(haveSelection && haveNotes);
1234
1235 emit canPlayWaveform(haveWaveform && haveMainModel && havePlayTarget);
1236 emit canPlayPitch(havePitchTrack && haveMainModel && havePlayTarget);
1237 emit canPlayNotes(haveNotes && haveMainModel && havePlayTarget);
1226 1238
1227 if (pitchCandidatesVisible) { 1239 if (pitchCandidatesVisible) {
1228 m_showCandidatesAction->setText(tr("Hide Pitch Candidates")); 1240 m_showCandidatesAction->setText(tr("Hide Pitch Candidates"));
1229 m_showCandidatesAction->setStatusTip(tr("Remove the display of alternate pitch candidates for the selected region")); 1241 m_showCandidatesAction->setStatusTip(tr("Remove the display of alternate pitch candidates for the selected region"));
1230 } else { 1242 } else {
1255 void 1267 void
1256 MainWindow::showAudioToggled() 1268 MainWindow::showAudioToggled()
1257 { 1269 {
1258 m_analyser->toggleVisible(Analyser::Audio); 1270 m_analyser->toggleVisible(Analyser::Audio);
1259 1271
1260 // JTEST 1272 QSettings settings;
1261 if (!m_analyser->isVisible(Analyser::Audio)) 1273 settings.beginGroup("MainWindow");
1262 { 1274
1263 m_analyser->setAudible(Analyser::Audio,false); 1275 bool playOn = false;
1264 m_playAudio->setChecked(false); 1276 if (m_analyser->isVisible(Analyser::Audio)) {
1265 m_playAudio->setEnabled(false); 1277 // just switched layer on; check whether playback was also on previously
1266 } 1278 playOn = settings.value("playaudiowas", true).toBool();
1267 else 1279 } else {
1268 { 1280 settings.setValue("playaudiowas", m_playAudio->isChecked());
1269 m_playAudio->setEnabled(true); 1281 }
1270 } 1282 m_analyser->setAudible(Analyser::Audio, playOn);
1283 m_playAudio->setChecked(playOn);
1284
1285 settings.endGroup();
1286
1287 updateMenuStates();
1271 } 1288 }
1272 1289
1273 void 1290 void
1274 MainWindow::showPitchToggled() 1291 MainWindow::showPitchToggled()
1275 { 1292 {
1276 m_analyser->toggleVisible(Analyser::PitchTrack); 1293 m_analyser->toggleVisible(Analyser::PitchTrack);
1277 1294
1278 // JTEST 1295 QSettings settings;
1279 if (!m_analyser->isVisible(Analyser::PitchTrack)) 1296 settings.beginGroup("MainWindow");
1280 { 1297
1281 m_analyser->setAudible(Analyser::PitchTrack,false); 1298 bool playOn = false;
1282 m_playPitch->setChecked(false); 1299 if (m_analyser->isVisible(Analyser::PitchTrack)) {
1283 m_playPitch->setEnabled(false); 1300 // just switched layer on; check whether playback was also on previously
1284 } 1301 playOn = settings.value("playpitchwas", true).toBool();
1285 else 1302 } else {
1286 { 1303 settings.setValue("playpitchwas", m_playPitch->isChecked());
1287 m_playPitch->setEnabled(true); 1304 }
1288 } 1305 m_analyser->setAudible(Analyser::PitchTrack, playOn);
1306 m_playPitch->setChecked(playOn);
1307
1308 settings.endGroup();
1309
1310 updateMenuStates();
1289 } 1311 }
1290 1312
1291 void 1313 void
1292 MainWindow::showSpectToggled() 1314 MainWindow::showSpectToggled()
1293 { 1315 {
1297 void 1319 void
1298 MainWindow::showNotesToggled() 1320 MainWindow::showNotesToggled()
1299 { 1321 {
1300 m_analyser->toggleVisible(Analyser::Notes); 1322 m_analyser->toggleVisible(Analyser::Notes);
1301 1323
1302 // JTEST 1324 QSettings settings;
1303 if (!m_analyser->isVisible(Analyser::Notes)) 1325 settings.beginGroup("MainWindow");
1304 { 1326
1305 m_analyser->setAudible(Analyser::Notes,false); 1327 bool playOn = false;
1306 m_playNotes->setChecked(false); 1328 if (m_analyser->isVisible(Analyser::Notes)) {
1307 m_playNotes->setEnabled(false); 1329 // just switched layer on; check whether playback was also on previously
1308 } 1330 playOn = settings.value("playnoteswas", true).toBool();
1309 else 1331 } else {
1310 { 1332 settings.setValue("playnoteswas", m_playNotes->isChecked());
1311 m_playNotes->setEnabled(true); 1333 }
1312 } 1334 m_analyser->setAudible(Analyser::Notes, playOn);
1335 m_playNotes->setChecked(playOn);
1336
1337 settings.endGroup();
1338
1339 updateMenuStates();
1313 } 1340 }
1314 1341
1315 void 1342 void
1316 MainWindow::playAudioToggled() 1343 MainWindow::playAudioToggled()
1317 { 1344 {