QList < GenTime > markers;
for (int count = 0; count < m_snapMarkers.count(); ++count) {
- markers.append(m_snapMarkers[count].time());
+ markers.append(m_snapMarkers.at(count).time());
}
return markers;
{
int it;
for (it = 0; it < m_snapMarkers.count(); it++) {
- if (m_snapMarkers[it].time() >= currTime)
+ if (m_snapMarkers.at(it).time() >= currTime)
break;
}
if (it == 0) return GenTime();
- else if (it == m_snapMarkers.count() - 1 && m_snapMarkers[it].time() < currTime)
- return m_snapMarkers[it].time();
- else return m_snapMarkers[it-1].time();
+ else if (it == m_snapMarkers.count() - 1 && m_snapMarkers.at(it).time() < currTime)
+ return m_snapMarkers.at(it).time();
+ else return m_snapMarkers.at(it-1).time();
}
GenTime DocClipBase::findNextSnapMarker(const GenTime & currTime)
{
int it;
for (it = 0; it < m_snapMarkers.count(); it++) {
- if (m_snapMarkers[it].time() > currTime)
+ if (m_snapMarkers.at(it).time() > currTime)
break;
}
- if (it < m_snapMarkers.count() && m_snapMarkers[it].time() > currTime) return m_snapMarkers[it].time();
+ if (it < m_snapMarkers.count() && m_snapMarkers.at(it).time() > currTime) return m_snapMarkers.at(it).time();
return duration();
}
MarkerDialog d(clip, marker, m_activeDocument->timecode(), i18n("Add Marker"), this);
if (d.exec() == QDialog::Accepted) {
m_activeTimeline->projectView()->slotAddClipMarker(id, d.newMarker().time(), d.newMarker().comment());
+ if (m_clipMonitor->isActive()) m_clipMonitor->checkOverlay();
+ m_clipMonitor->updateMarkers(clip);
}
- if (m_clipMonitor->isActive()) m_clipMonitor->checkOverlay();
}
void MainWindow::slotDeleteClipMarker()
}
m_activeTimeline->projectView()->slotDeleteClipMarker(comment, id, pos);
if (m_clipMonitor->isActive()) m_clipMonitor->checkOverlay();
+ m_clipMonitor->updateMarkers(clip);
}
}
m_activeTimeline->projectView()->slotDeleteAllClipMarkers(clip->getId());
if (m_clipMonitor->isActive()) m_clipMonitor->checkOverlay();
+ m_clipMonitor->updateMarkers(clip);
}
void MainWindow::slotEditClipMarker()
if (d.newMarker().time() != pos) {
// remove old marker
m_activeTimeline->projectView()->slotAddClipMarker(id, pos, QString());
+ m_clipMonitor->updateMarkers(clip);
}
if (m_clipMonitor->isActive()) m_clipMonitor->checkOverlay();
}
configButton->setMenu(m_configMenu);
configButton->setPopupMode(QToolButton::QToolButton::InstantPopup);
toolbar->addWidget(configButton);
+
+ if (name == "clip") {
+ m_markerMenu = new QMenu(i18n("Go to marker..."), this);
+ m_markerMenu->setEnabled(false);
+ m_configMenu->addMenu(m_markerMenu);
+ connect(m_markerMenu, SIGNAL(triggered(QAction *)), this, SLOT(slotGoToMarker(QAction *)));
+ }
m_configMenu->addAction(KIcon("transform-scale"), i18n("Resize (100%)"), this, SLOT(slotSetSizeOneToOne()));
m_configMenu->addAction(KIcon("transform-scale"), i18n("Resize (50%)"), this, SLOT(slotSetSizeOneToTwo()));
}
}
+void Monitor::slotGoToMarker(QAction *action)
+{
+ int pos = action->data().toInt();
+ slotSeek(pos);
+}
+
void Monitor::slotSetSizeOneToOne()
{
QRect r = QApplication::desktop()->screenGeometry();
return m_currentClip;
}
+void Monitor::updateMarkers(DocClipBase *source)
+{
+ if (source == m_currentClip) {
+ m_markerMenu->clear();
+ QList <CommentedTime> markers = m_currentClip->commentedSnapMarkers();
+ if (!markers.isEmpty()) {
+ QList <int> marks;
+ for (int i = 0; i < markers.count(); i++) {
+ int pos = (int) markers.at(i).time().frames(render->fps());
+ marks.append(pos);
+ QString position = m_monitorManager->timecode().getTimecode(markers.at(i).time()) + ' ' + markers.at(i).comment();
+ QAction *go = m_markerMenu->addAction(position);
+ go->setData(pos);
+ }
+ m_ruler->setMarkers(marks);
+ } else m_ruler->setMarkers(QList <int>());
+ m_markerMenu->setEnabled(!m_markerMenu->isEmpty());
+ }
+}
+
void Monitor::slotSeekToPreviousSnap()
{
if (m_currentClip) slotSeek(getSnapForPos(true).frames(m_monitorManager->timecode().fps()));
}
if (clip != m_currentClip) {
m_currentClip = clip;
+ updateMarkers(clip);
if (render->setProducer(clip->producer(), position) == -1) {
// MLT CONSUMER is broken
emit blockMonitors();
GenTime position();
void checkOverlay();
void updateTimecodeFormat();
+ void updateMarkers(DocClipBase *source);
protected:
virtual void mousePressEvent(QMouseEvent * event);
QMenu *m_contextMenu;
QMenu *m_configMenu;
QMenu *m_playMenu;
+ QMenu *m_markerMenu;
QPoint m_DragStartPosition;
#ifdef Q_WS_MAC
VideoGLWidget *m_glWidget;
void setClipZone(QPoint pos);
void slotSwitchMonitorInfo(bool show);
void slotSwitchDropFrames(bool show);
+ void slotGoToMarker(QAction *action);
public slots:
void slotOpenFile(const QString &);
m_medium = 60 * 25;
}
m_cursorPosition = m_cursorFramePosition * m_scale;
- update();
+ updatePixmap();
}
void SmallRuler::setZone(int start, int end)
m_zoneEnd = end;
} else m_zoneEnd = end;
}
- update();
+ updatePixmap();
+}
+
+void SmallRuler::setMarkers(QList < int > list)
+{
+ m_markers = list;
+ updatePixmap();
}
QPoint SmallRuler::zone()
if (qAbs(pos - m_zoneStart) < qAbs(pos - m_zoneEnd)) m_zoneStart = pos;
else m_zoneEnd = pos;
emit zoneChanged(QPoint(m_zoneStart, m_zoneEnd));
- update();
+ updatePixmap();
} else emit seekRenderer((int) pos);
}
const int offset = 6;
const int x = qMin(oldPos, m_cursorPosition);
const int w = qAbs(oldPos - m_cursorPosition);
- update(x - offset, 9, w + 2 * offset, 6);
+ update(x - offset, 4, w + 2 * offset, 6);
}
//virtual
adjustScale(m_maxval);
}
-// virtual
-void SmallRuler::paintEvent(QPaintEvent *e)
+void SmallRuler::updatePixmap()
{
-
- QPainter p(this);
- QRect r = e->rect();
- p.setClipRect(r);
-
+ m_pixmap = QPixmap(width(), height());
+ m_pixmap.fill(palette().window().color());
+ QPainter p(&m_pixmap);
double f, fend;
- p.setPen(palette().dark().color());
const int zoneStart = (int)(m_zoneStart * m_scale);
const int zoneEnd = (int)(m_zoneEnd * m_scale);
+ p.fillRect(zoneStart, height() / 2 - 1, zoneEnd - zoneStart, height() / 2, m_zoneColor);
+
+ // draw markers
+ if (!m_markers.isEmpty()) {
+ p.setPen(Qt::red);
+ for (int i = 0; i < m_markers.count(); i++) {
+ p.drawLine(m_markers.at(i) * m_scale, 0, m_markers.at(i) * m_scale, 9);
+ }
+ }
+ p.setPen(palette().dark().color());
+ // draw the little marks
+ fend = m_scale * m_small;
+ if (fend > 2) for (f = 0; f < width(); f += fend) {
+ p.drawLine((int)f, 0, (int)f, 3);
+ }
- p.fillRect(zoneStart, height() / 2, zoneEnd - zoneStart, height() / 2, m_zoneColor);
+ // draw medium marks
+ fend = m_scale * m_medium;
+ if (fend > 2) for (f = 0; f < width(); f += fend) {
+ p.drawLine((int)f, 0, (int)f, 6);
+ }
+ p.end();
+ update();
+}
- if (r.top() < 9) {
- // draw the little marks
- fend = m_scale * m_small;
- if (fend > 2) for (f = 0; f < width(); f += fend) {
- p.drawLine((int)f, 1, (int)f, 3);
- }
+// virtual
+void SmallRuler::paintEvent(QPaintEvent *e)
+{
- // draw medium marks
- fend = m_scale * m_medium;
- if (fend > 2) for (f = 0; f < width(); f += fend) {
- p.drawLine((int)f, 1, (int)f, 5);
- }
- }
+ QPainter p(this);
+ QRect r = e->rect();
+ p.setClipRect(r);
+ p.drawPixmap(QPointF(), m_pixmap);
// draw pointer
QPolygon pa(3);
- pa.setPoints(3, m_cursorPosition - 5, 14, m_cursorPosition + 5, 14, m_cursorPosition/*+0*/, 9);
+ pa.setPoints(3, m_cursorPosition - 5, 10, m_cursorPosition + 5, 10, m_cursorPosition/*+0*/, 5);
p.setBrush(palette().dark().color());
+ p.setPen(Qt::NoPen);
p.drawPolygon(pa);
}
void adjustScale(int maximum);
void setZone(int start, int end);
QPoint zone();
+ void setMarkers(QList < int > list);
protected:
virtual void paintEvent(QPaintEvent *e);
int m_zoneStart;
int m_zoneEnd;
QColor m_zoneColor;
+ QList <int> m_markers;
+ QPixmap m_pixmap;
+ void updatePixmap();
public slots:
void slotNewValue(int value);
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
<class>Monitor_UI</class>
- <widget class="QWidget" name="Monitor_UI" >
- <property name="geometry" >
+ <widget class="QWidget" name="Monitor_UI">
+ <property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<height>177</height>
</rect>
</property>
- <layout class="QGridLayout" name="gridLayout" >
- <property name="margin" >
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="margin">
<number>0</number>
</property>
- <property name="spacing" >
+ <property name="spacing">
<number>0</number>
</property>
- <item row="0" column="0" colspan="2" >
- <widget class="QFrame" name="video_frame" >
- <property name="font" >
+ <item row="0" column="0" colspan="2">
+ <widget class="QFrame" name="video_frame">
+ <property name="font">
<font>
<stylestrategy>NoAntialias</stylestrategy>
</font>
</property>
- <property name="lineWidth" >
+ <property name="lineWidth">
<number>0</number>
</property>
</widget>
</item>
- <item row="1" column="0" colspan="2" >
- <widget class="QFrame" name="ruler_frame" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+ <item row="1" column="0" colspan="2">
+ <widget class="QFrame" name="ruler_frame">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize" >
+ <property name="minimumSize">
<size>
<width>16</width>
- <height>15</height>
+ <height>10</height>
</size>
</property>
- <property name="maximumSize" >
+ <property name="maximumSize">
<size>
<width>16777215</width>
- <height>15</height>
+ <height>10</height>
</size>
</property>
- <property name="lineWidth" >
+ <property name="lineWidth">
<number>0</number>
</property>
</widget>
</item>
- <item row="2" column="0" colspan="2" >
- <widget class="QFrame" name="button_frame" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Maximum" hsizetype="Preferred" >
+ <item row="2" column="0" colspan="2">
+ <widget class="QFrame" name="button_frame">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize" >
+ <property name="minimumSize">
<size>
<width>0</width>
<height>15</height>
</size>
</property>
- <property name="lineWidth" >
+ <property name="lineWidth">
<number>0</number>
</property>
</widget>