93 .type (
string{stage::TYPE_Fork})
100 emptyTrack (
string trackID)
103 .type (
string{stage::TYPE_Fork})
111 .type (
string{stage::TYPE_Ruler})
116 clip (
string clipID,
TimeSpan timings)
119 .type (
string{stage::TYPE_Clip})
120 .
set(
string{stage::ATTR_timing}, timings)
126 return clip (clipID,
TimeSpan{start,dur});
134 return GenNode{
string{stage::ATTR_name}, elm.idi.getSym() };
152 DummySessionConnection::DummySessionConnection()
155 DummySessionConnection::~DummySessionConnection() { }
165 const RandID forkRootID{stage::ATTR_fork};
167 const GenNode rootTrackName =
GenNode{
string{stage::ATTR_name},
"Track-"+baseID};
168 const GenNode forkRoot = MakeRec().genNode(forkRootID);
169 const GenNode clip1 = clip (
"Clip-1", Time::ZERO);
176 ,
set (rootTrackName)
198 const RandID forkRootID{stage::ATTR_fork};
200 const GenNode rootTrackName =
GenNode{
string{stage::ATTR_name},
"Fork-Root"};
201 const GenNode forkRoot = MakeRec().genNode(forkRootID);
202 const GenNode track1 = emptyTrack (
"Track-1");
203 const GenNode track2 = emptyTrack (
"Track-2");
204 const GenNode track21 = emptyTrack (
"Track-21");
205 const GenNode track22 = emptyTrack (
"Track-22");
206 const GenNode track221 = emptyTrack (
"Track-221");
207 const GenNode track222 = emptyTrack (
"Track-222");
208 const GenNode timeRuler = ruler();
209 const GenNode scopeRuler0 = ruler();
210 const GenNode scopeRuler2 = ruler();
211 const GenNode scopeRuler22 = ruler();
212 const GenNode scopeRuler221 = ruler();
218 , ins (rootTrackName)
241 , ins (scopeRuler221)
258 TODO (
"build internal diagnostic data structure, apply a copy of the message");
294 def.operation ([](
string dummyID)
296 string message{
_Fmt{
"fabricate Sequence_1 (dummyID='%s')"} % dummyID};
297 GuiNotification::facade().displayInfo (
NOTE_INFO, message);
298 auto popuDiff = DummySess::instance().fabricateSeq1 (dummyID);
299 DummySess::instance().applyCopy (popuDiff);
301 GuiNotification::facade().mutate (rootID, move(popuDiff));
303 .captureUndo ([](
string dummyID) ->
string 305 return _Fmt{
"fabricateSequence_1('%s')"} % dummyID;
307 .undoOperation ([](
string,
string memento)
309 GuiNotification::facade().displayInfo (
NOTE_WARN,
"can not UNDO Dummy-Action: "+memento);
320 def.operation ([](
string dummyID)
322 string message{
_Fmt{
"fabricate Sequence_2 (dummyID='%s')"} % dummyID};
323 GuiNotification::facade().displayInfo (
NOTE_INFO, message);
324 auto popuDiff = DummySess::instance().fabricateSeq2 (dummyID);
325 DummySess::instance().applyCopy (popuDiff);
327 GuiNotification::facade().mutate (rootID, move(popuDiff));
329 .captureUndo ([](
string dummyID) ->
string 331 return _Fmt{
"fabricateSequence_2('%s')"} % dummyID;
333 .undoOperation ([](
string,
string memento)
335 GuiNotification::facade().displayInfo (
NOTE_WARN,
"can not UNDO Dummy-Action: "+memento);
345 def.operation ([](
string dummyID)
347 string message{
_Fmt{
"fabricate gulp (dummyID='%s')"} % dummyID};
348 GuiNotification::facade().displayInfo (
NOTE_INFO, message);
350 .captureUndo ([](
string dummyID) ->
string 352 return _Fmt{
"fabricateGulp('%s')"} % dummyID;
354 .undoOperation ([](
string,
string memento)
356 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.