84 .type (
string{stage::TYPE_Fork})
91 emptyTrack (
string trackID)
94 .type (
string{stage::TYPE_Fork})
102 .type (
string{stage::TYPE_Ruler})
107 clip (
string clipID,
TimeSpan timings)
110 .type (
string{stage::TYPE_Clip})
111 .
set(
string{stage::ATTR_timing}, timings)
117 return clip (clipID,
TimeSpan{start,dur});
125 return GenNode{
string{stage::ATTR_name}, elm.idi.getSym() };
143 DummySessionConnection::DummySessionConnection()
146 DummySessionConnection::~DummySessionConnection() { }
156 const RandID forkRootID{stage::ATTR_fork};
158 const GenNode rootTrackName =
GenNode{
string{stage::ATTR_name},
"Track-"+baseID};
159 const GenNode forkRoot = MakeRec().genNode(forkRootID);
160 const GenNode clip1 = clip (
"Clip-1", Time::ZERO);
167 ,
set (rootTrackName)
189 const RandID forkRootID{stage::ATTR_fork};
191 const GenNode rootTrackName =
GenNode{
string{stage::ATTR_name},
"Fork-Root"};
192 const GenNode forkRoot = MakeRec().genNode(forkRootID);
193 const GenNode track1 = emptyTrack (
"Track-1");
194 const GenNode track2 = emptyTrack (
"Track-2");
195 const GenNode track21 = emptyTrack (
"Track-21");
196 const GenNode track22 = emptyTrack (
"Track-22");
197 const GenNode track221 = emptyTrack (
"Track-221");
198 const GenNode track222 = emptyTrack (
"Track-222");
199 const GenNode timeRuler = ruler();
200 const GenNode scopeRuler0 = ruler();
201 const GenNode scopeRuler2 = ruler();
202 const GenNode scopeRuler22 = ruler();
203 const GenNode scopeRuler221 = ruler();
209 , ins (rootTrackName)
232 , ins (scopeRuler221)
249 TODO (
"build internal diagnostic data structure, apply a copy of the message");
285 def.operation ([](
string dummyID)
287 string message{
_Fmt{
"fabricate Sequence_1 (dummyID='%s')"} % dummyID};
288 GuiNotification::facade().displayInfo (
NOTE_INFO, message);
289 auto popuDiff = DummySess::instance().fabricateSeq1 (dummyID);
290 DummySess::instance().applyCopy (popuDiff);
292 GuiNotification::facade().mutate (rootID, move(popuDiff));
294 .captureUndo ([](
string dummyID) ->
string 296 return _Fmt{
"fabricateSequence_1('%s')"} % dummyID;
298 .undoOperation ([](
string,
string memento)
300 GuiNotification::facade().displayInfo (
NOTE_WARN,
"can not UNDO Dummy-Action: "+memento);
311 def.operation ([](
string dummyID)
313 string message{
_Fmt{
"fabricate Sequence_2 (dummyID='%s')"} % dummyID};
314 GuiNotification::facade().displayInfo (
NOTE_INFO, message);
315 auto popuDiff = DummySess::instance().fabricateSeq2 (dummyID);
316 DummySess::instance().applyCopy (popuDiff);
318 GuiNotification::facade().mutate (rootID, move(popuDiff));
320 .captureUndo ([](
string dummyID) ->
string 322 return _Fmt{
"fabricateSequence_2('%s')"} % dummyID;
324 .undoOperation ([](
string,
string memento)
326 GuiNotification::facade().displayInfo (
NOTE_WARN,
"can not UNDO Dummy-Action: "+memento);
336 def.operation ([](
string dummyID)
338 string message{
_Fmt{
"fabricate gulp (dummyID='%s')"} % dummyID};
339 GuiNotification::facade().displayInfo (
NOTE_INFO, message);
341 .captureUndo ([](
string dummyID) ->
string 343 return _Fmt{
"fabricateGulp('%s')"} % dummyID;
345 .undoOperation ([](
string,
string memento)
347 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.