changeset 849:4a7c62938a13 2.4beta2 sv_v2.4beta2

Pull across beta bits from prior beta branch
author Chris Cannam
date Wed, 10 Sep 2014 09:54:49 +0100
parents 9f82fa990cbd (diff) fdc445e736a0 (current diff)
children 7b3aaa237e66 78531e6556d3
files deploy/osx/copy-qt.sh deploy/win32/sonic-visualiser.wxs main/MainWindow.cpp version.h
diffstat 7 files changed, 71 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsubstate	Mon Sep 01 13:44:36 2014 +0100
+++ b/.hgsubstate	Wed Sep 10 09:54:49 2014 +0100
@@ -1,5 +1,5 @@
 d16f0fd6db6104d87882bc43788a3bb1b0f8c528 dataquay
 879bdc878826bebec67130326f99397c430419b1 sv-dependency-builds
-5fd0dd4ed984a6806ed3fe420ef615dd82ca40f2 svapp
-f5810f1270ae64d2a814c55f7d56cc7cfe11192b svcore
-57d943a6194318315d96bc2b2c81af47cfeda9e3 svgui
+a39a7d6b0f2d0b6bff0b580b733f7db69c63c135 svapp
+a8f91db36e9de56198a1d4d5b8ef8948a01f49b2 svcore
+d282967236d54945432cdfe5dbce0763d26488cc svgui
--- a/CHANGELOG	Mon Sep 01 13:44:36 2014 +0100
+++ b/CHANGELOG	Wed Sep 10 09:54:49 2014 +0100
@@ -1,12 +1,15 @@
 
 Changes in Sonic Visualiser 2.4 since the previous release 2.3:
 
+ - Add support for left/right scrolling using a two-finger touchpad
+   gesture (where available)
+
  - Make the octave numbering into a configurable option, and change
    the default. Previously Sonic Visualiser labelled middle-C as "C3";
    now it labels middle-C as "C4", a more common standard in the world
-   outside MIDI sequencer software. The previous system available as
-   an option in the Preferences. This affects only the visible labels:
-   there is no change to analysis or to the file format
+   outside MIDI sequencer software. The previous system is available
+   as an option in the Preferences. This affects only the visible
+   labels: there is no change to analysis or to the file format
 
  - Sonify time-value layers. Any time-value curve whose scale unit is
    set to Hz will now acquire a playback toggle control; this control
@@ -20,6 +23,16 @@
    electric piano with sustain. The piano sample is still available,
    and any sessions saved using it should continue to use it
 
+ - Add keyboard shortcuts to cycle the current layer (in addition to
+   the existing ones to cycle the current pane)
+
+ - Fix various bugs related to layer ordering: layer tabs re-ordering
+   themselves randomly when new layer added, layers being ordered
+   randomly when saving and reloading a session
+
+ - Fix incorrect interaction with non-Unicode usernames when creating
+   temporary and template directories on Windows
+
  - Shade the start and end of the main audio file, to make them easier
    to see for files that start or end in silence
 
@@ -28,6 +41,10 @@
  - Make it possible to import CSV files directly into Note layers by
    adding Pitch as a data type in the CSV file import dialog
 
+ - Fix problems with keyboard shortcuts when using Qt5 on OS/X. This
+   is the first release in which the official builds use Qt5 for all
+   platforms.
+
 
 Changes in Sonic Visualiser 2.3 since the previous release 2.2:
 
--- a/README	Mon Sep 01 13:44:36 2014 +0100
+++ b/README	Wed Sep 10 09:54:49 2014 +0100
@@ -18,7 +18,7 @@
 
  * Run feature-extraction plugins to calculate annotations
 automatically, using algorithms such as beat trackers, pitch
