]> git.sesse.net Git - kdenlive/commitdiff
Rework monitor & timeline UI, and send profile to renderer
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 14 Mar 2008 21:35:02 +0000 (21:35 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 14 Mar 2008 21:35:02 +0000 (21:35 +0000)
svn path=/branches/KDE4/; revision=2056

18 files changed:
renderer/kdenlive_render.cpp
renderer/renderjob.cpp
renderer/renderjob.h
src/customruler.cpp
src/customruler.h
src/customtrackview.cpp
src/customtrackview.h
src/headertrack.cpp
src/headertrack.h
src/mainwindow.cpp
src/mainwindow.h
src/monitor.cpp
src/monitor.h
src/trackview.cpp
src/trackview.h
src/widgets/monitor_ui.ui
src/widgets/timeline_ui.ui
src/widgets/timelinebuttons_ui.ui

index 27dc63bc3c2694e46cbeef88d2f2b75e9f17fbc1..67a5088ce9c3533c8900710fc7d89deeb6adb918 100644 (file)
@@ -46,6 +46,8 @@ int main(int argc, char **argv) {
         }
         QString render = args.at(0);
         args.takeFirst();
+        QString profile = args.at(0);
+        args.takeFirst();
         QString rendermodule = args.at(0);
         args.takeFirst();
         QString player = args.at(0);
@@ -54,7 +56,7 @@ int main(int argc, char **argv) {
         args.takeFirst();
         QString dest = args.at(0);
         args.takeFirst();
-        RenderJob *job = new RenderJob(erase, render, rendermodule, player, src, dest, args, in, out);
+        RenderJob *job = new RenderJob(erase, render, profile, rendermodule, player, src, dest, args, in, out);
         job->start();
         app.exec();
     } else {
@@ -64,6 +66,7 @@ int main(int argc, char **argv) {
                 "  in=pos: start rendering at frame pos\n"
                 "  out=pos: end rendering at frame pos\n"
                 "  render: path to inigo rendrer\n"
+                "  profile: the MLT video profile\n"
                 "  rendermodule: the MLT consumer used for rendering, usually it is avformat\n"
                 "  player: path to video player to play when rendering is over, use '-' to disable playing\n"
                 "  src: source file (usually westley playlist)\n"
index ed042f61e1d44fc34f310ec98e2d1173ca03f908..909b6a52f941626c71fc2d989bbb72b59c93ee4d 100644 (file)
@@ -24,7 +24,7 @@
 
 static QDBusConnection connection(QLatin1String(""));
 
-RenderJob::RenderJob(bool erase, QString renderer, QString rendermodule, QString player, QString scenelist, QString dest, QStringList args, int in, int out) : QObject() {
+RenderJob::RenderJob(bool erase, QString renderer, QString profile, QString rendermodule, QString player, QString scenelist, QString dest, QStringList args, int in, int out) : QObject() {
     m_scenelist = scenelist;
     m_dest = dest;
     m_player = player;
@@ -32,7 +32,7 @@ RenderJob::RenderJob(bool erase, QString renderer, QString rendermodule, QString
     m_erase = erase;
     m_renderProcess = new QProcess;
     m_prog = renderer;
-    m_args << scenelist;
+    m_args << "-profile" << profile << scenelist;
     if (in != -1) m_args << "in=" + QString::number(in);
     if (out != -1) m_args << "out=" + QString::number(out);
     m_args << "-consumer" << rendermodule + ":" + m_dest << "progress=1" << args;
@@ -75,7 +75,7 @@ void RenderJob::start() {
     QDBusReply<QDBusObjectPath> objectPath = kuiserver.call("requestView", "kdenlive", "kdenlive", 1);
     QString reply = ((QDBusObjectPath) objectPath).path();
     m_jobUiserver = new QDBusInterface("org.kde.JobViewServer", reply, "org.kde.JobView");
-    m_jobUiserver->call("setInfoMessage", tr("Rendering %1").arg(m_dest));
+    m_jobUiserver->call("setInfoMessage", tr("Rendering %1").arg(m_dest.section('/', -1)));
 
     QDBusConnection::sessionBus().connect("org.kde.JobViewServer", reply, "org.kde.JobView",
                                           "cancelRequested", this, SLOT(slotAbort()));
index 5068d73041c48386fe8d8657a0e61062ef3f7789..bfccb5e916a38ada929ec33375fffc93a968b7e3 100644 (file)
@@ -28,7 +28,7 @@
 class RenderJob : public QObject {
     Q_OBJECT
 public:
-    RenderJob(bool erase, QString renderer, QString rendermodule, QString player, QString scenelist, QString dest, QStringList args, int in = -1, int out = -1);
+    RenderJob(bool erase, QString renderer, QString profile, QString rendermodule, QString player, QString scenelist, QString dest, QStringList args, int in = -1, int out = -1);
     ~RenderJob();
     void start();
 
index a56f74225e82e37f12fef038edfbb551f271d6d0..e7bd20e5e4d9093819a5a7e6895b3c16376c32fd 100644 (file)
@@ -118,11 +118,11 @@ void CustomRuler::mouseMoveEvent(QMouseEvent * event) {
     update();
 }
 
-int CustomRuler::inPoint() {
+int CustomRuler::inPoint() const {
     return m_zoneStart;
 }
 
-int CustomRuler::outPoint() {
+int CustomRuler::outPoint() const {
     return m_zoneEnd;
 }
 
index d391bb9686835c0618d846c944b44245652547d8..0d2e076cd48325ab910fc9cf482c2c2a140ca921 100644 (file)
@@ -17,8 +17,8 @@ public:
     virtual void mouseMoveEvent(QMouseEvent * event);
     void setPixelPerMark(double rate);
     static const int comboScale[];
-    int outPoint();
-    int inPoint();
+    int outPoint() const;
+    int inPoint() const;
 
 protected:
     virtual void paintEvent(QPaintEvent * /*e*/);
index d98bceefac4fb564fc6d45fe229d2d78f529a8be..e52e4d34471345de66968d42b3f45758f43a6112 100644 (file)
@@ -61,7 +61,6 @@ CustomTrackView::CustomTrackView(KdenliveDoc *doc, QGraphicsScene * projectscene
     QColor border = QColor(255, 255, 255, 100);
     m_tipPen.setColor(border);
     m_tipPen.setWidth(3);
-
     setContentsMargins(0, 0, 0, 0);
     if (projectscene) {
         m_cursorLine = projectscene->addLine(0, 0, 0, 50);
@@ -762,7 +761,7 @@ void CustomTrackView::drawBackground(QPainter * painter, const QRectF & rect) {
     painter->drawLine(rectInView.left(), 0, rectInView.right(), 0);
     for (uint i = 0; i < m_tracksCount;i++) {
         painter->drawLine(rectInView.left(), 50 * (i + 1), rectInView.right(), 50 * (i + 1));
-        painter->drawText(QRectF(10, 50 * i, 100, 50 * i + 49), Qt::AlignLeft, i18n(" Track ") + QString::number(i + 1));
+        //painter->drawText(QRectF(10, 50 * i, 100, 50 * i + 49), Qt::AlignLeft, i18n(" Track ") + QString::number(i + 1));
     }
     int lowerLimit = 50 * m_tracksCount + 1;
     if (height() > lowerLimit)
index ce7704baf3cf0836849441e4320b97cdc35e55bb..b3e446a7e6e92ff6a6d9209e44ae24247e933819 100644 (file)
@@ -104,7 +104,6 @@ private:
     /** Should we auto scroll while playing (keep in sync with KdenliveSettings::autoscroll() */
     bool m_autoScroll;
 
-
 signals:
     void cursorMoved(int, int);
     void zoomIn();
index 3b7508da27dedb1b9e3f747fcdfb051843543086..ec4a30393a9e858924c2bb908c2b289b0b1a8494 100644 (file)
@@ -1,26 +1,29 @@
 
 #include <QMouseEvent>
 #include <QStylePainter>
-
-#include <KDebug>
 #include <QFrame>
 #include <QWidget>
 #include <QPainter>
 
-
+#include <KLocale>
+#include <KDebug>
 #include "headertrack.h"
 
-HeaderTrack::HeaderTrack(QWidget *parent)
-        : QWidget(parent) {
+HeaderTrack::HeaderTrack(int index, QWidget *parent)
+        : QWidget(parent), m_index(index) {
     setFixedHeight(50);
+    //setFixedWidth(30);
+    m_label = QString::number(m_index);
 }
 
 // virtual
 void HeaderTrack::paintEvent(QPaintEvent *e) {
     QRect region = e->rect();
+    region.setTopLeft(QPoint(region.left() + 1, region.top() + 1));
     region.setBottomRight(QPoint(region.right() - 1, region.bottom() - 1));
     QPainter painter(this);
-    painter.drawRect(region);
+    painter.fillRect(region, QBrush(QColor(255, 255, 255)));
+    painter.drawText(region, Qt::AlignCenter, m_label);
 }
 
 
index 9012055d6019679fe17ade88c1d6982c53bf34d7..f933dc6e514ca92379a310a9c7de61e2a4964386 100644 (file)
@@ -7,12 +7,14 @@ class HeaderTrack : public QWidget {
     Q_OBJECT
 
 public:
-    HeaderTrack(QWidget *parent = 0);
+    HeaderTrack(int index, QWidget *parent = 0);
 
 protected:
     virtual void paintEvent(QPaintEvent * /*e*/);
 
 private:
+    int m_index;
+    QString m_label;
 
 public slots:
 
index 1f71c2fdd0a1421408e9a192eb55157ca043ffd2..feb61ef41deb881d4e49c228ae2de0c39e235756 100644 (file)
@@ -521,7 +521,7 @@ void MainWindow::slotDoRender(const QString &dest, const QString &render, const
         if (zoneOnly) args << "in=" + QString::number(in) << "out=" + QString::number(out);
         QString videoPlayer = "-";
         if (playAfter) videoPlayer = "kmplayer";
-        args << "inigo" << render << videoPlayer << temp.fileName() << dest << avformat_args;
+        args << "inigo" << m_activeDocument->profilePath() << render << videoPlayer << temp.fileName() << dest << avformat_args;
         QProcess::startDetached("kdenlive_render", args);
     }
 }
@@ -563,6 +563,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
             disconnect(m_activeDocument, SIGNAL(deletTimelineClip(int)), m_activeTimeline, SLOT(slotDeleteClip(int)));
             disconnect(m_activeDocument, SIGNAL(thumbsProgress(KUrl, int)), this, SLOT(slotGotProgressInfo(KUrl, int)));
             disconnect(m_activeTimeline, SIGNAL(clipItemSelected(ClipItem*)), effectStack, SLOT(slotClipItemSelected(ClipItem*)));
+            disconnect(timeline_buttons_ui.zoom_slider, SIGNAL(valueChanged(int)), m_activeTimeline, SLOT(slotChangeZoom(int)));
             disconnect(m_activeDocument, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool)));
             disconnect(effectStack, SIGNAL(updateClipEffect(ClipItem*, QDomElement, QDomElement)), m_activeTimeline->projectView(), SLOT(slotUpdateClipEffect(ClipItem*, QDomElement, QDomElement)));
             disconnect(effectStack, SIGNAL(removeEffect(ClipItem*, QDomElement)), m_activeTimeline->projectView(), SLOT(slotDeleteEffect(ClipItem*, QDomElement)));
@@ -589,6 +590,10 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
     connect(doc, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool)));
 
     connect(trackView, SIGNAL(clipItemSelected(ClipItem*)), effectStack, SLOT(slotClipItemSelected(ClipItem*)));
+    timeline_buttons_ui.zoom_slider->setValue(trackView->currentZoom());
+    connect(timeline_buttons_ui.zoom_slider, SIGNAL(valueChanged(int)), trackView, SLOT(slotChangeZoom(int)));
+    connect(trackView->projectView(), SIGNAL(zoomIn()), this, SLOT(slotZoomIn()));
+    connect(trackView->projectView(), SIGNAL(zoomOut()), this, SLOT(slotZoomOut()));
     connect(effectStack, SIGNAL(updateClipEffect(ClipItem*, QDomElement, QDomElement)), trackView->projectView(), SLOT(slotUpdateClipEffect(ClipItem*, QDomElement, QDomElement)));
     connect(effectStack, SIGNAL(removeEffect(ClipItem*, QDomElement)), trackView->projectView(), SLOT(slotDeleteEffect(ClipItem*, QDomElement)));
     connect(effectStack, SIGNAL(changeEffectState(ClipItem*, QDomElement, bool)), trackView->projectView(), SLOT(slotChangeEffectState(ClipItem*, QDomElement, bool)));
@@ -657,6 +662,14 @@ void MainWindow::slotSwitchAudioThumbs() {
     timeline_buttons_ui.buttonAudio->setDown(KdenliveSettings::audiothumbnails());
 }
 
+void MainWindow::slotZoomIn() {
+    timeline_buttons_ui.zoom_slider->setValue(timeline_buttons_ui.zoom_slider->value() - 1);
+}
+
+void MainWindow::slotZoomOut() {
+    timeline_buttons_ui.zoom_slider->setValue(timeline_buttons_ui.zoom_slider->value() + 1);
+}
+
 void MainWindow::slotGotProgressInfo(KUrl url, int progress) {
     statusProgressBar->setValue(progress);
     if (progress > 0) {
index 882f7667e7ed9b7c23111195b5a7372dff6c89e7..536968a689c8a312a7030415f95ef65aad6b708b 100644 (file)
@@ -136,6 +136,8 @@ private slots:
     void slotDoRender(const QString &dest, const QString &render, const QStringList &avformat_args, bool zoneOnly, bool playAfter);
     void slotFullScreen();
     void slotUpdateDocumentState(bool modified);
+    void slotZoomIn();
+    void slotZoomOut();
 };
 
 #endif
index 92982dfe0ef975421569fe4d0faae0c29a3c6a60..d36288cfa400234fb5c3b12fa49ad21df309effa 100644 (file)
@@ -20,6 +20,8 @@
 
 #include <QMouseEvent>
 #include <QStylePainter>
+#include <QMenu>
+#include <QToolButton>
 
 #include <KDebug>
 #include <KLocale>
@@ -35,21 +37,50 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent)
     QVBoxLayout *layout = new QVBoxLayout;
     layout->addWidget(m_ruler);
     ui.ruler_frame->setLayout(layout);
-    //m_ruler->setPixelPerMark(3);
+
+    m_toolbar = new QToolBar(name, this);
+    QVBoxLayout *layout2 = new QVBoxLayout;
+
     m_playIcon = KIcon("media-playback-start");
     m_pauseIcon = KIcon("media-playback-pause");
-    ui.button_play->setIcon(m_playIcon);
-    ui.button_rew1->setIcon(KIcon("media-skip-backward"));
-    ui.button_rew->setIcon(KIcon("media-seek-backward"));
-    ui.button_fwd1->setIcon(KIcon("media-skip-forward"));
-    ui.button_fwd->setIcon(KIcon("media-seek-forward"));
-    connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int)));
-    connect(ui.button_rew, SIGNAL(clicked()), this, SLOT(slotRewind()));
-    connect(ui.button_rew1, SIGNAL(clicked()), this, SLOT(slotRewindOneFrame()));
-    connect(ui.button_fwd, SIGNAL(clicked()), this, SLOT(slotForward()));
-    connect(ui.button_fwd1, SIGNAL(clicked()), this, SLOT(slotForwardOneFrame()));
-    connect(ui.button_play, SIGNAL(clicked()), this, SLOT(slotPlay()));
-    //if ( render ) return;
+
+    QAction *m_rewAction = m_toolbar->addAction(KIcon("media-seek-backward"), i18n("Rewind"));
+    connect(m_rewAction, SIGNAL(triggered()), this, SLOT(slotRewind()));
+    QAction *m_rew1Action = m_toolbar->addAction(KIcon("media-skip-backward"), i18n("Rewind 1 frame"));
+    connect(m_rew1Action, SIGNAL(triggered()), this, SLOT(slotRewindOneFrame()));
+
+    QToolButton *playButton = new QToolButton(m_toolbar);
+    QMenu *playMenu = new QMenu(this);
+    playButton->setMenu(playMenu);
+    playButton->setPopupMode(QToolButton::MenuButtonPopup);
+    m_toolbar->addWidget(playButton);
+
+    m_playAction = playMenu->addAction(m_playIcon, i18n("Play"));
+    m_playAction->setCheckable(true);
+    connect(m_playAction, SIGNAL(triggered()), this, SLOT(slotPlay()));
+    QAction *m_playSectionAction = playMenu->addAction(m_playIcon, i18n("Play Section"));
+    connect(m_playSectionAction, SIGNAL(triggered()), this, SLOT(slotPlay()));
+    QAction *m_loopSectionAction = playMenu->addAction(m_playIcon, i18n("Loop Section"));
+    connect(m_loopSectionAction, SIGNAL(triggered()), this, SLOT(slotPlay()));
+
+    QAction *m_fwd1Action = m_toolbar->addAction(KIcon("media-skip-forward"), i18n("Forward 1 frame"));
+    connect(m_fwd1Action, SIGNAL(triggered()), this, SLOT(slotForwardOneFrame()));
+    QAction *m_fwdAction = m_toolbar->addAction(KIcon("media-seek-forward"), i18n("Forward"));
+    connect(m_fwdAction, SIGNAL(triggered()), this, SLOT(slotForward()));
+
+    playButton->setDefaultAction(m_playAction);
+
+    m_timePos = new KRestrictedLine(this);
+    m_timePos->setInputMask("99:99:99:99");
+    m_toolbar->addWidget(m_timePos);
+
+    layout2->addWidget(m_toolbar);
+    ui.button_frame->setLayout(layout2);
+
+    //m_ruler->setPixelPerMark(3);
+
+
+    ui.video_frame->setAttribute(Qt::WA_PaintOnScreen);
     render = new Render(m_name, (int) ui.video_frame->winId(), -1, this);
     connect(render, SIGNAL(durationChanged(int)), this, SLOT(adjustRulerSize(int)));
     connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int)));
@@ -93,7 +124,7 @@ void Monitor::slotSeek(int pos) {
     render->seekToFrame(realPos);
     m_position = realPos;
     emit renderPosition(m_position);
-    ui.monitor_time->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position));
+    m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position));
 }
 
 void Monitor::slotRewind() {
@@ -101,8 +132,8 @@ void Monitor::slotRewind() {
     double speed = render->playSpeed();
     if (speed >= 0) render->play(-2);
     else render->play(speed * 2);
-    ui.button_play->setChecked(true);
-    ui.button_play->setIcon(m_pauseIcon);
+    m_playAction->setChecked(true);
+    m_playAction->setIcon(m_pauseIcon);
 }
 
 void Monitor::slotForward() {
@@ -110,8 +141,8 @@ void Monitor::slotForward() {
     double speed = render->playSpeed();
     if (speed <= 1) render->play(2);
     else render->play(speed * 2);
-    ui.button_play->setChecked(true);
-    ui.button_play->setIcon(m_pauseIcon);
+    m_playAction->setChecked(true);
+    m_playAction->setIcon(m_pauseIcon);
 }
 
 void Monitor::slotRewindOneFrame() {
@@ -121,7 +152,7 @@ void Monitor::slotRewindOneFrame() {
     m_position--;
     render->seekToFrame(m_position);
     emit renderPosition(m_position);
-    ui.monitor_time->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position));
+    m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position));
 }
 
 void Monitor::slotForwardOneFrame() {
@@ -131,14 +162,14 @@ void Monitor::slotForwardOneFrame() {
     m_position++;
     render->seekToFrame(m_position);
     emit renderPosition(m_position);
-    ui.monitor_time->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position));
+    m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position));
 }
 
 void Monitor::seekCursor(int pos) {
     if (!m_isActive) m_monitorManager->activateMonitor(m_name);
     int rulerPos = (int)(pos * m_scale);
     m_position = pos;
-    ui.monitor_time->setText(m_monitorManager->timecode().getTimecodeFromFrames(pos));
+    m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(pos));
     //kDebug() << "seek: " << pos << ", scale: " << m_scale;
     m_ruler->slotNewValue(rulerPos);
 }
