changeset 424:ad8f94fb334d

Experiment with simple button logic for LevelPanWidget (separating out playback toggle again)
author Chris Cannam
date Mon, 30 Mar 2015 14:28:04 +0100
parents bbe7ba53030e
children 835ce4c21362
files .hgsubstate src/MainWindow.cpp src/MainWindow.h
diffstat 3 files changed, 74 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsubstate	Wed Mar 25 17:02:40 2015 +0000
+++ b/.hgsubstate	Mon Mar 30 14:28:04 2015 +0100
@@ -4,4 +4,4 @@
 55ece8862b6d3a54aad271a53f9c1615e5d3bcf8 sv-dependency-builds
 345d41a3567f44ff4febf5ef4c4022e79d31eba4 svapp
 c49d52386cde0844cef30d8904a4fe409cec3d5c svcore
-325a7aa6905538d36e9624fb5caa182d26e0f760 svgui
+a61a779d73dfe483c7c0fc2f52c38e6ab3bc49c1 svgui
--- a/src/MainWindow.cpp	Wed Mar 25 17:02:40 2015 +0000
+++ b/src/MainWindow.cpp	Mon Mar 30 14:28:04 2015 +0100
@@ -1128,6 +1128,11 @@
     connect(m_showAudio, SIGNAL(triggered()), this, SLOT(showAudioToggled()));
     connect(this, SIGNAL(canPlay(bool)), m_showAudio, SLOT(setEnabled(bool)));
 
+    m_playAudio = toolbar->addAction(il.load("speaker"), tr("Play Audio"));
+    m_playAudio->setCheckable(true);
+    connect(m_playAudio, SIGNAL(triggered()), this, SLOT(playAudioToggled()));
+    connect(this, SIGNAL(canPlayWaveform(bool)), m_playAudio, SLOT(setEnabled(bool)));
+
     m_audioLPW->setImageSize(m_viewManager->scalePixelSize(26));
     toolbar->addWidget(m_audioLPW);
 
@@ -1142,8 +1147,15 @@
     connect(this, SIGNAL(canPlay(bool)), m_showPitch, SLOT(setEnabled(bool)));
 
     if (m_withSonification) {
+        m_playPitch = toolbar->addAction(il.load("speaker"), tr("Play Pitch Track"));
+        m_playPitch->setCheckable(true);
+        connect(m_playPitch, SIGNAL(triggered()), this, SLOT(playPitchToggled()));
+        connect(this, SIGNAL(canPlayPitch(bool)), m_playPitch, SLOT(setEnabled(bool)));
+
         m_pitchLPW->setImageSize(m_viewManager->scalePixelSize(26));
         toolbar->addWidget(m_pitchLPW);
+    } else {
+        m_playPitch = 0;
     }
 
     // Notes
@@ -1157,8 +1169,15 @@
     connect(this, SIGNAL(canPlay(bool)), m_showNotes, SLOT(setEnabled(bool)));
 
     if (m_withSonification) {
+        m_playNotes = toolbar->addAction(il.load("speaker"), tr("Play Notes"));
+        m_playNotes->setCheckable(true);
+        connect(m_playNotes, SIGNAL(triggered()), this, SLOT(playNotesToggled()));
+        connect(this, SIGNAL(canPlayNotes(bool)), m_playNotes, SLOT(setEnabled(bool)));
+
         m_notesLPW->setImageSize(m_viewManager->scalePixelSize(26));
         toolbar->addWidget(m_notesLPW);
+    } else {
+        m_playNotes = 0;
     }
 
     // Spectrogram
@@ -1382,11 +1401,22 @@
 {
     m_analyser->toggleVisible(Analyser::Audio);
 
-    bool playOn = (m_analyser->isVisible(Analyser::Audio));
+    QSettings settings;
+    settings.beginGroup("MainWindow");
+
+    bool playOn = false;
+    if (m_analyser->isVisible(Analyser::Audio)) {
+        // just switched layer on; check whether playback was also on previously
+        playOn = settings.value("playaudiowas", true).toBool();
+    } else {
+        settings.setValue("playaudiowas", m_playAudio->isChecked());
+    }
     m_analyser->setAudible(Analyser::Audio, playOn);
-    m_audioLPW->setEnabled(playOn);
+
+    settings.endGroup();
 
     updateMenuStates();
+    updateLayerStatuses();
 }
 
 void
