Mercurial > hg > svgui
comparison layer/FlexiNoteLayer.cpp @ 753:09e2677e34e7 tonioni
Fix fancy note-editing mode (was not working in new multi-layer world, and shift-click delete was broken)
author | Chris Cannam |
---|---|
date | Tue, 01 Apr 2014 21:18:31 +0100 |
parents | 03423269a9d0 |
children | 6388ddae6ce3 |
comparison
equal
deleted
inserted
replaced
752:f428bd852580 | 753:09e2677e34e7 |
---|---|
1041 | 1041 |
1042 if (!getPointToDrag(v, e->x(), e->y(), m_editingPoint)) return; | 1042 if (!getPointToDrag(v, e->x(), e->y(), m_editingPoint)) return; |
1043 m_originalPoint = FlexiNote(m_editingPoint); | 1043 m_originalPoint = FlexiNote(m_editingPoint); |
1044 | 1044 |
1045 if (m_editMode == RightBoundary) { | 1045 if (m_editMode == RightBoundary) { |
1046 m_dragPointX = v->getXForFrame(m_editingPoint.frame + m_editingPoint.duration); | 1046 m_dragPointX = v->getXForFrame(m_editingPoint.frame + m_editingPoint.duration); |
1047 } else { | 1047 } else { |
1048 m_dragPointX = v->getXForFrame(m_editingPoint.frame); | 1048 m_dragPointX = v->getXForFrame(m_editingPoint.frame); |
1049 } | 1049 } |
1050 m_dragPointY = getYForValue(v, m_editingPoint.value); | 1050 m_dragPointY = getYForValue(v, m_editingPoint.value); |
1051 | 1051 |
1077 if (currentNote.frame > offset) { | 1077 if (currentNote.frame > offset) { |
1078 m_smallestRightNeighbourFrame = currentNote.frame; | 1078 m_smallestRightNeighbourFrame = currentNote.frame; |
1079 break; | 1079 break; |
1080 } | 1080 } |
1081 } | 1081 } |
1082 std::cerr << "note frame: " << onset << ", left boundary: " << m_greatestLeftNeighbourFrame << ", right boundary: " << m_smallestRightNeighbourFrame << std::endl; | 1082 std::cerr << "editStart: mode is " << m_editMode << ", note frame: " << onset << ", left boundary: " << m_greatestLeftNeighbourFrame << ", right boundary: " << m_smallestRightNeighbourFrame << std::endl; |
1083 } | 1083 } |
1084 | 1084 |
1085 void | 1085 void |
1086 FlexiNoteLayer::editDrag(View *v, QMouseEvent *e) | 1086 FlexiNoteLayer::editDrag(View *v, QMouseEvent *e) |
1087 { | 1087 { |
1214 return; | 1214 return; |
1215 } | 1215 } |
1216 | 1216 |
1217 long frame = v->getFrameForX(e->x()); | 1217 long frame = v->getFrameForX(e->x()); |
1218 | 1218 |
1219 splitNotesAt(v, frame); | 1219 splitNotesAt(v, frame, e); |
1220 } | 1220 } |
1221 | 1221 |
1222 void | 1222 void |
1223 FlexiNoteLayer::splitNotesAt(View *v, int frame) | 1223 FlexiNoteLayer::splitNotesAt(View *v, int frame) |
1224 { | |
1225 splitNotesAt(v, frame, 0); | |
1226 } | |
1227 | |
1228 void | |
1229 FlexiNoteLayer::splitNotesAt(View *v, int frame, QMouseEvent *e) | |
1224 { | 1230 { |
1225 FlexiNoteModel::PointList onPoints = m_model->getPoints(frame); | 1231 FlexiNoteModel::PointList onPoints = m_model->getPoints(frame); |
1226 if (onPoints.empty()) return; | 1232 if (onPoints.empty()) return; |
1227 | 1233 |
1228 FlexiNote note(*onPoints.begin()); | 1234 FlexiNote note(*onPoints.begin()); |
1229 | |
1230 int gap = 0; // MM: I prefer a gap of 0, but we can decide later | |
1231 | |
1232 FlexiNote newNote1(note.frame, note.value, | |
1233 frame - note.frame - gap, | |
1234 note.level, note.label); | |
1235 | |
1236 FlexiNote newNote2(frame, note.value, | |
1237 note.duration - newNote1.duration, | |
1238 note.level, note.label); | |
1239 | 1235 |
1240 FlexiNoteModel::EditCommand *command = new FlexiNoteModel::EditCommand | 1236 FlexiNoteModel::EditCommand *command = new FlexiNoteModel::EditCommand |
1241 (m_model, tr("Edit Point")); | 1237 (m_model, tr("Edit Point")); |
1242 command->deletePoint(note); | 1238 command->deletePoint(note); |
1239 | |
1240 if (!e || !(e->modifiers() & Qt::ShiftModifier)) { | |
1241 | |
1242 int gap = 0; // MM: I prefer a gap of 0, but we can decide later | |
1243 | |
1244 FlexiNote newNote1(note.frame, note.value, | |
1245 frame - note.frame - gap, | |
1246 note.level, note.label); | |
1247 | |
1248 FlexiNote newNote2(frame, note.value, | |
1249 note.duration - newNote1.duration, | |
1250 note.level, note.label); | |
1243 | 1251 |
1244 if (m_intelligentActions) { | 1252 if (m_intelligentActions) { |
1245 if (updateNoteValue(v, newNote1)) { | 1253 if (updateNoteValue(v, newNote1)) { |
1254 command->addPoint(newNote1); | |
1255 } | |
1256 if (updateNoteValue(v, newNote2)) { | |
1257 command->addPoint(newNote2); | |
1258 } | |
1259 } else { | |
1246 command->addPoint(newNote1); | 1260 command->addPoint(newNote1); |
1247 } | |
1248 if (updateNoteValue(v, newNote2)) { | |
1249 command->addPoint(newNote2); | 1261 command->addPoint(newNote2); |
1250 } | 1262 } |
1251 } else { | |
1252 command->addPoint(newNote1); | |
1253 command->addPoint(newNote2); | |
1254 } | 1263 } |
1255 | 1264 |
1256 finish(command); | 1265 finish(command); |
1257 } | 1266 } |
1258 | 1267 |