m_pos(0)
{
QVBoxLayout *l = new QVBoxLayout(this);
- m_keyframeWidget = new SimpleKeyframeWidget(t, in, out, this);
+ m_keyframeWidget = new SimpleKeyframeWidget(t, m_out - m_in - 1, this);
l->addWidget(m_keyframeWidget);
MonitorEditWidget *edit = monitor->getEffectEdit();
QMap <QString, QVariant> map = m_data.toMap();
QMap <QString, QVariant>::const_iterator i = map.constBegin();
while (i != map.constEnd()) {
- keyframes.append(i.key().toInt());
+ keyframes.append(i.key().toInt() - m_in);
++i;
}
m_keyframeWidget->setKeyframes(keyframes);
for (int j = 0; j < keyframes.count(); ++j) {
// key might already be justified
- if (map.contains(QString::number(keyframes.at(j)))) {
- QVariant value = map.take(QString::number(keyframes.at(j)));
- map[QString::number(keyframes.at(j)).rightJustified(qRound(log10((double)m_out)), '0')] = value;
+ if (map.contains(QString::number(keyframes.at(j) + m_in))) {
+ QVariant value = map.take(QString::number(keyframes.at(j) + m_in));
+ map[QString::number(keyframes.at(j) + m_in).rightJustified(qRound(log10((double)m_out)), '0')] = value;
}
}
m_data = QVariant(map);
if (m_data.canConvert(QVariant::Map)) {
QMap <QString, QVariant> map = m_data.toMap();
- map[QString::number(pos < 0 ? m_keyframeWidget->getPosition() : pos).rightJustified(qRound(log10((double)m_out)), '0')] = QVariant(vlist);
+ map[QString::number((pos < 0 ? m_keyframeWidget->getPosition() : pos) + m_in).rightJustified(qRound(log10((double)m_out)), '0')] = QVariant(vlist);
m_data = QVariant(map);
} else {
m_data = QVariant(vlist);
m_keyframeWidget->slotSetPosition(pos, false);
+ pos += m_in;
+
if (m_data.canConvert(QVariant::Map)) {
QMap <QString, QVariant> map = m_data.toMap();
QMap <QString, QVariant>::const_iterator i = map.constBegin();
}
if (seek)
- emit seekToPos(pos);
+ emit seekToPos(pos - m_in);
}
QList <BPoint> RotoWidget::getPoints(int keyframe)
if (!m_data.canConvert(QVariant::Map) || m_data.toMap().count() < 2)
return;
- m_data.toMap().remove(QString::number(pos).rightJustified(qRound(log10((double)m_out)), '0'));
+ m_data.toMap().remove(QString::number(pos - m_in).rightJustified(qRound(log10((double)m_out)), '0'));
if (m_data.toMap().count() == 1)
m_data = m_data.toMap().begin().value();
#include <KIcon>
#include <KLocale>
-SimpleKeyframeWidget::SimpleKeyframeWidget(Timecode t, int in, int out, QWidget *parent) :
+SimpleKeyframeWidget::SimpleKeyframeWidget(Timecode t, int duration, QWidget *parent) :
QWidget(parent)
{
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
QGridLayout *l = new QGridLayout(this);
m_timeline = new SimpleTimelineWidget(this);
- m_timeline->setRange(in ,out);
+ m_timeline->setDuration(duration);
m_buttonAddDelete = new QToolButton(this);
m_buttonAddDelete->setAutoRaise(true);
m_buttonNext->setToolTip(i18n("Go to next keyframe"));
m_time = new TimecodeDisplay(t, this);
- m_time->setRange(in, out);
+ m_time->setRange(0, duration);
l->addWidget(m_timeline, 0, 0, 1, -1);
l->addWidget(m_buttonPrevious, 1, 0);
Q_OBJECT
public:
- SimpleKeyframeWidget(Timecode t, int in, int out, QWidget* parent = 0);
+ SimpleKeyframeWidget(Timecode t, int duration, QWidget* parent = 0);
virtual ~SimpleKeyframeWidget();
int getPosition();
SimpleTimelineWidget::SimpleTimelineWidget(QWidget* parent) :
QWidget(parent),
- m_min(0),
- m_max(1),
+ m_duration(1),
m_position(0),
m_currentKeyframe(-1),
m_currentKeyframeOriginal(-1),
emit keyframeRemoved(pos);
}
-void SimpleTimelineWidget::setRange(int min, int max)
+void SimpleTimelineWidget::setDuration(int dur)
{
- m_min = min;
- m_max = max;
+ m_duration = dur;
}
void SimpleTimelineWidget::slotGoToNext()
}
// no keyframe after current position
- slotSetPosition(m_max);
- emit positionChanged(m_max);
+ slotSetPosition(m_duration);
+ emit positionChanged(m_duration);
}
void SimpleTimelineWidget::slotGoToPrev()
}
// no keyframe before current position
- slotSetPosition(m_min);
- emit positionChanged(m_min);
+ slotSetPosition(0);
+ emit positionChanged(0);
}
void SimpleTimelineWidget::mousePressEvent(QMouseEvent* event)
{
+ int pos = (event->x() - 5) / m_scale;
if (qAbs(event->y() - m_lineHeight) < m_lineHeight / 5. && event->button() == Qt::LeftButton) {
- int pos = (event->x() - 5) / m_scale;
foreach(const int &keyframe, m_keyframes) {
if (qAbs(keyframe - pos) < 5) {
m_currentKeyframeOriginal = keyframe;
// no keyframe next to mouse
m_currentKeyframe = m_currentKeyframeOriginal = -1;
- m_position = (event->x() - 5) / m_scale;
- emit positionChanged(m_position);
+ m_position = pos;
+ emit positionChanged(pos);
update();
}
void SimpleTimelineWidget::mouseMoveEvent(QMouseEvent* event)
{
if (event->buttons() & Qt::LeftButton) {
- int pos = qBound(m_min, (int)((event->x() - 5) / m_scale), m_max);
+ int pos = qBound(0, (int)((event->x() - 5) / m_scale), m_duration);
if (m_currentKeyframe >= 0) {
m_currentKeyframe = pos;
emit keyframeMoving(m_currentKeyframeOriginal, m_currentKeyframe);
{
int change = event->delta() < 0 ? -1 : 1;
if (m_currentKeyframe > 0) {
- m_currentKeyframe = qBound(m_min, m_currentKeyframe + change, m_max);
+ m_currentKeyframe = qBound(0, m_currentKeyframe + change, m_duration);
emit keyframeMoved(m_currentKeyframeOriginal, m_currentKeyframe);
} else {
- m_position = qBound(m_min, m_position + change, m_max);
+ m_position = qBound(0, m_position + change, m_duration);
emit positionChanged(m_position);
}
update();
QPainter p(this);
int min = 5;
int max = width() - 6;
- m_scale = (max - min) / (double)(m_max - m_min);
+ m_scale = (max - min) / (double)(m_duration);
p.translate(min, m_lineHeight);
p.setPen(QPen(palette().foreground().color(), 1, Qt::SolidLine));
public:
SimpleTimelineWidget(QWidget* parent = 0);
void setKeyframes(QList <int> keyframes);
- void setRange(int min, int max);
+ void setDuration(int dur);
public slots:
void slotSetPosition(int pos);
void wheelEvent(QWheelEvent *event);
private:
- int m_min;
- int m_max;
+ int m_duration;
int m_position;
int m_currentKeyframe;
int m_currentKeyframeOriginal;