DockAccess: consider how to access view components. Rename WindowList (#1104)

this starts work on a new UI global topic (#1004)

- coin a new term: "view component"
- distinction between veiw component and Panel
- consider how to locate view components
- WindowList becomes WindowLocator
This commit is contained in:
Fischlurch 2017-09-02 18:36:58 +02:00
parent 5b445a2361
commit 0614ca36ca
10 changed files with 142 additions and 59 deletions

View file

@ -43,7 +43,7 @@
#include "gui/gtk-base.hpp"
#include "gui/ctrl/global-ctx.hpp"
#include "gui/ctrl/window-list.hpp"
#include "gui/ctrl/window-locator.hpp"
#include "gui/workspace/workspace-window.hpp"
#include "gui/workspace/panel-manager.hpp"
#include "lib/format-string.hpp"
@ -133,8 +133,8 @@ namespace ctrl {
menu("WindowMenu", _("_Window"));
entry ([&]() { globalCtx_.windowList_.newWindow(); } , "WindowNewWindow", StockID("new_window"));
entry ([&]() { globalCtx_.windowList_.closeWindow();}, "WindowCloseWindow", _("Close Window"));
entry ([&]() { globalCtx_.windowLoc_.newWindow(); } , "WindowNewWindow", StockID("new_window"));
entry ([&]() { globalCtx_.windowLoc_.closeWindow();} , "WindowCloseWindow", _("Close Window"));
actionGroup->add(Action::create("WindowShowPanel", _("_Show Panel")));
@ -287,9 +287,9 @@ namespace ctrl {
cuString panelName = ustring::compose("Panel%1", i);
actionGroup->add(Action::create(panelName, StockID(stock_id)),
[i,this]() {
globalCtx_.windowList_.findActiveWindow()
.getPanelManager()
.showPanel (i);
globalCtx_.windowLoc_.findActiveWindow()
.getPanelManager()
.showPanel (i);
});
}

View file

@ -40,7 +40,7 @@
** - connection to the [UI-Bus](\ref ui-bus.hpp)
** - the UiManager
** - the InteractionDirector
** - the WindowList
** - the WindowLocator
** - the Wizard
**
** @see gtk-lumiera.hpp
@ -56,7 +56,7 @@
#include "gui/gtk-base.hpp"
#include "gui/ui-bus.hpp"
#include "gui/ctrl/ui-manager.hpp"
#include "gui/ctrl/window-list.hpp"
#include "gui/ctrl/window-locator.hpp"
#include "gui/interact/wizard.hpp"
#include "gui/interact/interaction-director.hpp"
@ -87,7 +87,7 @@ namespace ctrl {
UiBus& uiBus_;
UiManager& uiManager_;
WindowList windowList_;
WindowLocator windowLoc_;
InteractionDirector director_;
interact::Wizard wizard_;
@ -99,7 +99,7 @@ namespace ctrl {
GlobalCtx (UiBus& bus, UiManager& manager)
: uiBus_{bus}
, uiManager_{manager}
, windowList_{*this}
, windowLoc_{*this}
, director_{*this}
, wizard_{*this}
{ }

View file

@ -116,8 +116,8 @@ namespace ctrl {
void
UiManager::createApplicationWindow()
{
if (globals_->windowList_.empty())
globals_->windowList_.newWindow();
if (globals_->windowLoc_.empty())
globals_->windowLoc_.newWindow();
}
@ -158,7 +158,7 @@ namespace ctrl {
UiManager::updateWindowFocusRelatedActions()
{
///////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1076 find out how to handle this properly
actions_->updateActionState (globals_->windowList_.findActiveWindow());
actions_->updateActionState (globals_->windowLoc_.findActiveWindow());
}

View file

@ -37,7 +37,7 @@
** - the global Actions available though the menu
** - the InteractionDirector (top-level controller)
** - the StyleManager
** - the WindowList
** - the WindowLocator
**
** @see gtk-lumiera.hpp
** @see ui-bus.hpp

View file

@ -1,5 +1,5 @@
/*
WindowList - manage all top level windows
WindowLocator - manage all top level windows
Copyright (C) Lumiera.org
2008, Joel Holdsworth <joel@airwebreathe.org.uk>
@ -21,14 +21,14 @@
* *****************************************************/
/** @file window-list.cpp
** Implementation parts of the list to manage all top level windows.
/** @file window-locator.cpp
** Implementation details of management and access to all top level windows.
** @see ui-manager.hpp
*/
#include "gui/ctrl/global-ctx.hpp"
#include "gui/ctrl/window-list.hpp"
#include "gui/ctrl/window-locator.hpp"
#include "gui/workspace/workspace-window.hpp"
#include "lib/util.hpp"
@ -47,20 +47,20 @@ namespace ctrl {
WindowList::WindowList (GlobalCtx& globals)
WindowLocator::WindowLocator (GlobalCtx& globals)
: globalCtx_{globals}
, windowList_{}
{ }
void
WindowList::newWindow ()
WindowLocator::newWindow ()
{
PWindow window (new WorkspaceWindow{globalCtx_.uiManager_});
REQUIRE(window);
window->signal_delete_event().connect(sigc::mem_fun(
this, &WindowList::on_window_closed));
this, &WindowLocator::on_window_closed));
windowList_.push_back(window);
@ -76,7 +76,7 @@ namespace ctrl {
* the fist one in list will be killed
*/
void
WindowList::closeWindow()
WindowLocator::closeWindow()
{
findActiveWindow().hide();
}
@ -90,7 +90,7 @@ namespace ctrl {
* called when there is at least one Lumiera window.
*/
WorkspaceWindow&
WindowList::findActiveWindow()
WindowLocator::findActiveWindow()
{
REQUIRE (not isnil (windowList_));
@ -108,7 +108,7 @@ namespace ctrl {
* has keyboard focus. This may very well be the case.
*/
WorkspaceWindow&
WindowList::findFocusWindow()
WindowLocator::findFocusWindow()
{
REQUIRE (not isnil (windowList_));
@ -122,7 +122,7 @@ namespace ctrl {
bool
WindowList::on_window_closed (GdkEventAny* event)
WindowLocator::on_window_closed (GdkEventAny* event)
{
REQUIRE(event);
REQUIRE(event->window);
@ -157,7 +157,7 @@ namespace ctrl {
void
WindowList::updateCloseWindowInMenus()
WindowLocator::updateCloseWindowInMenus()
{
globalCtx_.uiManager_.allowCloseWindow ( 1 < windowList_.size());
}

View file

@ -1,5 +1,5 @@
/*
WINDOW-LIST.hpp - manage all top level windows
WINDOW-LOCATOR.hpp - manage all top level windows
Copyright (C) Lumiera.org
2008, Joel Holdsworth <joel@airwebreathe.org.uk>
@ -21,10 +21,10 @@
*/
/** @file window-list.hpp
/** @file window-locator.hpp
** Manager for all top level application windows.
** The central WindowList instance is owned by the GtkLumiera object and
** initialised in GTK-main. The WindowList allows to create new windows
** The central WindowLocator is part of the [UI global context](\ref GlobalCtx) and thus
** initialised on startup of the UI. The WindowLocator allows to create new windows
** integrated with the application framework.
**
** @see gtk-lumiera.hpp
@ -32,8 +32,8 @@
*/
#ifndef GUI_CTRL_WINDOW_LIST_H
#define GUI_CTRL_WINDOW_LIST_H
#ifndef GUI_CTRL_WINDOW_LOCATOR_H
#define GUI_CTRL_WINDOW_LOCATOR_H
#include "gui/gtk-base.hpp"
@ -59,7 +59,7 @@ namespace ctrl {
/**
* A centralised manager of all top level application windows.
*/
class WindowList
class WindowLocator
: boost::noncopyable
{
using PWindow = std::shared_ptr<workspace::WorkspaceWindow>;
@ -69,7 +69,7 @@ namespace ctrl {
public:
WindowList (GlobalCtx&);
WindowLocator (GlobalCtx&);
bool empty() const;
@ -104,7 +104,7 @@ namespace ctrl {
inline bool
WindowList::empty() const
WindowLocator::empty() const
{
return windowList_.empty();
}
@ -112,4 +112,4 @@ namespace ctrl {
}}// namespace gui::ctrl
#endif /*GUI_CTRL_WINDOW_LIST_H*/
#endif /*GUI_CTRL_WINDOW_LOCATOR_H*/

View file

@ -261,7 +261,7 @@ namespace interact {
workspace::WorkspaceWindow&
InteractionDirector::getWorkspaceWindow()
{
return globalCtx_.windowList_.findActiveWindow();
return globalCtx_.windowLoc_.findActiveWindow();
}

View file

@ -96,7 +96,7 @@ namespace interact {
dialog.set_website(Config::get (KEY_WEBSITE));
dialog.set_authors(authorsList);
WorkspaceWindow& currentWindow = globalCtx_.windowList_.findActiveWindow();
WorkspaceWindow& currentWindow = globalCtx_.windowLoc_.findActiveWindow();
dialog.set_transient_for (currentWindow);
// Show the about dialog

View file

@ -2747,6 +2747,25 @@ Command instances are like prototypes -- thus each additional level of different
see the description in &amp;rarr; CommandSetup
</pre>
</div>
<div title="GuiComponentView" creator="Ichthyostega" modifier="Ichthyostega" created="201709021521" modified="201709021557" tags="def GuiPattern design" changecount="5">
<pre>//A view within the UI, featuring some component of relevance to »the model«.//
While any UI is comprised of numerous widgets acting as //view of something,// only some of those views play the prominent role to act as //building block component// of the user interface.
Such UI component views exhibit some substantial traits
* they conform to a built-in fixed list of view types, each of which is unique and dedicated to a very specific purpose: //''Timeline'', ''Viewer'', (Asset)''Bin'', ''Infobox'', ''Playcontrol'',...//
* each component view has a distinguishable identity and is connected to and addressable through the UI-Bus
* it can be hosted only at a dedicated location within one or several specific [[docking panels|GuiDockingPanel]].
* multiplicity (one, one per window, many) depends on the type of view and needs to be managed.
* such a view is not just //created// -- rather it needs to be //allocated//
!Allocation of UI component views
Here, //Allocation// means
* to constitute the desired element's identity
* to consider multiplicity and possibly retrieve an existing instance
* to determine the hosting location
* possibly to instantiate and register a new instance
* and finally to configure that instance for the desired role
The classical example to verify this definition is the //allocation of viewers:// when starting playback of a new media item, we &quot;need a viewer&quot; to show it. But we can not just create yet another viewer window -- rather we need to allocate one of the possible &quot;viewer slots&quot;. In fact this is a configurable property of the UI layout employed; sometimes some people need the limitation to one single viewer entity (which might even be external, routed to a beamer or monitor), while other ones request the classical editor layout with two viewer windows side by side, while yet different working styles might exploit a limited set of viewers allocated in stack- or round-robin style.</pre>
</div>
<div title="GuiConnection" modifier="Ichthyostega" created="200812050543" modified="201705192329" tags="GuiIntegration overview" changecount="11">
<pre>All communication between Proc-Layer and GUI has to be routed through the respective LayerSeparationInterfaces. Following a fundamental design decision within Lumiera, these interface are //intended to be language agnostic// &amp;mdash; forcing them to stick to the least common denominator. Which creates the additional problem of how to create a smooth integration without forcing the architecture into functional decomposition style. To solve this problem, we rely on ''messaging'' rather than on a //business facade// -- our facade interfaces are rather narrow and limited to lifecycle management. In addition, the UI exposes a [[notification facade|GuiNotificationFacade]] for pushing back status information created as result of the edit operations, the build process and the render tasks.
@ -2873,18 +2892,20 @@ In order to build a sensible plan for our timeline structure, we need to investi
}}}
</pre>
</div>
<div title="GuiDockingPanel" creator="Ichthyostega" modifier="Ichthyostega" created="201708311617" modified="201708311619" changecount="2">
<div title="GuiDockingPanel" creator="Ichthyostega" modifier="Ichthyostega" created="201708311617" modified="201709021604" tags="design GuiPattern draft" changecount="8">
<pre>//Management of dockable content panes//
Within each top level application window, the usable screen real estate can be split and arranged into a number of standard view building blocks. Each of this //panels// follows a specific preconfigured basic layout -- these are hard coded, yet customisable in detail. There is a finite list of such panel types available:
* the [[timeline display|GuiTimelineView]]
* the media viewer
* asset management
* information box
Within the preconfigured layout it is a panel's role to host and incorporate GuiComponentView elements.
Please note the distinction between UI component view and panel; in many cases there is one of each for a given kind, and these need to be distinguished: e.g. there is the [[timeline view|GuiTimelineView]] and there is the timeline panel, which houses several timelines (as tabs). Or there is the viewer component, which is located within a dedicated viewer panel each.
!Instantiation
!Placing and addressing of embedded contents
A specific problem arises insofar other parts of the UI need to create, address and control some UI entities, which at the same time exist as part of a docking panel. This is a problem of crosscutting concerns: UI control and interaction structure should not be mingled with the generic concern to maintain a component as part of a screen layout. Unfortunately, standard UI toolkit sets are designed incredibly naive ways when it comes to interaction design, and the only available alternative is to rely on a framework, which come with a hard-wired philosophy.
As a result, we're forced to build our UI from components lacking the decision between //ownership and control.//
A specific problem arises insofar other parts of the UI need to create, address and control some UI entities, which at the same time exist as part of a docking panel. This is a problem of crosscutting concerns: UI control and interaction structure should not be mingled with the generic concern to maintain a component as part of a screen layout. Unfortunately, the design of standard UI toolkit sets is incredibly naive when it comes to interaction design, and the only available alternative is to rely on frameworks, which come with a hard-wired philosophy.
As a result, we're forced to build our UI from components which fall short on the distinction between //ownership and control.//
</pre>
</div>
<div title="GuiFacade" modifier="Ichthyostega" created="200902080719" modified="201708041501" tags="def spec" changecount="1">
@ -3491,7 +3512,7 @@ The concept of a //focus goal// has several ramifications: for one it implies th
To create such a system is an ambitious goal. We can not reach it in a single step, since it entails the formation of a whole intermediary layer, on top of the //usual UI mechanics,// yet below the concrete UI interactions. Especially, we'd need to clarify the meaning of //perspective,// we need to decide on the relation of top level frame, individual view, layout, focus and //current location within the UI.// On a second thought, building such a system implies we'll have to live with an intermediary state of evolution, where parts of the new framework are already in place without interfering with common conventional usage of the interface as-is.
</pre>
</div>
<div title="InteractionDirector" creator="Ichthyostega" modifier="Ichthyostega" created="201702102146" modified="201708311600" tags="def draft" changecount="21">
<div title="InteractionDirector" creator="Ichthyostega" modifier="Ichthyostega" created="201702102146" modified="201709021522" tags="def design GuiPattern" changecount="25">
<pre>//the top-level controller within the UI.//
In Lumiera, the structures of the model within the [[Session]] (the so called HighLevelModel) are mapped onto corresponding [[tangible UI entities|UI-Element]], which serve as a front-end to represent those entities towards the user. Within this model, there is a //conceptual root node// -- which logically corresponds to the session itself. This [[root element in model|ModelRootMO]] links together the actual top-level entities, which are the (multiple) timelines, together with the asset management and defaults and rules configuration within the session.
@ -3516,7 +3537,12 @@ The InteractionDirector is part of the model, and thus we have to distinguish be
!Collaborations
* several global actions are exposed here, like opening the session and creating a new timeline.&lt;br/&gt;Such operations are typically bound into menu and action buttons, and in turn invoke [[commands|CommandHandling]] into the Session
* some further actions involve the interplay with the [[docking panel manager|GuiDockingPanel]], like e.g. instantiating a new [[timeline display|GuiTimelineView]] into a timeline pane.
* some further actions involve [[management of docking panels|GuiDockingPanel]], like e.g. instantiating a new [[timeline display|GuiTimelineView]] into a timeline pane.
* in fact it is the InteractionDirector's job to keep track of [[component views|GuiComponentView]], some of which
** can exist only once
** or can exist only once per top level window
** some might even be required once per window
** while others may be duplicated locally or globally
</pre>
</div>
<div title="InteractionState" creator="Ichthyostega" modifier="Ichthyostega" created="201511280402" modified="201704171824" tags="def design GuiIntegration draft" changecount="9">

View file

@ -306,7 +306,7 @@
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1484793113472" ID="ID_221612387" MODIFIED="1501854310860" TEXT="Lebenszyklus nochmal pr&#xfc;fen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1484797253856" FOLDED="true" ID="ID_226245696" MODIFIED="1501867196568" TEXT="GUI start sauber">
<node COLOR="#338800" CREATED="1484797253856" ID="ID_226245696" MODIFIED="1504368762044" TEXT="GUI start sauber">
<icon BUILTIN="button_ok"/>
<node CREATED="1484797307376" ID="ID_842106541" MODIFIED="1501854459425" TEXT="Abfolge">
<icon BUILTIN="info"/>
@ -341,7 +341,7 @@
<node CREATED="1501855107127" ID="ID_135398487" MODIFIED="1501855111515" TEXT="erzeugt GlobalCtx">
<node CREATED="1501855278529" ID="ID_1800772710" MODIFIED="1501855286540" TEXT="UiBus&amp;"/>
<node CREATED="1501855278529" ID="ID_146051630" MODIFIED="1501855290419" TEXT="UiManager&amp;"/>
<node CREATED="1501855278529" ID="ID_217835618" MODIFIED="1501855295890" TEXT="WindowList"/>
<node CREATED="1501855278529" ID="ID_217835618" MODIFIED="1504368771277" TEXT="WindowLocator"/>
<node CREATED="1501855278529" ID="ID_1549587580" MODIFIED="1501855300298" TEXT="InteractionDirector"/>
<node CREATED="1501855278529" ID="ID_1835031486" MODIFIED="1501855304233" TEXT="interact::Wizard"/>
</node>
@ -2707,13 +2707,14 @@
<linktarget COLOR="#ae1856" DESTINATION="ID_206480879" ENDARROW="Default" ENDINCLINATION="715;0;" ID="Arrow_ID_926482654" SOURCE="ID_392996871" STARTARROW="Default" STARTINCLINATION="134;383;"/>
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1485126609878" FOLDED="true" ID="ID_815018040" MODIFIED="1493846218724" TEXT="#1064 investigate WindowManager lifecycle">
<node COLOR="#338800" CREATED="1485126609878" ID="ID_815018040" MODIFIED="1504368776279" TEXT="#1064 investigate WindowManager lifecycle">
<icon BUILTIN="button_ok"/>
<node CREATED="1493752896125" ID="ID_1471478347" MODIFIED="1493752898687" TEXT="erledigt"/>
<node CREATED="1493752899224" ID="ID_83018735" MODIFIED="1493752906171" TEXT="WindowManager war gar nicht so wichtig"/>
<node CREATED="1493752906736" ID="ID_1191055389" MODIFIED="1493752913019" TEXT="er ist jetzt nur noch eine WindowList"/>
<node CREATED="1493752906736" ID="ID_1191055389" MODIFIED="1504368810487" TEXT="er ist jetzt nur noch eine Fenster-Liste"/>
<node CREATED="1504368788471" ID="ID_1811705494" MODIFIED="1504368798969" TEXT="und die hei&#xdf;t jetzt WindowLocator"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485550950793" FOLDED="true" ID="ID_50100583" MODIFIED="1504191390388" TEXT="#1048 rectify UI Lifecycle">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485550950793" ID="ID_50100583" MODIFIED="1504368743286" TEXT="#1048 rectify UI Lifecycle">
<icon BUILTIN="hourglass"/>
<node COLOR="#338800" CREATED="1485550968230" ID="ID_164246989" MODIFIED="1493846257532" TEXT="GtkLumiera darf kein Singleton mehr sein">
<linktarget COLOR="#80b3ef" DESTINATION="ID_164246989" ENDARROW="Default" ENDINCLINATION="-42;-74;" ID="Arrow_ID_401425747" SOURCE="ID_1145950660" STARTARROW="None" STARTINCLINATION="387;0;"/>
@ -2731,7 +2732,7 @@
</node>
<node CREATED="1485550992299" ID="ID_1685125156" MODIFIED="1493846205911" TEXT="es blocken">
<icon BUILTIN="button_ok"/>
<node CREATED="1485550999762" ID="ID_249139218" MODIFIED="1485917500008" TEXT="WindowList">
<node CREATED="1485550999762" ID="ID_249139218" MODIFIED="1504368756039" TEXT="WindowManager">
<icon BUILTIN="button_cancel"/>
</node>
<node CREATED="1485551007297" ID="ID_1398242341" MODIFIED="1485917502909" TEXT="Project &amp; Controller">
@ -2973,7 +2974,7 @@
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1485902945474" FOLDED="true" HGAP="-2" ID="ID_269152626" MODIFIED="1488423342541" TEXT="L&#xf6;sungs-Detail: dynamisch koppeln" VSHIFT="19">
<node CREATED="1485902945474" HGAP="-2" ID="ID_269152626" MODIFIED="1504368672757" TEXT="L&#xf6;sungs-Detail: dynamisch koppeln" VSHIFT="19">
<richcontent TYPE="NOTE"><html>
<head>
@ -3000,13 +3001,14 @@
</body>
</html></richcontent>
<node CREATED="1485903041262" ID="ID_997327941" MODIFIED="1485903044082" TEXT="Fokus"/>
<node COLOR="#338800" CREATED="1485903046613" FOLDED="true" ID="ID_1041890737" MODIFIED="1488423308108" TEXT="aktuelles Fenster">
<node COLOR="#338800" CREATED="1485903046613" ID="ID_1041890737" MODIFIED="1504368672760" TEXT="aktuelles Fenster">
<linktarget COLOR="#375a84" DESTINATION="ID_1041890737" ENDARROW="Default" ENDINCLINATION="177;-181;" ID="Arrow_ID_373431525" SOURCE="ID_1089795419" STARTARROW="None" STARTINCLINATION="245;-68;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1485903652236" ID="ID_1692258488" MODIFIED="1485903657033" TEXT="WindowList">
<node CREATED="1485903652236" ID="ID_1692258488" MODIFIED="1504368705637" TEXT="WindowLocator">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1504368706988" MODIFIED="1504368706988" TEXT="h&#xe4;lt Liste der Fenster"/>
<node CREATED="1485903658300" ID="ID_1048329186" MODIFIED="1485903665054" TEXT="durchsuchen..."/>
</node>
<node CREATED="1485904084947" ID="ID_64462533" MODIFIED="1485904087814" TEXT="Gtk::Window"/>
<node CREATED="1485904064949" ID="ID_313273027" MODIFIED="1485904081249" TEXT="property_has_focus">
<icon BUILTIN="help"/>
@ -3014,7 +3016,7 @@
<node CREATED="1485904072812" ID="ID_829657223" MODIFIED="1485904083263" TEXT="property_is_active">
<icon BUILTIN="help"/>
</node>
<node CREATED="1487039156100" ID="ID_1966427611" MODIFIED="1487039199394" TEXT="implementiert durch die WindowList">
<node CREATED="1487039156100" ID="ID_1966427611" MODIFIED="1504368731138" TEXT="implementiert durch den WindowLocator">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1487039170930" ID="ID_1408455006" MODIFIED="1487039195521" TEXT="Actions wei&#xdf;, da&#xdf; es dort implemieriert ist">
@ -3432,7 +3434,7 @@
<node CREATED="1485909491412" ID="ID_1205077540" MODIFIED="1487039041806" TEXT="macht die Applikation betriebsbereit">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1486942467620" FOLDED="true" HGAP="151" ID="ID_1761000392" MODIFIED="1488494806427" TEXT="Alternativen" VSHIFT="14">
<node CREATED="1486942467620" HGAP="151" ID="ID_1761000392" MODIFIED="1504368816054" TEXT="Alternativen" VSHIFT="14">
<icon BUILTIN="help"/>
<node CREATED="1486942493208" FOLDED="true" ID="ID_805305597" MODIFIED="1488423342542" TEXT="alles via InteractionDirector">
<icon BUILTIN="button_cancel"/>
@ -3470,7 +3472,7 @@
<node CREATED="1486942614400" ID="ID_872912875" MODIFIED="1486942627890" TEXT="Action-Definition &quot;wei&#xdf;&quot; wer das konkret machen kann"/>
<node CREATED="1486943522965" ID="ID_244569580" MODIFIED="1488492879682" TEXT="konkret...">
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<node CREATED="1486943529763" FOLDED="true" ID="ID_186058004" MODIFIED="1488423308094" TEXT="WindowList">
<node CREATED="1486943529763" FOLDED="true" ID="ID_186058004" MODIFIED="1504368833066" TEXT="WindowLocator">
<node CREATED="1486943536354" ID="ID_1414688651" MODIFIED="1486943539365" TEXT="neues Fenster"/>
<node CREATED="1486943539809" ID="ID_443462243" MODIFIED="1486943543509" TEXT="Fenster schlie&#xdf;en"/>
<node CREATED="1486943765530" ID="ID_1741627821" MODIFIED="1486943771717" TEXT="show Panel xyz"/>
@ -3771,6 +3773,9 @@
<node CREATED="1487270206369" ID="ID_1888334597" MODIFIED="1487461321289" TEXT="SpotLocator"/>
<node CREATED="1487273437019" ID="ID_1653934212" MODIFIED="1487461312002" TEXT="Navigator"/>
<node CREATED="1487275297855" ID="ID_898365328" MODIFIED="1487461316314" TEXT="FocusTracker"/>
<node CREATED="1504368969990" ID="ID_948587913" MODIFIED="1504369058912" TEXT="ViewLocator">
<linktarget COLOR="#7f97bd" DESTINATION="ID_948587913" ENDARROW="Default" ENDINCLINATION="-940;79;" ID="Arrow_ID_954883780" SOURCE="ID_1747666798" STARTARROW="None" STARTINCLINATION="1159;303;"/>
</node>
</node>
<node CREATED="1487461353681" ID="ID_1117222917" MODIFIED="1488492194073" TEXT="Modell">
<node CREATED="1487461361688" ID="ID_1787396394" MODIFIED="1488492200352" TEXT="Attrib">
@ -3828,13 +3833,14 @@
<node CREATED="1485546319434" ID="ID_1592361314" MODIFIED="1485546343174" TEXT="macht nur eine Sache">
<icon BUILTIN="idea"/>
<node CREATED="1485546325993" ID="ID_1335197005" MODIFIED="1485546333460" TEXT="n&#xe4;mlich eine Liste der Fenster verwalten"/>
<node CREATED="1504368623492" ID="ID_1993615747" MODIFIED="1504368630343" TEXT="und Zugang zu diesen Fenster bieten"/>
</node>
<node CREATED="1485546344471" ID="ID_582242471" MODIFIED="1485546463212" TEXT="WindowList">
<node CREATED="1485546344471" ID="ID_582242471" MODIFIED="1504368641710" TEXT="WindowLocator">
<arrowlink DESTINATION="ID_298060478" ENDARROW="Default" ENDINCLINATION="25;-40;" ID="Arrow_ID_683571287" STARTARROW="None" STARTINCLINATION="-62;0;"/>
<icon BUILTIN="forward"/>
</node>
</node>
<node CREATED="1485546396952" ID="ID_298060478" MODIFIED="1485546463212" TEXT="WindowList">
<node CREATED="1485546396952" ID="ID_298060478" MODIFIED="1504368655052" TEXT="WindowLocator">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_298060478" ENDARROW="Default" ENDINCLINATION="25;-40;" ID="Arrow_ID_683571287" SOURCE="ID_582242471" STARTARROW="None" STARTINCLINATION="-62;0;"/>
<node CREATED="1485546400807" ID="ID_1118405222" MODIFIED="1485546415097" TEXT="macht, was vom gro&#xdf;en Manager &#xfc;brig blieb"/>
<node CREATED="1485546425452" ID="ID_1088557274" MODIFIED="1485546450588" TEXT="wird von GtkLumiera gehalten und verdrahtet"/>
@ -3856,6 +3862,48 @@
</node>
<node CREATED="1504193354056" ID="ID_385011645" MODIFIED="1504193590886" TEXT="Abstraktion zur Steuerung schaffen">
<linktarget COLOR="#4f6595" DESTINATION="ID_385011645" ENDARROW="Default" ENDINCLINATION="377;-49;" ID="Arrow_ID_1185839720" SOURCE="ID_1002171467" STARTARROW="None" STARTINCLINATION="-267;66;"/>
<node CREATED="1504307876270" HGAP="80" ID="ID_714147133" MODIFIED="1504307886419" TEXT="Anforderungen" VSHIFT="-7">
<node CREATED="1504307921993" ID="ID_774956517" MODIFIED="1504307928324" TEXT="bestimmtes Element...">
<node CREATED="1504307933535" ID="ID_220451742" MODIFIED="1504308006278" TEXT="ansprechen">
<node CREATED="1504308372668" ID="ID_1978317777" MODIFIED="1504308379327" TEXT="Referenz f&#xfc;r direkte Aufrufe"/>
<node CREATED="1504308379891" ID="ID_829774303" MODIFIED="1504308387926" TEXT="ID f&#xfc;r UI-Bus-Kommunikation"/>
</node>
<node CREATED="1504307929599" ID="ID_1927494491" MODIFIED="1504307932899" TEXT="neu erzeugen"/>
<node CREATED="1504307954292" ID="ID_1658958044" MODIFIED="1504307997960" TEXT="l&#xf6;schen"/>
</node>
<node CREATED="1504308024282" ID="ID_1154461573" MODIFIED="1504308036278">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
wie <i>bestimmt?</i>
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="help"/>
<node CREATED="1504308038873" ID="ID_1384201938" MODIFIED="1504308043380" TEXT="es gibt nur eines"/>
<node CREATED="1504308044016" ID="ID_1655384159" MODIFIED="1504308051227" TEXT="von bestimmter Art"/>
<node CREATED="1504308073444" ID="ID_1584894553" MODIFIED="1504308077904" TEXT="Typ + ID"/>
<node CREATED="1504308256876" ID="ID_733625102" MODIFIED="1504308351520" TEXT="Problem: View-Instanzen">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1504308268370" ID="ID_1644215776" MODIFIED="1504308318272" TEXT="wie die ID festlegen?">
<icon BUILTIN="help"/>
</node>
<node CREATED="1504308288056" ID="ID_919032583" MODIFIED="1504308315302" TEXT="wer wei&#xdf; von diesen Instanzen?">
<icon BUILTIN="help"/>
</node>
<node CREATED="1504308295190" ID="ID_981780857" MODIFIED="1504308309558" TEXT="wie werden sie im Model dargestellt?">
<icon BUILTIN="help"/>
</node>
</node>
<node CREATED="1504308325682" ID="ID_168204060" MODIFIED="1504308344188" TEXT="wer verfolgt die Lebensdauer?">
<icon BUILTIN="help"/>
</node>
</node>
</node>
</node>
<node CREATED="1504194145622" ID="ID_511626836" MODIFIED="1504194154361" TEXT="Addressieren einzelner Kind-Komponenten"/>
</node>
@ -3870,7 +3918,7 @@
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<node CREATED="1488494592496" ID="ID_1586259377" MODIFIED="1488494596905" TEXT="UI-Bus"/>
<node CREATED="1488494579346" ID="ID_1182508289" MODIFIED="1488494603368" TEXT="UiManager"/>
<node CREATED="1486943529763" ID="ID_1188971928" MODIFIED="1488494606592" TEXT="WindowList"/>
<node CREATED="1486943529763" ID="ID_1188971928" MODIFIED="1504368849202" TEXT="WindowLocator"/>
<node CREATED="1486943607120" ID="ID_1101577688" MODIFIED="1488494613248" TEXT="InteractionDirector">
<node CREATED="1486943922541" ID="ID_646168152" MODIFIED="1488494623320" TEXT="Entspricht Model Root"/>
<node CREATED="1486943614039" ID="ID_1354424043" MODIFIED="1488494631023" TEXT="AssetController"/>
@ -5273,6 +5321,15 @@
<linktarget COLOR="#b37033" DESTINATION="ID_945788817" ENDARROW="None" ENDINCLINATION="-67;-71;" ID="Arrow_ID_61914" SOURCE="ID_1943521361" STARTARROW="Default" STARTINCLINATION="-618;-18;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node CREATED="1504368481111" ID="ID_1149652836" MODIFIED="1504368498818" TEXT="PanelManager selber verbleibt im top-level window">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1504368500421" ID="ID_184425569" MODIFIED="1504368925887" TEXT="es gibt einen PanelLocator im WindowLocator">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1504368540111" ID="ID_1747666798" MODIFIED="1504369058912" TEXT="es gibt einen ViewLocator im InteractionDirector">
<arrowlink COLOR="#7f97bd" DESTINATION="ID_948587913" ENDARROW="Default" ENDINCLINATION="-940;79;" ID="Arrow_ID_954883780" STARTARROW="None" STARTINCLINATION="1159;303;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504200512737" ID="ID_320931452" MODIFIED="1504200533688" TEXT="M&#xfc;llhaufen">
<icon BUILTIN="clanbomber"/>