@@ -147,9 +178,9 @@ void Monitor::rendererStopped(int pos) {
     int rulerPos = (int)(pos * m_scale);
     m_ruler->slotNewValue(rulerPos);
     m_position = pos;
-    ui.monitor_time->setText(m_monitorManager->timecode().getTimecodeFromFrames(pos));
-    ui.button_play->setChecked(false);
-    ui.button_play->setIcon(m_playIcon);
+    m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(pos));
+    m_playAction->setChecked(false);
+    m_playAction->setIcon(m_playIcon);
 }
 
 void Monitor::initMonitor() {
@@ -158,8 +189,10 @@ void Monitor::initMonitor() {
 
 // virtual
 void Monitor::resizeEvent(QResizeEvent * event) {
+    QWidget::resizeEvent(event);
     adjustRulerSize(-1);
-    if (render) render->askForRefresh();
+    if (render && m_isActive) render->doRefresh();
+    //
 }
 
 void Monitor::adjustRulerSize(int length) {
@@ -185,15 +218,18 @@ void Monitor::start() {
 }
 
 void Monitor::refreshMonitor(bool visible) {
-    if (visible && render) render->askForRefresh();
+    if (visible && render) {
+        if (!m_isActive) m_monitorManager->activateMonitor(m_name);
+        render->askForRefresh();
+    }
 }
 
 void Monitor::slotPlay() {
     if (render == NULL) return;
     if (!m_isActive) m_monitorManager->activateMonitor(m_name);
     render->switchPlay();
-    ui.button_play->setChecked(true);
-    ui.button_play->setIcon(m_pauseIcon);
+    m_playAction->setChecked(true);
+    m_playAction->setIcon(m_pauseIcon);
 }
 
 void Monitor::slotSetXml(const QDomElement &e) {
@@ -205,7 +241,7 @@ void Monitor::slotSetXml(const QDomElement &e) {
     westley.appendChild(e);
     render->setSceneList(doc, 0);
     m_ruler->slotNewValue(0);
-    ui.monitor_time->setText("00:00:00:00");
+    m_timePos->setText("00:00:00:00");
     m_position = 0;
 }
 
@@ -232,9 +268,11 @@ void Monitor::saveSceneList(QString path, QDomElement e) {
     render->saveSceneList(path, e);
 }
 
+/*  Commented out, takes huge CPU resources
+
 void Monitor::paintEvent(QPaintEvent * event) {
     if (render != NULL && m_isActive) render->doRefresh();
     QWidget::paintEvent(event);
-}
+}*/
 
 #include "monitor.moc"
index 6297738143de96805abaa7477884d0590ff893de..647478d23bdef05c017b634ace1f985f7236ce1c 100644 (file)
 #ifndef MONITOR_H
 #define MONITOR_H
 
+#include <QToolBar>
 #include <KIcon>
+#include <KAction>
+#include <KRestrictedLine>
 
 #include "ui_monitor_ui.h"
 #include "renderer.h"
@@ -39,11 +42,13 @@ public:
     void resetProfile(QString prof);
     QString name() const;
 
-    virtual void resizeEvent(QResizeEvent * event);
+
 protected:
     virtual void mousePressEvent(QMouseEvent * event);
     virtual void wheelEvent(QWheelEvent * event);
-    virtual void paintEvent(QPaintEvent * event);
+    virtual void resizeEvent(QResizeEvent * event);
+//    virtual void paintEvent(QPaintEvent * event);
+
 private:
     Ui::Monitor_UI ui;
     MonitorManager *m_monitorManager;
@@ -55,6 +60,9 @@ private:
     KIcon m_playIcon;
     KIcon m_pauseIcon;
     bool m_isActive;
+    QToolBar *m_toolbar;
+    KRestrictedLine *m_timePos;
+    QAction *m_playAction;
 
 private slots:
     void adjustRulerSize(int length);
index ee9672c4d584128a4913266483711819ac61de0d..c5717a63b94dce88213009c65582f742b2b98501 100644 (file)
@@ -30,7 +30,7 @@
 #include "clipitem.h"
 
 TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
-        : QWidget(parent), m_doc(doc), m_scale(1.0), m_projectTracks(0), m_projectDuration(0) {
+        : QWidget(parent), m_doc(doc), m_scale(1.0), m_projectTracks(0), m_projectDuration(0), m_currentZoom(4) {
 
     view = new Ui::TimeLine_UI();
     view->setupUi(this);
@@ -42,7 +42,7 @@ TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
     //m_scene->addRect(QRectF(0, 0, 100, 100), QPen(), QBrush(Qt::red));
 
     m_ruler = new CustomRuler(doc->timecode(), m_trackview);
-    QVBoxLayout *layout = new QVBoxLayout;
+    QHBoxLayout *layout = new QHBoxLayout;
     view->ruler_frame->setLayout(layout);
     int left_margin;
     int right_margin;
@@ -50,46 +50,50 @@ TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
     layout->setContentsMargins(left_margin, 0, right_margin, 0);
     layout->addWidget(m_ruler);
 
+    QHBoxLayout *tracksLayout = new QHBoxLayout;
+    tracksLayout->setContentsMargins(0, 0, 0, 0);
+    view->tracks_frame->setLayout(tracksLayout);
+
+    view->headers_area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+    view->headers_area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+
     m_headersLayout = new QVBoxLayout;
     m_headersLayout->setContentsMargins(0, 0, 0, 0);
-    view->headers_frame->setLayout(m_headersLayout);
+    m_headersLayout->setSpacing(0);
+    view->headers_container->setLayout(m_headersLayout);
+
+    connect(view->headers_area->verticalScrollBar(), SIGNAL(valueChanged(int)), m_trackview->verticalScrollBar(), SLOT(setValue(int)));
 
-    QVBoxLayout *tracksLayout = new QVBoxLayout;
-    tracksLayout->setContentsMargins(0, 0, 0, 0);
-    view->tracks_frame->setLayout(tracksLayout);
     tracksLayout->addWidget(m_trackview);
 
+    connect(m_trackview->verticalScrollBar(), SIGNAL(valueChanged(int)), view->headers_area->verticalScrollBar(), SLOT(setValue(int)));
+
     parseDocument(doc->toXml());
-    /*
-      TrackPanelClipMoveFunction *m_moveFunction = new TrackPanelClipMoveFunction(this);
-      registerFunction("move", m_moveFunction);
-      setEditMode("move");*/
 
-    connect(view->horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(slotChangeZoom(int)));
     connect(m_trackview, SIGNAL(cursorMoved(int, int)), m_ruler, SLOT(slotCursorMoved(int, int)));
-    connect(m_trackview, SIGNAL(zoomIn()), this, SLOT(slotZoomIn()));
-    connect(m_trackview, SIGNAL(zoomOut()), this, SLOT(slotZoomOut()));
     connect(m_trackview->horizontalScrollBar(), SIGNAL(valueChanged(int)), m_ruler, SLOT(slotMoveRuler(int)));
     connect(m_trackview, SIGNAL(mousePosition(int)), this, SIGNAL(mousePosition(int)));
     connect(m_trackview, SIGNAL(clipItemSelected(ClipItem*)), this, SLOT(slotClipItemSelected(ClipItem*)));
-    view->horizontalSlider->setValue(4);
-    m_currentZoom = view->horizontalSlider->value();
+    slotChangeZoom(m_currentZoom);
 }
 
+int TrackView::currentZoom() const {
+    return m_currentZoom;
+}
 
-int TrackView::duration() {
+int TrackView::duration() const {
     return m_projectDuration;
 }
 
-int TrackView::tracksNumber() {
+int TrackView::tracksNumber() const {
     return m_projectTracks;
 }
 
-int TrackView::inPoint() {
+int TrackView::inPoint() const {
     return m_ruler->inPoint();
 }
 
-int TrackView::outPoint() {
+int TrackView::outPoint() const {
     return m_ruler->outPoint();
 }
 
@@ -147,14 +151,6 @@ const double TrackView::zoomFactor() const {
     return m_scale;
 }
 
-void TrackView::slotZoomIn() {
-    view->horizontalSlider->setValue(view->horizontalSlider->value() - 1);
-}
-
-void TrackView::slotZoomOut() {
-    view->horizontalSlider->setValue(view->horizontalSlider->value() + 1);
-}
-
 const int TrackView::mapLocalToValue(int x) const {
     return (int) x * zoomFactor();
 }
@@ -170,9 +166,10 @@ void TrackView::refresh() {
 int TrackView::slotAddAudioTrack(int ix, QDomElement xml) {
     kDebug() << "*************  ADD AUDIO TRACK " << ix;
     m_trackview->addTrack();
-    HeaderTrack *header = new HeaderTrack();
+    HeaderTrack *header = new HeaderTrack(ix);
     //m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop);
     m_headersLayout->addWidget(header); //, ix, Qt::AlignTop);
+    view->headers_container->adjustSize();
     //documentTracks.insert(ix, track);
     return 0;
     //track->show();
@@ -180,7 +177,7 @@ int TrackView::slotAddAudioTrack(int ix, QDomElement xml) {
 
 int TrackView::slotAddVideoTrack(int ix, QDomElement xml) {
     m_trackview->addTrack();
-    HeaderTrack *header = new HeaderTrack();
+    HeaderTrack *header = new HeaderTrack(ix);
     int trackTop = 50 * ix;
     int trackBottom = trackTop + 50;
     // parse track
@@ -206,6 +203,7 @@ int TrackView::slotAddVideoTrack(int ix, QDomElement xml) {
 
     //m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop);
     m_headersLayout->addWidget(header); //, ix, Qt::AlignTop);
+    view->headers_container->adjustSize();
     //documentTracks.insert(ix, track);
     kDebug() << "*************  ADD VIDEO TRACK " << ix << ", DURATION: " << position;
     return position;
index 09304cb76b1045098e745f30995751f2463f0e9d..43c1b5110dc24a341b17e3a93dc808f1618f45f3 100644 (file)
@@ -48,15 +48,17 @@ public:
     const QString & editMode() const;
     QGraphicsScene *projectScene();
     CustomTrackView *projectView();
-    int duration();
-    int tracksNumber();
+    int duration() const;
+    int tracksNumber() const;
     KdenliveDoc *document();
     void refresh() ;
-    int outPoint();
-    int inPoint();
+    int outPoint() const;
+    int inPoint() const;
+    int currentZoom() const;
 
 public slots:
     void slotDeleteClip(int clipId);
+    void slotChangeZoom(int factor);
 
 private:
     Ui::TimeLine_UI *view;
@@ -69,7 +71,6 @@ private:
     QGraphicsScene *m_scene;
     uint m_currentZoom;
 
-
     KdenliveDoc *m_doc;
     QVBoxLayout *m_tracksLayout;
     QVBoxLayout *m_headersLayout;
@@ -81,12 +82,10 @@ private:
     int slotAddVideoTrack(int ix, QDomElement xml);
 
 private slots:
-    void slotChangeZoom(int factor);
-    void slotZoomIn();
-    void slotZoomOut();
     void setCursorPos(int pos);
     void moveCursorPos(int pos);
     void slotClipItemSelected(ClipItem*);
+
 signals:
     void mousePosition(int);
     void cursorMoved();
index dcfa70b907996e510e1dd570fe4edf727c12d357..9e85a38352808667e5ea82922b90a0c14d79f8d1 100644 (file)
@@ -5,34 +5,24 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>339</width>
-    <height>216</height>
+    <width>237</width>
+    <height>177</height>
    </rect>
   </property>
-  <property name="windowTitle" >
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout" >
-   <property name="leftMargin" >
-    <number>0</number>
-   </property>
-   <property name="topMargin" >
-    <number>0</number>
-   </property>
-   <property name="rightMargin" >
-    <number>0</number>
-   </property>
-   <property name="bottomMargin" >
+  <layout class="QGridLayout" name="gridLayout" >
+   <property name="margin" >
     <number>0</number>
    </property>
-   <property name="horizontalSpacing" >
-    <number>0</number>
-   </property>
-   <property name="verticalSpacing" >
+   <property name="spacing" >
     <number>0</number>
    </property>
    <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" >
       <number>0</number>
      </property>
      </property>
     </widget>
    </item>
-   <item row="2" column="0" >
-    <layout class="QHBoxLayout" >
-     <property name="spacing" >
-      <number>0</number>
-     </property>
-     <item>
-      <widget class="KPushButton" name="button_rew" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>40</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="flat" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="KPushButton" name="button_rew1" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>40</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="flat" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="KPushButton" name="button_play" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>40</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="checkable" >
-        <bool>true</bool>
-       </property>
-       <property name="checked" >
-        <bool>false</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="KPushButton" name="button_fwd1" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>40</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="flat" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="KPushButton" name="button_fwd" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>40</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="flat" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="KPushButton" name="kpushbutton_20" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>40</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="flat" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item row="3" column="0" >
-    <layout class="QHBoxLayout" >
-     <property name="spacing" >
-      <number>0</number>
+   <item row="2" column="0" colspan="2" >
+    <widget class="QFrame" name="button_frame" >
+     <property name="sizePolicy" >
+      <sizepolicy vsizetype="Maximum" hsizetype="Preferred" >
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
      </property>
-     <item>
-      <widget class="KPushButton" name="kpushbutton_9" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>40</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="flat" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="KPushButton" name="kpushbutton_10" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>40</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="flat" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="KPushButton" name="kpushbutton_11" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>40</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="flat" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="KPushButton" name="kpushbutton_12" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>40</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="flat" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="KPushButton" name="kpushbutton_13" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>40</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="flat" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="KPushButton" name="kpushbutton_14" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>40</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="flat" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item row="3" column="1" >
-    <widget class="KRestrictedLine" name="monitor_time" >
-     <property name="inputMask" >
-      <string>99:99:99:99; </string>
+     <property name="minimumSize" >
+      <size>
+       <width>16</width>
+       <height>15</height>
+      </size>
      </property>
-     <property name="validChars" >
-      <string/>
+     <property name="lineWidth" >
+      <number>0</number>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
- <customwidgets>
-  <customwidget>
-   <class>KPushButton</class>
-   <extends>QPushButton</extends>
-   <header>kpushbutton.h</header>
-  </customwidget>
-  <customwidget>
-   <class>KRestrictedLine</class>
-   <extends>KLineEdit</extends>
-   <header>krestrictedline.h</header>
-  </customwidget>
- </customwidgets>
  <resources/>
  <connections/>
 </ui>
index cf3c75008dbfff60f48658d06b9a8bf17ca2f22b..2099f849564a50c1b0508498f2852b562c8b1c39 100644 (file)
@@ -5,57 +5,42 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>308</width>
-    <height>130</height>
+    <width>341</width>
+    <height>189</height>
    </rect>
   </property>
-  <layout class="QGridLayout" >
-   <property name="leftMargin" >
+  <layout class="QGridLayout" name="gridLayout" >
+   <property name="margin" >
     <number>0</number>
    </property>
-   <property name="topMargin" >
-    <number>0</number>
-   </property>
-   <property name="rightMargin" >
-    <number>0</number>
-   </property>
-   <property name="bottomMargin" >
-    <number>0</number>
-   </property>
-   <property name="horizontalSpacing" >
-    <number>0</number>
-   </property>
-   <property name="verticalSpacing" >
+   <property name="spacing" >
     <number>0</number>
    </property>
    <item row="0" column="0" >
-    <widget class="QSlider" name="horizontalSlider" >
-     <property name="maximumSize" >
+    <widget class="QFrame" name="ruler_frame_2" >
+     <property name="sizePolicy" >
+      <sizepolicy vsizetype="Preferred" hsizetype="MinimumExpanding" >
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize" >
       <size>
-       <width>80</width>
-       <height>16777215</height>
+       <width>25</width>
+       <height>0</height>
       </size>
      </property>
-     <property name="minimum" >
-      <number>0</number>
-     </property>
-     <property name="maximum" >
-      <number>13</number>
-     </property>
-     <property name="singleStep" >
-      <number>1</number>
-     </property>
-     <property name="pageStep" >
-      <number>3</number>
-     </property>
-     <property name="value" >
-      <number>5</number>
+     <property name="maximumSize" >
+      <size>
+       <width>50</width>
+       <height>20</height>
+      </size>
      </property>
-     <property name="sliderPosition" >
-      <number>5</number>
+     <property name="frameShadow" >
+      <enum>QFrame::Raised</enum>
      </property>
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
+     <property name="lineWidth" >
+      <number>0</number>
      </property>
     </widget>
    </item>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="frameShape" >
-      <enum>QFrame::StyledPanel</enum>
+     <property name="maximumSize" >
+      <size>
+       <width>16777215</width>
+       <height>20</height>
+      </size>
      </property>
      <property name="frameShadow" >
       <enum>QFrame::Raised</enum>
      </property>
+     <property name="lineWidth" >
+      <number>0</number>
+     </property>
     </widget>
    </item>
    <item row="1" column="0" >
-    <widget class="QFrame" name="headers_frame" >
+    <widget class="QScrollArea" name="headers_area" >
      <property name="minimumSize" >
       <size>
-       <width>80</width>
-       <height>16</height>
+       <width>50</width>
+       <height>0</height>
       </size>
      </property>
      <property name="maximumSize" >
       <size>
-       <width>80</width>
+       <width>50</width>
        <height>16777215</height>
       </size>
      </property>
-     <property name="frameShape" >
-      <enum>QFrame::StyledPanel</enum>
-     </property>
-     <property name="frameShadow" >
-      <enum>QFrame::Raised</enum>
-     </property>
-     <property name="lineWidth" >
-      <number>0</number>
-     </property>
+     <property name="focusPolicy" >
+      <enum>Qt::NoFocus</enum>
+     </property>
+     <property name="widgetResizable" >
+      <bool>true</bool>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+     </property>
+     <widget class="QWidget" name="scrollAreaWidgetContents" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>44</width>
+        <height>173</height>
+       </rect>
+      </property>
+      <layout class="QGridLayout" name="gridLayout_2" >
+       <item row="0" column="0" >
+        <widget class="QWidget" native="1" name="headers_container" />
+       </item>
+       <item row="1" column="0" >
+        <spacer name="verticalSpacer" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>20</width>
+           <height>148</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
     </widget>
    </item>
    <item row="1" column="1" >
index f732d8b2712c218b968cde6bcc952dfdb4ceb3c5..324db7b50c8c1efa1ffd6bf13293fe965d81da18 100644 (file)
@@ -5,7 +5,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>58</width>
+    <width>183</width>
     <height>30</height>
    </rect>
   </property>
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout" >
+   <property name="verticalSpacing" >
+    <number>0</number>
+   </property>
    <property name="margin" >
     <number>0</number>
    </property>
    <item row="0" column="0" >
+    <widget class="QSlider" name="zoom_slider" >
+     <property name="minimumSize" >
+      <size>
+       <width>70</width>
+       <height>0</height>
+      </size>
+     </property>
+     <property name="maximumSize" >
+      <size>
+       <width>100</width>
+       <height>16777215</height>
+      </size>
+     </property>
+     <property name="maximum" >
+      <number>13</number>
+     </property>
+     <property name="pageStep" >
+      <number>1</number>
+     </property>
+     <property name="value" >
+      <number>4</number>
+     </property>
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1" >
+    <widget class="QToolButton" name="buttonFitZoom" >
+     <property name="text" >
+      <string>V</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="2" >
+    <spacer name="horizontalSpacer" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>13</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="0" column="3" >
     <widget class="QToolButton" name="buttonVideo" >
      <property name="text" >
       <string>V</string>
      </property>
     </widget>
    </item>
-   <item row="0" column="1" >
+   <item row="0" column="4" >
     <widget class="QToolButton" name="buttonAudio" >
      <property name="text" >
       <string>A</string>