changeset 393:5137db55f00b

More work towards the editor ..
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 19 Oct 2012 05:50:11 +0300
parents fc9b476c46de
children 412082d5babc
files edgui.cpp edmain.cpp edmain.h edtimeline.cpp edtimeline.h edwaveform.cpp edwaveform.h
diffstat 7 files changed, 206 insertions(+), 71 deletions(-) [+]
line wrap: on
line diff
--- a/edgui.cpp	Fri Oct 19 05:26:34 2012 +0300
+++ b/edgui.cpp	Fri Oct 19 05:50:11 2012 +0300
@@ -489,13 +489,16 @@
     timelineScrollBar = new QScrollBar(Qt::Horizontal);
     connect(timelineScrollBar, SIGNAL(valueChanged(int)), this, SLOT(actionTimelineScrollChanged(int)));
     
-    timelineAudioTrack = new WaveTrackView();
+    timelineAudioTrack = new QWaveTrackView();
     connect(timelineAudioTrack, SIGNAL(offsetChanged(float)), this, SLOT(actionOffsetChanged(float)));
     connect(timelineAudioTrack, SIGNAL(timeChanged(float)), this, SLOT(actionTimeChanged(float)));
 
+    timelineView = new QTimelineView();
+
     demoView = new SWDemoView(this);
 
     verticalSplitter->addLayout(horizSplitter);
+    verticalSplitter->addWidget(timelineTrack);
     verticalSplitter->addWidget(timelineAudioTrack);
     verticalSplitter->addWidget(timelineScrollBar);
 
--- a/edmain.cpp	Fri Oct 19 05:26:34 2012 +0300
+++ b/edmain.cpp	Fri Oct 19 05:50:11 2012 +0300
@@ -101,7 +101,7 @@
 
     changed = FALSE;
     initSDL = FALSE;
-    tl = NULL;
+    currTimeline = NULL;
     memset(&engine, 0, sizeof(engine));
 
     // Pre-initialization
@@ -261,9 +261,22 @@
 
 void DemoEditor::updateTimelineView()
 {
+    demoView->setEngineData(&engine);    
+
+    timelineAudioTrack->setWaveform(
+        engine.audioRes->rdata, engine.audioRes->rdataSize,
+        engine.optAfmt.format, engine.optAfmt.channels,
+        engine.optAfmt.freq);
+
     timelineAudioTrack->setOffset(currViewOffset);
     timelineAudioTrack->setScale(currViewScale);
-//    timelineAudioTrack->setTime(currFrameTime);
+    
+    if (currTimeline != NULL)
+        timelineView->setTrack(currTimeline->tl);
+
+    timelineView->setTime(currFrameTime);
+    timelineView->setOffset(currViewOffset);
+    timelineView->setScale(currViewScale);
 
     timelineScrollBar->setRange(0, getTimelineDuration() - timelineAudioTrack->getScaledWidth());
     timelineScrollBar->setValue(currViewOffset);
@@ -332,11 +345,6 @@
     }
 
     // Etc.
-    demoView->setEngineData(&engine);    
-    timelineAudioTrack->setWaveform(
-        engine.audioRes->rdata, engine.audioRes->rdataSize,
-        engine.optAfmt.format, engine.optAfmt.channels,
-        engine.optAfmt.freq);
 
     updateTimelineView();
     updateMenuStates();
@@ -447,7 +455,7 @@
         delete undoHistory.takeFirst();
     }
     
-    TimelineObject *copy = new TimelineObject(tl);
+    TimelineObject *copy = new TimelineObject(currTimeline);
     copy->state = description;
     undoHistory.append(copy);
 }
