Timeline: some considerations regarding timeline slave display (#1083)
This commit is contained in:
parent
2adcabbef5
commit
b65db50666
4 changed files with 65 additions and 7 deletions
|
|
@ -47,6 +47,9 @@
|
|||
** was no opportunity to set this system really into motion; this is
|
||||
** not necessarily a bad thing, since meanwhile we understand way
|
||||
** better in which way the Session will actually be accessed...
|
||||
** @todo looks like we'll represent a secondary, attached slave display of the
|
||||
** same Timeline rather by materialising it into a TimelineClone within
|
||||
** the session. This topic has been postponed as of 10/2018 //////////////////////////////////////TICKET #1083
|
||||
** @see Session
|
||||
** @see Sequence
|
||||
** @see StructFactory
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
** MObject in session to represent the top-level binding of a sequence
|
||||
** @todo stalled effort towards a session implementation from 2010
|
||||
** @todo 2016 likely to stay, but expect some extensive rework
|
||||
** @todo Also consider timeline-slave, a topic postponed as of 10/2018 /////////////////////////////////TICKET #1083
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -3434,7 +3434,22 @@ In accordance with the Lumiera application architecture in general, the UI is no
|
|||
<pre>A specially configured LumieraPlugin, which actually contains or loads the complete code of the (GTK)GUI, and additionally is linked dynamically against the application core lib. During the [[UI startup process|GuiStart]], loading of this Plugin is triggered from {{{main()}}}. Actually this causes spawning of the GTK event thread and execution of the GTK main loop.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiTimelineView" creator="Ichthyostega" modifier="Ichthyostega" created="201410160100" modified="201810100316" tags="GuiPattern design decision draft img" changecount="52">
|
||||
<div title="GuiTimelineSlave" creator="Ichthyostega" modifier="Ichthyostega" created="201810111210" tags="GuiPattern design decision draft" changecount="1">
|
||||
<pre>There are various reasons why we might want to offer multiple equivalent UI representations of the same Timeline...
|
||||
* the user might want to see several remote parts of the same timeline simultaneously, in focussed display
|
||||
* we allow several indeptendent top-level windows (think several desktops), so it might just happen that the same timeline is selected in several windows
|
||||
* we might want to introduce a focussed view on a nested sequence or virtual clip
|
||||
|
||||
Now, since we build our UI on the notion of mapping session contents via a messaging system onto suitable presenters in the UI, we get a conceptual mismatch. Basically we need to cut at some point and duplicate some connections. Either we need the ability within a timeline presentation entity to serve several sets of slave widgets, or we need the ability for those presentation entities to collaborate, where one of them becomes the leader and automatically forwards all notifications to the other members of the cluster. Or, alternatively, we could think of pushing that duplication down into the session, in which case we get a TimelineClone entity, and the Builder then needs to be aware of this situation and generate duplicated responses to be sent to the UI.
|
||||
|
||||
{{red{While reconsidering this topic in 10/2018}}}, it looks like I am leaning towards the most systematic option, which is to represent this duplication already within the session as TimelineClone. The rationale is
|
||||
* splitting this way is likely to produce the least accidental complexity -- at that point we are forced to cross-cut only a small number of other concerns. Were we to cut and duplicate within the UI, we'd be forced to carry care for slave entities into a huge number of entirely unrelated UI concerns, like layout management or media display feedback.
|
||||
* in the case of a focussed view on a nested sequence we are even forced to go that route, since doing otherwise would carry over core session responsibilities into the presentation layer. Consequently, any other solution scheme causes duplicating of functionality.
|
||||
* however -- if we implement slave timelines already within the session, we still need to make the UI counterpart basically aware of the situation. Thus the {{{TimelineControler}}} needs the ability to delegate some behaviour to another primary controller. That being said -- I still confirm the decision to postpone that topic altogether...
|
||||
|
||||
In any case, this is an advanced topic, and nowhere near trivial. It seems reasonable to reject opening duplicate timeline presentations as a first step, and then address this topic way later, when we've gained sufficient knowledge regarding all the subtleties of timeline presentation and editing.</pre>
|
||||
</div>
|
||||
<div title="GuiTimelineView" creator="Ichthyostega" modifier="Ichthyostega" created="201410160100" modified="201810111203" tags="GuiPattern design decision draft img" changecount="55">
|
||||
<pre>Within the Lumieara GUI, the [[Timeline]] structure(s) from the HighLevelModel are arranged and presented according to the following principles and conventions.
|
||||
Several timeline views may be present at the same time -- and there is not necessarily a relation between them, since »a Timeline« is the top-level concept within the [[Session]]. Obviously, there can also be several //views// based on the same »Timeline« model element, and in this latter case, these //coupled views// behave according to a linked common state. An entity »Timeline« as represented through the GUI, emerges from the combination of several model elements
|
||||
* a root level [[Binding|BindingMO]] acts as framework
|
||||
|
|
@ -3473,6 +3488,10 @@ The dockable ''timeline pannel'' holds onto the existing {{{TimelineWidget}}} in
|
|||
In case the UI starts with no session present in the core, an //empty timeline placeholder// will be displayed, which provides UI for creating a new session...
|
||||
|
||||
|
||||
!!!slave Timelines
|
||||
It is reasonable to expect the ability to have multiple [[slave timeline presentations|GuiTimelineSlave]] to access the same underlying timeline structure.
|
||||
Currently {{red{as of 10/2018}}} there is a preference to deal with that problem on session level -- but for now we decide to postpone this topic &rarr; [[#1083|http://issues.lumiera.org/ticket/1083]]
|
||||
|
||||
!!!nesting
|
||||
By principle, this workspace structure is //not a list of "Tracks"// -- it is a system of ''nested scopes''. The nesting emerges on demand.
|
||||
In the most general case, there can be per-track content and nested content at the same point in time. The GUI is able to represent this state. But, due to the semantics of Lumiera's HighLevelModel, top-level content and nested content are siblings //within the same scope.// Thus, at a suitable point {{red{to be defined}}}, an equivalence transformation is applied to the GUI model, by prepending a new sibling track and moving top-level content there.
|
||||
|
|
@ -9030,7 +9049,7 @@ Currently (1/11), the strategy is implemented according to (1) and (4) above, le
|
|||
Implementation of this strategy is still broken: it doesn't work properly when actually the change passing over the zero point happens by propagation from lower digits. Because then -- given the way the mutators are implemented -- the //new value of the wrapping digit hasn't been stored.// It seems the only sensible solution is to change the definition of the functors, so that any value will be changed by side-effect {{red{Question 4/11 -- isn't this done and fixed by now??}}}
|
||||
</pre>
|
||||
</div>
|
||||
<div title="Timeline" modifier="Ichthyostega" created="200706250721" modified="201612030116" tags="def" changecount="4">
|
||||
<div title="Timeline" modifier="Ichthyostega" created="200706250721" modified="201810111211" tags="def SessionLogic" changecount="5">
|
||||
<pre>Timeline is the top level element within the [[Session (Project)|Session]]. It is visible within a [[timeline view in the GUI|GuiTimelineView]] and represents the effective (resulting) arrangement of media objects, to be rendered for output or viewed in a Monitor (viewer window). A timeline is comprised of:
|
||||
* a time axis in abolute time ({{red{WIP 1/10}}}: not clear if this is an entity or just a conceptual definition)
|
||||
* a list of [[global Pipes|GlobalPipe]] representing the possible outputs (master busses)
|
||||
|
|
@ -9050,6 +9069,15 @@ Actually, Timeline is both an interface and acts as façade. Its an interface, b
|
|||
Besides building on the asset management, implementing Timeline (and Sequence) as StructAsset yields another benefit: ~StructAssets can be retrieved by query, allowing to specify more details of the configuration immediately on creation. //But on the short term, this approach causes problems:// there is no real inference engine integrated into Lumiera yet (as of 2/2010 the plan is to get an early alpha working end to end first). For now we're bound to use the {{{fake-configrules}}} and to rely on a hard wired simulation of the intended behaviour of a real query resolution. Just some special magic queries will work for now, but that's enough to get ahead.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="TimelineClone" creator="Ichthyostega" modifier="Ichthyostega" created="201810111219" tags="SessionLogic draft" changecount="1">
|
||||
<pre>As [[detailed here|GuiTimelineSlave]], there are various good reasons to provide several UI views onto the same timeline. Yet taking an architectural viewpoint, we prefer representing such a slave display attachment as first-class citizen, right within the session model. Some further problems remain to be settled
|
||||
* the primary Timeline entity need to be aware of the clone's presence, since any effects of a Builder run must be propagated through the latter
|
||||
* we need a way to duplicate the diff feed, so the UI element representing the clone gets notified appropriately
|
||||
* and even when following this design approach with a //materialised duplication,// we still need some awareness and collaboration among the UI elements involved
|
||||
|
||||
This topic is {{red{postponed as of 10/2018}}} &rarr; [[#1083|http://issues.lumiera.org/ticket/1083]]
|
||||
</pre>
|
||||
</div>
|
||||
<div title="TimelineDisplayManager" creator="Ichthyostega" modifier="Ichthyostega" created="201611280235" modified="201612011740" tags="spec GuiPattern img" changecount="4">
|
||||
<pre>//guide and control the concrete display properties of the various sub components (tracks, clips) comprising a timeline display.//
|
||||
|
||||
|
|
|
|||
|
|
@ -16463,7 +16463,7 @@
|
|||
<node CREATED="1486763350764" ID="ID_1309124609" MODIFIED="1518487921075" TEXT="Aufgaben">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1486763355739" ID="ID_745725927" MODIFIED="1518487921075" TEXT="Bindung für Aktionen bereitstellen"/>
|
||||
<node CREATED="1488566356774" ID="ID_969011841" MODIFIED="1518487921075" TEXT="Ankerpunkt zum Bilden der Commands">
|
||||
<node CREATED="1488566356774" ID="ID_969011841" MODIFIED="1539259004138" TEXT="Ankerpunkt zum Bilden der Commands">
|
||||
<arrowlink COLOR="#706a9a" DESTINATION="ID_1461875887" ENDARROW="Default" ENDINCLINATION="-923;-789;" ID="Arrow_ID_457540370" STARTARROW="None" STARTINCLINATION="806;300;"/>
|
||||
<node CREATED="1488566405248" ID="ID_355508260" MODIFIED="1518487921075" TEXT="auffinden der Command-IDs">
|
||||
<node CREATED="1489191528425" ID="ID_1331796226" MODIFIED="1533253376724" TEXT="Neuer Service hierfür in Proc">
|
||||
|
|
@ -16534,6 +16534,14 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1539258904290" ID="ID_803293419" MODIFIED="1539258934515" TEXT="hier ein Platzhalter">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1539258936270" ID="ID_966612516" MODIFIED="1539258941417" TEXT="was ist eine Timeline hier?"/>
|
||||
<node CREATED="1539258947005" ID="ID_1624061939" MODIFIED="1539259061347" TEXT="Thema: Slave-Timeline (vertagt)">
|
||||
<arrowlink COLOR="#bfb5ce" DESTINATION="ID_1028434909" ENDARROW="Default" ENDINCLINATION="-1311;-1012;" ID="Arrow_ID_1339464508" STARTARROW="None" STARTINCLINATION="505;-47;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1486763385591" ID="ID_6651258" MODIFIED="1518487921076" TEXT="Zugang zum Asset-Management"/>
|
||||
<node CREATED="1486763391862" ID="ID_1568245541" MODIFIED="1518487921076" TEXT="Zugang zur Konfiguration"/>
|
||||
|
|
@ -17759,7 +17767,8 @@
|
|||
<node CREATED="1487466005952" ID="ID_465457871" MODIFIED="1518487921080" TEXT="Scheitern in-Memory unwahrscheinlich"/>
|
||||
<node CREATED="1487466021990" ID="ID_212586057" MODIFIED="1518487921080" TEXT="Controller muß aktiv mitwirken"/>
|
||||
</node>
|
||||
<node CREATED="1487466040524" ID="ID_646231524" MODIFIED="1518487921080" TEXT="Timeline-Slave in der Session">
|
||||
<node CREATED="1487466040524" ID="ID_646231524" MODIFIED="1539258873718" TEXT="Timeline-Slave in der Session">
|
||||
<linktarget COLOR="#5793da" DESTINATION="ID_646231524" ENDARROW="Default" ENDINCLINATION="186;21;" ID="Arrow_ID_431447729" SOURCE="ID_1227431164" STARTARROW="None" STARTINCLINATION="26;-3;"/>
|
||||
<node CREATED="1487466064520" ID="ID_1607482571" MODIFIED="1518487921080" TEXT="macht Doppelung explizit"/>
|
||||
<node CREATED="1487466078743" ID="ID_1134944510" MODIFIED="1518487921080" TEXT="Problem mit den Element-IDs"/>
|
||||
<node CREATED="1487466090917" ID="ID_1611961848" MODIFIED="1518487921080" TEXT="UI -> Session ist unproblematisch"/>
|
||||
|
|
@ -17771,12 +17780,29 @@
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1487466966478" ID="ID_479759046" MODIFIED="1518487921080" TEXT="#1083 solution for Timeline slave">
|
||||
<icon BUILTIN="bell"/>
|
||||
<node CREATED="1487466997138" ID="ID_1028434909" MODIFIED="1518487921080" TEXT="auf später vertagt">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1487466997138" ID="ID_1028434909" MODIFIED="1539259040094" TEXT="auf später vertagt">
|
||||
<linktarget COLOR="#bfb5ce" DESTINATION="ID_1028434909" ENDARROW="Default" ENDINCLINATION="-1311;-1012;" ID="Arrow_ID_1339464508" SOURCE="ID_1624061939" STARTARROW="None" STARTINCLINATION="505;-47;"/>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1487466986523" ID="ID_39632539" MODIFIED="1518487921080" TEXT="zunächst unterbinden">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1539258805201" ID="ID_1227431164" MODIFIED="1539258881356" TEXT="gegenwärtig Präferenz erkennbar....">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...für die dritte Lösung, die Repräsentation bereits in der Session
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<arrowlink COLOR="#5793da" DESTINATION="ID_646231524" ENDARROW="Default" ENDINCLINATION="186;21;" ID="Arrow_ID_431447729" STARTARROW="None" STARTINCLINATION="26;-3;"/>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -27590,7 +27616,7 @@
|
|||
<node CREATED="1488672534372" FOLDED="true" HGAP="78" ID="ID_1920838120" MODIFIED="1538871116339" TEXT="core commands" VSHIFT="21">
|
||||
<icon BUILTIN="prepare"/>
|
||||
<node CREATED="1488672580926" ID="ID_1920974710" MODIFIED="1518487921091" TEXT="konzeptionell">
|
||||
<node CREATED="1488672621585" ID="ID_1461875887" MODIFIED="1518487921091" TEXT="Command-cycle">
|
||||
<node CREATED="1488672621585" ID="ID_1461875887" MODIFIED="1539259004138" TEXT="Command-cycle">
|
||||
<linktarget COLOR="#706a9a" DESTINATION="ID_1461875887" ENDARROW="Default" ENDINCLINATION="-923;-789;" ID="Arrow_ID_457540370" SOURCE="ID_969011841" STARTARROW="None" STARTINCLINATION="806;300;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1488672838499" ID="ID_1617972329" MODIFIED="1518487921091" TEXT="Interaktionen">
|
||||
|
|
|
|||
Loading…
Reference in a new issue