@@ -1394,11 +1424,22 @@
 {
     m_analyser->toggleVisible(Analyser::PitchTrack);
 
-    bool playOn = (m_analyser->isVisible(Analyser::PitchTrack));
-    m_analyser->setAudible(Analyser::PitchTrack, playOn && m_withSonification);
-    m_pitchLPW->setEnabled(playOn);
+    QSettings settings;
+    settings.beginGroup("MainWindow");
+
+    bool playOn = false;
+    if (m_analyser->isVisible(Analyser::PitchTrack)) {
+        // just switched layer on; check whether playback was also on previously
+        playOn = settings.value("playpitchwas", true).toBool();
+    } else {
+        settings.setValue("playpitchwas", m_playPitch->isChecked());
+    }
+    m_analyser->setAudible(Analyser::PitchTrack, playOn);
+
+    settings.endGroup();
 
     updateMenuStates();
+    updateLayerStatuses();
 }
 
 void
@@ -1412,46 +1453,63 @@
 {
     m_analyser->toggleVisible(Analyser::Notes);
 
-    bool playOn = (m_analyser->isVisible(Analyser::Notes));
-    m_analyser->setAudible(Analyser::Notes, playOn && m_withSonification);
-    m_notesLPW->setEnabled(playOn);
+    QSettings settings;
+    settings.beginGroup("MainWindow");
+
+    bool playOn = false;
+    if (m_analyser->isVisible(Analyser::Notes)) {
+        // just switched layer on; check whether playback was also on previously
+        playOn = settings.value("playnoteswas", true).toBool();
+    } else {
+        settings.setValue("playnoteswas", m_playNotes->isChecked());
+    }
+    m_analyser->setAudible(Analyser::Notes, playOn);
+
+    settings.endGroup();
 
     updateMenuStates();
+    updateLayerStatuses();
 }
 
 void
 MainWindow::playAudioToggled()
 {
     m_analyser->toggleAudible(Analyser::Audio);
+    updateLayerStatuses();
 }
 
 void
 MainWindow::playPitchToggled()
 {
     m_analyser->toggleAudible(Analyser::PitchTrack);
+    updateLayerStatuses();
 }
 
 void
 MainWindow::playNotesToggled()
 {
     m_analyser->toggleAudible(Analyser::Notes);
+    updateLayerStatuses();
 }
 
 void
 MainWindow::updateLayerStatuses()
 {
     m_showAudio->setChecked(m_analyser->isVisible(Analyser::Audio));
-    m_audioLPW->setEnabled(m_analyser->isVisible(Analyser::Audio));
+    m_playAudio->setChecked(m_analyser->isAudible(Analyser::Audio));
+    m_audioLPW->setEnabled(m_analyser->isAudible(Analyser::Audio));
     m_audioLPW->setLevel(m_analyser->getGain(Analyser::Audio));
     m_audioLPW->setPan(m_analyser->getPan(Analyser::Audio));
-
+    
     m_showPitch->setChecked(m_analyser->isVisible(Analyser::PitchTrack));
-    m_pitchLPW->setEnabled(m_analyser->isVisible(Analyser::PitchTrack));
+    m_playPitch->setChecked(m_analyser->isAudible(Analyser::PitchTrack));
+    m_pitchLPW->setEnabled(m_analyser->isAudible(Analyser::PitchTrack));
     m_pitchLPW->setLevel(m_analyser->getGain(Analyser::PitchTrack));
     m_pitchLPW->setPan(m_analyser->getPan(Analyser::PitchTrack));
 
     m_showNotes->setChecked(m_analyser->isVisible(Analyser::Notes));
-    m_notesLPW->setEnabled(m_analyser->isVisible(Analyser::Notes));
+    m_playNotes->setChecked(m_analyser->isAudible(Analyser::Notes));
+    m_notesLPW->setEnabled(m_analyser->isAudible(Analyser::Notes));
     m_notesLPW->setLevel(m_analyser->getGain(Analyser::Notes));
     m_notesLPW->setPan(m_analyser->getPan(Analyser::Notes));
 
--- a/src/MainWindow.h	Wed Mar 25 17:02:40 2015 +0000
+++ b/src/MainWindow.h	Mon Mar 30 14:28:04 2015 +0100
@@ -198,6 +198,9 @@
     QAction       *m_showSpect;
     QAction       *m_showPitch;
     QAction       *m_showNotes;
+    QAction       *m_playAudio;
+    QAction       *m_playPitch;
+    QAction       *m_playNotes;
     LevelPanToolButton *m_audioLPW;
     LevelPanToolButton *m_pitchLPW;
     LevelPanToolButton *m_notesLPW;