changeset 435:e0be1fed50dd pitch-align

Separate out choosing alignment program from choosing to use the alignment program
author Chris Cannam
date Thu, 25 Jun 2020 09:32:38 +0100
parents c65fbb5b8707
children 7f2cf45157c8
files main/MainWindow.cpp main/MainWindow.h repoint-lock.json
diffstat 3 files changed, 53 insertions(+), 75 deletions(-) [+]
line wrap: on
line diff
--- a/main/MainWindow.cpp	Wed Jun 24 10:26:35 2020 +0100
+++ b/main/MainWindow.cpp	Thu Jun 25 09:32:38 2020 +0100
@@ -757,31 +757,6 @@
     QMenu *menu = menuBar()->addMenu(tr("&Alignment"));
     menu->setTearOffEnabled(false);
 
-/*!!! update:
-
-    QToolBar *toolbar = nullptr;
-    if (m_playbackToolBar) {
-        toolbar = m_playbackToolBar;
-    } else {
-        toolbar = m_playbackToolBar = addToolBar(tr("Playback Toolbar"));
-    }
-
-    QAction *alAction = 0;
-    alAction = toolbar->addAction(il.load("align"),
-                                  tr("Align File Timelines"));
-    alAction->setCheckable(true);
-    alAction->setChecked(m_viewManager->getAlignMode());
-    alAction->setStatusTip(tr("Treat multiple audio files as versions of the same work, and align their timelines"));
-    connect(m_viewManager, SIGNAL(alignModeChanged(bool)),
-            alAction, SLOT(setChecked(bool)));
-    connect(alAction, SIGNAL(triggered()), this, SLOT(alignToggled()));
-
-    menu->addAction(alAction);
-*/
-//    MenuTitle::addSection(menu, tr("Alignment Method"));
-
-    QSettings settings;
-
     QActionGroup *alignmentGroup = new QActionGroup(this);
 
 //!!! + explanatory status bar texts
@@ -793,18 +768,12 @@
         { Align::MATCHAlignment, tr("Online DTW (MATCH)") },
         { Align::MATCHAlignmentWithPitchCompare, tr("Online DTW with Pitch Compensation") },
         { Align::SungNoteContourAlignment, tr("Sung Note Contour") },
-        { Align::ExternalProgramAlignment, tr("External Alignment Program...") }
     };
 
     QAction *action = nullptr;
-    QString additionalData;
-    Align::AlignmentType preference =
-        Align::getAlignmentPreference(additionalData);
-    
+    Align::AlignmentType preference = Align::getAlignmentPreference();
+
     for (auto al: alignmentLabels) {
-        if (al.first == Align::ExternalProgramAlignment) {
-            menu->addSeparator();
-        }
         action = menu->addAction(al.second);
         action->setObjectName(Align::getAlignmentTypeTag(al.first));
         action->setActionGroup(alignmentGroup);
@@ -815,6 +784,29 @@
             menu->addSeparator();
         }
     }
+
+    QString program = Align::getPreferredAlignmentProgram();
+    if (program == "") {
+        action = menu->addAction(tr("External Alignment Program"));
+        action->setEnabled(false);
+    } else {
+        QString filename = QFileInfo(program).fileName();
+        action = menu->addAction(tr("External Program (%1)").arg(filename));
+    }
+
+    m_externalAlignmentAction = action;
+    
+    action->setObjectName
+        (Align::getAlignmentTypeTag(Align::ExternalProgramAlignment));
+    action->setActionGroup(alignmentGroup);
+    action->setCheckable(true);
+    action->setChecked(preference == Align::ExternalProgramAlignment);
+    connect(action, SIGNAL(triggered()), this, SLOT(alignmentTypeChanged()));
+
+    menu->addSeparator();
+    
+    action = menu->addAction(tr("Choose External Alignment Program..."));
+    connect(action, SIGNAL(triggered()), this, SLOT(chooseAlignmentProgram()));
 }
 
 void
@@ -2358,31 +2350,9 @@
         m_viewManager->setAlignMode(false);
         m_document->setAutoAlignment(false);
 
