m_copiedItems(),
m_menuPosition(),
m_blockRefresh(false),
- m_selectionGroup(NULL)
+ m_selectionGroup(NULL),
+ m_selectedTrack(0)
{
if (doc) m_commandStack = doc->commandStack();
else m_commandStack = NULL;
double min = rect.left();
double max = rect.right();
painter->drawLine(QPointF(min, 0), QPointF(max, 0));
- uint maxTrack = m_document->tracksCount();
+ int maxTrack = m_document->tracksCount();
QColor lockedColor = scheme.background(KColorScheme::NegativeBackground).color();
QColor audioColor = palette().alternateBase().color();
QColor base = scheme.background(KColorScheme::NormalBackground).color();
- for (uint i = 0; i < maxTrack; i++) {
+ for (int i = 0; i < maxTrack; i++) {
TrackInfo info = m_document->trackInfoAt(maxTrack - i - 1);
- if (info.isLocked || info.type == AUDIOTRACK) {
+ if (info.isLocked || info.type == AUDIOTRACK || i == m_selectedTrack) {
const QRectF track(min, m_tracksHeight * i + 1, max - min, m_tracksHeight - 1);
- painter->fillRect(track, info.isLocked ? lockedColor : audioColor);
+ if (i == m_selectedTrack) painter->fillRect(track, scheme.background(KColorScheme::ActiveBackground).color());
+ else painter->fillRect(track, info.isLocked ? lockedColor : audioColor);
}
painter->drawLine(QPointF(min, m_tracksHeight *(i + 1)), QPointF(max, m_tracksHeight *(i + 1)));
}
}
viewport()->update();
}
+
+void CustomTrackView::slotTrackDown()
+{
+ if (m_selectedTrack > m_document->tracksCount() - 2) m_selectedTrack = 0;
+ else m_selectedTrack++;
+ emit updateTrackHeaders();
+ viewport()->update();
+}
+
+void CustomTrackView::slotTrackUp()
+{
+ if (m_selectedTrack > 0) m_selectedTrack--;
+ else m_selectedTrack = m_document->tracksCount() - 1;
+ emit updateTrackHeaders();
+ viewport()->update();
+}
+
+int CustomTrackView::selectedTrack() const
+{
+ return m_selectedTrack;
+}
+
void reloadTransitionLumas();
void updateProjectFps();
double fps() const;
+ int selectedTrack() const;
public slots:
void setCursorPos(int pos, bool seek = true);
void slotDeleteTrack(int ix);
void slotChangeTrack(int ix);
void clipNameChanged(const QString id, const QString name);
+ void slotTrackUp();
+ void slotTrackDown();
protected:
virtual void drawBackground(QPainter * painter, const QRectF & rect);
bool m_blockRefresh;
AbstractGroupItem *m_selectionGroup;
QList <ClipItem *> m_waitingThumbs;
+ int m_selectedTrack;
/** Get the index of the video track that is just below current track */
int getPreviousVideoTrack(int track);
void showClipFrame(DocClipBase *, const int);
void doTrackLock(int, bool);
void updateClipMarkers(DocClipBase *);
+ void updateTrackHeaders();
};
#endif
#include <KIcon>
#include <KLocale>
#include <KDebug>
+#include <KColorScheme>
#include <QMouseEvent>
#include <QWidget>
buttonLock->setChecked(info.isLocked);
buttonLock->setToolTip(i18n("Lock track"));
+ QPalette p = palette();
+ KColorScheme scheme(p.currentColorGroup(), KColorScheme::Window);
+ p.setColor(QPalette::Button, scheme.background(KColorScheme::ActiveBackground).color().darker(120));
+ setPalette(p);
+
if (m_type == VIDEOTRACK) {
setBackgroundRole(QPalette::AlternateBase);
setAutoFillBackground(true);
{
}*/
+void HeaderTrack::setSelectedIndex(int ix)
+{
+ if (m_index == ix) {
+ setBackgroundRole(QPalette::Button);
+ setAutoFillBackground(true);
+ } else if (m_type != VIDEOTRACK) setAutoFillBackground(false);
+ else setBackgroundRole(QPalette::AlternateBase);
+ update();
+}
+
void HeaderTrack::adjustSize(int height)
{
// Don't show track buttons if size is too small
//virtual ~HeaderTrack();
void setLock(bool lock);
void adjustSize(int height);
+ void setSelectedIndex(int ix);
private:
int m_index;
collection->addAction("monitor_seek_backward", monitorSeekBackward);
connect(monitorSeekBackward, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotRewind()));
+ KAction* trackUp = new KAction(KIcon(), i18n("Previous Track"), this);
+ trackUp->setShortcut(Qt::Key_Up);
+ collection->addAction("track_up", trackUp);
+ connect(trackUp, SIGNAL(triggered(bool)), this, SLOT(slotTrackUp()));
+
+ KAction* trackDown = new KAction(KIcon(), i18n("Next Track"), this);
+ trackDown->setShortcut(Qt::Key_Down);
+ collection->addAction("track_down", trackDown);
+ connect(trackDown, SIGNAL(triggered(bool)), this, SLOT(slotTrackDown()));
+
KAction* monitorSeekBackwardOneFrame = new KAction(KIcon("media-skip-backward"), i18n("Rewind 1 Frame"), this);
monitorSeekBackwardOneFrame->setShortcut(Qt::Key_Left);
collection->addAction("monitor_seek_backward-one-frame", monitorSeekBackwardOneFrame);
return pixmap;
}
+void MainWindow::slotTrackUp()
+{
+ if (m_activeTimeline) m_activeTimeline->projectView()->slotTrackUp();
+}
+
+void MainWindow::slotTrackDown()
+{
+ if (m_activeTimeline) m_activeTimeline->projectView()->slotTrackDown();
+}
+
#include "mainwindow.moc"
void slotUpdateTrackInfo();
/** \brief Change color scheme */
void slotChangePalette(QAction *action, const QString &themename = QString());
+ void slotTrackUp();
+ void slotTrackDown();
signals:
Q_SCRIPTABLE void abortRenderJob(const QString &url);
connect(m_trackview->verticalScrollBar(), SIGNAL(valueChanged(int)), headers_area->verticalScrollBar(), SLOT(setValue(int)));
connect(m_trackview, SIGNAL(trackHeightChanged()), this, SLOT(slotRebuildTrackHeaders()));
connect(m_trackview, SIGNAL(tracksChanged()), this, SLOT(slotReloadTracks()));
+ connect(m_trackview, SIGNAL(updateTrackHeaders()), this, SLOT(slotRepaintTracks()));
parseDocument(m_doc->toXml());
int error = m_doc->setSceneList();
//kDebug() << "// TRANSITRION " << i << " IS NOT VALID (INTERN ADDED)";
//break;
} else if (paramName == "a_track") {
- a_track = qMax(0, p.text().toInt());
- a_track = qMin(m_projectTracks - 1, a_track);
- if (a_track != p.text().toInt()) {
- // the transition track was out of bounds
- m_documentErrors.append(i18n("Transition %1 had an invalid track: %2 > %3", e.attribute("id"), p.text().toInt(), a_track) + '\n');
- EffectsList::setProperty(e, "a_track", QString::number(a_track));
- }
- }
- else if (paramName == "b_track") {
- b_track = qMax(0, p.text().toInt());
- b_track = qMin(m_projectTracks - 1, b_track);
- if (b_track != p.text().toInt()) {
- // the transition track was out of bounds
- m_documentErrors.append(i18n("Transition %1 had an invalid track: %2 > %3", e.attribute("id"), p.text().toInt(), b_track) + '\n');
- EffectsList::setProperty(e, "b_track", QString::number(b_track));
- }
- }
- else if (paramName == "mlt_service") mlt_service = p.text();
+ a_track = qMax(0, p.text().toInt());
+ a_track = qMin(m_projectTracks - 1, a_track);
+ if (a_track != p.text().toInt()) {
+ // the transition track was out of bounds
+ m_documentErrors.append(i18n("Transition %1 had an invalid track: %2 > %3", e.attribute("id"), p.text().toInt(), a_track) + '\n');
+ EffectsList::setProperty(e, "a_track", QString::number(a_track));
+ }
+ } else if (paramName == "b_track") {
+ b_track = qMax(0, p.text().toInt());
+ b_track = qMin(m_projectTracks - 1, b_track);
+ if (b_track != p.text().toInt()) {
+ // the transition track was out of bounds
+ m_documentErrors.append(i18n("Transition %1 had an invalid track: %2 > %3", e.attribute("id"), p.text().toInt(), b_track) + '\n');
+ EffectsList::setProperty(e, "b_track", QString::number(b_track));
+ }
+ } else if (paramName == "mlt_service") mlt_service = p.text();
else if (paramName == "kdenlive_id") transitionId = p.text();
else if (paramName == "geometry") mlt_geometry = p.text();
else if (paramName == "automatic" && p.text() == "1") isAutomatic = true;
m_trackview->viewport()->update();
}
+void TrackView::slotRepaintTracks()
+{
+ QLayoutItem *child;
+ for (int i = 0; i < headers_container->layout()->count(); i++) {
+ child = headers_container->layout()->itemAt(i);
+ if (child->widget() && child->widget()->height() > 5) {
+ HeaderTrack *head = static_cast <HeaderTrack *>(child->widget());
+ if (head) head->setSelectedIndex(m_trackview->selectedTrack());
+ }
+ }
+}
+
void TrackView::slotReloadTracks()
{
slotRebuildTrackHeaders();
headers_container->layout()->addWidget(frame);
TrackInfo info = list.at(max - i - 1);
header = new HeaderTrack(i, info, height, headers_container);
+ header->setSelectedIndex(m_trackview->selectedTrack());
connect(header, SIGNAL(switchTrackVideo(int)), m_trackview, SLOT(slotSwitchTrackVideo(int)));
connect(header, SIGNAL(switchTrackAudio(int)), m_trackview, SLOT(slotSwitchTrackAudio(int)));
connect(header, SIGNAL(switchTrackLock(int)), m_trackview, SLOT(slotSwitchTrackLock(int)));
void slotVerticalZoomDown();
void slotVerticalZoomUp();
void slotRenameTrack(int ix);
+ void slotRepaintTracks();
signals:
void mousePosition(int);
transitionTrack->blockSignals(true);
transitionTrack->clear();
transitionTrack->addItem(i18n("Auto"), -1);
- for (uint i = 0; i < m_tracksCount; i++) {
+ for (int i = 0; i < m_tracksCount; i++) {
if (!info.at(i).trackName.isEmpty())
transitionTrack->addItem(info.at(i).trackName + '(' + QString::number(i) + ')', i);
else transitionTrack->addItem(QString::number(i));