# HG changeset patch # User Chris Cannam # Date 1395937826 0 # Node ID fce61899aeea23b394f4529c26be90c6e9cf3534 # Parent 63092d9871f974131b7441ac1b6d16d317dd635d Add Merge Notes diff -r 63092d9871f9 -r fce61899aeea .hgsubstate --- a/.hgsubstate Thu Mar 27 15:59:46 2014 +0000 +++ b/.hgsubstate Thu Mar 27 16:30:26 2014 +0000 @@ -4,4 +4,4 @@ 27d4e7152c954bf3c4387319db088fb3cd02436b sv-dependency-builds 3144af512ea3447e6cf1775f02b5b54b5a5ddeb5 svapp 0c8218b2d84a172049d966c82c2064f5aa59c503 svcore -8d5df70b5ed703ade1b382744dad24e3841157e9 svgui +bc049f1f080e2042c7967841c2fb717bc4e46e24 svgui diff -r 63092d9871f9 -r fce61899aeea src/MainWindow.cpp --- a/src/MainWindow.cpp Thu Mar 27 15:59:46 2014 +0000 +++ b/src/MainWindow.cpp Thu Mar 27 16:30:26 2014 +0000 @@ -591,15 +591,6 @@ menu->addSeparator(); m_rightButtonMenu->addSeparator(); - action = new QAction(tr("Snap Notes to Pitch Track"), this); - action->setShortcut(tr("Ctrl+=")); - action->setStatusTip(tr("Set all notes within the selected region to have the median frequency of their underlying pitches")); - m_keyReference->registerShortcut(action); - connect(action, SIGNAL(triggered()), this, SLOT(snapNotesToPitches())); - connect(this, SIGNAL(canSnapNotes(bool)), action, SLOT(setEnabled(bool))); - menu->addAction(action); - m_rightButtonMenu->addAction(action); - action = new QAction(tr("Split Notes at Selection Boundaries"), this); action->setShortcut(tr("Ctrl+/")); action->setStatusTip(tr("If any notes overlap the start or end of the selected region, split them at those points")); @@ -608,6 +599,25 @@ connect(this, SIGNAL(canSnapNotes(bool)), action, SLOT(setEnabled(bool))); menu->addAction(action); m_rightButtonMenu->addAction(action); + + action = new QAction(tr("Merge Notes"), this); + action->setShortcut(tr("Ctrl+.")); + action->setStatusTip(tr("Merge all notes within the selected region into a single note")); + m_keyReference->registerShortcut(action); + connect(action, SIGNAL(triggered()), this, SLOT(mergeNotes())); + connect(this, SIGNAL(canSnapNotes(bool)), action, SLOT(setEnabled(bool))); + menu->addAction(action); + m_rightButtonMenu->addAction(action); + + action = new QAction(tr("Snap Notes to Pitch Track"), this); + action->setShortcut(tr("Ctrl+=")); + action->setStatusTip(tr("Set notes within the selected region to the median frequency of their underlying pitches, or remove them if there are no underlying pitches")); + m_keyReference->registerShortcut(action); + connect(action, SIGNAL(triggered()), this, SLOT(snapNotesToPitches())); + connect(this, SIGNAL(canSnapNotes(bool)), action, SLOT(setEnabled(bool))); + menu->addAction(action); + m_rightButtonMenu->addAction(action); + } void @@ -2094,6 +2104,29 @@ } void +MainWindow::mergeNotes() +{ + FlexiNoteLayer *layer = + qobject_cast(m_analyser->getLayer(Analyser::Notes)); + if (!layer) return; + + MultiSelection::SelectionList selections = m_viewManager->getSelections(); + + if (!selections.empty()) { + + CommandHistory::getInstance()->startCompoundOperation + (tr("Merge Notes"), true); + + for (MultiSelection::SelectionList::iterator k = selections.begin(); + k != selections.end(); ++k) { + layer->mergeNotes(m_analyser->getPane(), *k); + } + + CommandHistory::getInstance()->endCompoundOperation(); + } +} + +void MainWindow::playSpeedChanged(int position) { PlaySpeedRangeMapper mapper(0, 200); diff -r 63092d9871f9 -r fce61899aeea src/MainWindow.h --- a/src/MainWindow.h Thu Mar 27 15:59:46 2014 +0000 +++ b/src/MainWindow.h Thu Mar 27 16:30:26 2014 +0000 @@ -61,6 +61,7 @@ virtual void snapNotesToPitches(); virtual void splitNotesAtSelection(); + virtual void mergeNotes(); virtual void showAudioToggled(); virtual void showSpectToggled();