-    } else if (alignmentType == Align::ExternalProgramAlignment) {
-
-        QSettings settings;
-        settings.beginGroup("Alignment");
-        QString formerProgram =
-            settings.value("alignment-program", "").toString();
-        bool ok = true;
-        QString newProgram =
-            QFileDialog::getOpenFileName(this,
-                                         tr("External Alignment Program"),
-                                         formerProgram);
-        if (newProgram != "") {
-/*
-            QInputDialog::getText(this,
-                                  tr("External Alignment Program"),
-                                  tr("External Alignment Program:"),
-                                  QLineEdit::Normal,
-                                  formerProgram,
-                                  &ok);
-        if (ok) {
-*/
-            Align::setAlignmentPreference(alignmentType, newProgram);
-        } else {
-            Align::setAlignmentPreference(alignmentType, formerProgram);
-        }
+    } else {
+
+        Align::setAlignmentPreference(alignmentType);
 
         m_viewManager->setAlignMode(true);
         
@@ -2394,21 +2364,6 @@
 
         m_document->setAutoAlignment(true);
         m_previousActiveAlignmentType = alignmentType;
-
-    } else {
-
-        Align::setAlignmentPreference(alignmentType);
-
-        m_viewManager->setAlignMode(true);
-        
-        if (alignmentType == m_previousActiveAlignmentType) {
-            m_document->alignModels();
-        } else {
-            m_document->realignModels();
-        }
-
-        m_document->setAutoAlignment(true);
-        m_previousActiveAlignmentType = alignmentType;
     }
 
     for (int i = 0; i < m_paneStack->getPaneCount(); ++i) {
@@ -2417,6 +2372,27 @@
         pane->update();
     }
 }
+
+void
+MainWindow::chooseAlignmentProgram()
+{
+    QString formerProgram = Align::getPreferredAlignmentProgram();
+    QString newProgram =
+        QFileDialog::getOpenFileName(this,
+                                     tr("External Alignment Program"),
+                                     formerProgram);
+    if (newProgram != "") {
+        SVCERR << "Setting alignment preference to ExternalProgramAlignment "
+               << "with program " << newProgram << endl;
+        Align::setAlignmentPreference(Align::ExternalProgramAlignment);
+        Align::setPreferredAlignmentProgram(newProgram);
+        QString filename = QFileInfo(newProgram).fileName();
+        m_externalAlignmentAction->setText
+            (tr("External Program: %1").arg(filename));
+        m_externalAlignmentAction->setEnabled(true);
+        m_externalAlignmentAction->activate(QAction::Trigger);
+    }
+}
     
 void
 MainWindow::playSpeedChanged(int position)
--- a/main/MainWindow.h	Wed Jun 24 10:26:35 2020 +0100
+++ b/main/MainWindow.h	Thu Jun 25 09:32:38 2020 +0100
@@ -125,6 +125,7 @@
     void record() override;
 
     void alignmentTypeChanged();
+    void chooseAlignmentProgram();
 
     void playSpeedChanged(int);
     void speedUpPlayback();
@@ -211,6 +212,7 @@
     QAction                 *m_selectPreviousDisplayModeAction;
     QAction                 *m_selectNextDisplayModeAction;
 
+    QAction                 *m_externalAlignmentAction;
     Align::AlignmentType     m_previousActiveAlignmentType;
     
     RecentFiles              m_recentSessions;
--- a/repoint-lock.json	Wed Jun 24 10:26:35 2020 +0100
+++ b/repoint-lock.json	Thu Jun 25 09:32:38 2020 +0100
@@ -4,13 +4,13 @@
       "pin": "0e32c328b02a"
     },
     "svcore": {
-      "pin": "258e356b1a7b"
+      "pin": "231c6bcf0fa2"
     },
     "svgui": {
       "pin": "fe9a643b83bf"
     },
     "svapp": {
-      "pin": "699b5b130ea2"
+      "pin": "32e66fcc4cb7"
     },
     "checker": {
       "pin": "e839338d3869"