@@ -210,7 +210,7 @@ namespace dspx {
210210 }
211211
212212 QDspx::Model Model::toQDspx () const {
213- return {
213+ QDspx::Model model = {
214214 .version = QDspx::Model::V1,
215215 .content = {
216216 .global = global ()->toQDspx (),
@@ -220,6 +220,14 @@ namespace dspx {
220220 .workspace = workspace ()->toQDspx (),
221221 }
222222 };
223+ model.content .workspace [" diffscope" ] = QJsonObject{
224+ {" loop" , QJsonObject{
225+ {" enabled" , timeline ()->isLoopEnabled ()},
226+ {" start" , timeline ()->loopStart ()},
227+ {" length" , timeline ()->loopLength ()},
228+ }}
229+ };
230+ return model;
223231 }
224232
225233 void Model::fromQDspx (const QDspx::Model &model) {
@@ -229,6 +237,21 @@ namespace dspx {
229237 d->timeline ->fromQDspx (model.content .timeline );
230238 d->tracks ->fromQDspx (model.content .tracks );
231239 d->workspace ->fromQDspx (model.content .workspace );
240+ {
241+ auto loop = model.content .workspace .value (" diffscope" ).value (" loop" ).toObject ();
242+ auto enabled = loop.value (" enabled" ).toBool ();
243+ auto start = loop.value (" start" ).toInt ();
244+ auto length = loop.value (" length" ).toInt ();
245+ if (start < 0 || length <= 0 ) {
246+ d->timeline ->setLoopEnabled (false );
247+ d->timeline ->setLoopStart (0 );
248+ d->timeline ->setLoopLength (1920 );
249+ } else {
250+ d->timeline ->setLoopEnabled (enabled);
251+ d->timeline ->setLoopStart (start);
252+ d->timeline ->setLoopLength (length);
253+ }
254+ }
232255 }
233256
234257 Label *Model::createLabel () {
@@ -357,6 +380,12 @@ namespace dspx {
357380 ModelPrivate::proxySetEntityPropertyNotify (d->master , property, value);
358381 break ;
359382 }
383+ case ModelStrategy::P_LoopEnabled:
384+ case ModelStrategy::P_LoopLength:
385+ case ModelStrategy::P_LoopStart: {
386+ ModelPrivate::proxySetEntityPropertyNotify (d->timeline , property, value);
387+ break ;
388+ }
360389 default :
361390 Q_UNREACHABLE ();
362391 }
0 commit comments