changeset 139:995478fbbe17

Double-click in selection strip selects the region associated with the simultaneous note (if there is one)
author Chris Cannam
date Fri, 10 Jan 2014 14:18:37 +0000
parents a19c3d0aa4e7
children e7f2da26c9ac
files .hgsubstate src/Analyser.cpp src/Analyser.h src/MainWindow.cpp src/MainWindow.h
diffstat 5 files changed, 50 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsubstate	Fri Jan 10 09:34:15 2014 +0000
+++ b/.hgsubstate	Fri Jan 10 14:18:37 2014 +0000
@@ -2,4 +2,4 @@
 27d4e7152c954bf3c4387319db088fb3cd02436b sv-dependency-builds
 ccd3c927638be6c68aaa396fce24b6974d073447 svapp
 0b15c9328003255e8afff5a1d9276860105a1bc6 svcore
-833cd1b8014f45ec8250961d6707a056915e27d1 svgui
+67b167bb60abdd16d3db843197fc99d38c1e8404 svgui
--- a/src/Analyser.cpp	Fri Jan 10 09:34:15 2014 +0000
+++ b/src/Analyser.cpp	Fri Jan 10 14:18:37 2014 +0000
@@ -167,6 +167,27 @@
 }
 
 void
+Analyser::getEnclosingSelectionScope(size_t f, size_t &f0, size_t &f1)
+{
+    FlexiNoteLayer *flexiNoteLayer = 
+        qobject_cast<FlexiNoteLayer *>(m_layers[Notes]);
+
+    int f0i = f, f1i = f;
+    size_t res = 1;
+
+    if (!flexiNoteLayer) {
+        f0 = f1 = f;
+        return;
+    }
+    
+    flexiNoteLayer->snapToFeatureFrame(m_pane, f0i, res, Layer::SnapLeft);
+    flexiNoteLayer->snapToFeatureFrame(m_pane, f1i, res, Layer::SnapRight);
+
+    f0 = (f0i < 0 ? 0 : f0i);
+    f1 = (f1i < 0 ? 0 : f1i);
+}
+
+void
 Analyser::saveState(Component c) const
 {
     bool v = isVisible(c);
--- a/src/Analyser.h	Fri Jan 10 09:34:15 2014 +0000
+++ b/src/Analyser.h	Fri Jan 10 14:18:37 2014 +0000
@@ -67,6 +67,8 @@
         }
     }
 
+    void getEnclosingSelectionScope(size_t f, size_t &f0, size_t &f1);
+
 signals:
     void layersChanged();
 
--- a/src/MainWindow.cpp	Fri Jan 10 09:34:15 2014 +0000
+++ b/src/MainWindow.cpp	Fri Jan 10 14:18:37 2014 +0000
@@ -45,6 +45,7 @@
 #include "base/Profiler.h"
 #include "base/UnitDatabase.h"
 #include "layer/ColourDatabase.h"
+#include "base/Selection.h"
 
 #include "data/fileio/CSVFileWriter.h"
 #include "data/fileio/MIDIFileWriter.h"
@@ -161,6 +162,8 @@
     // variable
     m_paneStack->setLayoutStyle(PaneStack::NoPropertyStacks);
     m_paneStack->setShowPaneAccessories(false);
+    connect(m_paneStack, SIGNAL(doubleClickSelectInvoked(size_t)),
+            this, SLOT(doubleClickSelectInvoked(size_t)));
     scroll->setWidget(m_paneStack);
 
     m_overview = new Overview(frame);
@@ -1353,18 +1356,29 @@
 {
     Pane *pane = m_paneStack->getCurrentPane();
     if (pane) {
-    Layer *layer = pane->getSelectedLayer();
-    if (layer) {
-        bool ok = false;
-        QString newName = QInputDialog::getText
-        (this, tr("Rename Layer"),
-         tr("New name for this layer:"),
-         QLineEdit::Normal, layer->objectName(), &ok);
-        if (ok) {
-        layer->setObjectName(newName);
+        Layer *layer = pane->getSelectedLayer();
+        if (layer) {
+            bool ok = false;
+            QString newName = QInputDialog::getText
+                (this, tr("Rename Layer"),
+                 tr("New name for this layer:"),
+                 QLineEdit::Normal, layer->objectName(), &ok);
+            if (ok) {
+                layer->setObjectName(newName);
+            }
         }
     }
-    }
+}
+
+void
+MainWindow::doubleClickSelectInvoked(size_t frame)
+{
+    size_t f0, f1;
+    m_analyser->getEnclosingSelectionScope(frame, f0, f1);
+    
+    cerr << "MainWindow::doubleClickSelectInvoked(" << frame << "): [" << f0 << "," << f1 << "]" << endl;
+
+    m_viewManager->setSelection(Selection(f0, f1));
 }
 
 void
--- a/src/MainWindow.h	Fri Jan 10 09:34:15 2014 +0000
+++ b/src/MainWindow.h	Fri Jan 10 14:18:37 2014 +0000
@@ -55,6 +55,8 @@
     virtual void cycleNotes();
     virtual void updateLayerStatuses();
 
+    virtual void doubleClickSelectInvoked(size_t);
+
     virtual void paneAdded(Pane *);
     virtual void paneHidden(Pane *);
     virtual void paneAboutToBeDeleted(Pane *);