Mercurial > hg > svgui
changeset 635:5c9dcec5f3e9 tonioni
splitting notes works but major cleanup needed
author | gyorgyf |
---|---|
date | Sat, 20 Apr 2013 08:38:37 +0100 |
parents | 4fa3951bbb05 |
children | c8f45afb83d5 |
files | layer/FlexiNoteLayer.cpp layer/FlexiNoteLayer.h layer/Layer.h view/Pane.cpp |
diffstat | 4 files changed, 93 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/layer/FlexiNoteLayer.cpp Fri Apr 19 15:37:27 2013 +0100 +++ b/layer/FlexiNoteLayer.cpp Sat Apr 20 08:38:37 2013 +0100 @@ -625,13 +625,13 @@ max = Pitch::getFrequencyForPitch(lrintf(max + 1)); } - std::cerr << "FlexiNoteLayer[" << this << "]::getScaleExtents: min = " << min << ", max = " << max << ", log = " << log << std::endl; + // std::cerr << "FlexiNoteLayer[" << this << "]::getScaleExtents: min = " << min << ", max = " << max << ", log = " << log << std::endl; } else if (log) { LogRange::mapRange(min, max); - std::cerr << "FlexiNoteLayer[" << this << "]::getScaleExtents: min = " << min << ", max = " << max << ", log = " << log << std::endl; + // std::cerr << "FlexiNoteLayer[" << this << "]::getScaleExtents: min = " << min << ", max = " << max << ", log = " << log << std::endl; } @@ -908,6 +908,7 @@ FlexiNoteLayer::editStart(View *v, QMouseEvent *e) { // SVDEBUG << "FlexiNoteLayer::editStart(" << e->x() << "," << e->y() << ")" << endl; + std::cerr << "FlexiNoteLayer::editStart(" << e->x() << "," << e->y() << ")" << std::endl; if (!m_model) return; @@ -931,6 +932,7 @@ FlexiNoteLayer::editDrag(View *v, QMouseEvent *e) { // SVDEBUG << "FlexiNoteLayer::editDrag(" << e->x() << "," << e->y() << ")" << endl; + std::cerr << "FlexiNoteLayer::editDrag(" << e->x() << "," << e->y() << ")" << std::endl; if (!m_model || !m_editing) return; @@ -957,9 +959,11 @@ } void -FlexiNoteLayer::editEnd(View *, QMouseEvent *) +FlexiNoteLayer::editEnd(View *v, QMouseEvent *e) { // SVDEBUG << "FlexiNoteLayer::editEnd(" << e->x() << "," << e->y() << ")" << endl; + std::cerr << "FlexiNoteLayer::editEnd(" << e->x() << "," << e->y() << ")" << std::endl; + if (!m_model || !m_editing) return; if (m_editingCommand) { @@ -984,6 +988,71 @@ m_editing = false; } +void +FlexiNoteLayer::splitStart(View *v, QMouseEvent *e) +{ + std::cerr << "splitStart" << std::endl; + if (!m_model) return; + + if (!getPointToDrag(v, e->x(), e->y(), m_editingPoint)) return; + // m_originalPoint = m_editingPoint; + // + // m_dragPointX = v->getXForFrame(m_editingPoint.frame); + // m_dragPointY = getYForValue(v, m_editingPoint.value); + + if (m_editingCommand) { + finish(m_editingCommand); + m_editingCommand = 0; + } + + m_editing = true; + m_dragStartX = e->x(); + m_dragStartY = e->y(); + +} + +void +FlexiNoteLayer::splitEnd(View *v, QMouseEvent *e) +{ + std::cerr << "splitEnd" << std::endl; + if (!m_model || !m_editing) return; + + int xdist = e->x() - m_dragStartX; + int ydist = e->y() - m_dragStartY; + if (xdist != 0 || ydist != 0) { + std::cerr << "mouse moved" << std::endl; + return; + } + + FlexiNoteModel::Point note(0); + if (!getPointToDrag(v, e->x(), e->y(), note)) return; + + long frame = v->getFrameForX(e->x()); + + FlexiNoteModel::Point newNote1 = note; + newNote1.frame = note.frame; + newNote1.value = note.value; + // newNote1.duration = note.duration+10000; + newNote1.duration = frame - note.frame - 100; + newNote1.label = note.label; + + FlexiNoteModel::Point newNote2 = note; + newNote2.frame = frame + 100; + newNote2.value = note.value; + newNote2.duration = note.duration - (frame - note.frame - 100); + newNote2.label = note.label; + + + FlexiNoteModel::EditCommand *command = new FlexiNoteModel::EditCommand + (m_model, tr("Edit Point")); + command->deletePoint(note); + command->addPoint(newNote1); + command->addPoint(newNote2); + finish(command); + +} + + bool FlexiNoteLayer::editOpen(View *v, QMouseEvent *e) {
--- a/layer/FlexiNoteLayer.h Fri Apr 19 15:37:27 2013 +0100 +++ b/layer/FlexiNoteLayer.h Sat Apr 20 08:38:37 2013 +0100 @@ -52,6 +52,9 @@ virtual void editDrag(View *v, QMouseEvent *); virtual void editEnd(View *v, QMouseEvent *); + virtual void splitStart(View *v, QMouseEvent *); + virtual void splitEnd(View *v, QMouseEvent *); + virtual bool editOpen(View *v, QMouseEvent *); virtual void moveSelection(Selection s, size_t newStartFrame);
--- a/layer/Layer.h Fri Apr 19 15:37:27 2013 +0100 +++ b/layer/Layer.h Sat Apr 20 08:38:37 2013 +0100 @@ -229,6 +229,9 @@ virtual void editDrag(View *, QMouseEvent *) { } virtual void editEnd(View *, QMouseEvent *) { } + virtual void splitStart(View *, QMouseEvent *) { } + virtual void splitEnd(View *, QMouseEvent *) { } + // Measurement rectangle (or equivalent). Unlike draw and edit, // the base Layer class can provide working implementations of // these for most situations.
--- a/view/Pane.cpp Fri Apr 19 15:37:27 2013 +0100 +++ b/view/Pane.cpp Sat Apr 20 08:38:37 2013 +0100 @@ -1278,7 +1278,7 @@ return; } -// std::cerr << "mousePressEvent" << std::endl; + // std::cerr << "mousePressEvent" << std::endl; m_clickPos = e->pos(); m_mousePos = m_clickPos; @@ -1378,6 +1378,12 @@ } else if (mode == ViewManager::EditMode) { + std::cerr << "mouse pressed in edit mode" << std::endl; + Layer *layer = getSelectedLayer(); + if (layer && layer->isLayerEditable()) { + layer->splitStart(this, e); + } + // Do nothing here -- we'll do it in mouseMoveEvent when the // drag threshold has been passed @@ -1473,6 +1479,12 @@ } } else if (mode == ViewManager::EditMode) { + + //GF: temporary + Layer *layer = getSelectedLayer(); + if (layer && layer->isLayerEditable()) { + layer->splitEnd(this, e); + update(); } if (m_editing) { if (!editSelectionEnd(e)) { @@ -1482,7 +1494,7 @@ update(); } } - } + } } else if (mode == ViewManager::MeasureMode) { @@ -1615,7 +1627,7 @@ // dragging to be used most of the time } - if (m_shiftPressed) resist = false; + if (m_shiftPressed) resist = false; m_dragMode = updateDragMode (m_dragMode,