diff src/Analyser.cpp @ 128:06f9caf5928d

Initial hack for switching visibility & audibility of layers on and off. This doesn't work well.
author Chris Cannam
date Thu, 09 Jan 2014 14:05:20 +0000
parents 8ed567d30e34
children 55fac28b9193
line wrap: on
line diff
--- a/src/Analyser.cpp	Thu Jan 09 14:00:52 2014 +0000
+++ b/src/Analyser.cpp	Thu Jan 09 14:05:20 2014 +0000
@@ -35,8 +35,7 @@
 Analyser::Analyser() :
     m_document(0),
     m_fileModel(0),
-    m_pane(0),
-    m_flexiNoteLayer(0)
+    m_pane(0)
 {
     QSettings settings;
     settings.beginGroup("LayerDefaults");
@@ -87,8 +86,10 @@
     waveform->setShowMeans(false); // too small & pale for this
     waveform->setBaseColour
         (ColourDatabase::getInstance()->getColourIndex(tr("Grey")));
+    
+    m_document->addLayerToView(m_pane, waveform);
 
-    m_document->addLayerToView(m_pane, waveform);
+    m_layers[Audio] = waveform;
 
     Transforms transforms;
     
@@ -114,35 +115,91 @@
 
     if (!layers.empty()) {
 
-        ColourDatabase *cdb = ColourDatabase::getInstance();
-
         for (int i = 0; i < (int)layers.size(); ++i) {
 
-            SingleColourLayer *scl = dynamic_cast<SingleColourLayer *>
-                (layers[i]);
+            FlexiNoteLayer *f = qobject_cast<FlexiNoteLayer *>(layers[i]);
+            TimeValueLayer *t = qobject_cast<TimeValueLayer *>(layers[i]);
 
-            if (scl) {
-                if (i == 0) {
-                    scl->setBaseColour(cdb->getColourIndex(tr("Black")));
-                } else {
-                    scl->setBaseColour(cdb->getColourIndex(tr("Bright Blue")));
-                }
-            }
+            if (f) m_layers[Notes] = f;
+            if (t) m_layers[PitchTrack] = t;
 
             m_document->addLayerToView(m_pane, layers[i]);
         }
+    
+        ColourDatabase *cdb = ColourDatabase::getInstance();
 
-        m_flexiNoteLayer = dynamic_cast<FlexiNoteLayer *>
-            (layers[layers.size()-1]);
-        paneStack->setCurrentLayer(m_pane, m_flexiNoteLayer);
+        TimeValueLayer *pitchLayer = 
+            qobject_cast<TimeValueLayer *>(m_layers[PitchTrack]);
+        if (pitchLayer) {
+            pitchLayer->setBaseColour(cdb->getColourIndex(tr("Black")));
+            paneStack->setCurrentLayer(m_pane, pitchLayer);
+        }
+
+        FlexiNoteLayer *flexiNoteLayer = 
+            qobject_cast<FlexiNoteLayer *>(m_layers[Notes]);
+        if (flexiNoteLayer) {
+            flexiNoteLayer->setBaseColour(cdb->getColourIndex(tr("Bright Blue")));
+            paneStack->setCurrentLayer(m_pane, flexiNoteLayer);
+        }
     }
+
+    emit layersChanged();
 }
 
 void
 Analyser::setIntelligentActions(bool on) 
 {
     std::cerr << "toggle setIntelligentActions " << on << std::endl;
-    if (m_flexiNoteLayer) {
-        m_flexiNoteLayer->setIntelligentActions(on);
+
+    FlexiNoteLayer *flexiNoteLayer = 
+        qobject_cast<FlexiNoteLayer *>(m_layers[Notes]);
+    if (flexiNoteLayer) {
+        flexiNoteLayer->setIntelligentActions(on);
     }
 }
+
+bool
+Analyser::isVisible(Component c) const
+{
+    if (m_layers[c]) {
+        return !m_layers[c]->isLayerDormant(m_pane);
+    } else {
+        return false;
+    }
+}
+
+void
+Analyser::setVisible(Component c, bool v)
+{
+    if (m_layers[c]) {
+        m_layers[c]->setLayerDormant(m_pane, !v);
+        m_pane->layerParametersChanged();
+    }
+}
+
+bool
+Analyser::isAudible(Component c) const
+{
+    if (m_layers[c]) {
+
+        PlayParameters *params = m_layers[c]->getPlayParameters();
+        if (!params) return false;
+
+        return params->isPlayAudible();
+    } else {
+        return false;
+    }
+}
+
+void
+Analyser::setAudible(Component c, bool a)
+{
+    if (m_layers[c]) {
+
+        PlayParameters *params = m_layers[c]->getPlayParameters();
+        if (!params) return;
+
+        params->setPlayAudible(a);
+    }
+}
+