94 .type (
string{stage::TYPE_Fork})
101 emptyTrack (
string trackID)
104 .type (
string{stage::TYPE_Fork})
112 .type (
string{stage::TYPE_Ruler})
117 clip (
string clipID,
TimeSpan timings)
120 .type (
string{stage::TYPE_Clip})
121 .
set(
string{stage::ATTR_timing}, timings)
127 return clip (clipID,
TimeSpan{start,dur});
135 return GenNode{
string{stage::ATTR_name}, elm.idi.getSym() };
153 DummySessionConnection::DummySessionConnection()
156 DummySessionConnection::~DummySessionConnection() { }
166 const RandID forkRootID{stage::ATTR_fork};
168 const GenNode rootTrackName =
GenNode{
string{stage::ATTR_name},
"Track-"+baseID};
169 const GenNode forkRoot = MakeRec().genNode(forkRootID);
170 const GenNode clip1 = clip (
"Clip-1", Time::ZERO);
177 ,
set (rootTrackName)
199 const RandID forkRootID{stage::ATTR_fork};
201 const GenNode rootTrackName =
GenNode{
string{stage::ATTR_name},
"Fork-Root"};
202 const GenNode forkRoot = MakeRec().genNode(forkRootID);
203 const GenNode track1 = emptyTrack (
"Track-1");
204 const GenNode track2 = emptyTrack (
"Track-2");
205 const GenNode track21 = emptyTrack (
"Track-21");
206 const GenNode track22 = emptyTrack (
"Track-22");
207 const GenNode track221 = emptyTrack (
"Track-221");
208 const GenNode track222 = emptyTrack (
"Track-222");
209 const GenNode timeRuler = ruler();
210 const GenNode scopeRuler0 = ruler();
211 const GenNode scopeRuler2 = ruler();
212 const GenNode scopeRuler22 = ruler();
213 const GenNode scopeRuler221 = ruler();
219 , ins (rootTrackName)
242 , ins (scopeRuler221)
259 TODO (
"build internal diagnostic data structure, apply a copy of the message");
295 def.operation ([](
string dummyID)
297 string message{
_Fmt{
"fabricate Sequence_1 (dummyID='%s')"} % dummyID};
298 GuiNotification::facade().displayInfo (
NOTE_INFO, message);
299 auto popuDiff = DummySess::instance().fabricateSeq1 (dummyID);
300 DummySess::instance().applyCopy (popuDiff);
302 GuiNotification::facade().mutate (rootID, move(popuDiff));
304 .captureUndo ([](
string dummyID) ->
string 306 return _Fmt{
"fabricateSequence_1('%s')"} % dummyID;
308 .undoOperation ([](
string,
string memento)
310 GuiNotification::facade().displayInfo (
NOTE_WARN,
"can not UNDO Dummy-Action: "+memento);
321 def.operation ([](
string dummyID)
323 string message{
_Fmt{
"fabricate Sequence_2 (dummyID='%s')"} % dummyID};
324 GuiNotification::facade().displayInfo (
NOTE_INFO, message);
325 auto popuDiff = DummySess::instance().fabricateSeq2 (dummyID);
326 DummySess::instance().applyCopy (popuDiff);
328 GuiNotification::facade().mutate (rootID, move(popuDiff));
330 .captureUndo ([](
string dummyID) ->
string 332 return _Fmt{
"fabricateSequence_2('%s')"} % dummyID;
334 .undoOperation ([](
string,
string memento)
336 GuiNotification::facade().displayInfo (
NOTE_WARN,
"can not UNDO Dummy-Action: "+memento);
346 def.operation ([](
string dummyID)
348 string message{
_Fmt{
"fabricate gulp (dummyID='%s')"} % dummyID};
349 GuiNotification::facade().displayInfo (
NOTE_INFO, message);
351 .captureUndo ([](
string dummyID) ->
string 353 return _Fmt{
"fabricateGulp('%s')"} % dummyID;
355 .undoOperation ([](
string,
string memento)
357 GuiNotification::facade().displayInfo (
NOTE_WARN,
"can not UNDO Dummy-Action: "+memento);
Concrete implementation to apply structural changes to hierarchical data structures.
GenNode makeName(GenNode const &elm)
fabricate an attribute node based on the human-readable part of the given elemen's ID ...
Generic Message with an embedded diff, to describe changes to model elements.
Constructor for a specially crafted 'ref GenNode'.
MutationMessage fabricateSeq1(string baseID)
Build a population diff message to describe a specific session structure to add.
Hard wired key constants and basic definitions for communication with the GUI.
Major public Interface of the Lumiera GUI.
Entry-ID with a symbolic tag but just a plain random hash part.
static lib::idi::EntryID< Root > getID()
get an unique ID to identify "the model root".
void applyCopy(MutationMessage const &)
GenNode defineTiming(Time start, Duration dur=Duration{FSecs{1}})
define the (optional) timings for a clip
#define COMMAND_DEFINITION(_NAME_)
Macro to write command definitions in a compact form.
Dummy and scaffolding to help development of the UI - Session connection.
something to be aware of, to be indicated unobtrusively
Opaque message to effect a structural change on a target, which is likewise only known in an abstract...
Steam-Layer implementation namespace root.
A front-end for using printf-style formatting.
MObject within the session to represent "the session itself".
Namespace of Session and user visible high-level objects.
Access point to singletons and other kinds of dependencies designated by type.
Lumiera's internal time value datatype.
Tiny helper functions and shortcuts to be used everywhere Consider this header to be effectively incl...
Generic building block for tree shaped (meta)data structures.
boost::rational< int64_t > FSecs
rational representation of fractional seconds
Hash implementation based on a lumiera unique object id (LUID) When invoking the default ctor...
Global access point to push state update and notification of events from the lower layers into the Lu...
static const Time NEVER
border condition marker value. NEVER >= any time value
Duration is the internal Lumiera time metric.
severe condition to be indicated prominently
MutationMessage fabricateSeq2(string baseID)
Build another population diff message for a way more contrived timeline structure.
A time interval anchored at a specific point in time.
Scaffolding to drive the evolution of the Lumiera application.
Actually defining a command and binding it to execution parameters.
a family of time value like entities and their relationships.
GenNode emptyTimeline(string baseID, RandID const &forkRootID)
possibly interesting info that can be safely ignored
generic data element node within a tree
bool contains(SEQ const &cont, typename SEQ::const_reference val)
shortcut for brute-force containment test in any sequential container
static lib::Depend< DummySessionConnection > instance
access point to set up the scaffolding.