Mercurial > hg > tony
diff src/MainWindow.cpp @ 293:9400e63ec5d7
form note from selection now makes new note if none exist in selection
author | matthiasm |
---|---|
date | Wed, 11 Jun 2014 15:33:28 +0100 |
parents | 2895ca89b024 |
children | 59dff7e51db0 |
line wrap: on
line diff
--- a/src/MainWindow.cpp Wed Jun 11 14:47:45 2014 +0100 +++ b/src/MainWindow.cpp Wed Jun 11 15:33:28 2014 +0100 @@ -2320,6 +2320,9 @@ void MainWindow::formNoteFromSelection() { + Layer *layer0 = m_analyser->getLayer(Analyser::Notes); + FlexiNoteModel *model = qobject_cast<FlexiNoteModel *>(layer0->getModel()); + FlexiNoteLayer *layer = qobject_cast<FlexiNoteLayer *>(m_analyser->getLayer(Analyser::Notes)); if (!layer) return; @@ -2330,15 +2333,20 @@ 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); + if (!model->getNotes(k->getStartFrame(), k->getEndFrame()).empty()) { + layer->splitNotesAt(m_analyser->getPane(), k->getStartFrame()); + layer->splitNotesAt(m_analyser->getPane(), k->getEndFrame()); + layer->mergeNotes(m_analyser->getPane(), *k, false); + } else { + layer->addNoteOn(k->getStartFrame(), 100, 100); + layer->addNoteOff(k->getEndFrame(), 100); + layer->mergeNotes(m_analyser->getPane(), *k, false); // only so the note adapts in case of exisitng pitch track + } } - CommandHistory::getInstance()->endCompoundOperation(); + CommandHistory::getInstance()->endCompoundOperation(); } }