From b35c4b4871e7acaf87bb3ab7137be320f501eea4 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Tue, 19 Oct 2010 04:19:38 +0200 Subject: [PATCH] hook automatic element-tracking into Timeline asset --- src/proc/asset/struct-factory-impl.hpp | 4 +++- src/proc/asset/timeline.cpp | 18 ++++++++++++++++-- src/proc/asset/timeline.hpp | 19 ++++++++++++------- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/proc/asset/struct-factory-impl.hpp b/src/proc/asset/struct-factory-impl.hpp index 59a61deba..3a28e80e4 100644 --- a/src/proc/asset/struct-factory-impl.hpp +++ b/src/proc/asset/struct-factory-impl.hpp @@ -212,7 +212,9 @@ namespace asset { ASSERT (sequence); RBinding newBinding = Session::current->getRoot().attach (MObject::create (sequence)); ASSERT (newBinding); - return new Timeline (idi, newBinding); + PTimeline newTimeline = Timeline::create (idi, newBinding); + ENSURE (newTimeline); + return newTimeline.get(); } template<> diff --git a/src/proc/asset/timeline.cpp b/src/proc/asset/timeline.cpp index 65ad28d17..a9a0f6345 100644 --- a/src/proc/asset/timeline.cpp +++ b/src/proc/asset/timeline.cpp @@ -26,6 +26,7 @@ //#include "proc/mobject/placement.hpp" //#include "proc/mobject/session/mobjectfactory.hpp" #include "proc/mobject/session/binding.hpp" +#include "proc/assetmanager.hpp" namespace asset { @@ -35,13 +36,26 @@ namespace asset { Timeline::Timeline (const Asset::Ident& idi, RBinding const& sequenceBinding) : Struct (idi) , boundSeqence_(sequenceBinding) -// : track (makeDefaultTrack ()) -// , clips (0) { REQUIRE (boundSeqence_); } + PTimeline + Timeline::create (Asset::Ident const& idi, RBinding const& sequenceBinding) + { + REQUIRE (getRegistry); + + PTimeline newElement (AssetManager::instance().wrap (*new Timeline(idi, sequenceBinding))); + getRegistry().append (newElement); + + ENSURE (newElement); + ENSURE (getRegistry().isRegistered(*newElement)); + return newElement; + } + + + diff --git a/src/proc/asset/timeline.hpp b/src/proc/asset/timeline.hpp index 50937591f..6bffc5112 100644 --- a/src/proc/asset/timeline.hpp +++ b/src/proc/asset/timeline.hpp @@ -57,7 +57,7 @@ //#include "proc/mobject/placement.hpp" #include "proc/mobject/mobject-ref.hpp" //#include "proc/mobject/session/binding.hpp" ////TODO avoidable?? -//#include "lib/p.hpp" +#include "lib/p.hpp" #include "lib/element-tracker.hpp" @@ -79,27 +79,32 @@ namespace asset { // using lumiera::P; + class Timeline; + typedef lumiera::P PTimeline; + /** * TODO type comment */ class Timeline : public Struct + , public lib::AutoRegistered { typedef mobject::session::RBinding RBinding; RBinding boundSeqence_; - public: - void detach() { TODO("Timeline-Session registration"); } + Timeline (Ident const&, RBinding const&); + + public: + /** create and register a new Timeline instance */ + static PTimeline create (Asset::Ident const& idi, RBinding const& sequenceBinding); + +// void detach() { TODO("Timeline-Session registration"); } - protected: - Timeline (const Asset::Ident& idi, RBinding const& sequenceBinding); - friend class StructFactoryImpl; }; - typedef P PTimeline; ///////////////////////////TODO currently just fleshing the API