comparison layer/FlexiNoteLayer.cpp @ 1470:696e569ff21b by-id

Further layer updates for ById
author Chris Cannam
date Fri, 28 Jun 2019 17:37:22 +0100
parents 11a150e65ee1
children f2525e6cbdf1
comparison
equal deleted inserted replaced
1469:11a150e65ee1 1470:696e569ff21b
959 959
960 m_editingPoint = Event(frame, float(value), 0, 0.8f, tr("New Point")); 960 m_editingPoint = Event(frame, float(value), 0, 0.8f, tr("New Point"));
961 m_originalPoint = m_editingPoint; 961 m_originalPoint = m_editingPoint;
962 962
963 if (m_editingCommand) finish(m_editingCommand); 963 if (m_editingCommand) finish(m_editingCommand);
964 m_editingCommand = new ChangeEventsCommand<Model>(m_model, tr("Draw Point")); 964 m_editingCommand = new ChangeEventsCommand(m_model.untyped, tr("Draw Point"));
965 m_editingCommand->add(m_editingPoint); 965 m_editingCommand->add(m_editingPoint);
966 966
967 m_editing = true; 967 m_editing = true;
968 } 968 }
969 969
1039 Event p(0); 1039 Event p(0);
1040 if (!getPointToDrag(v, e->x(), e->y(), p)) return; 1040 if (!getPointToDrag(v, e->x(), e->y(), p)) return;
1041 if (p.getFrame() != m_editingPoint.getFrame() || 1041 if (p.getFrame() != m_editingPoint.getFrame() ||
1042 p.getValue() != m_editingPoint.getValue()) return; 1042 p.getValue() != m_editingPoint.getValue()) return;
1043 1043
1044 m_editingCommand = new ChangeEventsCommand<Model>(m_model, tr("Erase Point")); 1044 m_editingCommand = new ChangeEventsCommand(m_model.untyped, tr("Erase Point"));
1045 m_editingCommand->remove(m_editingPoint); 1045 m_editingCommand->remove(m_editingPoint);
1046 finish(m_editingCommand); 1046 finish(m_editingCommand);
1047 m_editingCommand = nullptr; 1047 m_editingCommand = nullptr;
1048 m_editing = false; 1048 m_editing = false;
1049 } 1049 }
1126 1126
1127 double value = getValueForY(v, newy); 1127 double value = getValueForY(v, newy);
1128 1128
1129 if (!m_editingCommand) { 1129 if (!m_editingCommand) {
1130 m_editingCommand = 1130 m_editingCommand =
1131 new ChangeEventsCommand<Model>(m_model, tr("Drag Point")); 1131 new ChangeEventsCommand(m_model.untyped, tr("Drag Point"));
1132 } 1132 }
1133 m_editingCommand->remove(m_editingPoint); 1133 m_editingCommand->remove(m_editingPoint);
1134 1134
1135 std::cerr << "edit mode: " << m_editMode << " intelligent actions = " 1135 std::cerr << "edit mode: " << m_editMode << " intelligent actions = "
1136 << m_intelligentActions << std::endl; 1136 << m_intelligentActions << std::endl;
1308 EventVector onPoints = model->getEventsCovering(frame); 1308 EventVector onPoints = model->getEventsCovering(frame);
1309 if (onPoints.empty()) return; 1309 if (onPoints.empty()) return;
1310 1310
1311 Event note(*onPoints.begin()); 1311 Event note(*onPoints.begin());
1312 1312
1313 auto command = new ChangeEventsCommand<Model>(m_model, tr("Edit Point")); 1313 auto command = new ChangeEventsCommand(m_model.untyped, tr("Edit Point"));
1314 command->remove(note); 1314 command->remove(note);
1315 1315
1316 if (!e || !(e->modifiers() & Qt::ShiftModifier)) { 1316 if (!e || !(e->modifiers() & Qt::ShiftModifier)) {
1317 1317
1318 int gap = 0; // MM: I prefer a gap of 0, but we can decide later 1318 int gap = 0; // MM: I prefer a gap of 0, but we can decide later
1372 } 1372 }
1373 1373
1374 if (!m_intelligentActions || 1374 if (!m_intelligentActions ||
1375 (model->getEventsCovering(frame).empty() && duration > 0)) { 1375 (model->getEventsCovering(frame).empty() && duration > 0)) {
1376 Event newNote(frame, float(value), duration, 100.f, tr("new note")); 1376 Event newNote(frame, float(value), duration, 100.f, tr("new note"));
1377 auto command = new ChangeEventsCommand<Model>(m_model, tr("Add Point")); 1377 auto command = new ChangeEventsCommand(m_model.untyped, tr("Add Point"));
1378 command->add(newNote); 1378 command->add(newNote);
1379 finish(command); 1379 finish(command);
1380 } 1380 }
1381 } 1381 }
1382 1382
1411 if (!model) return; 1411 if (!model) return;
1412 1412
1413 EventVector points = 1413 EventVector points =
1414 model->getEventsStartingWithin(s.getStartFrame(), s.getDuration()); 1414 model->getEventsStartingWithin(s.getStartFrame(), s.getDuration());
1415 1415
1416 auto command = new ChangeEventsCommand<Model>(m_model, tr("Snap Notes")); 1416 auto command = new ChangeEventsCommand(m_model.untyped, tr("Snap Notes"));
1417 1417
1418 cerr << "snapSelectedNotesToPitchTrack: selection is from " << s.getStartFrame() << " to " << s.getEndFrame() << endl; 1418 cerr << "snapSelectedNotesToPitchTrack: selection is from " << s.getStartFrame() << " to " << s.getEndFrame() << endl;
1419 1419
1420 for (EventVector::iterator i = points.begin(); 1420 for (EventVector::iterator i = points.begin();
1421 i != points.end(); ++i) { 1421 i != points.end(); ++i) {
1456 } 1456 }
1457 1457
1458 EventVector::iterator i = points.begin(); 1458 EventVector::iterator i = points.begin();
1459 if (i == points.end()) return; 1459 if (i == points.end()) return;
1460 1460
1461 auto command = new ChangeEventsCommand<Model>(m_model, tr("Merge Notes")); 1461 auto command = new ChangeEventsCommand(m_model.untyped, tr("Merge Notes"));
1462 1462
1463 Event newNote(*i); 1463 Event newNote(*i);
1464 1464
1465 while (i != points.end()) { 1465 while (i != points.end()) {
1466 1466
1621 .withFrame(dialog->getFrameTime()) 1621 .withFrame(dialog->getFrameTime())
1622 .withValue(dialog->getValue()) 1622 .withValue(dialog->getValue())
1623 .withDuration(dialog->getFrameDuration()) 1623 .withDuration(dialog->getFrameDuration())
1624 .withLabel(dialog->getText()); 1624 .withLabel(dialog->getText());
1625 1625
1626 auto command = new ChangeEventsCommand<Model>(m_model, tr("Edit Point")); 1626 auto command = new ChangeEventsCommand(m_model.untyped, tr("Edit Point"));
1627 command->remove(note); 1627 command->remove(note);
1628 command->add(newNote); 1628 command->add(newNote);
1629 finish(command); 1629 finish(command);
1630 } 1630 }
1631 1631
1637 FlexiNoteLayer::moveSelection(Selection s, sv_frame_t newStartFrame) 1637 FlexiNoteLayer::moveSelection(Selection s, sv_frame_t newStartFrame)
1638 { 1638 {
1639 auto model = ModelById::getAs<NoteModel>(m_model); 1639 auto model = ModelById::getAs<NoteModel>(m_model);
1640 if (!model) return; 1640 if (!model) return;
1641 1641
1642 auto command = new ChangeEventsCommand<Model>(m_model, tr("Drag Selection")); 1642 auto command = new ChangeEventsCommand(m_model.untyped, tr("Drag Selection"));
1643 1643
1644 EventVector points = 1644 EventVector points =
1645 model->getEventsStartingWithin(s.getStartFrame(), s.getDuration()); 1645 model->getEventsStartingWithin(s.getStartFrame(), s.getDuration());
1646 1646
1647 for (Event p: points) { 1647 for (Event p: points) {
1658 FlexiNoteLayer::resizeSelection(Selection s, Selection newSize) 1658 FlexiNoteLayer::resizeSelection(Selection s, Selection newSize)
1659 { 1659 {
1660 auto model = ModelById::getAs<NoteModel>(m_model); 1660 auto model = ModelById::getAs<NoteModel>(m_model);
1661 if (!model || !s.getDuration()) return; 1661 if (!model || !s.getDuration()) return;
1662 1662
1663 auto command = new ChangeEventsCommand<Model>(m_model, tr("Resize Selection")); 1663 auto command = new ChangeEventsCommand(m_model.untyped, tr("Resize Selection"));
1664 1664
1665 EventVector points = 1665 EventVector points =
1666 model->getEventsStartingWithin(s.getStartFrame(), s.getDuration()); 1666 model->getEventsStartingWithin(s.getStartFrame(), s.getDuration());
1667 1667
1668 double ratio = double(newSize.getDuration()) / double(s.getDuration()); 1668 double ratio = double(newSize.getDuration()) / double(s.getDuration());
1689 { 1689 {
1690 auto model = ModelById::getAs<NoteModel>(m_model); 1690 auto model = ModelById::getAs<NoteModel>(m_model);
1691 if (!model) return; 1691 if (!model) return;
1692 1692
1693 auto command = 1693 auto command =
1694 new ChangeEventsCommand<Model>(m_model, tr("Delete Selected Points")); 1694 new ChangeEventsCommand(m_model.untyped, tr("Delete Selected Points"));
1695 1695
1696 EventVector points = 1696 EventVector points =
1697 model->getEventsStartingWithin(s.getStartFrame(), s.getDuration()); 1697 model->getEventsStartingWithin(s.getStartFrame(), s.getDuration());
1698 1698
1699 for (Event p: points) { 1699 for (Event p: points) {
1708 { 1708 {
1709 auto model = ModelById::getAs<NoteModel>(m_model); 1709 auto model = ModelById::getAs<NoteModel>(m_model);
1710 if (!model) return; 1710 if (!model) return;
1711 1711
1712 auto command = 1712 auto command =
1713 new ChangeEventsCommand<Model>(m_model, tr("Delete Selected Points")); 1713 new ChangeEventsCommand(m_model.untyped, tr("Delete Selected Points"));
1714 1714
1715 EventVector points = 1715 EventVector points =
1716 model->getEventsSpanning(s.getStartFrame(), s.getDuration()); 1716 model->getEventsSpanning(s.getStartFrame(), s.getDuration());
1717 1717
1718 for (Event p: points) { 1718 for (Event p: points) {
1761 if (button == QMessageBox::Yes) { 1761 if (button == QMessageBox::Yes) {
1762 realign = true; 1762 realign = true;
1763 } 1763 }
1764 } 1764 }
1765 1765
1766 auto command = new ChangeEventsCommand<Model>(m_model, tr("Paste")); 1766 auto command = new ChangeEventsCommand(m_model.untyped, tr("Paste"));
1767 1767
1768 for (EventVector::const_iterator i = points.begin(); 1768 for (EventVector::const_iterator i = points.begin();
1769 i != points.end(); ++i) { 1769 i != points.end(); ++i) {
1770 1770
1771 sv_frame_t frame = 0; 1771 sv_frame_t frame = 0;
1829 Event p = *i; 1829 Event p = *i;
1830 1830
1831 if (lrintf(p.getValue()) == pitch) { 1831 if (lrintf(p.getValue()) == pitch) {
1832 m_pendingNoteOns.erase(i); 1832 m_pendingNoteOns.erase(i);
1833 Event note = p.withDuration(frame - p.getFrame()); 1833 Event note = p.withDuration(frame - p.getFrame());
1834 auto c = new ChangeEventsCommand<Model> 1834 auto c = new ChangeEventsCommand
1835 (m_model, tr("Record Note")); 1835 (m_model.untyped, tr("Record Note"));
1836 c->add(note); 1836 c->add(note);
1837 // execute and bundle: 1837 // execute and bundle:
1838 CommandHistory::getInstance()->addCommand(c, true, true); 1838 CommandHistory::getInstance()->addCommand(c, true, true);
1839 break; 1839 break;
1840 } 1840 }