From 4e7c64bf39a04c529a350fe225e88175ff0c5593 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Mon, 17 Apr 2017 21:54:36 +0200 Subject: [PATCH] CmdAccess: **Big Bang** wire the first real command from UI down into the Session ...just the implementation within SessManagerImpl is not yet there P-) So everything remains as defunct as before, but at least: "yes we can" --- src/gui/interact/interaction-director.cpp | 8 ++++++- src/proc/cmd.hpp | 6 ++---- src/proc/cmd/session-cmd.cpp | 21 ++++++++++++++++++- src/proc/mobject/session.hpp | 5 +++-- .../mobject/session/sess-manager-impl.cpp | 2 +- .../mobject/session/sess-manager-impl.hpp | 12 +++++------ 6 files changed, 39 insertions(+), 15 deletions(-) diff --git a/src/gui/interact/interaction-director.cpp b/src/gui/interact/interaction-director.cpp index ee55ca213..c11d1ca79 100644 --- a/src/gui/interact/interaction-director.cpp +++ b/src/gui/interact/interaction-director.cpp @@ -38,7 +38,10 @@ #include "gui/setting/asset-controller.hpp" #include "gui/timeline/timeline-controller.hpp" #include "proc/mobject/session/root.hpp" +#include "proc/cmd.hpp" +#include "backend/real-clock.hpp" #include "lib/diff/tree-mutator.hpp" +#include "lib/format-obj.hpp" //#include "gui/ui-bus.hpp" //#include "lib/util.hpp" @@ -49,12 +52,14 @@ //using std::list; //using std::shared_ptr; using lib::diff::TreeMutator; +using util::toString; namespace gui { namespace interact { namespace session = proc::mobject::session; + namespace cmd = proc::cmd; using ctrl::GlobalCtx; using ctrl::UiState; @@ -118,7 +123,8 @@ namespace interact { void InteractionDirector::saveSnapshot() { - UNIMPLEMENTED ("issue save snapshot command towards current session"); + string snapshotID{"snap-" + toString(backend::RealClock::now())}; + invoke (cmd::session_saveSnapshot, snapshotID); } diff --git a/src/proc/cmd.hpp b/src/proc/cmd.hpp index 752a0f0e5..85e94a5b8 100644 --- a/src/proc/cmd.hpp +++ b/src/proc/cmd.hpp @@ -59,11 +59,9 @@ namespace cmd { //using std::shared_ptr; + /* ========= global actions ========= */ - /** - * @todo wtf - */ - + extern CommandSetup session_saveSnapshot; diff --git a/src/proc/cmd/session-cmd.cpp b/src/proc/cmd/session-cmd.cpp index 47b144a90..18d158d7f 100644 --- a/src/proc/cmd/session-cmd.cpp +++ b/src/proc/cmd/session-cmd.cpp @@ -36,6 +36,7 @@ #include "proc/cmd.hpp" #include "proc/control/command-def.hpp" +#include "proc/mobject/session.hpp" //#include "lib/symbol.hpp" //#include "lib/format-string.hpp" @@ -50,6 +51,7 @@ namespace proc { namespace cmd { namespace error = lumiera::error; + using mobject::Session; namespace { // implementation helper... }//(End) implementation helper @@ -57,7 +59,24 @@ namespace cmd { - /** storage for.... */ + /** store a snapshot of current session actions and state and UI state. + * @param snapshotID a marker to tag the snapshot + */ + COMMAND_DEFINITION (session_saveSnapshot) + { + def.operation ([](string snapshotID) + { + Session::current.save (snapshotID); + }) + .captureUndo ([](string snapshotID) -> string + { + return snapshotID; + }) + .undoOperation ([](string, string oldSnapshot) + { + UNIMPLEMENTED ("how to remove a snapshot from session history"); + }); + }; diff --git a/src/proc/mobject/session.hpp b/src/proc/mobject/session.hpp index b3c4dd9c7..dfafeac47 100644 --- a/src/proc/mobject/session.hpp +++ b/src/proc/mobject/session.hpp @@ -189,9 +189,10 @@ namespace mobject { /** create a complete, serialised representation * of the current session config and contents. - * @todo how to serialise, parameters, return value? + * @todo 2017 how actually to serialise, parameters, return value? + * @param snapshotID marker to tag the snapshot, like e.g. a timestamp */ - virtual void save () =0; + virtual void save (string snapshotID) =0; /** access to the current session object instance. * This is the sole access path available for clients. diff --git a/src/proc/mobject/session/sess-manager-impl.cpp b/src/proc/mobject/session/sess-manager-impl.cpp index fac985f04..9530936fc 100644 --- a/src/proc/mobject/session/sess-manager-impl.cpp +++ b/src/proc/mobject/session/sess-manager-impl.cpp @@ -295,7 +295,7 @@ namespace session { * to several files (master file and edl files) */ void - SessManagerImpl::save() + SessManagerImpl::save (string stnapshotID) { UNIMPLEMENTED ("save session (serialised)"); /////////////////////////////////////////////////TODO: need lock? diff --git a/src/proc/mobject/session/sess-manager-impl.hpp b/src/proc/mobject/session/sess-manager-impl.hpp index 401fbc5be..094d43bd7 100644 --- a/src/proc/mobject/session/sess-manager-impl.hpp +++ b/src/proc/mobject/session/sess-manager-impl.hpp @@ -71,13 +71,13 @@ namespace session { ~SessManagerImpl() ; /* ==== SessManager API ==== */ - virtual void clear() override; - virtual void close() override; - virtual void reset() override; - virtual void load () override; - virtual void save () override; + virtual void clear() override; + virtual void close() override; + virtual void reset() override; + virtual void load () override; + virtual void save (string) override; - virtual bool isUp () override; + virtual bool isUp () override; public: