Timeline: building the layout and control structure (#1016)

This marks start of actual work on this fundamental task.

Extensive planning from 2016 is available, together with an almost
complete diff binding for the entities involved into timeline display.
This commit is contained in:
Fischlurch 2018-10-08 02:26:38 +02:00
parent 3f87ef43ec
commit 08ed6e1ee8
14 changed files with 358 additions and 77 deletions

View file

@ -25,6 +25,7 @@
** Implementation details of clip presentation management.
**
** @todo WIP-WIP-WIP as of 12/2016
** @todo as of 10/2018 timeline display in the UI is rebuilt to match the architecture
**
*/

View file

@ -44,6 +44,7 @@
** clips, just to indicate some content is actually present in this part of the timeline.
**
** @todo WIP-WIP-WIP as of 12/2016
** @todo as of 10/2018 timeline display in the UI is rebuilt to match the architecture
**
*/

View file

@ -25,6 +25,7 @@
** Implementation details of global timeline layout management.
**
** @todo WIP-WIP-WIP as of 12/2016
** @todo as of 10/2018 timeline display in the UI is rebuilt to match the architecture
**
*/

View file

@ -72,6 +72,7 @@
** [MVP pattern](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter) here.
**
** @todo WIP-WIP-WIP as of 12/2016
** @todo as of 10/2018 timeline display in the UI is rebuilt to match the architecture
**
*/

View file

@ -25,6 +25,7 @@
** Implementation of marker display.
**
** @todo WIP-WIP-WIP as of 12/2016
** @todo as of 10/2018 timeline display in the UI is rebuilt to match the architecture
**
*/

View file

@ -30,6 +30,7 @@
** may receive messages over the UI-Bus.
**
** @todo WIP-WIP-WIP as of 12/2016
** @todo as of 10/2018 timeline display in the UI is rebuilt to match the architecture
**
*/

View file

@ -32,7 +32,7 @@
** - thus we get a rather simple mapping, with some fixed attributes and no
** flexible child collection. The root track is implemented as TrackPresenter.
**
** @todo as of 12/2016 a complete rework of the timeline display is underway
** @todo as of 10/2018 timeline display in the UI is rebuilt to match the architecture
** @see TimelineWidget
**
*/

View file

@ -45,7 +45,7 @@
** - these in turn manage a set of ClipPresenter entities
** - and those presenters care for injecting suitable widgets into the TimelineWidget's parts.
**
** @todo as of 12/2016 a complete rework of the timeline display is underway
** @todo as of 10/2018 timeline display in the UI is rebuilt to match the architecture
**
*/

View file

@ -24,7 +24,7 @@
/** @file timeline/timeline-widget.cpp
** Implementation details of Lumiera's timeline display widget.
**
** @todo as of 12/2016 a complete rework of the timeline display is underway
** @todo as of 10/2018 a complete rework of the timeline display is underway
** @see timeline-controller.cpp
**
*/

View file

@ -47,7 +47,7 @@
** is `sigc::trackable`, which means after destruction any further signals
** will be silently ignored.
**
** @todo as of 12/2016 a complete rework of the timeline display is underway
** @todo as of 10/2018 a complete rework of the timeline display is underway
**
*/

View file

@ -25,6 +25,7 @@
** Implementation details of track presentation management.
**
** @todo WIP-WIP-WIP as of 12/2016
** @todo as of 10/2018 timeline display in the UI is rebuilt to match the architecture
**
*/
@ -85,10 +86,11 @@ namespace timeline {
/**
* @note we distinguish between the contents of our three nested child collections
* based on the symbolic type field send in the Record type within the diff representation
* based on the symbolic type field sent in the Record type within the diff representation
* - "Marker" designates a Marker object
* - "Clip" designates a Clip placed on this track
* - "Fork" designates a nested sub-track
* @see TimelineController::buildMutator() for a basic explanation of the data binding mechanism
*/
void
TrackPresenter::buildMutator (TreeMutator::Handle buffer)

View file

@ -24,7 +24,7 @@
/** @file track-presenter.hpp
** Presentation control element to model and manage a track within the timeline UI.
** In the Lumiera timeline UI, we are mixing two different scope of concerns: For one,
** we have the globally tangible scope of actual session elements an operations performed
** we have the globally tangible scope of actual session elements and operations performed
** on those. And then there are more local considerations regarding the "mechanics" of the
** UI elements, their state and immediate feedback to user interactions. The _Presenter_ --
** as known from the [MVP pattern](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter) --
@ -36,9 +36,10 @@
** part of layout building, delegating to a mostly passive GTK widget for the actual display.
** This way it becomes possible to manage the actual UI resources on a global level, avoiding to
** represent potentially several thousand individual elements as GTK entities, while at any time
** only several can be visible and active as far as user interaction is concerned.
** only a small number of elements can be visible and active as far as user interaction is concerned.
**
** @todo WIP-WIP-WIP as of 12/2016
** @todo as of 10/2018 timeline display in the UI is rebuilt to match the architecture
**
*/

View file

@ -1997,7 +1997,7 @@ Some observations:
* Optimisation achieves access times around ≈ 1ns
</pre>
</div>
<div title="DesignDecisions" modifier="Ichthyostega" created="200801062209" modified="201505310104" tags="decision design discuss Concepts" changecount="5">
<div title="DesignDecisions" modifier="Ichthyostega" created="200801062209" modified="201810071730" tags="decision design discuss Concepts" changecount="6">
<pre>Along the way of working out various [[implementation details|ImplementationDetails]], decisions need to be made on how to understand the different facilities and entities and how to tackle some of the problems. This page is mainly a collection of keywords, summaries and links to further the discussion. And the various decisions should allways be read as proposals to solve some problem at hand...
''Everything is an object'' &amp;mdash; yes of course, that's a //no-brainer,// todays. Rather, important is to note what is not &quot;an object&quot;, meaning it can't be arranged arbitrarily
@ -2011,6 +2011,8 @@ We ''separate'' processing (rendering) and configuration (building). The [[Build
''Objects are [[placed|Placement]] rather'' than assembled, connected, wired, attached. This is more of a rule-based approach and gives us one central metaphor and abstraction, allowing us to treat everything in an uniform manner. You can place it as you like, and the builder tries to make sense out of it, silently disabling what doesn't make sense.
An [[Sequence]] is just a collection of configured and placed objects (and has no additional, fixed structure). [[&quot;Tracks&quot; (forks)|Fork]] form a mere organisational grid, they are grouping devices not first-class entities (a track doesn't &quot;have&quot; a pipe or &quot;is&quot; a video track and the like; it can be configured to behave in such manner by using placements though). [[Pipes|Pipe]] are hooks for making connections and are the only facility to build processing chains. We have global pipes, and each clip is built around a lokal [[source port|ClipSourcePort]] &amp;mdash; and that's all. No special &quot;media viewer&quot; and &quot;arranger&quot;, no special role for media sources, no commitment to some fixed media stream types (video and audio). All of this is sort of pushed down to be configuration, represented as asset of some kind. For example, we have [[processing pattern|ProcPatt]] assets to represent the way of building the source network for reading from some media file (including codecs treated like effect plugin nodes)
The model in Proc-Layer is rather an //internal model.// What is exposed globally, is a structural understanding of this model. In this structural understanding, there are Assets and ~MObjects, which both represent the flip side of the same coin: Assets relate to bookkeeping, while ~MObjects relate to building and manipulation of the model. In the actual data represntation within the HighLevelModel, we settled upon some internal reductions, preferring either the //Asset side// or the //~MObject side// to represent some relevant entities. See &amp;rarr; AssetModelConnection.
Actual ''media data and handling'' is abstracted rigorously. Media is conceived as being stream-like data of distinct StreamType. When it comes to more low-level media handling, we build on the DataFrame abstraction. Media processing isn't the focus of Lumiera; we organise the processing but otherwise ''rely on media handling libraries.'' In a similar vein, multiplicity is understood as type variation. Consequently, we don't build an audio and video &quot;section&quot; and we don't even have audio tracks and video tracks. Lumiera uses tracks and clips, and clips build on media, but we're able to deal with [[multichannel|MultichannelMedia]] mixed-typed media natively.
Lumiera is not a connection manager, it is not an audio-visual real time performance instrument, and it doesn't aim at running presentations. It's an ''environment for assembling and building up'' something (an edit, a session, a piece of media work). This decision is visible at various levels and contexts, like a reserved attitude towards hardware acceleration (it //will// be supported, but reliable proxy editing has a higher priority), or the decision, not to incorporate system level ports and connections directly into the session model (they are mapped to [[output designations|OutputDesignation]] rather)
@ -2686,7 +2688,7 @@ As starting point, {{red{in winter 2016/17}}} the old (broken) timeline panel wa
After that initial experiments, my focus shifted to the still unsatisfactory top-level UI structure, and I am working towards an initial integration with Proc-Layer since then.
</pre>
</div>
<div title="GuiClipWidget" creator="Ichthyostega" modifier="Ichthyostega" created="201611180114" modified="201708311414" tags="GuiPattern design draft" changecount="25">
<div title="GuiClipWidget" creator="Ichthyostega" modifier="Ichthyostega" created="201611180114" modified="201810071842" tags="GuiPattern design draft" changecount="27">
<pre>//The representation of a [[media clip|Clip]] for manipulation by the user within the UI.//
Within Lumiera, a clip is conceived as a //chunk of media,// which can be handled in compound. Clip as such is an abstract concept, which is treated with minimal assumptions...
* we know that a clip has //media content,// which need not be uniform and can be inherently structured (e.g. several media, several channels)
@ -2720,7 +2722,7 @@ Starting from the architecture as predetermined by the UI-Bus, it is clear that
!!!how to carry out the clip appearances
Initially, one could think that we'd need to build several widgets to realise the wide variety of clip appearances. But in fact it turns out that we're able to reshape a single base widget to encompass all the necessary presentation styles. This base widget is a simple, one-element container, with {{{Gtk::Frame}}} being the most obvious pick. This gives us already a rectangular covered space, and the ability to add a label widget, optionally with controlled alignment of the label. All the more elaborate presentation styles can be achieved by adding a canvas widget into this frame and then placing additional stuff on top of that. The only tricky part arises in overview display, when just some clip rectangle can stand-in for a whole series of clips, which themselves remain hidden as UI elements.
A prime consideration regarding this whole clip presentation strategy is the performance concern. It is quite common for movie edits to encompass several hundred individual clips. Combined with several tracks and an elaborate audio edit, it may well happen that we end up with thousands of individual UI objects. If treated naively, this load might seriously degrade the responsiveness of the interface. Thus we need to care for the relevant infrastructure to enable optimisation of the display. For that reason, the memory footprint of the ClipPresenter and the basic widget has to be kept as small as possible. And moreover, since we do our own layout management in the timeline display, in theory it is possible any time just to add those widgets to the enclosing GTK container, which are actually about to become visible. (if we follow this approach, a problem yet to be solved is how to remove widgets falling out of sight, since removing N widgets easily turns into a quadratic operation).
A prime consideration regarding this whole clip presentation strategy is the performance concern. It is quite common for movie edits to encompass several hundred individual clips. Combined with several tracks and an elaborate audio edit, it may well happen that we end up with thousands of individual UI objects. If treated naively, this load might seriously degrade the responsiveness of the interface. Thus we need to care for the relevant infrastructure to enable optimisation of the display. For that reason, the memory footprint of the ClipPresenter and the basic widget has to be kept as small as possible. And moreover, since we do our own layout management in the timeline display, in theory it is possible //only to add// those widgets to the enclosing GTK container, which are //actually about to become visible.// (if we follow this approach, a problem yet to be solved is how to remove widgets falling out of sight, since removing N widgets easily turns into a quadratic operation).
!clip content rendering
In a typical editing application, the user can expect to get some visual clue regarding the media content of a clip. For example, sound clips can be visualised as waveform, while movie clips might feature a sequence of images taken from the video. Our intention is to ''use our own rendering engine'' to produce these thumbnails. In fact, our engine is perfectly suited for this task: it has precisely the necessary media decoding and rendering abilities, plus it offers an elaborate system of priorities and deadlines, allowing to throttle the load produced by thumbnail generation. In addition to all those qualities, our engine is planned to be complemented by an &quot;intelligent&quot; frame cache, which, given proper parametrisation, ensures the frequently requested thumbnails will be available for quick display. For this approach to work, we need to provide some infrastructure
@ -2730,7 +2732,7 @@ In a typical editing application, the user can expect to get some visual clue re
* we still need to work out how buffer management for this task will be handled; it should be a derivative of typical buffer management for display rendering.
* the clip widget needs to provide a simple placeholder drawing to mark the respective space in the interface, until the actual preview arrives.
To start with, mostly this means to avoid a naive approach, like having code in the UI to pull in some graphics from media files. We certainly won't just render every media channel blindly. Rather, we acknowledge that we'll have a //strategy,// depending on the media content and some further parameters of the clip. This might well just be a single ''pivot image'' chosen explicitly by the editor to represent a given take. And the actual implementation of content preview rendering will largely be postponed until we get our rendering engine into a roughly working state.
To start with, mostly this means to avoid a naive approach, like having code in the UI to pull in some graphics from media files. We certainly won't just render every media channel blindly. Rather, we acknowledge that we'll have a //strategy,// depending on the media content and some further parameters of the clip. This might well just be a single ''pivot image'' chosen explicitly by the editor to represent a given take. Seemingly, the proper place to hose that display strategy is ''within the session model'', not within the UI. And the actual implementation of content preview rendering will largely be postponed until we get our rendering engine into a roughly working state.
</pre>
</div>
<div title="GuiCommandAccess" creator="Ichthyostega" modifier="Ichthyostega" created="201704131649" modified="201704171822" tags="spec draft GuiPattern GuiIntegration" changecount="22">
@ -3423,7 +3425,7 @@ 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="201803102227" tags="GuiPattern design decision draft img" changecount="50">
<div title="GuiTimelineView" creator="Ichthyostega" modifier="Ichthyostega" created="201410160100" modified="201810071735" tags="GuiPattern design decision draft img" changecount="51">
<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
@ -3436,7 +3438,7 @@ Several timeline views may be present at the same time -- and there is not neces
Session, Binding and Sequence are the mandatory ingredients.
!Basic layout
[&gt;img[Clip presentation control|draw/UI-TimelineLayout-1.png]]The representation is split into a ''Header pane'' exposing structure and configuration, and a ''Content pane'' extending in time. The ''Time ruler'' running alongside the top of the content pane represents the //position in time.// Beyond this temporal dimension, the content area is conceived as a flexible working space. This working space //can// be structured hierarchically -- when interacting with the GUI, hierarchical nesting will be created and collapsed on demand. Contrast this with conventional editing applications which are built upon the rigid notion of &quot;Tracks&quot;: Lumiera is based on //Pipes// rather than Tracks.
[&gt;img[Clip presentation control|draw/UI-TimelineLayout-1.png]]The representation is split into a ''Header pane'' exposing structure and configuration, and a ''Content pane'' extending in time. The ''Time ruler'' running alongside the top of the content pane represents the //position in time.// Beyond this temporal dimension, the content area is conceived as a flexible working space. This working space //can// be structured hierarchically -- when interacting with the GUI, hierarchical nesting will be created and collapsed on demand. Contrast this with conventional editing applications which are built upon the rigid notion of &quot;Tracks&quot;: Lumiera is based on //Pipes// and //Scopes// rather than Tracks.
In the temporal dimension, there is the usual scrolling and zooming of content, and possibly a selected time range, and after establishing a ViewerPlayConnection, there is an effective playback location featured as a &quot;Playhead&quot;
The workspace dimension (vertical layout) is more like a ''Fork'', which can be expanded recursively. More specifically, each strip or layer or &quot;track&quot; can be featured in //collapsed// or //expanded state.//
@ -3469,7 +3471,7 @@ In the most general case, there can be per-track content and nested content at t
&amp;rarr; important question: how to [[organise the widgets|GuiTimelineWidgetStructure]]
</pre>
</div>
<div title="GuiTimelineWidgetStructure" creator="Ichthyostega" modifier="Ichthyostega" created="201410250002" modified="201808311806" tags="GuiPattern discuss decision impl" changecount="86">
<div title="GuiTimelineWidgetStructure" creator="Ichthyostega" modifier="Ichthyostega" created="201410250002" modified="201810071821" tags="GuiPattern discuss decision impl" changecount="87">
<pre>The Timeline is probably the most prominent place in the GUI where we need to come up with a custom UI design.
Instead of combining standard components in one of the well-known ways, here we need to come up with our own handling solution -- which also means to write one or several custom GTK widgets. Thus the question of layout and screen space division and organisation becomes a crucial design decision. The ~GTK-2 Gui, as implemented currently, did already take some steps along this route, yet this kind of decision should be cast and documented explicitly (be it after the fact).
@ -3514,7 +3516,7 @@ Applying a diff changes the structure, that is, the structure of the local model
* when a model element happens to be destructed, the corresponding display element has to be removed.
* such might be triggered indirectly, by clean-up of leftovers, since the {{{DiffApplicator}}} re-orders and deletes by leaving some data behind
* the diff also re-orders model elements, which does not have an immediate effect on the display, but needs to be interpreted separately.
Together this means we get a fix up stage after model changes, where the display is re-adjusted to fit the new situation. This works in concert with the [[display manager|TimelineDisplayManager]] representing only those elements as actual widgets, which get a real chance to become visible. This way we can build on the assumption that the actual number of widgets to be managed any time remains so small as to get away with simple linear list processing. It remains to be seen how far this assumption can be pushed -- the problem is that the GTK container components don't support anything beyond such simple linear list processing; there isn't even a call to remove all child widgets of a container in a single pass.
Wrapping this together we get a fix up stage after model changes, where the display is re-adjusted to fit the new situation. This works in concert with the [[display manager|TimelineDisplayManager]] representing only those elements as actual widgets, which get a real chance to become visible. This way we can build on the assumption that the actual number of widgets to be managed any time remains so small as to get away with simple linear list processing. It remains to be seen how far this assumption can be pushed -- the problem is that the GTK container components don't support anything beyond such simple linear list processing; there isn't even a call to remove all child widgets of a container in a single pass.
</pre>
</div>
<div title="GuiTopLevel" creator="Ichthyostega" modifier="Ichthyostega" created="201701261944" modified="201708311555" tags="GuiPattern spec draft" changecount="12">
@ -3545,7 +3547,7 @@ Together, these entities form a cohesive circle of collaborating global managers
Within the UI-Layer, we distinguish between //core concerns and UI concerns,// the latter encompassing anything related to UI mechanics, presentation state, interaction state and InteractionControl. Core concerns are delegated and handled by the lower layers of the architecture, while the UI plays a passive role. This is a fundamental decision and leads to a dichotomy, where -- depending on the context -- a given part might operate as a slave related to core concerns, while taking a leading or controlling position when it comes to UI concerns. Deliberately, both sides are bridged by being interwoven into the same entities, and any entity of relevance to core concerns is also attached to the UI-Bus. Regarding the build-up of the UI, parts and elements are made visible and accessible through widgets, but widgets are created, installed and operated by controllers. The top-level circle defines global actions, which are passed through the relevant controller to come into effect.
</pre>
</div>
<div title="HighLevelModel" modifier="Ichthyostega" created="200808152311" modified="201505310109" tags="Model spec design discuss img" changecount="2">
<div title="HighLevelModel" modifier="Ichthyostega" created="200808152311" modified="201810071649" tags="Model spec design discuss img" changecount="3">
<pre>While the low-level model holds the data used for carrying out the actual media data processing (=rendering), the high-level model is what the user works upon when performing edit operations through the GUI (or script driven in &amp;raquo;headless mode&amp;laquo;). Its building blocks and combination rules determine largely what structures can be created within the [[Session]].
On the whole, it is a collection of [[media objects|MObjects]] stuck together and arranged by [[placements|Placement]].
@ -3577,12 +3579,12 @@ Within Lumiera, &quot;tracks&quot; (actually implemented as [[forks|Fork]]) are
As placements have the ability to cooperate and derive any missing placement specifications, this creates a hierarchical structure throughout the session, where parts on any level behave similar if applicable. For example, when a fork (&quot;track&quot;) is anchored to some external entity (label, sync point in sound, etc), all objects placed relatively to this track will adjust and follow automatically. This relation between the track tree and the individual objects is especially important for the wiring, which, if not defined locally within an ~MObject's placement, is derived by searching up this track tree and utilizing the wiring plug locating pins found there, if applicable. In the default configuration, the placement of an sequence's root track contains a wiring plug for video and another wiring plug for audio. This setup is sufficient for getting every object within this sequence wired up automatically to the correct global output pipe. Moreover, when adding another wiring plug to some sub track, we can intercept and reroute the connections of all objects creating output of this specific stream type within this track and on all child tracks.
Besides routing to a global pipe, wiring plugs can also connect to the source port of an ''meta-clip''. In this example session, the outputs of ~Seq-2 as defined by locating pins in it's root track's placement, are directed to the source ports of a [[meta-cllip|VirtualClip]] placed within ~Seq-1. Thus, within ~Seq-1, the contents of ~Seq-2 appear like a pseudo-media, from which the (meta) clip has been taken. They can be adorned with effects and processed further completely similar to a real clip.
Besides routing to a global pipe, wiring plugs can also connect to the source port of an ''meta-clip''. In this example session, the outputs of 'Seq-2' as defined by locating pins in it's root track's placement, are directed to the source ports of a [[meta-cllip|VirtualClip]] placed within 'Seq-1'. Thus, within 'Seq-1', the contents of 'Seq-2' appear like a pseudo-media, from which the (meta) clip has been taken. They can be adorned with effects and processed further completely similar to a real clip.
Finally, this example shows an ''automation'' data set controlling some parameter of an effect contained in one of the global pipes. From the effect's POV, the automation is simply a ParamProvider, i.e a function yielding a scalar value over time. The automation data set may be implemented as a bézier curve, or by a mathematical function (e.g. sine or fractal pseudo random) or by some captured and interpolated data values. Interestingly, in this example the automation data set has been placed relatively to the meta clip (albeit on another track), thus it will follow and adjust when the latter is moved.
</pre>
</div>
<div title="ImplementationDetails" modifier="Ichthyostega" created="200708080322" modified="201712101756" tags="overview" changecount="6">
<div title="ImplementationDetails" modifier="Ichthyostega" created="200708080322" modified="201810071720" tags="overview" changecount="8">
<pre>This wiki page is the entry point to detail notes covering some technical decisions, details and problems encountered in the course of the years, while building the Lumiera application.
* [[Packages, Interfaces and Namespaces|InterfaceNamespaces]]
@ -3619,6 +3621,7 @@ Finally, this example shows an ''automation'' data set controlling some paramete
* how to shape the GuiConnection: with the help of a mediating GuiModel, which acts as UI-Bus, exchanging TreeDiffModel messages for GuiModelUpdate
* shape the Backbone of the UI, the UI-Bus and the GuiTopLevel
* build a framework for InteractionControl in the User Interface
* establish a flexible layout structure for the GuiTimelineView
</pre>
</div>
<div title="ImplementationGuidelines" modifier="Ichthyostega" created="200711210531" modified="201310132316" tags="Concepts design discuss" changecount="1">
@ -5950,7 +5953,7 @@ The backbone of the Lumiera UI is arranged such as to produce a data feed with s
Run as part of the UiCoreServices, it is attached to the UI-Bus and listens to all ''state mark messages'' to distil the notion of relevant current state.
On a basic level, the task is to group and store those messages in a way as to overwrite previous messages with new updates on the level of individual properties. Beyond that, there is the sensitivity to context, presentation perspective and work site, which means to impose an additional structure on this basic ''state snapshot'', to extract and replicate structured sets of state information.</pre>
</div>
<div title="ProblemsTodo" modifier="Ichthyostega" created="200708050524" modified="201602162247" tags="design discuss" changecount="7">
<div title="ProblemsTodo" modifier="Ichthyostega" created="200708050524" modified="201810071724" tags="design discuss" changecount="9">
<pre>Open issues, Things to be worked out, Problems still to be solved...
!!Parameter Handling
@ -5987,9 +5990,10 @@ We need to work out guidelines for dealing with operations going on simultaneous
!!the perils of data representation
In software development, there is a natural inclination to cast &quot;reality&quot; into data, the structure of which has to be nailed down first. Then, everyone might &quot;access reality&quot; and work on it. Doing so might sounds rational, natural, even self-evident and sound, yet as compelling as it might be, this approach is fundamentally flawed. It is known to work well only for small, &quot;handsome&quot; projects, where you clearly know up-front what you're up to: namely to get away, after being paid, before anyone realises the fact you've built something that looks nice but does not fit.
So the challenge of any major undertaking in software construction is //not to build an universal model.// Rather, we want to arrive at something that can be made to fit. Over and over again.
So the challenge of any major undertaking in software construction is //not to build an universal model of truth.// Rather, we want to arrive at something that can be made to fit.
Which can be remoulded, over and over again, without breaking down.
More specifically, we start building something, and while under way, our understanding sharpens, and we learn that actually we want something entirely different. Yet still we know what we need and we don't want just something arbitrary. There is a constant core in what we're headed at, and we need the ability to //settle matters.// We need a backbone to work against, a skeleton to support us with its firmness, while also offering joints and links, to be bent and remoulded without breakage. The distinctive idea to make such possible is the principle of subsidiarity. The links and joints between autonomous centres can be shaped to be in fact an exchange, a handover based on common understanding of the //specific matters to deal with,// at that given joint.
More specifically, we start building something, and while under way, our understanding sharpens, and we learn that actually we want something entirely different. Yet still we know what we need and we don't want just something arbitrary. There is a constant core in what we're headed at, and we need the ability to //settle matters.// We need a backbone to work against, a skeleton to support us with its firmness, while also offering joints and links, to be bent and remoulded without breakage. The distinctive idea to make such possible is the principle of ''Subsidiarity''. The links and joints between autonomous centres can be shaped to be in fact an exchange, a handover based on common understanding of the //specific matters to deal with,// at that given joint.
</pre>
</div>
<div title="Proc-Layer" modifier="Ichthyostega" created="200802031814" modified="201702101931" tags="def" changecount="1">
@ -6895,7 +6899,7 @@ The concurrent nature of the problem is what makes this simple task somewhat mor
* referrals to already known sequence points might be added later, and also from different threads ({{red{WIP 3/14}}} not sure if we need to expand on this observation -- see CalcStream &amp;hArr; Segment)
This structure looks like requiring a message passing approach: we can arrange for determining the actual dependencies and fulfillment state late, within a single consumer, which is responsible for invoking the triggers. The other clients (threads) just pass messages into a possibly lock-free messageing channel.</pre>
</div>
<div title="Session" modifier="Ichthyostega" created="200712100525" modified="201612150345" tags="def SessionLogic" changecount="4">
<div title="Session" modifier="Ichthyostega" created="200712100525" modified="201810071709" tags="def SessionLogic" changecount="7">
<pre>The Session contains all information, state and objects to be edited by the User. From a users view, the Session is synonymous to the //current Project//. It can be [[saved and loaded|SessionLifecycle]]. The individual Objects within the Session, i.e. Clips, Media, Effects, are contained in one (or several) collections within the Session, which we call [[Sequence]].
&amp;rarr; [[Session design overview|SessionOverview]]
&amp;rarr; Structure of the SessionInterface
@ -6910,6 +6914,7 @@ The Session object is a singleton &amp;mdash; actually it is a »~PImpl«-Facade
* the [[Asset subsystem|AssetManager]] is tightly integrated; besides, there are some SessionServices for internal use
&amp;rarr; see [[relation of timeline, sequences and objects|TimelineSequences]]
&amp;rarr; see //clarification of some fine points// regarding [[relation of Assets and MObjects|AssetModelConnection]]
!Session lifecycle
@ -6962,7 +6967,7 @@ The session and the models rely on dependent objects beeing kept updated and con
&amp;rarr; see [[details here...|ModelDependencies]]
</pre>
</div>
<div title="SessionInterface" modifier="Ichthyostega" created="200904242108" modified="201701140715" tags="SessionLogic GuiIntegration design draft discuss" changecount="9">
<div title="SessionInterface" modifier="Ichthyostega" created="200904242108" modified="201810071716" tags="SessionLogic GuiIntegration design draft discuss" changecount="12">
<pre>&quot;Session Interface&quot; has several meanings, depending on the context.
;application global
:the session is a data structure, which can be saved and loaded, and manipulated by [[sending commands|CommandHandling]]
@ -7006,6 +7011,10 @@ To the contrary, the ''generic'' API is related to a //current location (state),
* to add
* to destroy
!!relation of [[Assets|Asset]] and MObjects
{{red{WARNING -- still under construction 10/2018}}}. Basically these segments represent the flip sides of the same coin. //Assets relate to the bookkeeping view.// However, we build a data model, and thus use representations for the involved entities. This creates some redundancy at times; we made an effort to reduce this redundancy and minimise the necessary data model representation. This means, some things are rather handled and represented as Assets, while other stuff is primarily dealt with as ~MObject.
&amp;rarr; see //discussion of some fine points// regarding [[relation of Assets and MObjects|AssetModelConnection]]
!!exploring session contents
Typically, the list of timelines serves as starting point for exploring the model. Basically, any kind of object could be attached everywhere, but both the GUI and the Builder rely on assumptions regarding the [[overall model structure|HighLevelModel]] &amp;mdash; silently ignoring content not in line. This corresponds to the //dedicated API functions// on specific kinds of objects, which allow to retrieve content according to this assumed structure conveniently and with strong typing. From the timeline and the associated sequence you'll get the root track, and from there the sub-tracks and the clips located on them, which in turn may have attachments (effects, transitions, labels).
On the other hand, arbitrary structures can be retrieved using the //generic API:// Contents can be discovered on the QueryFocus, which automatically follows the //point of mutation,// but can be moved to any point using the {{{QueryFocus::attach(obj)}}} function.

View file

@ -38,15 +38,18 @@
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1501940591109" ID="ID_1925240675" MODIFIED="1538838811130" TEXT="#1099 DemoGuiRoundtrip">
<node COLOR="#338800" CREATED="1501940591109" ID="ID_1925240675" MODIFIED="1538939588120" TEXT="#1099 DemoGuiRoundtrip">
<arrowlink COLOR="#e5e53f" DESTINATION="ID_1007296291" ENDARROW="Default" ENDINCLINATION="-931;34;" ID="Arrow_ID_1440938291" STARTARROW="None" STARTINCLINATION="-7;605;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1501940627280" ID="ID_1675066241" MODIFIED="1518487921039" TEXT="Dummy-Code im UI"/>
<node CREATED="1501940632871" ID="ID_189611570" MODIFIED="1518487921039" TEXT="Dummy Proc-Command"/>
<node CREATED="1501940639479" ID="ID_1314787910" MODIFIED="1518487921039" TEXT="komplettes Ping-Pong"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1481320590214" ID="ID_635303062" MODIFIED="1538840404782" TEXT="DummySessionConnection">
<arrowlink COLOR="#f9b709" DESTINATION="ID_1343270939" ENDARROW="Default" ENDINCLINATION="-9;-46;" ID="Arrow_ID_1867016690" STARTARROW="None" STARTINCLINATION="-34;70;"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1481320590214" ID="ID_635303062" MODIFIED="1538939700299" TEXT="#1042 DummySessionConnection">
<arrowlink COLOR="#f9b709" DESTINATION="ID_1343270939" ENDARROW="Default" ENDINCLINATION="-36;-73;" ID="Arrow_ID_1867016690" STARTARROW="None" STARTINCLINATION="-34;70;"/>
<arrowlink COLOR="#f9b709" DESTINATION="ID_330280074" ENDARROW="Default" ENDINCLINATION="-37;-88;" ID="Arrow_ID_779644313" STARTARROW="None" STARTINCLINATION="-34;70;"/>
<arrowlink COLOR="#f9b709" DESTINATION="ID_791449946" ENDARROW="Default" ENDINCLINATION="-842;-559;" ID="Arrow_ID_1347689482" STARTARROW="None" STARTINCLINATION="-81;124;"/>
<arrowlink COLOR="#f9b709" DESTINATION="ID_1478381189" ENDARROW="Default" ENDINCLINATION="-1009;-357;" ID="Arrow_ID_1072548081" STARTARROW="None" STARTINCLINATION="-87;103;"/>
<icon BUILTIN="idea"/>
<node CREATED="1481320639544" ID="ID_1440497947" MODIFIED="1518487921039" TEXT="Singleton"/>
<node CREATED="1481320642455" ID="ID_1938045938" MODIFIED="1518487921039" TEXT="hat fake Session content"/>
@ -70,8 +73,7 @@
<b><font color="#e01f1f">TODO</font></b>: Infos zusammentragen und dokumentieren
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1538839205056" ID="ID_1118716259" MODIFIED="1538839221765" TEXT="Lumiera Website -- Design-Sektion">
<icon BUILTIN="info"/>
@ -80,16 +82,17 @@
<node CREATED="1531419242634" ID="ID_1022049727" MODIFIED="1531419624076" TEXT="Interfaces hochfahren">
<arrowlink COLOR="#effa97" DESTINATION="ID_687951877" ENDARROW="Default" ENDINCLINATION="-545;-1640;" ID="Arrow_ID_1500281313" STARTARROW="None" STARTINCLINATION="-189;37;"/>
</node>
<node CREATED="1531419250684" ID="ID_1850773836" MODIFIED="1531419638651" TEXT="Verbindungsstrukturen installieren">
<arrowlink COLOR="#fee998" DESTINATION="ID_176564515" ENDARROW="Default" ENDINCLINATION="-1211;-7367;" ID="Arrow_ID_157207334" STARTARROW="None" STARTINCLINATION="-579;123;"/>
<node CREATED="1531419250684" ID="ID_1850773836" MODIFIED="1538938884955" TEXT="Verbindungsstrukturen installieren">
<arrowlink COLOR="#fee998" DESTINATION="ID_176564515" ENDARROW="Default" ENDINCLINATION="-1211;-7367;" ID="Arrow_ID_157207334" STARTARROW="None" STARTINCLINATION="-617;103;"/>
</node>
</node>
</node>
<node CREATED="1538938685096" HGAP="138" ID="ID_511824194" MODIFIED="1538938734343" TEXT="gr&#xfc;nden" VSHIFT="42">
<node CREATED="1477784793993" ID="ID_1868522177" MODIFIED="1518487921039" TEXT="Umbau">
<linktarget COLOR="#bc4930" DESTINATION="ID_1868522177" ENDARROW="Default" ENDINCLINATION="221;282;" ID="Arrow_ID_600425644" SOURCE="ID_707273464" STARTARROW="None" STARTINCLINATION="1925;196;"/>
<icon BUILTIN="hourglass"/>
<node CREATED="1477784813895" FOLDED="true" ID="ID_1343270939" MODIFIED="1538840432473" TEXT="Model durch UI-Bus ersetzen">
<linktarget COLOR="#f9b709" DESTINATION="ID_1343270939" ENDARROW="Default" ENDINCLINATION="-9;-46;" ID="Arrow_ID_1867016690" SOURCE="ID_635303062" STARTARROW="None" STARTINCLINATION="-34;70;"/>
<node CREATED="1477784813895" FOLDED="true" ID="ID_1343270939" MODIFIED="1538939012850" TEXT="Model durch UI-Bus ersetzen">
<linktarget COLOR="#f9b709" DESTINATION="ID_1343270939" ENDARROW="Default" ENDINCLINATION="-36;-73;" ID="Arrow_ID_1867016690" SOURCE="ID_635303062" STARTARROW="None" STARTINCLINATION="-34;70;"/>
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1343270939" ENDARROW="Default" ENDINCLINATION="-197;638;" ID="Arrow_ID_1686519160" SOURCE="ID_202253849" STARTARROW="Default" STARTINCLINATION="-83;-1020;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1481320683706" ID="ID_1226263415" MODIFIED="1518487921039" TEXT="kl&#xe4;ren, wo der Bus aufgeh&#xe4;ngt wird">
@ -1299,8 +1302,8 @@
</node>
<node COLOR="#338800" CREATED="1493753249399" FOLDED="true" HGAP="64" ID="ID_1023343635" MODIFIED="1538840125563" TEXT="#1098 hand-over in UI-Thread" VSHIFT="83">
<linktarget COLOR="#a75677" DESTINATION="ID_1023343635" ENDARROW="Default" ENDINCLINATION="-317;-24;" ID="Arrow_ID_274836249" SOURCE="ID_1146157818" STARTARROW="None" STARTINCLINATION="-647;-66;"/>
<linktarget COLOR="#84c6b8" DESTINATION="ID_1023343635" ENDARROW="Default" ENDINCLINATION="21;233;" ID="Arrow_ID_1372135725" SOURCE="ID_995145542" STARTARROW="None" STARTINCLINATION="237;0;"/>
<linktarget COLOR="#7caaa8" DESTINATION="ID_1023343635" ENDARROW="Default" ENDINCLINATION="2513;3565;" ID="Arrow_ID_1832047032" SOURCE="ID_489078622" STARTARROW="Default" STARTINCLINATION="3463;134;"/>
<linktarget COLOR="#84c6b8" DESTINATION="ID_1023343635" ENDARROW="Default" ENDINCLINATION="21;233;" ID="Arrow_ID_1372135725" SOURCE="ID_995145542" STARTARROW="None" STARTINCLINATION="237;0;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1501804992301" ID="ID_1647263044" MODIFIED="1538263469665" TEXT="schedule event"/>
<node CREATED="1501804985286" ID="ID_320977714" MODIFIED="1538263469665" TEXT="GTK-Mechanismus">
@ -1581,7 +1584,7 @@
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1501939212693" FOLDED="true" ID="ID_1007296291" MODIFIED="1538839532670" TEXT="#1099 DemoGuiRoundtrip">
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1501939212693" FOLDED="true" ID="ID_1007296291" MODIFIED="1538939588120" TEXT="#1099 DemoGuiRoundtrip">
<linktarget COLOR="#e5e53f" DESTINATION="ID_1007296291" ENDARROW="Default" ENDINCLINATION="-931;34;" ID="Arrow_ID_1440938291" SOURCE="ID_1925240675" STARTARROW="None" STARTINCLINATION="-7;605;"/>
<linktarget COLOR="#f0eca5" DESTINATION="ID_1007296291" ENDARROW="Default" ENDINCLINATION="881;2029;" ID="Arrow_ID_1736540527" SOURCE="ID_1456159316" STARTARROW="None" STARTINCLINATION="418;-44;"/>
<linktarget COLOR="#ebf0a5" DESTINATION="ID_1007296291" ENDARROW="Default" ENDINCLINATION="-3154;1704;" ID="Arrow_ID_1091720734" SOURCE="ID_1098045534" STARTARROW="None" STARTINCLINATION="1627;38;"/>
@ -2119,8 +2122,7 @@
erscheint <b>definitiv nicht</b>&#160;als CSS-Node
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node COLOR="#338800" CREATED="1537661787387" ID="ID_20967740" MODIFIED="1538263469668" TEXT="vorl&#xe4;ufig hart verdrahten">
@ -2309,8 +2311,7 @@
dieser Fall d&#252;rfte h&#228;ufiger auftreten
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node CREATED="1538618157537" ID="ID_1728464265" MODIFIED="1538707385953" TEXT="Problem: kaputtes Stylesheet">
@ -2356,8 +2357,7 @@
normalen 'light' destkop-theme verwenden kann
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
</node>
@ -3909,8 +3909,7 @@
#1174 UI self diagnostics window
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="button_ok"/>
</node>
</node>
@ -5184,12 +5183,151 @@
</node>
<node CREATED="1477784829157" ID="ID_1998357180" MODIFIED="1518487921059" TEXT="Icon-Laden modernisieren"/>
<node CREATED="1477784821925" ID="ID_1871474250" MODIFIED="1518487921059" TEXT="Styling aufr&#xe4;umen">
<node CREATED="1477784846162" ID="ID_1164942946" MODIFIED="1534336601077" TEXT="siehe Info zum CssProvider">
<arrowlink COLOR="#a9b4c1" DESTINATION="ID_1810760662" ENDARROW="Default" ENDINCLINATION="1600;-25;" ID="Arrow_ID_1610122569" STARTARROW="None" STARTINCLINATION="-756;164;"/>
<node CREATED="1477784846162" ID="ID_1164942946" MODIFIED="1538938881467" TEXT="siehe Info zum CssProvider">
<arrowlink COLOR="#a9b4c1" DESTINATION="ID_1810760662" ENDARROW="Default" ENDINCLINATION="1600;-25;" ID="Arrow_ID_1610122569" STARTARROW="None" STARTINCLINATION="-840;95;"/>
</node>
</node>
</node>
<node CREATED="1534336252375" HGAP="27" ID="ID_1755017021" MODIFIED="1534336284856" TEXT="Hilfsmittel">
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1538938570760" HGAP="57" ID="ID_1165433334" MODIFIED="1538938919530" TEXT="Neubau" VSHIFT="41">
<font NAME="SansSerif" SIZE="16"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538938751743" ID="ID_243888746" MODIFIED="1538939191206">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
&#187;die <b>Timeline</b>&#171;
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1477784813895" ID="ID_330280074" MODIFIED="1538939829985">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<u>Aufgabe</u>: <i><font size="4" color="#821b58">populate timeline</font></i>
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#f9b709" DESTINATION="ID_330280074" ENDARROW="Default" ENDINCLINATION="-37;-88;" ID="Arrow_ID_779644313" SOURCE="ID_635303062" STARTARROW="None" STARTINCLINATION="-34;70;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538942842294" ID="ID_1752483939" MODIFIED="1538942914255" TEXT="minimalen Diff f&#xfc;r eine Timeline">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538942872402" ID="ID_932408081" MODIFIED="1538942917252" TEXT="Panel wird erzeugt">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538942878609" ID="ID_689625343" MODIFIED="1538942918061" TEXT="Timeline-Tab wird belegt">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538942890792" ID="ID_642469734" MODIFIED="1538942918893" TEXT="hat einen Track">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538942901590" ID="ID_758238752" MODIFIED="1538942919668" TEXT="ein Clip erscheint">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538943061633" ID="ID_1972040317" MODIFIED="1538943071622" TEXT="minimale Feedback-Aktionen">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538943095252" ID="ID_1784185766" MODIFIED="1538943103396" TEXT="drag clip">
<icon BUILTIN="hourglass"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538943104651" ID="ID_948012732" MODIFIED="1538943111616" TEXT="delete clip">
<icon BUILTIN="hourglass"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538940061190" ID="ID_1231562526" MODIFIED="1538942179606" TEXT="Timeline Panel bauen">
<arrowlink COLOR="#fec680" DESTINATION="ID_712786561" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_433721169" STARTARROW="None" STARTINCLINATION="860;206;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538941158698" ID="ID_513093052" MODIFIED="1538941168250" TEXT="vorl&#xe4;ufiger Allokator">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538941253181" ID="ID_1144811315" MODIFIED="1538941261333" TEXT="multi-Tab-Anzeige">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538940061190" ID="ID_1325225528" MODIFIED="1538942777237" TEXT="Aktion re-Locate">
<arrowlink COLOR="#fec680" DESTINATION="ID_1992201258" ENDARROW="Default" ENDINCLINATION="-784;-81;" ID="Arrow_ID_126634995" STARTARROW="None" STARTINCLINATION="651;0;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538940061190" ID="ID_977311190" MODIFIED="1538942745433" TEXT="Aktion re-Populate">
<arrowlink COLOR="#fec680" DESTINATION="ID_501539344" ENDARROW="Default" ENDINCLINATION="-1280;-81;" ID="Arrow_ID_938812574" STARTARROW="None" STARTINCLINATION="335;22;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538939781588" ID="ID_1327960211" MODIFIED="1538941006508" TEXT="Timeline Widget bauen">
<arrowlink COLOR="#7d91d6" DESTINATION="ID_1613745412" ENDARROW="Default" ENDINCLINATION="-63;-32;" ID="Arrow_ID_1377777978" STARTARROW="None" STARTINCLINATION="-144;16;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538941097739" ID="ID_368023009" MODIFIED="1538941108922" TEXT="Klassen anlegen und verdrahten">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538941119416" ID="ID_1730845721" MODIFIED="1538941137142" TEXT="Panel">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538941122447" ID="ID_1577513149" MODIFIED="1538941137758" TEXT="Widget">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538941130390" ID="ID_813480105" MODIFIED="1538941138254" TEXT="Controller">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538941132710" ID="ID_878237612" MODIFIED="1538941138658" TEXT="Presenter">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538940061190" ID="ID_693425928" MODIFIED="1538940850051" TEXT="Timeline-Controller bauen">
<arrowlink COLOR="#fec680" DESTINATION="ID_391329400" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_1839172502" STARTARROW="None" STARTINCLINATION="407;0;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538940061190" ID="ID_1570849604" MODIFIED="1538940618074" TEXT="Presenter bauen">
<arrowlink COLOR="#fec680" DESTINATION="ID_1306244096" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_951723874" STARTARROW="None" STARTINCLINATION="407;0;"/>
<arrowlink COLOR="#fec680" DESTINATION="ID_834517953" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_483670351" STARTARROW="None" STARTINCLINATION="407;0;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538939792267" ID="ID_1104238784" MODIFIED="1538940929797" TEXT="Pr&#xe4;sentation bauen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538940061190" ID="ID_758873433" MODIFIED="1538941897853" TEXT="Layout-Control">
<arrowlink COLOR="#fec680" DESTINATION="ID_562532566" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_130009025" STARTARROW="None" STARTINCLINATION="407;0;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538940061190" ID="ID_1131206858" MODIFIED="1538940576088" TEXT="konkrete Anzeige">
<arrowlink COLOR="#fec680" DESTINATION="ID_1999928728" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_506785204" STARTARROW="None" STARTINCLINATION="407;0;"/>
<arrowlink COLOR="#fec680" DESTINATION="ID_1240926804" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_435369727" STARTARROW="None" STARTINCLINATION="407;0;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538938796825" ID="ID_1428561726" MODIFIED="1538938927517">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
&#187;der <b>Viewer</b>&#171;
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="hourglass"/>
</node>
<node CREATED="1538938835228" ID="ID_1454224639" MODIFIED="1538938956750" TEXT="&#xbb;Properties&#xab;">
<icon BUILTIN="hourglass"/>
</node>
<node CREATED="1538938838779" ID="ID_112266805" MODIFIED="1538938959925" TEXT="&#xbb;Assets&#xab;">
<icon BUILTIN="hourglass"/>
</node>
<node CREATED="1538938942294" ID="ID_59353951" MODIFIED="1538938962079" TEXT="&#xbb;Hilfe&#xab;">
<icon BUILTIN="hourglass"/>
</node>
</node>
</node>
<node CREATED="1534336252375" HGAP="216" ID="ID_1755017021" MODIFIED="1538938719705" TEXT="Hilfsmittel" VSHIFT="6">
<node CREATED="1534336320373" ID="ID_708892482" MODIFIED="1534336324377" TEXT="Grundbausteine">
<node CREATED="1537659522174" ID="ID_1583657425" MODIFIED="1537659720796" TEXT="primary widgets">
<richcontent TYPE="NOTE"><html>
@ -5222,7 +5360,9 @@
</ul>
</body>
</html></richcontent>
<node CREATED="1537659866783" ID="ID_1613745412" MODIFIED="1537659869395" TEXT="Timeline"/>
<node CREATED="1537659866783" ID="ID_1613745412" MODIFIED="1538941006509" TEXT="Timeline">
<linktarget COLOR="#7d91d6" DESTINATION="ID_1613745412" ENDARROW="Default" ENDINCLINATION="-63;-32;" ID="Arrow_ID_1377777978" SOURCE="ID_1327960211" STARTARROW="None" STARTINCLINATION="-144;16;"/>
</node>
<node CREATED="1537659870415" ID="ID_1181375258" MODIFIED="1537659875274" TEXT="Property-Grid"/>
</node>
<node CREATED="1537659527741" ID="ID_856745741" MODIFIED="1537659851138" TEXT="building blocks">
@ -5485,8 +5625,7 @@
Im Zweifelsfall den GTK+ Inspector verwenden!
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
</node>
@ -5795,8 +5934,8 @@
<icon BUILTIN="info"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485457021805" ID="ID_1476863246" MODIFIED="1534511297619" TEXT="Gtk::UiManager ist deprecated">
<linktarget COLOR="#6d7495" DESTINATION="ID_1476863246" ENDARROW="Default" ENDINCLINATION="1126;-247;" ID="Arrow_ID_1941890495" SOURCE="ID_384827553" STARTARROW="None" STARTINCLINATION="-231;14;"/>
<linktarget COLOR="#ae182e" DESTINATION="ID_1476863246" ENDARROW="Default" ENDINCLINATION="283;-164;" ID="Arrow_ID_1851148216" SOURCE="ID_206480879" STARTARROW="Default" STARTINCLINATION="481;0;"/>
<linktarget COLOR="#6d7495" DESTINATION="ID_1476863246" ENDARROW="Default" ENDINCLINATION="1126;-247;" ID="Arrow_ID_1941890495" SOURCE="ID_384827553" STARTARROW="None" STARTINCLINATION="-231;14;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1493768617653" ID="ID_292624709" MODIFIED="1518487921060" TEXT="f&#xe4;llt anscheinend ersatzlos weg"/>
<node CREATED="1493768625564" ID="ID_1620270152" MODIFIED="1518487921060" TEXT="Verdacht: stattdessen Gtk::Application"/>
@ -5865,7 +6004,7 @@
<font NAME="SansSerif" SIZE="15"/>
<icon BUILTIN="idea"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485549049388" FOLDED="true" ID="ID_530209145" MODIFIED="1538872130122" TEXT="Problem: Aktionen binden">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485549049388" FOLDED="true" ID="ID_530209145" MODIFIED="1538942497161" TEXT="Problem: Aktionen binden">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_530209145" ENDARROW="Default" ENDINCLINATION="-17;-195;" ID="Arrow_ID_626063593" SOURCE="ID_1022779645" STARTARROW="None" STARTINCLINATION="9;270;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1485549075929" ID="ID_1887127861" MODIFIED="1518487921060" TEXT="spezifische Aktionen">
@ -6473,7 +6612,7 @@
<node CREATED="1487034180712" ID="ID_1371598611" MODIFIED="1518487921063" TEXT="und jedes genau wei&#xdf;, was die andern k&#xf6;nnen"/>
</node>
</node>
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1504393149140" FOLDED="true" HGAP="38" ID="ID_48107354" MODIFIED="1538872134971" TEXT="Addressierung" VSHIFT="55">
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1504393149140" FOLDED="true" HGAP="38" ID="ID_48107354" MODIFIED="1538942531699" TEXT="Addressierung" VSHIFT="55">
<arrowlink COLOR="#4f5d91" DESTINATION="ID_974158229" ENDARROW="Default" ENDINCLINATION="383;-2505;" ID="Arrow_ID_1832380552" STARTARROW="None" STARTINCLINATION="-597;127;"/>
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="pencil"/>
@ -6707,7 +6846,7 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504393295097" FOLDED="true" ID="ID_65709251" MODIFIED="1538871827278" TEXT="wie erreicht man einen ComponentView?">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504393295097" FOLDED="true" ID="ID_65709251" MODIFIED="1538942527510" TEXT="wie erreicht man einen ComponentView?">
<arrowlink COLOR="#524f7b" DESTINATION="ID_385011645" ENDARROW="Default" ENDINCLINATION="353;-22;" ID="Arrow_ID_186523581" STARTARROW="None" STARTINCLINATION="1270;350;"/>
<linktarget COLOR="#717686" DESTINATION="ID_65709251" ENDARROW="Default" ENDINCLINATION="-8;-209;" ID="Arrow_ID_1510990213" SOURCE="ID_173722644" STARTARROW="None" STARTINCLINATION="92;95;"/>
<icon BUILTIN="pencil"/>
@ -16343,7 +16482,7 @@
<node CREATED="1504371285442" ID="ID_634013434" MODIFIED="1518487921076" TEXT="Allokation von ComponentViews">
<arrowlink DESTINATION="ID_948587913" ENDARROW="Default" ENDINCLINATION="87;-34;" ID="Arrow_ID_1863964331" STARTARROW="None" STARTINCLINATION="157;10;"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1486768073223" FOLDED="true" HGAP="38" ID="ID_1457876217" MODIFIED="1538872169254" TEXT="konkret" VSHIFT="16">
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1486768073223" FOLDED="true" HGAP="38" ID="ID_1457876217" MODIFIED="1538942417171" TEXT="konkret" VSHIFT="16">
<icon BUILTIN="hourglass"/>
<node CREATED="1486768080502" ID="ID_1759740464" MODIFIED="1518487921076" TEXT="Binde-Kontext f&#xfc;r globale Aktionen"/>
<node CREATED="1486768086869" ID="ID_173538981" MODIFIED="1518487921076" TEXT="Idee/Konzept f&#xfc;r kontextabh&#xe4;ngige Aktionen">
@ -16704,7 +16843,16 @@
<icon BUILTIN="help"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504193329508" FOLDED="true" ID="ID_629544763" MODIFIED="1538872241376" TEXT="Aufgabe: docking panels">
<node CREATED="1538942597728" ID="ID_539326328" MODIFIED="1538942601611" TEXT="globale Aktionen">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480694550601" ID="ID_1992201258" MODIFIED="1538942777237" TEXT="re-locate Timeline View">
<linktarget COLOR="#fec680" DESTINATION="ID_1992201258" ENDARROW="Default" ENDINCLINATION="-784;-81;" ID="Arrow_ID_126634995" SOURCE="ID_1325225528" STARTARROW="None" STARTINCLINATION="651;0;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1538942638306" ID="ID_1819831711" MODIFIED="1538942662869" TEXT="View f&#xfc;r ein (weiterhin) bestehendes Model-Element in ein anderes Fenster umziehen">
<icon BUILTIN="info"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504193329508" FOLDED="true" ID="ID_629544763" MODIFIED="1538941661558" TEXT="Aufgabe: docking panels">
<linktarget COLOR="#b0466a" DESTINATION="ID_629544763" ENDARROW="Default" ENDINCLINATION="-849;-1967;" ID="Arrow_ID_1826422316" SOURCE="ID_1922506931" STARTARROW="None" STARTINCLINATION="690;23;"/>
<linktarget COLOR="#d65a8e" DESTINATION="ID_629544763" ENDARROW="Default" ENDINCLINATION="-176;0;" ID="Arrow_ID_232994989" SOURCE="ID_196345177" STARTARROW="None" STARTINCLINATION="-162;-93;"/>
<icon BUILTIN="pencil"/>
@ -16979,8 +17127,8 @@
<node CREATED="1485555999110" ID="ID_376092703" MODIFIED="1518487921078" TEXT="top-level macht GtkLumiera im ctor"/>
<node CREATED="1485556011260" ID="ID_1618308499" MODIFIED="1518487921078" TEXT="backlink zum Manager"/>
<node CREATED="1486943522965" ID="ID_36527267" MODIFIED="1518487921078" TEXT="top-level-Kontext">
<linktarget COLOR="#4f547b" DESTINATION="ID_36527267" ENDARROW="Default" ENDINCLINATION="-424;-2038;" ID="Arrow_ID_134552555" SOURCE="ID_984712012" STARTARROW="None" STARTINCLINATION="2623;0;"/>
<linktarget COLOR="#8c95b2" DESTINATION="ID_36527267" ENDARROW="Default" ENDINCLINATION="138;-548;" ID="Arrow_ID_1284182756" SOURCE="ID_576215675" STARTARROW="None" STARTINCLINATION="883;143;"/>
<linktarget COLOR="#4f547b" DESTINATION="ID_36527267" ENDARROW="Default" ENDINCLINATION="-424;-2038;" ID="Arrow_ID_134552555" SOURCE="ID_984712012" STARTARROW="None" STARTINCLINATION="2623;0;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<node CREATED="1488494592496" ID="ID_1586259377" MODIFIED="1518487921078" TEXT="UI-Bus"/>
<node CREATED="1488494579346" ID="ID_1182508289" MODIFIED="1518487921078" TEXT="UiManager"/>
@ -17813,7 +17961,7 @@
</node>
</node>
</node>
<node CREATED="1480606888860" HGAP="25" ID="ID_899101975" MODIFIED="1518487921081" TEXT="Implementierung" VSHIFT="14">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480606888860" HGAP="25" ID="ID_899101975" MODIFIED="1538938514862" TEXT="Implementierung" VSHIFT="14">
<icon BUILTIN="pencil"/>
<node CREATED="1480606950372" ID="ID_1502878943" MODIFIED="1518487921081" TEXT="Grundstruktur">
<node CREATED="1480639404070" ID="ID_506539007" MODIFIED="1518487921081" TEXT="HeaderPane">
@ -17867,8 +18015,14 @@
<node CREATED="1480807594822" ID="ID_333819085" MODIFIED="1518487921081" TEXT="f&#xfc;hre mal einen Marker-Typ ein"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1538957611472" ID="ID_1996849782" MODIFIED="1538957931290" TEXT="erwartet gem&#xe4;&#xdf; UI Modell-Schema">
<arrowlink COLOR="#919fc6" DESTINATION="ID_165150753" ENDARROW="Default" ENDINCLINATION="-902;329;" ID="Arrow_ID_651613049" STARTARROW="None" STARTINCLINATION="823;93;"/>
<icon BUILTIN="info"/>
</node>
<node CREATED="1480694550601" ID="ID_391329400" MODIFIED="1518487921081" TEXT="TimelineController">
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480694550601" ID="ID_391329400" MODIFIED="1538940840604" TEXT="TimelineController">
<linktarget COLOR="#fec680" DESTINATION="ID_391329400" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_1839172502" SOURCE="ID_693425928" STARTARROW="None" STARTINCLINATION="407;0;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1480694557112" ID="ID_786517324" MODIFIED="1518487921081" TEXT="Widget ist Startpunkt"/>
<node CREATED="1480694571310" ID="ID_1188786444" MODIFIED="1518487921081" TEXT="aber Controller wird Chef"/>
<node CREATED="1480725633399" ID="ID_1475661668" MODIFIED="1518487921081" TEXT="mu&#xdf; erst mal Controller implementieren">
@ -18286,11 +18440,15 @@
</node>
</node>
</node>
<node CREATED="1480606985087" ID="ID_885244508" MODIFIED="1518487921082" TEXT="Layout-Manager">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480694550601" ID="ID_562532566" MODIFIED="1538941874096" TEXT="Layout-Manager">
<linktarget COLOR="#fec680" DESTINATION="ID_562532566" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_130009025" SOURCE="ID_758873433" STARTARROW="None" STARTINCLINATION="407;0;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1480639469981" ID="ID_983391388" MODIFIED="1518487921082" TEXT="Abstraktionen"/>
<node CREATED="1480639473324" ID="ID_191170582" MODIFIED="1518487921082" TEXT="eval pass"/>
</node>
<node CREATED="1480606973713" ID="ID_163713350" MODIFIED="1518487921082" TEXT="Track-Presenter">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480694550601" ID="ID_1306244096" MODIFIED="1538940563330" TEXT="Track-Presenter">
<linktarget COLOR="#fec680" DESTINATION="ID_1306244096" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_951723874" SOURCE="ID_1570849604" STARTARROW="None" STARTINCLINATION="407;0;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1480741594101" ID="ID_1017414696" MODIFIED="1518487921082" TEXT="mit doppeltem Display-Kontext verbinden"/>
<node CREATED="1480741545196" ID="ID_1657879480" MODIFIED="1518487921082" TEXT="TrackWidget">
<node CREATED="1480741552611" ID="ID_1987203186" MODIFIED="1518487921082" TEXT="erzeugen"/>
@ -18309,11 +18467,15 @@
</node>
</node>
</node>
<node CREATED="1480607029673" ID="ID_619470641" MODIFIED="1518487921082" TEXT="Track-Anzeige">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480694550601" ID="ID_1999928728" MODIFIED="1538940662367" TEXT="Track-Anzeige">
<linktarget COLOR="#fec680" DESTINATION="ID_1999928728" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_506785204" SOURCE="ID_1131206858" STARTARROW="None" STARTINCLINATION="407;0;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1480607033512" ID="ID_1815699851" MODIFIED="1518487921082" TEXT="Kopf"/>
<node CREATED="1480607035712" ID="ID_1405339006" MODIFIED="1518487921082" TEXT="Rumpf"/>
</node>
<node CREATED="1480621574221" ID="ID_1217785331" MODIFIED="1518487921082" TEXT="ClipPresenter">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480694550601" ID="ID_834517953" MODIFIED="1538940576088" TEXT="ClipPresenter">
<linktarget COLOR="#fec680" DESTINATION="ID_834517953" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_483670351" SOURCE="ID_1570849604" STARTARROW="None" STARTINCLINATION="407;0;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1480741362389" ID="ID_328415412" MODIFIED="1518487921082" TEXT="ClipWidget">
<node CREATED="1480741370347" ID="ID_1275685315" MODIFIED="1518487921082" TEXT="erzeugen"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480741374451" ID="ID_1270677756" MODIFIED="1518487921082" TEXT="in Display injizieren">
@ -18344,6 +18506,14 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480694550601" ID="ID_1240926804" MODIFIED="1538940674093" STYLE="fork" TEXT="Clip-Anzeige">
<linktarget COLOR="#fec680" DESTINATION="ID_1240926804" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_435369727" SOURCE="ID_1131206858" STARTARROW="None" STARTINCLINATION="407;0;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1538940683586" ID="ID_1478100178" MODIFIED="1538940686198" TEXT="placeholder"/>
<node CREATED="1538940686978" ID="ID_1747675588" MODIFIED="1538940689470" TEXT="abridged"/>
<node CREATED="1538940690154" ID="ID_1132412756" MODIFIED="1538940691885" TEXT="collapsed"/>
<node CREATED="1538940692545" ID="ID_1827979765" MODIFIED="1538940694085" TEXT="expanded"/>
</node>
<node CREATED="1480607059909" ID="ID_703281238" MODIFIED="1518487921083" TEXT="Control"/>
</node>
</node>
@ -18486,6 +18656,9 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538938500754" ID="ID_715902958" MODIFIED="1538938508786" TEXT="Implementierung">
<icon BUILTIN="hourglass"/>
</node>
</node>
<node CREATED="1476376943985" HGAP="52" ID="ID_1422206856" MODIFIED="1518487921083" TEXT="Viewer" VSHIFT="10">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
@ -18585,6 +18758,13 @@
<arrowlink COLOR="#929fdf" DESTINATION="ID_1717772756" ENDARROW="Default" ENDINCLINATION="-34;-71;" ID="Arrow_ID_1343685046" STARTARROW="None" STARTINCLINATION="-79;76;"/>
<icon BUILTIN="yes"/>
</node>
<node CREATED="1538941704952" HGAP="12" ID="ID_429142366" MODIFIED="1538941723212" TEXT="konkrete Panels" VSHIFT="26">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480694550601" ID="ID_712786561" MODIFIED="1538942194204" TEXT="Timeline-Panel">
<linktarget COLOR="#fec680" DESTINATION="ID_712786561" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_433721169" SOURCE="ID_1231562526" STARTARROW="None" STARTINCLINATION="860;206;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node CREATED="1477342616175" HGAP="37" ID="ID_954058801" MODIFIED="1518487921084" TEXT="Workspace" VSHIFT="33">
<node CREATED="1477342624942" FOLDED="true" ID="ID_56920104" MODIFIED="1538871582823" TEXT="ist-Zustand">
@ -18886,8 +19066,8 @@
<node COLOR="#338800" CREATED="1531417429342" ID="ID_991918611" MODIFIED="1531417547125" TEXT="als Subsystem">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1531417434195" ID="ID_176564515" MODIFIED="1531419538503" TEXT="Strukturen hochfahren">
<linktarget COLOR="#fee998" DESTINATION="ID_176564515" ENDARROW="Default" ENDINCLINATION="-1211;-7367;" ID="Arrow_ID_157207334" SOURCE="ID_1850773836" STARTARROW="None" STARTINCLINATION="-579;123;"/>
<node CREATED="1531417434195" ID="ID_176564515" MODIFIED="1538938884955" TEXT="Strukturen hochfahren">
<linktarget COLOR="#fee998" DESTINATION="ID_176564515" ENDARROW="Default" ENDINCLINATION="-1211;-7367;" ID="Arrow_ID_157207334" SOURCE="ID_1850773836" STARTARROW="None" STARTINCLINATION="-617;103;"/>
<node CREATED="1531417551148" ID="ID_579526750" MODIFIED="1531417556199" TEXT="UI top-level"/>
<node CREATED="1531417577048" ID="ID_371378063" MODIFIED="1531417583067" TEXT="Rahmen bereitstellen"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1531419217662" ID="ID_745789650" MODIFIED="1531419680313" TEXT="#1147 establish UI start-up sequence">
@ -18933,7 +19113,7 @@
</node>
<node CREATED="1531417463128" HGAP="24" ID="ID_1392317817" MODIFIED="1538871500891" TEXT="mit Inhalt beladen" VSHIFT="37">
<linktarget COLOR="#665692" DESTINATION="ID_1392317817" ENDARROW="Default" ENDINCLINATION="-1993;202;" ID="Arrow_ID_609042013" SOURCE="ID_1997153046" STARTARROW="Default" STARTINCLINATION="1943;108;"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1531417714894" FOLDED="true" ID="ID_527465217" MODIFIED="1538871518590" TEXT="Inhalts-Empfang etablieren">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1531417714894" FOLDED="true" ID="ID_527465217" MODIFIED="1538942056588" TEXT="Inhalts-Empfang etablieren">
<linktarget COLOR="#30327c" DESTINATION="ID_527465217" ENDARROW="Default" ENDINCLINATION="25;-45;" ID="Arrow_ID_1130203410" SOURCE="ID_350697541" STARTARROW="None" STARTINCLINATION="-75;21;"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1531423717866" ID="ID_1400324647" MODIFIED="1531423724074" TEXT="#1150 GUI content connector">
@ -19677,7 +19857,26 @@
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1531423784657" ID="ID_1434932428" MODIFIED="1531423792205" TEXT="Inhalts-Empfang wieder deaktivieren">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1531423892371" ID="ID_917754325" MODIFIED="1531423899603" TEXT="Dummy-Implementierung">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480694550601" ID="ID_501539344" MODIFIED="1538942745433" TEXT="re-populate Content">
<linktarget COLOR="#fec680" DESTINATION="ID_501539344" ENDARROW="Default" ENDINCLINATION="-1280;-81;" ID="Arrow_ID_938812574" SOURCE="ID_977311190" STARTARROW="None" STARTINCLINATION="335;22;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1538942086509" ID="ID_1492693885" MODIFIED="1538942121013" TEXT="wenn ein UI-Element f&#xfc;r eine bestehende Entit&#xe4;t wiederaufgebaut wird">
<icon BUILTIN="info"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1477784813895" ID="ID_791449946" MODIFIED="1538939608849">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<u>Aufgabe</u>: <i><font color="#821b58" size="4">inject dummy content</font></i>
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#f9b709" DESTINATION="ID_791449946" ENDARROW="Default" ENDINCLINATION="-842;-559;" ID="Arrow_ID_1347689482" SOURCE="ID_635303062" STARTARROW="None" STARTINCLINATION="-81;124;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1533403103076" ID="ID_294556843" MODIFIED="1533403127590" TEXT="hart gecodetes Diff im Command erzeugen">
<linktarget COLOR="#e34459" DESTINATION="ID_294556843" ENDARROW="Default" ENDINCLINATION="287;0;" ID="Arrow_ID_1612526412" SOURCE="ID_488294111" STARTARROW="None" STARTINCLINATION="190;339;"/>
@ -19765,6 +19964,45 @@
</html></richcontent>
</node>
</node>
<node CREATED="1538956606744" ID="ID_165150753" MODIFIED="1538957931290" TEXT="erwartete Modell-Struktur">
<linktarget COLOR="#919fc6" DESTINATION="ID_165150753" ENDARROW="Default" ENDINCLINATION="-641;482;" ID="Arrow_ID_593956858" SOURCE="ID_580392349" STARTARROW="None" STARTINCLINATION="1108;116;"/>
<linktarget COLOR="#919fc6" DESTINATION="ID_165150753" ENDARROW="Default" ENDINCLINATION="-902;329;" ID="Arrow_ID_651613049" SOURCE="ID_1996849782" STARTARROW="None" STARTINCLINATION="823;93;"/>
<node CREATED="1538956633404" ID="ID_266268175" MODIFIED="1538956634704" TEXT="Root">
<node CREATED="1538956680006" ID="ID_774059518" MODIFIED="1538956688318" TEXT="TODO Assets?"/>
<node CREATED="1538956635652" ID="ID_410609041" MODIFIED="1538956794482" TEXT="Sequence{Timeline}"/>
</node>
<node CREATED="1538956703435" ID="ID_275497582" MODIFIED="1538956705502" TEXT="Timeline">
<node CREATED="1538956945754" ID="ID_1216887436" MODIFIED="1538956953906" TEXT="&quot;name&quot;"/>
<node CREATED="1538956717369" ID="ID_21520084" MODIFIED="1538956955642" TEXT="&quot;fork&quot; = Track"/>
<node CREATED="1538956709026" ID="ID_326010297" MODIFIED="1538956792235" TEXT="Sequence{Marker}"/>
</node>
<node CREATED="1538956769298" ID="ID_1319425167" MODIFIED="1538956771477" TEXT="Track">
<node CREATED="1538956775249" ID="ID_1811758034" MODIFIED="1538956789843" TEXT="Sequence{Track}">
<node CREATED="1538957049292" ID="ID_1618683787" MODIFIED="1538957055215" TEXT="if typeID = &quot;Fork&quot;"/>
</node>
<node CREATED="1538956796214" ID="ID_337674261" MODIFIED="1538956801905" TEXT="Sequence{Clip}">
<node CREATED="1538957049292" ID="ID_100537539" MODIFIED="1538957063726" TEXT="if typeID = &quot;Clip&quot;"/>
</node>
<node CREATED="1538956802701" ID="ID_840384156" MODIFIED="1538956809576" TEXT="Sequence{Marker}">
<node CREATED="1538957049292" ID="ID_1955645432" MODIFIED="1538957077700" TEXT="if typeID = &quot;Marker&quot;"/>
</node>
</node>
<node CREATED="1538956769298" ID="ID_721666986" MODIFIED="1538957197892" TEXT="Clip">
<node CREATED="1538956775249" ID="ID_1108737612" MODIFIED="1538957210090" TEXT="Sequence{Channel}">
<node CREATED="1538957049292" ID="ID_977385993" MODIFIED="1538957231583" TEXT="if typeID = &quot;Channel&quot;"/>
</node>
<node CREATED="1538956796214" ID="ID_698134552" MODIFIED="1538957216250" TEXT="Sequence{Effect}">
<node CREATED="1538957049292" ID="ID_339553268" MODIFIED="1538957226344" TEXT="if typeID = &quot;Effect&quot;"/>
</node>
<node CREATED="1538956802701" ID="ID_1715846940" MODIFIED="1538956809576" TEXT="Sequence{Marker}">
<node CREATED="1538957049292" ID="ID_98299428" MODIFIED="1538957077700" TEXT="if typeID = &quot;Marker&quot;"/>
</node>
</node>
<node CREATED="1538957120867" ID="ID_99923131" MODIFIED="1538957193931" TEXT="Marker">
<node CREATED="1538956945754" ID="ID_30162898" MODIFIED="1538956953906" TEXT="&quot;name&quot;"/>
<node CREATED="1538956945754" ID="ID_39934842" MODIFIED="1538957154865" TEXT="&quot;kind&quot; = LOOP|MARK"/>
</node>
</node>
</node>
<node CREATED="1523019349923" ID="ID_353542665" MODIFIED="1523019373947" TEXT="UI-Koordinaten (UICoord)">
<node CREATED="1523019476817" ID="ID_1756924881" MODIFIED="1523019520204" TEXT="abstrahierte UI-Topologie">
@ -26935,7 +27173,7 @@
<node CREATED="1485548878292" ID="ID_49934573" MODIFIED="1518487921090" TEXT="Broadcast"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1453545812389" HGAP="43" ID="ID_202253849" MODIFIED="1538839405827" TEXT="Core-Services" VSHIFT="2">
<node COLOR="#435e98" CREATED="1453545812389" HGAP="43" ID="ID_202253849" MODIFIED="1538939217527" TEXT="Core-Services" VSHIFT="2">
<richcontent TYPE="NOTE"><html>
<head>
@ -26949,7 +27187,7 @@
</p>
</body>
</html></richcontent>
<arrowlink DESTINATION="ID_1343270939" ENDARROW="Default" ENDINCLINATION="-197;638;" ID="Arrow_ID_1686519160" STARTARROW="Default" STARTINCLINATION="-83;-1020;"/>
<arrowlink COLOR="#a9b4c1" DESTINATION="ID_1343270939" ENDARROW="Default" ENDINCLINATION="-197;638;" ID="Arrow_ID_1686519160" STARTARROW="Default" STARTINCLINATION="-83;-1020;"/>
<font NAME="SansSerif" SIZE="13"/>
<icon BUILTIN="go"/>
<node CREATED="1453545875627" ID="ID_1411740156" MODIFIED="1518487921090" TEXT="Definition &#xbb;Zentral-Dienste&#xab;">
@ -29537,8 +29775,14 @@
</node>
<node CREATED="1488672593812" ID="ID_1454459609" MODIFIED="1518487921094" TEXT="konkret"/>
</node>
<node CREATED="1448063874479" HGAP="43" ID="ID_739054690" MODIFIED="1518487921094" TEXT="UI-Modell" VSHIFT="1">
<icon BUILTIN="help"/>
<node CREATED="1448063874479" HGAP="43" ID="ID_739054690" MODIFIED="1538957545166" TEXT="UI-Binding" VSHIFT="1">
<icon BUILTIN="yes"/>
<node CREATED="1538957594154" ID="ID_2785316" MODIFIED="1538957602189" TEXT="erwartete Modell-Struktur">
<node COLOR="#435e98" CREATED="1538957611472" ID="ID_580392349" MODIFIED="1538957734503" TEXT="gem&#xe4;&#xdf; UI Modell-Schema">
<arrowlink COLOR="#919fc6" DESTINATION="ID_165150753" ENDARROW="Default" ENDINCLINATION="-641;482;" ID="Arrow_ID_593956858" STARTARROW="None" STARTINCLINATION="1108;116;"/>
<icon BUILTIN="info"/>
</node>
</node>
</node>
<node CREATED="1434128074725" FOLDED="true" HGAP="28" ID="ID_933994138" MODIFIED="1538870799628" TEXT="Diff-System" VSHIFT="1">
<font NAME="SansSerif" SIZE="14"/>
@ -32269,8 +32513,7 @@
</li>
</ul>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="pencil"/>
<node COLOR="#435e98" CREATED="1512925265295" HGAP="103" ID="ID_1502143527" MODIFIED="1538869212828" VSHIFT="-66">
<richcontent TYPE="NODE"><html>
@ -34653,8 +34896,7 @@
L&#246;sung scheint nun &quot;rund&quot; zu sein
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="button_ok"/>
<node CREATED="1515975596673" ID="ID_1304673048" MODIFIED="1515975599660" TEXT="f&#xfc;r Services">
<node CREATED="1515975622405" ID="ID_962877206" MODIFIED="1515975633971" TEXT="Dependency-Injection-Manager">
@ -37546,6 +37788,26 @@
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1484377665971" HGAP="28" ID="ID_641757454" MODIFIED="1518487921096" TEXT="Logik" VSHIFT="5">
<icon BUILTIN="hourglass"/>
<node CREATED="1538939499138" ID="ID_367201519" MODIFIED="1538939505629" TEXT="open Session">
<node CREATED="1538939507425" ID="ID_389830085" MODIFIED="1538939511341" TEXT="new Session">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1477784813895" ID="ID_1478381189" MODIFIED="1538939638255">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<u>Aufgabe</u>: <i><font color="#821b58" size="4">produce dummy content</font></i>
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#f9b709" DESTINATION="ID_1478381189" ENDARROW="Default" ENDINCLINATION="-1009;-357;" ID="Arrow_ID_1072548081" SOURCE="ID_635303062" STARTARROW="None" STARTINCLINATION="-87;103;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node CREATED="1538939511688" ID="ID_936661226" MODIFIED="1538939514612" TEXT="existing Session"/>
</node>
</node>
<node CREATED="1481688517437" HGAP="24" ID="ID_241232196" MODIFIED="1518487921096" TEXT="Lifecycle" VSHIFT="8">
<icon BUILTIN="info"/>
@ -38272,7 +38534,8 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1533401628689" HGAP="7" ID="ID_36032481" MODIFIED="1533401645668" TEXT="Builder" VSHIFT="9">
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1533401628689" HGAP="7" ID="ID_36032481" MODIFIED="1538939453265" TEXT="Builder" VSHIFT="9">
<font NAME="SansSerif" SIZE="16"/>
<icon BUILTIN="hourglass"/>
<node COLOR="#435e98" CREATED="1533401646479" ID="ID_305001887" MODIFIED="1533401662043" TEXT="das gro&#xdf;e wartende MEGA-Integrations-Thema">
<font NAME="SansSerif" SIZE="12"/>
@ -38667,9 +38930,9 @@
</node>
</node>
<node CREATED="1495221220040" HGAP="43" ID="ID_782313223" MODIFIED="1533306068667" TEXT="Framework" VSHIFT="-20">
<linktarget COLOR="#677ab7" DESTINATION="ID_782313223" ENDARROW="Default" ENDINCLINATION="-981;-106;" ID="Arrow_ID_1912776282" SOURCE="ID_1636078216" STARTARROW="None" STARTINCLINATION="-2111;0;"/>
<linktarget COLOR="#677ab7" DESTINATION="ID_782313223" ENDARROW="Default" ENDINCLINATION="-1088;-39;" ID="Arrow_ID_234165792" SOURCE="ID_433225506" STARTARROW="None" STARTINCLINATION="-2111;0;"/>
<linktarget COLOR="#677ab7" DESTINATION="ID_782313223" ENDARROW="Default" ENDINCLINATION="-652;20;" ID="Arrow_ID_315633048" SOURCE="ID_1894791438" STARTARROW="None" STARTINCLINATION="-2111;0;"/>
<linktarget COLOR="#677ab7" DESTINATION="ID_782313223" ENDARROW="Default" ENDINCLINATION="-981;-106;" ID="Arrow_ID_1912776282" SOURCE="ID_1636078216" STARTARROW="None" STARTINCLINATION="-2111;0;"/>
<node CREATED="1533388030963" ID="ID_1973994334" MODIFIED="1533608414131" TEXT="main context">
<node CREATED="1533388053839" ID="ID_970610402" MODIFIED="1533388063674" TEXT="abstrahierte &quot;main loop&quot;">
<node CREATED="1533388065237" ID="ID_1853196275" MODIFIED="1533388071944" TEXT="es gibt einen default_main_context"/>
@ -39761,7 +40024,7 @@
<node CREATED="1504215729848" ID="ID_518260540" MODIFIED="1518487921101" TEXT="howto">
<node CREATED="1446515847047" ID="ID_290915762" MODIFIED="1518487921101" TEXT="GtkCssProvider">
<node CREATED="1446515865029" ID="ID_1503616150" MODIFIED="1518487921101" TEXT="parsing errors"/>
<node CREATED="1477784584821" ID="ID_1810760662" LINK="https://developer.gnome.org/gtkmm-tutorial/stable/sec-custom-widgets.html.en" MODIFIED="1534336601077" TEXT="Beispiel im GTKmm-Guide (custom widget)">
<node CREATED="1477784584821" ID="ID_1810760662" LINK="https://developer.gnome.org/gtkmm-tutorial/stable/sec-custom-widgets.html.en" MODIFIED="1538938881467" TEXT="Beispiel im GTKmm-Guide (custom widget)">
<richcontent TYPE="NOTE"><html>
<head>
@ -39778,7 +40041,7 @@
</p>
</body>
</html></richcontent>
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1810760662" ENDARROW="Default" ENDINCLINATION="1600;-25;" ID="Arrow_ID_1610122569" SOURCE="ID_1164942946" STARTARROW="None" STARTINCLINATION="-756;164;"/>
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1810760662" ENDARROW="Default" ENDINCLINATION="1600;-25;" ID="Arrow_ID_1610122569" SOURCE="ID_1164942946" STARTARROW="None" STARTINCLINATION="-840;95;"/>
<icon BUILTIN="info"/>
</node>
</node>