Mercurial > hg > dmlib
changeset 397:9993873ff655
More work towards editor.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 19 Oct 2012 07:22:09 +0300 |
parents | 1712cc35e9a1 |
children | 8660c6005032 |
files | edgui.cpp edmain.cpp edmain.h edtimeline.cpp edtimeline.h edtlobj.cpp |
diffstat | 6 files changed, 140 insertions(+), 54 deletions(-) [+] |
line wrap: on
line diff
--- a/edgui.cpp Fri Oct 19 07:21:54 2012 +0300 +++ b/edgui.cpp Fri Oct 19 07:22:09 2012 +0300 @@ -21,10 +21,10 @@ // Set window title based on document filename and changed status QString name; - if (!tl || tl->filename.isEmpty()) + if (!currTimeline || currTimeline->filename.isEmpty()) name = DOC_DEF_FILENAME; else - name = tl->filename; + name = currTimeline->filename; if (changed) name = "*" + name; @@ -32,14 +32,9 @@ setWindowTitle(name + " - " + QCoreApplication::applicationName()); // Enable menu items based on states -#if 0 - menuActValidate->setEnabled(tl->get); - menuActSave->setEnabled(tl->changed || changed); - menuActSaveAs->setEnabled(tl->changed || changed); -#else - menuActSave->setEnabled(false); - menuActSaveAs->setEnabled(false); -#endif + menuActSave->setEnabled(currTimeline->changed || changed); + menuActSaveAs->setEnabled(currTimeline->changed || changed); + // Enable undo/redo items and set their texts based on history status int historyLevels = undoHistory.size(); @@ -141,7 +136,7 @@ { QMessageBox::information(this, "Document saved", - "The document was saved as " + tl->filename); + "The document was saved as " + currTimeline->filename); okToCreate = true; } @@ -177,7 +172,7 @@ { QMessageBox::information(this, "Document saved", - "The document was saved as " + tl->filename); + "The document was saved as " + currTimeline->filename); okToOpen = true; } @@ -205,9 +200,9 @@ void DemoEditor::actionFileSaveAs() { - if (!tl) + if (!currTimeline) { - qDebug() << "DemoEditor::actionFileSaveAs(): tl == null"; + qDebug() << "DemoEditor::actionFileSaveAs(): currTimeline == null"; return; } @@ -219,7 +214,7 @@ fdialog.setDefaultSuffix("demo"); fdialog.setConfirmOverwrite(true); - fdialog.selectFile(tl->filename.isEmpty() ? tl->filename : DOC_DEF_FILENAME); + fdialog.selectFile(currTimeline->filename.isEmpty() ? currTimeline->filename : DOC_DEF_FILENAME); if (fdialog.exec()) saveToFile(fdialog.selectedFiles()[0]); @@ -228,15 +223,15 @@ void DemoEditor::actionFileSave() { - if (!tl) + if (!currTimeline) { - qDebug() << "DemoEditor::actionFileSave(): tl == null"; + qDebug() << "DemoEditor::actionFileSave(): currTimeline == null"; return; } // If filename has been set, save .. otherwise go to save as - if (!tl->filename.isEmpty()) - saveToFile(tl->filename); + if (!currTimeline->filename.isEmpty()) + saveToFile(currTimeline->filename); else actionFileSaveAs(); } @@ -494,11 +489,12 @@ connect(timelineAudioTrack, SIGNAL(timeChanged(float)), this, SLOT(actionTimeChanged(float))); timelineView = new QTimelineView(); + connect(timelineView, SIGNAL(timelineChanged()), this, SLOT(actionTimelineChanged())); demoView = new SWDemoView(this); verticalSplitter->addLayout(horizSplitter); - verticalSplitter->addWidget(timelineTrack); + verticalSplitter->addWidget(timelineView); verticalSplitter->addWidget(timelineAudioTrack); verticalSplitter->addWidget(timelineScrollBar);
--- a/edmain.cpp Fri Oct 19 07:21:54 2012 +0300 +++ b/edmain.cpp Fri Oct 19 07:22:09 2012 +0300 @@ -99,10 +99,10 @@ resize(1024, 768); setWindowTitle(QCoreApplication::applicationName()); + memset(&engine, 0, sizeof(engine)); changed = FALSE; initSDL = FALSE; currTimeline = NULL; - memset(&engine, 0, sizeof(engine)); // Pre-initialization if ((err = demoPreInit(&engine)) != DMERR_OK) @@ -208,6 +208,10 @@ // Setup GUI elements createMainGUI(); createNewFile(); + DMTimelineTrack *tr = NULL; + dmTimelineAddTrack(currTimeline->tl, &tr, "Penis"); + + timelineView->setTimeline(currTimeline); settingsRestore(); @@ -224,7 +228,6 @@ settingsSave(); delete demoView; - delete tl; historyReset(); if (engine.screen) @@ -263,16 +266,17 @@ { demoView->setEngineData(&engine); - timelineAudioTrack->setWaveform( - engine.audioRes->rdata, engine.audioRes->rdataSize, - engine.optAfmt.format, engine.optAfmt.channels, - engine.optAfmt.freq); + if (engine.audioRes != NULL) + { + timelineAudioTrack->setWaveform( + engine.audioRes->rdata, engine.audioRes->rdataSize, + engine.optAfmt.format, engine.optAfmt.channels, + engine.optAfmt.freq); + } timelineAudioTrack->setOffset(currViewOffset); timelineAudioTrack->setScale(currViewScale); - if (currTimeline != NULL) - timelineView->setTrack(currTimeline->tl); timelineView->setTime(currFrameTime); timelineView->setOffset(currViewOffset); @@ -304,6 +308,13 @@ } +void DemoEditor::actionTimelineChanged() +{ + updateMenuStates(); + update(); +} + + int DemoEditor::initEffectsAndResources() { int err; @@ -355,7 +366,7 @@ void DemoEditor::shutdownEffectsAndResources() { - dmFreeTimeline(engine.tl); + delete currTimeline; dmFreePreparedTimelineData(engine.ptl); engineShutdownEffects(&engine); dmres_close(engine.resources); @@ -388,8 +399,8 @@ } else { - delete tl; - tl = tmp; + delete currTimeline; + currTimeline = tmp; update(); historyReset(); @@ -401,7 +412,7 @@ void DemoEditor::saveToFile(QString filename) { - int ret = tl->save(filename); + int ret = currTimeline->save(filename); if (ret != DMERR_OK) { showFileErrorDialog("Saving demo blob file "+ filename, ret);
--- a/edmain.h Fri Oct 19 07:21:54 2012 +0300 +++ b/edmain.h Fri Oct 19 07:22:09 2012 +0300 @@ -67,6 +67,7 @@ void actionTimelineScrollChanged(int); void actionOffsetChanged(float); void actionTimeChanged(float); + void actionTimelineChanged(); private: QTableView *effectTable; @@ -113,7 +114,7 @@ int currViewOffset; int currFrameTime; - TimelineObject *tl; + TimelineObject *currTimeline; DMEngineData engine; QList<TimelineObject *> undoHistory;
--- a/edtimeline.cpp Fri Oct 19 07:21:54 2012 +0300 +++ b/edtimeline.cpp Fri Oct 19 07:22:09 2012 +0300 @@ -27,21 +27,18 @@ void QTimelineTrackDisplay::setTrack(DMTimelineTrack *mtrack) { track = mtrack; - update(); } void QTimelineTrackDisplay::setTime(const int mtime) { time = mtime; - update(); } void QTimelineTrackDisplay::setOffset(const int moffs) { offs = moffs; - update(); } @@ -49,7 +46,6 @@ { if (mscale > 0.05) scale = mscale; - update(); } @@ -72,12 +68,16 @@ DMTimelineEvent *ev = track->events[event]; } + painter.restore(); + if (time >= offs * scale && time - offs <= width() * scale) { int xc = time - offs; + painter.save(); painter.scale(scale, 1); painter.setPen(markerColor); painter.drawLine(xc, 0, xc, height()); + painter.restore(); } } @@ -137,7 +137,7 @@ enabledCheck = new QCheckBox("Enabled"); infoLayout->addWidget(enabledCheck); - connect(enabledCheck, SIGNAL(toggled(bool)), this, SLOT(slotEnabledChanged(bool))); + connect(enabledCheck, SIGNAL(toggled(bool)), this, SLOT(slotTrackChanged(bool))); infoData = new QLabel(); infoData->setStyleSheet("QLabel { padding: 2px; }"); @@ -167,26 +167,91 @@ } -void QTimelineTrackView::setTime(const int mtime) +void QTimelineTrackView::slotTrackChanged(bool value) { - track->setTime(mtime); + track->track->enabled = value; + emit trackChanged(value); +} + + + +QTimelineView::QTimelineView(QWidget *parent) : QWidget(parent) +{ + layout = new QVBoxLayout(this); + tl = NULL; } -void QTimelineTrackView::setOffset(const int moffs) +void QTimelineView::setTimeline(TimelineObject *mtl) { - track->setOffset(moffs); + tl = mtl; + + delete layout; + layout = new QVBoxLayout(this); + tracks.clear(); + + if (tl != NULL && tl->tl != NULL) + { + for (int track = 0; track < tl->tl->ntracks; track++) + { + QTimelineTrackView *vtr = new QTimelineTrackView(this); + vtr->setTrack(tl->tl->tracks[track]); + tracks.append(vtr); + layout->addWidget(vtr); + connect(vtr, SIGNAL(trackChanged(bool)), this, SLOT(slotTimelineChanged())); + } + } + update(); } -void QTimelineTrackView::setScale(const float mscale) +void QTimelineView::slotTimelineChanged() { - track->setScale(mscale); + if (tl != NULL) + { + tl->changed++; + emit timelineChanged(); + } +} + +void QTimelineView::setTime(const int mtime) +{ + if (tl != NULL && tl->tl != NULL) + { + QList<QTimelineTrackView *>::iterator track; + for (track = tracks.begin(); track != tracks.end(); track++) + { + (*track)->track->setTime(mtime); + } + update(); + } } -void QTimelineTrackView::slotEnabledChanged(bool value) + +void QTimelineView::setOffset(const int moffs) { - track->track->enabled = value; -// emit enabledChanged(value); + if (tl != NULL && tl->tl != NULL) + { + QList<QTimelineTrackView *>::iterator track; + for (track = tracks.begin(); track != tracks.end(); track++) + { + (*track)->track->setOffset(moffs); + } + update(); + } } + + +void QTimelineView::setScale(const float mscale) +{ + if (tl != NULL && tl->tl != NULL) + { + QList<QTimelineTrackView *>::iterator track; + for (track = tracks.begin(); track != tracks.end(); track++) + { + (*track)->track->setScale(mscale); + } + update(); + } +}
--- a/edtimeline.h Fri Oct 19 07:21:54 2012 +0300 +++ b/edtimeline.h Fri Oct 19 07:22:09 2012 +0300 @@ -3,7 +3,9 @@ #include <QWidget> #include <QCheckBox> +#include <QVBoxLayout> #include <QLabel> +#include "edtlobj.h" #include "dmengine.h" @@ -58,10 +60,10 @@ void setTrack(DMTimelineTrack *mtrack); private slots: - void slotEnabledChanged(bool); + void slotTrackChanged(bool); -//signals: -// void enabledChanged(bool); +signals: + void trackChanged(bool); }; @@ -70,16 +72,23 @@ Q_OBJECT private: - DMTimeline *tl; + QVBoxLayout *layout; + TimelineObject *tl; QList<QTimelineTrackView *> tracks; public: QTimelineView(QWidget *parent = 0); - void setTimeline(DMTimeline *mtl); + void setTimeline(TimelineObject *mtl); void setTime(const int mtime); void setOffset(const int moffs); void setScale(const float mscale); + +private slots: + void slotTimelineChanged(); + +signals: + void timelineChanged(); }; #endif
--- a/edtlobj.cpp Fri Oct 19 07:21:54 2012 +0300 +++ b/edtlobj.cpp Fri Oct 19 07:22:09 2012 +0300 @@ -1,5 +1,5 @@ // -// Map Mask Designer -- Map object and map region classes +// Wrapper class for DMTimeline data // (C) Copyright 2012 Matti 'ccr' Hämäläinen <ccr@tnsp.org> // #include "edtlobj.h" @@ -8,7 +8,7 @@ TimelineObject::TimelineObject() { - tl = NULL; + dmTimelineNew(&tl, "Demo"); changed = 0; } @@ -17,6 +17,7 @@ { changed = 0; filename = obj->filename; + dmCopyTimeline(obj->tl, &tl); } @@ -33,7 +34,9 @@ if ((res = dmf_create_stdio(fnba.data(), "rb")) == NULL) return DMERR_FOPEN; + dmFreeTimeline(tl); int err = dmLoadTimeline(res, &tl); + changed = 0; dmf_close(res); filename = mfilename; @@ -49,6 +52,7 @@ return DMERR_FOPEN; int err = dmSaveTimeline(res, tl); + changed = 0; dmf_close(res); return err;