From 4695f41b7c9c767cb21d83fe17c12abeaa401024 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Mon, 12 Oct 2009 08:10:00 +0200 Subject: [PATCH] Documentation of PlacementScope concept --- doc/devel/draw/Session.ScopeStructure-1.svg | 1621 +++++++++++++++++++ wiki/draw/ScopeStructure1.png | Bin 0 -> 47162 bytes wiki/renderengine.html | 82 +- 3 files changed, 1685 insertions(+), 18 deletions(-) create mode 100644 doc/devel/draw/Session.ScopeStructure-1.svg create mode 100644 wiki/draw/ScopeStructure1.png diff --git a/doc/devel/draw/Session.ScopeStructure-1.svg b/doc/devel/draw/Session.ScopeStructure-1.svg new file mode 100644 index 000000000..98e693597 --- /dev/null +++ b/doc/devel/draw/Session.ScopeStructure-1.svg @@ -0,0 +1,1621 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + Structure of Placement Scopes + + + Ichthyostega + + + design sketch: Relation of the nested Placement Scopes within the Lumiera session + 2009 + + + + + + + + + + + + + + + + + + + + + + + + Clip2 + + Sequence + Timeline-1 + + + Timeline-2 + + + + Clip1 + + Effect + + Effect + + Effect + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + root : global rules + + + + + + + + + + + + + + + + + + + + Binding + global Pipes + global Pipes + + + + + Binding + + + + + + + + + + + + + + x + + + + + + + + + + + + + + + + + x + + + + + + + + + + + + + + + + + x + + + + + + + + + + + + + + + + + x + + + + + + + + + + + + + + + + + x + + + + + + + + + diff --git a/wiki/draw/ScopeStructure1.png b/wiki/draw/ScopeStructure1.png new file mode 100644 index 0000000000000000000000000000000000000000..8498ddb1f88bf62dd0b033fb38c978828c54507c GIT binary patch literal 47162 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 {*wzLo|e9Nh+J@wB}uPaa-h5k5jr+F=G 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 -
+
MObjects are attached into the [[Session]] by adding a [[Placement]]. Because this especially includes the case of //grouping or container objects,// e.g. tracks or [[meta-clips|VirtualClip]], any placement may optionally define and root a scope, and every placement is at least contained in one encompassing scope &mdash; of course with the exception of the absolute top level, which can be thought off as being contained in a scope of handling rules.
 
-Thus, while the [[sequences (former called EDL)|EDL]] act as generic container holding a pile of placments, actually there is a more fine grained structure based on the nesting of the tracks, which especially in Lumiera's HighLevelModel belong to the sequence (they aren't a property of the top level timeline as one might expect). Building upon these observations, we actually require each addition of a placement to specify a scope. The implementation of this tie-to-scope is provided by the same mechanism as utilized for relative placements, i.e. an directional placement relation.
+Thus, while the [[sequences (former called EDL)|EDL]] act as generic container holding a pile of placments, actually there is a more fine grained structure based on the nesting of the tracks, which especially in Lumiera's HighLevelModel belong to the sequence (they aren't a property of the top level timeline as one might expect). Building upon these observations, we actually require each addition of a placement to specify a scope. The implementation of this tie-to-scope is provided by the same mechanism as utilised for relative placements, i.e. an directional placement relation. This relation actually is implemented by the PlacementIndex
 
+
+[>img[Structure of Placment Scopes|draw/ScopeStructure1.png]]
 !Kinds of scopes
 There is only a limited number of situations constituting a scope
-* conceptually, the very top level is a scope of general rules. It is implemented as {{{Placement<Binding>}}}, where [[the binding|BindingMO]] is a meta-object representing the relation.
-* similarily, the link binding a [[Sequence|EDL]] into either a (top-level) timeline or as virtual media into a VirtualClip is rather special.
+* conceptually, the very top level is a scope of general rules.
+* the next level is the link of [[binding|BindingMO]] of a [[Sequence|EDL]] into either a (top-level) [[Timeline]] or as virtual media into a VirtualClip. It is implemented through a {{{Placement<Binding>}}}.
 * each sequence has at least one (manadtory) top-level placement holding its root track
 * tracks may contain nested sub tracks.
 * clips and (track-level) effects likewise are associated with an enclosing track.
 * an important special case of relative placement is when an object is [[attached|AttachedPlacementProblem]] to another leading object, like e.g. an effect modifying a clip
 
