# HG changeset patch # User Chris Cannam # Date 1138298498 0 # Node ID 7c767d41bceeba5080aa30a2899e70f2061152a6 # Parent 0183ebb725ca22bb762fe208170c296900688bf8 * Add basic drag editing of time instants. Plenty of tuning to do for both this and drawing. diff -r 0183ebb725ca -r 7c767d41bcee layer/TimeInstantLayer.cpp --- a/layer/TimeInstantLayer.cpp Thu Jan 26 16:15:40 2006 +0000 +++ b/layer/TimeInstantLayer.cpp Thu Jan 26 18:01:38 2006 +0000 @@ -24,6 +24,7 @@ TimeInstantLayer::TimeInstantLayer(View *w) : Layer(w), m_model(0), + m_editing(false), m_editingPoint(0, tr("New Point")), m_colour(QColor(200, 50, 255)) { @@ -355,6 +356,7 @@ if (frame < 0) frame = 0; m_editingPoint = SparseOneDimensionalModel::Point(frame, tr("New Point")); m_model->addPoint(m_editingPoint); + m_editing = true; } void @@ -362,7 +364,7 @@ { std::cerr << "TimeInstantLayer::drawDrag(" << e->x() << ")" << std::endl; - if (!m_model) return; + if (!m_model || !m_editing) return; long frame = e->x() * m_view->getZoomLevel() + m_view->getStartFrame(); if (frame < 0) frame = 0; @@ -375,7 +377,44 @@ TimeInstantLayer::drawEnd(QMouseEvent *e) { std::cerr << "TimeInstantLayer::drawEnd(" << e->x() << ")" << std::endl; + if (!m_model || !m_editing) return; + m_editing = false; +} + +void +TimeInstantLayer::editStart(QMouseEvent *e) +{ + std::cerr << "TimeInstantLayer::editStart(" << e->x() << ")" << std::endl; + if (!m_model) return; + + SparseOneDimensionalModel::PointList points = getLocalPoints(e->x()); + if (points.empty()) return; + + m_editingPoint = *points.begin(); + m_editing = true; +} + +void +TimeInstantLayer::editDrag(QMouseEvent *e) +{ + std::cerr << "TimeInstantLayer::editDrag(" << e->x() << ")" << std::endl; + + if (!m_model || !m_editing) return; + + long frame = e->x() * m_view->getZoomLevel() + m_view->getStartFrame(); + if (frame < 0) frame = 0; + m_model->deletePoint(m_editingPoint); + m_editingPoint.frame = frame; + m_model->addPoint(m_editingPoint); +} + +void +TimeInstantLayer::editEnd(QMouseEvent *e) +{ + std::cerr << "TimeInstantLayer::editEnd(" << e->x() << ")" << std::endl; + if (!m_model || !m_editing) return; + m_editing = false; } QString diff -r 0183ebb725ca -r 7c767d41bcee layer/TimeInstantLayer.h --- a/layer/TimeInstantLayer.h Thu Jan 26 16:15:40 2006 +0000 +++ b/layer/TimeInstantLayer.h Thu Jan 26 18:01:38 2006 +0000 @@ -39,6 +39,10 @@ virtual void drawDrag(QMouseEvent *); virtual void drawEnd(QMouseEvent *); + virtual void editStart(QMouseEvent *); + virtual void editDrag(QMouseEvent *); + virtual void editEnd(QMouseEvent *); + virtual const Model *getModel() const { return m_model; } void setModel(SparseOneDimensionalModel *model); @@ -66,6 +70,7 @@ SparseOneDimensionalModel::PointList getLocalPoints(int) const; SparseOneDimensionalModel *m_model; + bool m_editing; SparseOneDimensionalModel::Point m_editingPoint; QColor m_colour; }; diff -r 0183ebb725ca -r 7c767d41bcee widgets/Pane.cpp --- a/widgets/Pane.cpp Thu Jan 26 16:15:40 2006 +0000 +++ b/widgets/Pane.cpp Thu Jan 26 18:01:38 2006 +0000 @@ -342,6 +342,13 @@ if (layer) { layer->drawStart(e); } + + } else if (mode == ViewManager::EditMode) { + + Layer *layer = getSelectedLayer(); + if (layer) { + layer->editStart(e); + } } emit paneInteractedWith(); @@ -424,6 +431,14 @@ layer->drawEnd(e); update(); } + + } else if (mode == ViewManager::EditMode) { + + Layer *layer = getSelectedLayer(); + if (layer) { + layer->editEnd(e); + update(); + } } m_clickedInRange = false; @@ -564,6 +579,13 @@ if (layer) { layer->drawDrag(e); } + + } else if (mode == ViewManager::EditMode) { + + Layer *layer = getSelectedLayer(); + if (layer) { + layer->editDrag(e); + } } }