@@ -455,7 +463,7 @@
 
 void DemoEditor::historyTop()
 {
-    TimelineObject *copy = new TimelineObject(tl);
+    TimelineObject *copy = new TimelineObject(currTimeline);
     copy->state = "-";
     undoHistory.append(copy);
 
@@ -480,8 +488,8 @@
     if (undoHistoryPos >= 0 && undoHistoryPos < undoHistory.size() - 1)
     {
         undoHistoryPos++;
-        delete tl;
-        tl = new TimelineObject(undoHistory.at(undoHistoryPos));
+        delete currTimeline;
+        currTimeline = new TimelineObject(undoHistory.at(undoHistoryPos));
         changed = true;
         
         updateMenuStates();
@@ -495,8 +503,8 @@
     if (undoHistoryPos > 0 && undoHistory.size() > 1)
     {
         undoHistoryPos--;
-        delete tl;
-        tl = new TimelineObject(undoHistory.at(undoHistoryPos));
+        delete currTimeline;
+        currTimeline = new TimelineObject(undoHistory.at(undoHistoryPos));
         changed = true;
         
         updateMenuStates();
--- a/edmain.h	Fri Oct 19 05:26:34 2012 +0300
+++ b/edmain.h	Fri Oct 19 05:50:11 2012 +0300
@@ -22,6 +22,7 @@
 #include "edtlobj.h"
 #include "edview.h"
 #include "edwaveform.h"
+#include "edtimeline.h"
 #include <QDebug>
 #include <QFile>
 #include <QApplication>
@@ -73,7 +74,8 @@
 //    QAction *menuActCut, *menuActCopy, *menuActPaste, *menuActDelete;
     QActionGroup *actGroupControls;
     QScrollBar *timelineScrollBar;
-    WaveTrackView *timelineAudioTrack;
+    QWaveTrackView *timelineAudioTrack;
+    QTimelineView *timelineView;
     GLDemoView *demoView;
     
     
--- a/edtimeline.cpp	Fri Oct 19 05:26:34 2012 +0300
+++ b/edtimeline.cpp	Fri Oct 19 05:50:11 2012 +0300
@@ -2,7 +2,7 @@
 #include "edtimeline.h"
 
 
-TimelineTrackView::TimelineTrackView(QWidget *parent) : QWidget(parent)
+QTimelineTrackDisplay::QTimelineTrackDisplay(QWidget *parent) : QWidget(parent)
 {
     track = NULL;
     time = offs = 0;
@@ -12,46 +12,40 @@
 }
 
 
-QSize TimelineTrackView::minimumSizeHint() const
+QSize QTimelineTrackDisplay::minimumSizeHint() const
 {
     return QSize(100, 60);
 }
 
 
-QSize TimelineTrackView::sizeHint() const
+QSize QTimelineTrackDisplay::sizeHint() const
 {
     return QSize(600, 60);
 }
 
 
-void TimelineTrackView::setTrack(DMTimelineTrack *mtrack)
+void QTimelineTrackDisplay::setTrack(DMTimelineTrack *mtrack)
 {
     track = mtrack;
     update();
 }
 
 
-DMTimelineTrack * TimelineTrackView::getTrack()
-{
-    return track;
-}
-
-
-void TimelineTrackView::setTime(const int mtime)
+void QTimelineTrackDisplay::setTime(const int mtime)
 {
     time = mtime;
     update();
 }
 
 
-void TimelineTrackView::setOffset(const int moffs)
+void QTimelineTrackDisplay::setOffset(const int moffs)
 {
     offs = moffs;
     update();
 }
 
 
-void TimelineTrackView::setScale(const float mscale)
+void QTimelineTrackDisplay::setScale(const float mscale)
 {
     if (mscale > 0.05)
         scale = mscale;
@@ -59,8 +53,11 @@
 }
 
 
-void TimelineTrackView::paintEvent(QPaintEvent *)
+void QTimelineTrackDisplay::paintEvent(QPaintEvent *)
 {
+    if (track == NULL)
+        return;
+
     QColor eventColor(150, 150, 150);
     QColor markerColor(255,255,255);
 
@@ -85,7 +82,7 @@
 }
 
 
-void TimelineTrackView::mousePressEvent(QMouseEvent *ev)
+void QTimelineTrackDisplay::mousePressEvent(QMouseEvent *ev)
 {
 /*
     if (ev->button() == Qt::LeftButton)
@@ -97,7 +94,7 @@
 }
 
 
-void TimelineTrackView::mouseMoveEvent(QMouseEvent *ev)
+void QTimelineTrackDisplay::mouseMoveEvent(QMouseEvent *ev)
 {
 /*
     if ((ev->buttons() & Qt::LeftButton) && scribbling)
@@ -106,7 +103,7 @@
 }
 
 
-void TimelineTrackView::mouseReleaseEvent(QMouseEvent *ev)
+void QTimelineTrackDisplay::mouseReleaseEvent(QMouseEvent *ev)
 {
 /*
     if (ev->button() == Qt::LeftButton && scribbling)
@@ -116,3 +113,80 @@
     }
 */
 }
+
+
+QTimelineTrackView::QTimelineTrackView(QWidget *parent) : QWidget(parent)
+{
+    QHBoxLayout *mainLayout = new QHBoxLayout(this);
+    mainLayout->setMargin(0);
+    track = new QTimelineTrackDisplay(this);
+
+    QFrame *infoLayoutContainer = new QFrame(this);
+    infoLayoutContainer->setFrameStyle(QFrame::StyledPanel | QFrame::Plain);
+    infoLayoutContainer->setLineWidth(2);
+//    infoLayoutContainer->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Ignored);
+//    infoLayoutContainer->resize(250, 60);
+
+    QVBoxLayout *infoLayout = new QVBoxLayout(infoLayoutContainer);
+    infoLayout->setMargin(0);
+//    QVBoxLayout *infoLayout = new QVBoxLayout();
+    infoName = new QLabel("-");
+    infoName->setStyleSheet("QLabel { background-color: black; color: white; padding: 2px; }");
+    infoLayout->addWidget(infoName);
+
+
+    enabledCheck = new QCheckBox("Enabled");
+    infoLayout->addWidget(enabledCheck);
+    connect(enabledCheck, SIGNAL(toggled(bool)), this, SLOT(slotEnabledChanged(bool)));
+    
+    infoData = new QLabel();
+    infoData->setStyleSheet("QLabel { padding: 2px; }");
+    infoLayout->addWidget(infoData);
+
+    mainLayout->addWidget(infoLayoutContainer);
+//    mainLayout->addLayout(infoLayout);
+    mainLayout->addWidget(track);
+
+}
+
+
+void QTimelineTrackView::setTrack(DMTimelineTrack *mtrack)
+{
+    if (mtrack != NULL)
+    {
+        infoName->setText(QString(mtrack->name));
+        infoData->setText("-");
+//        infoData->setText(QString("<b>%1</b>, <b>%2</b> ch, <b>%3</b> Hz").arg(fmt).arg(mchannels).arg(mfreq));
+    }
+    else
+    {
+        infoData->setText("-");
+    }
+    track->setTrack(mtrack);
+    update();
+}
+
+
+void QTimelineTrackView::setTime(const int mtime)
+{
+    track->setTime(mtime);
+}
+
+
+void QTimelineTrackView::setOffset(const int moffs)
+{
+    track->setOffset(moffs);
+}
+
+
+void QTimelineTrackView::setScale(const float mscale)
+{
+    track->setScale(mscale);
+}
+
+
+void QTimelineTrackView::slotEnabledChanged(bool value)
+{
+    track->track->enabled = value;
+//    emit enabledChanged(value);
+}
--- a/edtimeline.h	Fri Oct 19 05:26:34 2012 +0300
+++ b/edtimeline.h	Fri Oct 19 05:50:11 2012 +0300
@@ -2,16 +2,22 @@
 #define EDTIMELINE_H
 
 #include <QWidget>
+#include <QCheckBox>
+#include <QLabel>
 #include "dmengine.h"
 
-class TimelineTrackView : public QWidget
+
+class QTimelineTrackDisplay : public QWidget
 {
     Q_OBJECT
 
 public:
-    TimelineTrackView(QWidget *parent = 0);
+    DMTimelineTrack *track;
+
+    QTimelineTrackDisplay(QWidget *parent = 0);
     void setTrack(DMTimelineTrack *mtrack);
-    DMTimelineTrack * getTrack();
+
+    float getTimeFromCoord(float value);
 
     void setTime(const int mtime);
     void setOffset(const int moffs);
@@ -28,9 +34,52 @@
     void paintEvent(QPaintEvent *event);
 
 private:
+    bool dragging;
+    QPoint dragPoint;
+    int dragOffs; // milliseconds
+
     float scale;
     int time, offs;
-    DMTimelineTrack *track;
+};
+
+
+class QTimelineTrackView : public QWidget
+{
+    Q_OBJECT
+
+private:
+    QLabel *infoName, *infoData;
+    QCheckBox *enabledCheck;
+
+public:
+    QTimelineTrackDisplay *track;
+
+    QTimelineTrackView(QWidget *parent = 0);
+    void setTrack(DMTimelineTrack *mtrack);
+
+private slots:
+    void slotEnabledChanged(bool);
+
+//signals:
+//    void enabledChanged(bool);
+};
+
+
+class QTimelineView : public QWidget
+{
+    Q_OBJECT
+
+private:
+    DMTimeline *tl;
+    QList<QTimelineTrackView *> tracks;
+
+public:
+    QTimelineView(QWidget *parent = 0);
+    void setTimeline(DMTimeline *mtl);
+
+    void setTime(const int mtime);
+    void setOffset(const int moffs);
+    void setScale(const float mscale);
 };
 
 #endif
--- a/edwaveform.cpp	Fri Oct 19 05:26:34 2012 +0300
+++ b/edwaveform.cpp	Fri Oct 19 05:50:11 2012 +0300
@@ -3,7 +3,7 @@
 #include "edwaveform.h"
 
 
-WaveTrackDisplay::WaveTrackDisplay(QWidget *parent) : QWidget(parent)
+QWaveTrackDisplay::QWaveTrackDisplay(QWidget *parent) : QWidget(parent)
 {
     data      = NULL;
     size      = 0;
@@ -18,7 +18,7 @@
 }
 
 
-void WaveTrackDisplay::setWaveform(void *mdata, int msize, int mformat, int mchannels, int mfreq)
+void QWaveTrackDisplay::setWaveform(void *mdata, int msize, int mformat, int mchannels, int mfreq)
 {
     data     = mdata;
     size     = msize;
@@ -36,7 +36,7 @@
 }
 
 
-int WaveTrackDisplay::getBps()
+int QWaveTrackDisplay::getBps()
 {
     int bps = channels;
     switch (format)
@@ -54,27 +54,26 @@
 }
 
 
-float WaveTrackDisplay::getDuration()
+float QWaveTrackDisplay::getDuration()
 {
     return duration;
 }
 
 
-float WaveTrackDisplay::getTimeScale(float value)
+float QWaveTrackDisplay::getTimeScale(float value)
 {
     return (value * scale * (float) freq) / 1000.0f;
 }
 
 
-float WaveTrackDisplay::getTimeFromCoord(float value)
+float QWaveTrackDisplay::getTimeFromCoord(float value)
 {
     return value * scale;
 }
 
 
-void WaveTrackDisplay::setTime(const float mtime)
+void QWaveTrackDisplay::setTime(const float mtime)
 {
-    fprintf(stderr, "setTime(%1.5f)\n", mtime);
     if (time != mtime && mtime >= 0 && mtime < duration)
     {
         time = mtime;
@@ -84,7 +83,7 @@
 }
 
 
-void WaveTrackDisplay::setOffset(const float moffs)
+void QWaveTrackDisplay::setOffset(const float moffs)
 {
     if (offs != moffs && moffs >= 0 && moffs < getDuration())
     {
@@ -95,7 +94,7 @@
 }
 
 
-void WaveTrackDisplay::setScale(const float mscale)
+void QWaveTrackDisplay::setScale(const float mscale)
 {
     if (mscale > 0.05)
         scale = mscale;
@@ -103,25 +102,25 @@
 }
 
 
-float WaveTrackDisplay::getScaledWidth()
+float QWaveTrackDisplay::getScaledWidth()
 {
     return getTimeScale(width());
 }
 
 
-float WaveTrackDisplay::getTime()
+float QWaveTrackDisplay::getTime()
 {
     return time;
 }
 
 
-float WaveTrackDisplay::getOffset()
+float QWaveTrackDisplay::getOffset()
 {
     return offs;
 }
 
 
-void WaveTrackDisplay::paintEvent(QPaintEvent *)
+void QWaveTrackDisplay::paintEvent(QPaintEvent *)
 {
     QColor waveColor(0, 150, 0);
     QColor waveCenterLine(0, 0, 0);
@@ -204,7 +203,7 @@
 }
 
 
-void WaveTrackDisplay::mousePressEvent(QMouseEvent *ev)
+void QWaveTrackDisplay::mousePressEvent(QMouseEvent *ev)
 {
     if (ev->button() == Qt::LeftButton)
     {
@@ -215,7 +214,7 @@
 }
 
 
-void WaveTrackDisplay::mouseMoveEvent(QMouseEvent *ev)
+void QWaveTrackDisplay::mouseMoveEvent(QMouseEvent *ev)
 {
     if ((ev->buttons() & Qt::LeftButton) && ev->pos().x() != dragPoint.x())
     {
@@ -225,7 +224,7 @@
 }
 
 
-void WaveTrackDisplay::mouseReleaseEvent(QMouseEvent *ev)
+void QWaveTrackDisplay::mouseReleaseEvent(QMouseEvent *ev)
 {
     if (ev->button() == Qt::LeftButton)
     {
@@ -239,11 +238,11 @@
 }
 
 
-WaveTrackView::WaveTrackView(QWidget *parent) : QWidget(parent)
+QWaveTrackView::QWaveTrackView(QWidget *parent) : QWidget(parent)
 {
     QHBoxLayout *mainLayout = new QHBoxLayout(this);
     mainLayout->setMargin(0);
-    wave = new WaveTrackDisplay(this);
+    wave = new QWaveTrackDisplay(this);
 
     QFrame *infoLayoutContainer = new QFrame(this);
     infoLayoutContainer->setFrameStyle(QFrame::StyledPanel | QFrame::Plain);
@@ -271,7 +270,7 @@
 }
 
 
-void WaveTrackView::setWaveform(void *mdata, int msize, int mformat, int mchannels, int mfreq)
+void QWaveTrackView::setWaveform(void *mdata, int msize, int mformat, int mchannels, int mfreq)
 {
     QString fmt;
     switch (mformat)
@@ -288,62 +287,62 @@
 }
 
 
-void WaveTrackView::setName(QString name)
+void QWaveTrackView::setName(QString name)
 {
     infoName->setText(name);
     update();
 }
 
 
-void WaveTrackView::setTime(const float mtime)
+void QWaveTrackView::setTime(const float mtime)
 {
     wave->setTime(mtime);
 }
 
 
-void WaveTrackView::setOffset(const float moffs)
+void QWaveTrackView::setOffset(const float moffs)
 {
     wave->setOffset(moffs);
 }
 
 
-void WaveTrackView::setScale(const float mscale)
+void QWaveTrackView::setScale(const float mscale)
 {
     wave->setScale(mscale);
 }
 
 
-float WaveTrackView::getTime()
+float QWaveTrackView::getTime()
 {
     return wave->getTime();
 }
 
 
-float WaveTrackView::getOffset()
+float QWaveTrackView::getOffset()
 {
     return wave->getOffset();
 }
 
 
-float WaveTrackView::getScaledWidth()
+float QWaveTrackView::getScaledWidth()
 {
     return wave->getScaledWidth();
 }
 
 
-void WaveTrackView::slotTimeChanged(float value)
+void QWaveTrackView::slotTimeChanged(float value)
 {
     emit timeChanged(value);
 }
 
 
-void WaveTrackView::slotOffsetChanged(float value)
+void QWaveTrackView::slotOffsetChanged(float value)
 {
     emit offsetChanged(value);
 }
 
 
-float WaveTrackView::getDuration()
+float QWaveTrackView::getDuration()
 {
     return wave->getDuration();
 }
--- a/edwaveform.h	Fri Oct 19 05:26:34 2012 +0300
+++ b/edwaveform.h	Fri Oct 19 05:50:11 2012 +0300
@@ -5,12 +5,12 @@
 #include <QLabel>
 #include "dmengine.h"
 
-class WaveTrackDisplay : public QWidget
+class QWaveTrackDisplay : public QWidget
 {
     Q_OBJECT
 
 public:
-    WaveTrackDisplay(QWidget *parent = 0);
+    QWaveTrackDisplay(QWidget *parent = 0);
 
     void setWaveform(void *mdata, int msize, int mformat, int mchannels, int mfreq);
     float getScaledWidth();
@@ -60,17 +60,17 @@
 };
 
 
-class WaveTrackView : public QWidget
+class QWaveTrackView : public QWidget
 {
     Q_OBJECT
 
 private:
-    WaveTrackDisplay *wave;
+    QWaveTrackDisplay *wave;
     QLabel *infoName, *infoData;
 
 public:
 
-    WaveTrackView(QWidget *parent = 0);
+    QWaveTrackView(QWidget *parent = 0);
     void setWaveform(void *mdata, int mlen, int mformat, int mchannels, int mfreq);
     void setName(QString name);
     void setTime(const float mtime);