-In any case, adding a placement to a scope is to be implemented such as to ensure the presence of a suitable LocatingPin, serving to tie the placement into the scope. This LocatingPin in turn will manage a relation to the scope-defining placement, and by doing so, it will insert the relation information into the [[index|PlacementIndex]]. The remaining problem for the implementation is to find a suitable factory function to set up the mentioned pin.
+!Purpose of Placement scoping
+Similar to the common mechanisms of object visibility in programming languages, placement scopes guide the search for and resolution of properties of placement. Any such property //not defined locally// within the placement is queried ascending through the sequence of nested scopes. Thus, global definitions can be shadowed by local ones.
 
@@ -3161,7 +3164,7 @@ We need a way of addressing existing [[pipes|Pipe]]. Besides, as the Pipes and T <<tasksum end>>
-
+
//This page is a scrapbook for working out the implementation of the [[Session Datastructure in Memory|SessionDataMem]]//
 This is a difficult untertaking, because there are several dependencies (most of which aren't fully designed yet as of 5/09)
 * the GUI uses an adapted version of the HighLevelModel; these datastructures are intended to be backed by the Session
@@ -3181,13 +3184,11 @@ This is a difficult untertaking, because there are several dependencies (most of
 
 <<tasksum start>>
 <<taskadder below>>
-<<task 3 3 3>> how to deal with UNDO
-<<task 2 2 2>> how to deal with CommandDefinition
-<<task >> outline the CommandLifecycle
-<<task 5 15 15>> implement a system for defining parameters and targets
-<<task >> implement a system for generating operations
-<<task 2 2 1>> define the general structure of operations
-<<task >> specify the editing operations
+<<task >> standard implementation of a query, including use of lumiera forward iterators
+<<task >> identify and plan the possible queries
+<<task >> BindingMO
+<<task >> scope concept
+<<task >> outline the general style of the [[(query) interface|SessionQueryStructure]]
 
 !Interface
 <<task 1 1 1>> evaluate models for the [[reference problem|MObjectRef]]
@@ -3195,9 +3196,18 @@ This is a difficult untertaking, because there are several dependencies (most of
 <<task 1 2 2>> incorporate this ID into class Placement
 <<task 2 2>> define PlacementRef and MObjectRef behaviour
 <<task 1 0>> wire up [[Session]] interface as a LayerSeparationInterface
-<<task 1 1 0>> implement PlacementRef
+<<task 1 1 1>> implement PlacementRef
 <<task 2 2 0>> implement MObjectRef
 
+!Mutations
+<<task 3 3 3>> how to deal with UNDO
+<<task 2 2 2>> how to deal with CommandDefinition
+<<task 1 1>> outline the CommandLifecycle
+<<task 14 45 45>> design and implement CommandHandling framework
+<<task 2 2 1>> define the general structure of operations
+<<task >> implement a system for generating operations
+<<task >> specify the editing operations
+
 !Datastructure
 <<task>>investigate the best granularity for object collections
 <<task >> define a record to be used within the index
@@ -3759,21 +3769,22 @@ Currently as of 5/09, this is an ongoing [[implementation and planning effort|Pl
 
 {{red{TODO...}}}
-
+
"Session Interface", when used in a more general sense, denotes a compound of several interfaces and facilities, together forming the primary access point to the user visible contents and state of the editing project.
 * the API of the session class
 * the accompanying management interface (SessionManager API)
 * an LayerSeparationInterfaces allowing to access these interfaces from outside the Proc-Layer
-* the primary public ~APIs exposed on the objects to be queried and retrieved via the session class API
+* the primary public ~APIs exposed on the objects to be [[queried and retrieved|SessionQueryStructure]] via the session class API
+** Timeline
 ** Sequence
 ** Placement
 ** Clip
 ** Track
 ** Effect
 ** Automation
-* the [[command|CommandHandling]] interface, including the [[undo|UndoManager]] facility
+* the [[command|CommandHandling]] interface, including the [[UNDO|UndoManager]] facility
 
-{{red{WIP}}}
+{{red{WIP ... just emerging}}}
The Session contains all informations, state and objects to be edited by the User (&rarr;[[def|Session]]).
@@ -3820,6 +3831,41 @@ It will contain a global video and audio out pipe, just one EDL with a single tr
 &rarr; see [[Relation of Project, Timelines and Sequences|TimelineSequences]]
 
+
+
The frontside interface of the session allows to query for contained objects; it is used to discover the structure and contents of the currently opened session/project. Access point is the public API of the Session class, which, besides exposing those queries, also provides functionality for adding and removing session contents.
+
+!discovering structure
+The session can be seen as an agglomeration of nested and typed containers.
+Thus, at any point, we can explore the structure by asking for //contained objects of a specific type.// For example, at top level, it may be of interest to enumerate the [[timelines within this session|Timeline]] and to ennumerate the [[sequences|EDL]]. And in turn, on a given Sequence, it would be of interest to explore the tracks, and also maybe to iterate over all clips within this sequence.
+So, clearly, there are two flavours of such an contents exploration query: it could either be issued as an dedicated member function on the public API of the respective container object, e.g. {{{Track::getClips()}}} &mdash; or it could be exposed as generic query function, relying on the implicit knowledge of the //current location//&nbsp; rather.
+
+!problem of context and access path
+The (planned) session structure of Lumiera allows for quite some flexibility, which, of course comes at a price tag. Especially, as there can be multiple independent top level timelines, and as a given sequence can be used simultaneously within multiple timelines and even as virtual media within a [[meta-clip|VirtualClip]], and &mdash; moreover &mdash; properties of any Placement are rather queried and discovered within the PlacementScope of this object, as a consequence, the discovered values may depend on //how you look at this object.// More specifically, it depends on the ''access path'' used to discover this object, because this path constitutes the actual scope visible to this object.
+
+To give an example, let's assume a clip within a sequence, and this sequence is both linked to the top-level timeline, but also used within a meta-clip. (see the drawing &rarr; [[here|PlacementScope]])
+In this case, the sequence has an 1:n [[binding|BindingMO]]. A binding is (by definition) also a PlacementScope, and in the case of the sequence, the binding also translates //logical// output designations into global pipes of the top-level timeline, while in the other case they get mapped onto "channels" of the virtual media used by the virtual clip. Thus, the absolute time position as well as the output connection of a given clip within this sequence //depends on how we look at this clip.// Does this clip apear as part of the global timeline, or did we discover it as contained within the meta-clip?
+
+!!solution requirements
+The baseline of any solution to this problem is clear: at the point where the query is issued, a context information is necessary; this context yields an access path from top level down to the object to be queried, and this access path constitutes the effective scope this object utilises for resolving the query.
+
+!!introducing a QueryFocus
+A secondary goal of the design here is to ease the use of the session query interface. Thus the proposal is to treat this context and access path as part of the current state. To do so, we can introduce a QueryFocus following the queries and remembering the access path; this focus should be maintained mostly automatically. It allows for stack-like organisation, to allow sub-queries without affecting the current focus, where the handling of such a temporary sub-focus is handled automatically by a scoped local (RAII) object. The focus follows the issued queries and re-binds as necessary.
+
+!!using QueryFocus as generic query interface
+Solving the problem this way has the nice side effect, that we get a quite natural location where to put an unspecific query interface: Just let the current QueryFocus expose the basic set of query API functions. Such an generic query interface can be seen as a complement to the query functions exposed on specific objects ("get me the clips within this track") according to the structure. Because a generic interface especially allows for writing simple diagnostics and discovery code, with only a weak link to the actual session structure.
+
+!Implementation strategy
+The solution is being built starting from the generic part, as the actual session structure isn't hard coded into the session implementation, but rather created by convention.
+The query API on specific objects (i.e. Session, Timeline, Sequence, Track and Clip) is then easily coded up on top, mostly with inlined one-liners of the kind
+{{{
+ITER getClips() { return QueryFocus::push(this).query<Clip>(); } 
+}}}
+To make this work, QueryFocus exposes an static API (and especially the focus stack is a singleton). The //current// QueryFocus object can easily re-bound to another point of interest (and ajusts the contained path info automatically), and the {{{push()}}}-function creates a local scoped object (which pops automatically).
+
+And last but not least: the difficult part of this whole concept is encapsulated and ''can be left out for now''. Because, according to Lumiera's [[roadmap|http://issues.lumiera.org/roadmap]], meta-clips are to be postponed until well into beta! Thus, we can start with a trivial (no-op) implementation, but immediately gain the benefit of making the relevant parts of the session implementation aware of the problem.
+
+{{red{WIP ... draft}}}
+
<<search>><<closeAll>><<permaview>><<newTiddler>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options ยป" "Change TiddlyWiki advanced options">>