Mercurial > hg > dmlib
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);