Mercurial > hg > tony
changeset 240:6ac45eb0f4c7
Implement "Form Note from Selection"; remove Snap Notes to Pitch Track because every other editing operation *should* now be doing that automatically
author | Chris Cannam |
---|---|
date | Thu, 27 Mar 2014 18:12:38 +0000 |
parents | d40c6cdb30a4 |
children | 322287c4ed1f |
files | .hgsubstate src/MainWindow.cpp src/MainWindow.h |
diffstat | 3 files changed, 44 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgsubstate Thu Mar 27 18:02:12 2014 +0000 +++ b/.hgsubstate Thu Mar 27 18:12:38 2014 +0000 @@ -4,4 +4,4 @@ 27d4e7152c954bf3c4387319db088fb3cd02436b sv-dependency-builds 3144af512ea3447e6cf1775f02b5b54b5a5ddeb5 svapp 0c8218b2d84a172049d966c82c2064f5aa59c503 svcore -84e4cf88965959a34e8675138d6bef66ad5ec261 svgui +03423269a9d0c39b0ad2e39bd9435d0a353546ce svgui
--- a/src/MainWindow.cpp Thu Mar 27 18:02:12 2014 +0000 +++ b/src/MainWindow.cpp Thu Mar 27 18:12:38 2014 +0000 @@ -591,17 +591,16 @@ menu->addSeparator(); m_rightButtonMenu->addSeparator(); - action = new QAction(tr("Split Notes at Selection Boundaries"), this); + action = new QAction(tr("Split Note"), 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")); + action->setStatusTip(tr("Split the note at the current playback position into two")); m_keyReference->registerShortcut(action); - connect(action, SIGNAL(triggered()), this, SLOT(splitNotesAtSelection())); - connect(this, SIGNAL(canSnapNotes(bool)), action, SLOT(setEnabled(bool))); + connect(action, SIGNAL(triggered()), this, SLOT(splitNote())); + connect(this, SIGNAL(canExportNotes(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())); @@ -609,6 +608,14 @@ menu->addAction(action); m_rightButtonMenu->addAction(action); + action = new QAction(tr("Form Note from Selection"), this); + action->setStatusTip(tr("Form a note spanning the selected region, splitting any existing notes at its boundaries")); + m_keyReference->registerShortcut(action); + connect(action, SIGNAL(triggered()), this, SLOT(formNoteFromSelection())); + 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")); @@ -617,7 +624,7 @@ connect(this, SIGNAL(canSnapNotes(bool)), action, SLOT(setEnabled(bool))); menu->addAction(action); m_rightButtonMenu->addAction(action); - +*/ } void @@ -2097,27 +2104,13 @@ } void -MainWindow::splitNotesAtSelection() +MainWindow::splitNote() { FlexiNoteLayer *layer = qobject_cast<FlexiNoteLayer *>(m_analyser->getLayer(Analyser::Notes)); if (!layer) return; - MultiSelection::SelectionList selections = m_viewManager->getSelections(); - - if (!selections.empty()) { - - CommandHistory::getInstance()->startCompoundOperation - (tr("Split Notes at Selection Boundaries"), true); - - for (MultiSelection::SelectionList::iterator k = selections.begin(); - k != selections.end(); ++k) { - layer->splitNotesAt(m_analyser->getPane(), k->getStartFrame()); - layer->splitNotesAt(m_analyser->getPane(), k->getEndFrame()); - } - - CommandHistory::getInstance()->endCompoundOperation(); - } + layer->splitNotesAt(m_analyser->getPane(), m_viewManager->getPlaybackFrame()); } void @@ -2136,7 +2129,7 @@ for (MultiSelection::SelectionList::iterator k = selections.begin(); k != selections.end(); ++k) { - layer->mergeNotes(m_analyser->getPane(), *k); + layer->mergeNotes(m_analyser->getPane(), *k, true); } CommandHistory::getInstance()->endCompoundOperation(); @@ -2144,6 +2137,31 @@ } void +MainWindow::formNoteFromSelection() +{ + FlexiNoteLayer *layer = + qobject_cast<FlexiNoteLayer *>(m_analyser->getLayer(Analyser::Notes)); + if (!layer) return; + + MultiSelection::SelectionList selections = m_viewManager->getSelections(); + + if (!selections.empty()) { + + CommandHistory::getInstance()->startCompoundOperation + (tr("Form Note from Selection"), true); + + for (MultiSelection::SelectionList::iterator k = selections.begin(); + k != selections.end(); ++k) { + layer->splitNotesAt(m_analyser->getPane(), k->getStartFrame()); + layer->splitNotesAt(m_analyser->getPane(), k->getEndFrame()); + layer->mergeNotes(m_analyser->getPane(), *k, false); + } + + CommandHistory::getInstance()->endCompoundOperation(); + } +} + +void MainWindow::playSpeedChanged(int position) { PlaySpeedRangeMapper mapper(0, 200);
--- a/src/MainWindow.h Thu Mar 27 18:02:12 2014 +0000 +++ b/src/MainWindow.h Thu Mar 27 18:12:38 2014 +0000 @@ -60,8 +60,9 @@ virtual void switchPitchDown(); virtual void snapNotesToPitches(); - virtual void splitNotesAtSelection(); + virtual void splitNote(); virtual void mergeNotes(); + virtual void formNoteFromSelection(); virtual void showAudioToggled(); virtual void showSpectToggled();