-detectors and so on
+detectors and so on (see http://vamp-plugins.org/)
 
  * Import annotation data from various text formats and MIDI files
 
@@ -40,13 +40,13 @@
 Sonic Visualiser was developed at the Centre for Digital Music,
 Queen Mary, University of London.
 
-  http://www.elec.qmul.ac.uk/digitalmusic/
+  http://c4dm.eecs.qmul.ac.uk/
 
-The main program is by Chris Cannam, with additional DSP and program
-design work by Christian Landone.  Thanks also to Craig Sapp for his
-suggestions and useful feedback.
+Sonic Visualiser was written by Chris Cannam with contributions from
+Christian Landone, Mathieu Barthet, Dan Stowell, Jesus Corral Garcia,
+Matthias Mauch, and Craig Sapp.
 
-Code copyright 2005-2007 Chris Cannam and copyright 2006-2013 Queen
+Code copyright 2005-2007 Chris Cannam and copyright 2006-2014 Queen
 Mary, University of London, except where indicated in the individual
 source files.
 
@@ -58,11 +58,9 @@
 Recorded Music (CHARM).
 
 This work was partially funded by the Engineering and Physical
-Sciences Research Council through the OMRAS2 project EP/E017614/1.
-
-This work was partially funded by the Engineering and Physical
-Sciences Research Council through the Musicology for the Masses
-project EP/I001832/1.
+Sciences Research Council through the OMRAS2 project EP/E017614/1, the
+Musicology for the Masses project EP/I001832/1, and the Sound Software
+project EP/H043101/1.
 
 Sonic Visualiser is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
--- a/deploy/win32/sonic-visualiser.wxs	Mon Sep 01 13:44:36 2014 +0100
+++ b/deploy/win32/sonic-visualiser.wxs	Wed Sep 10 09:54:49 2014 +0100
@@ -5,7 +5,7 @@
       Id="*"
       Language="1033"
       Codepage="1252" 
-      Version="2.3.90"
+      Version="2.3.91"
       UpgradeCode="D476941E-65F3-4962-9E72-B40FAAE5DBD0"
       Manufacturer="Queen Mary, University of London">
     
--- a/main/MainWindow.cpp	Mon Sep 01 13:44:36 2014 +0100
+++ b/main/MainWindow.cpp	Wed Sep 10 09:54:49 2014 +0100
@@ -354,6 +354,17 @@
 MainWindow::setupMenus()
 {
     if (!m_mainMenusCreated) {
+
+#ifdef Q_OS_LINUX
+        // In Ubuntu 14.04 the window's menu bar goes missing entirely
+        // if the user is running any desktop environment other than Unity
+        // (in which the faux single-menubar appears). The user has a
+        // workaround, to remove the appmenu-qt5 package, but that is
+        // awkward and the problem is so severe that it merits disabling
+        // the system menubar integration altogether. Like this:
+	menuBar()->setNativeMenuBar(false);  // fix #1039
+#endif
+
         m_rightButtonMenu = new QMenu();
 
         // No -- we don't want tear-off enabled on the right-button
@@ -758,7 +769,7 @@
     menu->addAction(action);
 
     action = new QAction(tr("Insert Item at Selection"), this);
-    action->setShortcut(tr("Ctrl+Shift+Enter"));
+    action->setShortcut(tr("Ctrl+Shift+Return"));
     action->setStatusTip(tr("Insert a new note or region item corresponding to the current selection"));
     connect(action, SIGNAL(triggered()), this, SLOT(insertItemAtSelection()));
     connect(this, SIGNAL(canInsertItemAtSelection(bool)), action, SLOT(setEnabled(bool)));
@@ -1404,7 +1415,6 @@
 
     setupExistingLayersMenus();
 
-/*!!! These don't work correctly -- fix or omit
     menu->addSeparator();
 
     action = new QAction(tr("Switch to Previous Layer"), this);
@@ -1422,7 +1432,7 @@
     connect(this, SIGNAL(canSelectNextLayer(bool)), action, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(action);
     menu->addAction(action);
-*/
+
     m_rightButtonLayerMenu->addSeparator();
     menu->addSeparator();
 
@@ -2559,8 +2569,6 @@
 
     } else if (selections.size() > 1) {
 
-        bool multiple = false;
-
         if (!asData) { // Multi-file export not supported for data
 
             QStringList items;
@@ -2977,7 +2985,7 @@
 
     if (path.isEmpty()) return;
 
-    FileOpenStatus status = open(path, ReplaceSession);
+    FileOpenStatus status = openPath(path, ReplaceSession);
 
     if (status == FileOpenFailed) {
         emit hideSplash();
@@ -3009,7 +3017,7 @@
 
     if (text.isEmpty()) return;
 
-    FileOpenStatus status = open(text, AskUser);
+    FileOpenStatus status = openPath(text, AskUser);
 
     if (status == FileOpenFailed) {
         emit hideSplash();
@@ -3037,7 +3045,7 @@
     QString path = action->text();
     if (path == "") return;
 
-    FileOpenStatus status = open(path, ReplaceSession);
+    FileOpenStatus status = openPath(path, ReplaceSession);
 
     if (status == FileOpenFailed) {
         emit hideSplash();
@@ -3165,9 +3173,9 @@
         FileOpenStatus status;
 
         if (i == uriList.begin()) {
-            status = open(*i, ReplaceCurrentPane);
+            status = openPath(*i, ReplaceCurrentPane);
         } else {
-            status = open(*i, CreateAdditionalModel);
+            status = openPath(*i, CreateAdditionalModel);
         }
 
         if (status == FileOpenFailed) {
@@ -3649,7 +3657,7 @@
                     cerr << "WARNING: MainWindow::addLayer: unknown model "
                               << model
                               << " (\""
-                              << (model ? model->objectName() : "")
+                              << model->objectName()
                               << "\") in layer action map"
                               << endl;
                 }
@@ -4063,12 +4071,21 @@
     NoteLayer *currentNoteLayer = 0;
     TimeValueLayer *currentTimeValueLayer = 0;
 
-    if (m_paneStack) currentPane = m_paneStack->getCurrentPane();
+    if (m_paneStack) {
+        currentPane = m_paneStack->getCurrentPane();
+    }
+
     if (currentPane) {
         currentNoteLayer = dynamic_cast<NoteLayer *>
             (currentPane->getSelectedLayer());
         currentTimeValueLayer = dynamic_cast<TimeValueLayer *>
             (currentPane->getSelectedLayer());
+    } else {
+        // discard these events
+        while (m_midiInput->getEventsAvailable() > 0) {
+            (void)m_midiInput->readEvent();
+        }
+        return;
     }
 
     // This is called through a serialised signal/slot invocation
@@ -4125,10 +4142,14 @@
                     (tvm, point, tr("Add Point"));
                 CommandHistory::getInstance()->addCommand(command);
             }
+
             continue;
-
         }
 
+        // This is reached only if !currentNoteLayer and
+        // !currentTimeValueLayer, i.e. there is some other sort of
+        // layer that may be insertable-into
+
         if (!noteOn) continue;
         insertInstantAt(ev.getTime());
     }
--- a/main/main.cpp	Mon Sep 01 13:44:36 2014 +0100
+++ b/main/main.cpp	Wed Sep 10 09:54:49 2014 +0100
@@ -512,18 +512,18 @@
     }
     if (status != MainWindow::FileOpenSucceeded) {
         if (!haveMainModel) {
-            status = m_mainWindow->open(path, MainWindow::ReplaceSession);
+            status = m_mainWindow->openPath(path, MainWindow::ReplaceSession);
             if (status == MainWindow::FileOpenSucceeded) {
                 haveMainModel = true;
             }
         } else {
             if (haveSession && !havePriorCommandLineModel) {
-                status = m_mainWindow->open(path, MainWindow::AskUser);
+                status = m_mainWindow->openPath(path, MainWindow::AskUser);
                 if (status == MainWindow::FileOpenSucceeded) {
                     havePriorCommandLineModel = true;
                 }
             } else {
-                status = m_mainWindow->open(path, MainWindow::CreateAdditionalModel);
+                status = m_mainWindow->openPath(path, MainWindow::CreateAdditionalModel);
             }
         }
     }
--- a/version.h	Mon Sep 01 13:44:36 2014 +0100
+++ b/version.h	Wed Sep 10 09:54:49 2014 +0100
@@ -1,1 +1,1 @@
-#define SV_VERSION "2.3.90"
+#define SV_VERSION "2.3.91"