Mercurial > hg > svgui
diff layer/TimeValueLayer.cpp @ 360:d58701996fae
* Update remaining editable layers to support proper realignment on copy/paste
* Permit pasting when no suitable layer is current: create a new layer on paste
* Add preference for showing the splash screen or not
* Rename spectrogram smoothing prefs (partly following Craig's suggestions)
author | Chris Cannam |
---|---|
date | Wed, 06 Feb 2008 14:15:09 +0000 |
parents | 020c485aa7e0 |
children | 098c568dc76b |
line wrap: on
line diff
--- a/layer/TimeValueLayer.cpp Wed Feb 06 12:49:49 2008 +0000 +++ b/layer/TimeValueLayer.cpp Wed Feb 06 14:15:09 2008 +0000 @@ -36,6 +36,7 @@ #include <QMouseEvent> #include <QRegExp> #include <QTextStream> +#include <QMessageBox> #include <QInputDialog> #include <iostream> @@ -1196,7 +1197,7 @@ i != points.end(); ++i) { if (s.contains(i->frame)) { Clipboard::Point point(i->frame, i->value, i->label); - point.setReferenceFrame(m_model->alignToReference(i->frame)); + point.setReferenceFrame(alignToReference(v, i->frame)); to.addPoint(point); } } @@ -1210,6 +1211,25 @@ const Clipboard::PointList &points = from.getPoints(); + bool realign = false; + + if (clipboardHasDifferentAlignment(v, from)) { + + QMessageBox::StandardButton button = + QMessageBox::question(v, tr("Re-align pasted items?"), + tr("The items you are pasting came from a layer with different source material from this one. Do you want to re-align them in time, to match the source material for this layer?"), + QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, + QMessageBox::Yes); + + if (button == QMessageBox::Cancel) { + return false; + } + + if (button == QMessageBox::Yes) { + realign = true; + } + } + SparseTimeValueModel::EditCommand *command = new SparseTimeValueModel::EditCommand(m_model, tr("Paste")); @@ -1324,10 +1344,23 @@ i != points.end(); ++i) { if (!i->haveFrame()) continue; + size_t frame = 0; - if (frameOffset > 0 || -frameOffset < i->getFrame()) { - frame = i->getFrame() + frameOffset; + + if (!realign) { + + frame = i->getFrame(); + + } else { + + if (i->haveReferenceFrame()) { + frame = i->getReferenceFrame(); + frame = alignFromReference(v, frame); + } else { + frame = i->getFrame(); + } } + SparseTimeValueModel::Point newPoint(frame); if (i->haveLabel()) { @@ -1349,7 +1382,7 @@ command->finish(); return true; - } +} void TimeValueLayer::toXml(QTextStream &stream,