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();     
     }
 }