Rework Interface-Proxy definition to fit with the new scheme

everything works now after the switch.
BUT this solution is ugly, we need to trigger template instantiation explicitly
This commit is contained in:
Fischlurch 2018-04-03 04:58:22 +02:00
parent f24c548443
commit 18d0970a86
19 changed files with 166 additions and 109 deletions

View file

@ -30,7 +30,7 @@
** @see display-facade.hpp
** @see display-service.hpp actual implementation within the GUI
** @deprecated obsolete early design draft from 2009;
** as of 2018 only kept in source to compile some likewise obsolete UI widgets.
** as of 2018 only kept in source to compile some likewise obsolete UI widgets.
*/
@ -48,6 +48,9 @@ namespace lumiera {
/// emit the vtable here into this translation unit within liblumieracommon.so...
Display::~Display() { }
/** static storage for the facade access front-end */
lib::Depend<Display> Display::facade;
} // namespace lumiera
@ -55,14 +58,12 @@ namespace lumiera {
namespace lumiera {
namespace facade {
typedef InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_Display, 0)
, lumiera::Display
> IHandle_Display;
using IHandle = InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_Display, 0)
, lumiera::Display
>;
template<>
class Proxy<IHandle_Display>
: public Binding<IHandle_Display>
class Proxy<IHandle>
: public Binding<IHandle>
{
//----Proxy-Implementation-of-lumiera::Display--------
@ -84,7 +85,12 @@ namespace facade {
};
// template void openProxy<IHandle_Display> (IHandle_Display const&);
// template void closeProxy<IHandle_Display> (void);
}} // namespace lumiera::facade
} //namespace facade
// emit code for the proxy implementation here...
template
class InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_Display, 0)
, lumiera::Display
>;
} // namespace lumiera

View file

@ -127,7 +127,6 @@ namespace lumiera {
: ServiceHandle<I,FA>
{
using IH = InstanceHandle<I,FA>;
using SH = ServiceHandle<I,FA>;
Link (IH const& iha);
~Link ();
@ -148,7 +147,7 @@ namespace lumiera {
using IH = InstanceHandle<I,I>;
IH& ih_;
Link (IH const& ih)
Link (IH& ih)
: ih_{ih}
{ }
@ -227,7 +226,7 @@ namespace lumiera {
/** act as smart pointer providing access through the facade.
* @note we don't provide operator* */
FA * operator-> () const { return facadeLink_; }
FA * operator-> () const { return facadeLink_.operator ->(); }
/** directly access the instance via the CL interface */
I& get () const { ENSURE(instance_); return *instance_; }

View file

@ -40,19 +40,22 @@
#include "include/gui-notification-facade.h"
#include "include/interfaceproxy.hpp"
namespace gui {
/** static storage for the facade access front-end */
lib::Depend<GuiNotification> GuiNotification::facade;
}
namespace lumiera {
namespace facade {
using gui::ID;
using lib::diff::MutationMessage;
typedef InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_GuiNotification, 0)
, gui::GuiNotification
> IHandle_GuiNotification;
template
class Proxy<IHandle_GuiNotification>
: public Binding<IHandle_GuiNotification>
using IHandle = InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_GuiNotification, 0)
, gui::GuiNotification
>;
template<>
class Proxy<IHandle>
: public Binding<IHandle>
{
using Level = gui::NotifyLevel;
@ -69,9 +72,12 @@ namespace facade {
using IBinding::IBinding;
};
// template void openProxy<IHandle_GuiNotification> (IHandle_GuiNotification const&);
// template void closeProxy<IHandle_GuiNotification> (void);
}} // namespace lumiera::facade
} //namespace facade
// emit code for the proxy implementation here...
template
class InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_GuiNotification, 0)
, gui::GuiNotification
>;
} // namespace lumiera

View file

@ -120,7 +120,7 @@ namespace gui {
using lumiera::facade::LUMIERA_ERROR_FACADE_LIFECYCLE;
using lumiera::error::LERR_(LIFECYCLE);
lib::Depend<DisplayService> _instance; ///< a backdoor for the C Language impl to access the actual SessionCommand implementation...
@ -136,7 +136,7 @@ namespace gui {
{
if (!_instance)
{
lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, 0);
lumiera_error_set (LUMIERA_ERROR_LIFECYCLE, 0);
return;
}
@ -153,7 +153,7 @@ namespace gui {
{
if (!_instance)
{
lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, 0);
lumiera_error_set (LUMIERA_ERROR_LIFECYCLE, 0);
return;
}

View file

@ -209,7 +209,7 @@ namespace gui {
using lumiera::facade::LUMIERA_ERROR_FACADE_LIFECYCLE;
using lumiera::error::LERR_(LIFECYCLE);
lib::Depend<NotificationService> _instance; ///< a backdoor for the C Language impl to access the actual SessionCommand implementation...
@ -223,7 +223,7 @@ namespace gui {
, LUMIERA_INTERFACE_INLINE (displayInfo,
void, (uint severity, const char* text),
{
if (!_instance) lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, text);
if (!_instance) lumiera_error_set (LUMIERA_ERROR_LIFECYCLE, text);
else
_instance().displayInfo (NotifyLevel(severity), text);
}
@ -231,7 +231,7 @@ namespace gui {
, LUMIERA_INTERFACE_INLINE (markError,
void, (LumieraUid element, const char* text),
{
if (!_instance) lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, text);
if (!_instance) lumiera_error_set (LUMIERA_ERROR_LIFECYCLE, text);
else
_instance().markError (reinterpret_cast<ID> (*element), text);
}
@ -239,7 +239,7 @@ namespace gui {
, LUMIERA_INTERFACE_INLINE (markNote,
void, (LumieraUid element, const char* text),
{
if (!_instance) lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, text);
if (!_instance) lumiera_error_set (LUMIERA_ERROR_LIFECYCLE, text);
else
_instance().markNote (reinterpret_cast<ID> (*element), text);
}
@ -247,7 +247,7 @@ namespace gui {
, LUMIERA_INTERFACE_INLINE (mutate,
void, (LumieraUid element, void* diff),
{
if (!_instance) lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, "passing diff message");
if (!_instance) lumiera_error_set (LUMIERA_ERROR_LIFECYCLE, "passing diff message");
else
_instance().mutate (reinterpret_cast<ID> (*element), move(*reinterpret_cast<MutationMessage*> (diff)));
}
@ -255,7 +255,7 @@ namespace gui {
, LUMIERA_INTERFACE_INLINE (triggerGuiShutdown,
void, (const char* cause),
{
if (!_instance) lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, cause);
if (!_instance) lumiera_error_set (LUMIERA_ERROR_LIFECYCLE, cause);
else
_instance().triggerGuiShutdown (cause);
}

View file

@ -118,8 +118,7 @@ namespace lumiera {
virtual Sink getHandle(LumieraDisplaySlot) =0;
protected:
virtual ~Display();
virtual ~Display(); ///< this is an interface
};

View file

@ -131,6 +131,7 @@ namespace lumiera {
protected:
virtual ~DummyPlayer();
friend class lib::DependencyFactory<DummyPlayer>;
};

View file

@ -76,6 +76,10 @@ namespace gui {
*/
class GuiNotification
{
protected:
virtual ~GuiNotification() {} ///< this is an interface
friend class lib::DependencyFactory<GuiNotification>;
public:
static lib::Depend<GuiNotification> facade;
@ -108,9 +112,6 @@ namespace gui {
*/
virtual void triggerGuiShutdown (string const& cause) =0;
protected:
virtual ~GuiNotification() {}
};

View file

@ -93,9 +93,11 @@
#define LUMIERA_INTERFACE_PROXY_H
#include "lib/error.hpp"
#include "common/instancehandle.hpp"
#include "lib/error.hpp"
#include "lib/util.hpp"
using util::cStr;
namespace lumiera {
namespace facade {
@ -114,13 +116,12 @@ namespace facade {
* to the service lifecycle.
*/
template<class IHA>
class Binding;
struct Binding;
template<class FA, class I>
class Binding<InstanceHandle<I,FA>>
struct Binding<InstanceHandle<I,FA>>
: public FA
{
protected:
typedef InstanceHandle<I,FA> IHandle;
typedef Binding<IHandle> IBinding;
@ -132,6 +133,25 @@ namespace facade {
};
template<class I, class FA>
Link<I,FA>::Link (IH const& iha)
: ServiceHandle<I,FA>{iha}
{ }
template<class I, class FA>
Link<I,FA>::~Link() { }
template<class I, class FA>
FA*
Link<I,FA>::operator->() const
{
return ServiceHandle<I,FA>::operator->();
}
}} // namespace lumiera::facade
#endif

View file

@ -81,6 +81,9 @@ namespace lumiera {
*/
class Play
{
protected:
virtual ~Play();
friend class lib::DependencyFactory<Play>;
public:
/** get an implementation instance of this service */
@ -145,8 +148,6 @@ namespace lumiera {
Controller perform(Clip);
protected:
virtual ~Play();
/** core operation: create a new playback process
* outputting to the given viewer/display */
virtual Controller connect(ModelPorts, Output) =0;

View file

@ -109,7 +109,8 @@ namespace control {
protected:
virtual ~SessionCommand() {}
virtual ~SessionCommand() {} ///< this is an interface
friend class lib::DependencyFactory<SessionCommand>;
};

View file

@ -40,17 +40,22 @@
#include "include/session-command-facade.h"
#include "include/interfaceproxy.hpp"
namespace proc {
namespace control{
/** static storage for the facade access front-end */
lib::Depend<SessionCommand> SessionCommand::facade;
}}
namespace lumiera {
namespace facade {
typedef InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_SessionCommand, 0)
, proc::control::SessionCommand
> IHandle_SessionCommand;
using IHandle = InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_SessionCommand, 0)
, proc::control::SessionCommand
>;
template<>
class Proxy<IHandle_SessionCommand>
: public Binding<IHandle_SessionCommand>
class Proxy<IHandle>
: public Binding<IHandle>
{
//----Proxy-Implementation-of-SessionCommand--------
@ -64,9 +69,12 @@ namespace facade {
using IBinding::IBinding;
};
// template void openProxy<IHandle_SessionCommand> (IHandle_SessionCommand const&);
// template void closeProxy<IHandle_SessionCommand> (void);
}} // namespace lumiera::facade
} //namespace facade
// emit code for the proxy implementation here...
template
class InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_SessionCommand, 0)
, proc::control::SessionCommand
>;
} // namespace lumiera

View file

@ -188,7 +188,7 @@ namespace control {
using lumiera::facade::LUMIERA_ERROR_FACADE_LIFECYCLE;
using lumiera::error::LERR_(LIFECYCLE);
lib::Depend<SessionCommandService> _instance; ///< a backdoor for the C Language impl to access the actual SessionCommand implementation...
@ -203,7 +203,7 @@ namespace control {
const char*, (const char* cmdID, const char* invocationID),
{
if (!_instance)
return lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, cmdID);
return lumiera_error_set (LUMIERA_ERROR_LIFECYCLE, cmdID);
else
return _instance().cycle(cmdID, invocationID);
}
@ -211,7 +211,7 @@ namespace control {
, LUMIERA_INTERFACE_INLINE (trigger,
void, (const char* cmdID, const void* args),
{
if (!_instance) lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, cmdID);
if (!_instance) lumiera_error_set (LUMIERA_ERROR_LIFECYCLE, cmdID);
else
_instance().trigger(cmdID, *static_cast<Rec const *> (args));
}
@ -219,7 +219,7 @@ namespace control {
, LUMIERA_INTERFACE_INLINE (bindArg,
void, (const char* cmdID, const void* args),
{
if (!_instance) lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, cmdID);
if (!_instance) lumiera_error_set (LUMIERA_ERROR_LIFECYCLE, cmdID);
else
_instance().bindArg(cmdID, *static_cast<Rec const *> (args));
}
@ -227,7 +227,7 @@ namespace control {
, LUMIERA_INTERFACE_INLINE (invoke,
void, (const char* cmdID),
{
if (!_instance) lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, cmdID);
if (!_instance) lumiera_error_set (LUMIERA_ERROR_LIFECYCLE, cmdID);
else
_instance().invoke(cmdID);
}

View file

@ -41,9 +41,9 @@
** proxy used by the client code to access the interface).
**
** @see dummy-player-facade.hpp
** @see dummy-player-service.hpp actual implementation within the Proc-Layer
** @see dummy-player-service.hpp actual implementation within the Proc-Layer
** @deprecated obsolete early design draft from 2009;
** as of 2018 only kept in source to compile some likewise obsolete UI widgets.
** as of 2018 only kept in source to compile some likewise obsolete UI widgets.
*/
@ -52,7 +52,7 @@
/* ==================== DummyPlayer ======================================= */
#include "include/dummy-player-facade.h"
#include "include/interfaceproxy.hpp"
@ -61,20 +61,22 @@ namespace lumiera {
// emit the vtable here into this translation unit within liblumieracommon.so ...
DummyPlayer::~DummyPlayer() { }
/** static storage for the facade access front-end */
lib::Depend<DummyPlayer> DummyPlayer::facade;
namespace facade {
typedef lumiera::InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_DummyPlayer, 0)
, lumiera::DummyPlayer
> IHandle_DummyPlayer;
using IHandle = InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_DummyPlayer, 0)
, lumiera::DummyPlayer
>;
template<>
class Proxy<IHandle_DummyPlayer>
: public Binding<IHandle_DummyPlayer>
class Proxy<IHandle>
: public Binding<IHandle>
{
//----Proxy-Implementation-of-DummyPlayer--------
typedef lumiera::DummyPlayer::Process Process;
@ -106,13 +108,8 @@ namespace lumiera {
using IBinding::IBinding;
};
// template void openProxy<IHandle_DummyPlayer> (IHandle_DummyPlayer const&);
// template void closeProxy<IHandle_DummyPlayer> (void);
} // namespace facade
/* === Forwarding function(s) on the Process handle === */
@ -128,4 +125,9 @@ namespace lumiera {
template
class InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_DummyPlayer, 0)
, lumiera::DummyPlayer
>;
} // namespace lumiera

View file

@ -176,7 +176,7 @@ namespace proc {
using lumiera::facade::LUMIERA_ERROR_FACADE_LIFECYCLE;
using lumiera::error::LERR_(LIFECYCLE);
lib::Depend<DummyPlayerService> _instance; ///< a backdoor for the C Language impl to access the actual SessionCommand implementation...
typedef ProcessImpl* ProcP;
@ -192,7 +192,7 @@ namespace proc {
{
if (!_instance)
{
lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, 0);
lumiera_error_set (LUMIERA_ERROR_LIFECYCLE, 0);
return 0;
}
@ -204,7 +204,7 @@ namespace proc {
{
if (!_instance)
{
lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, 0);
lumiera_error_set(LUMIERA_ERROR_LIFECYCLE, 0);
return;
}
@ -219,7 +219,7 @@ namespace proc {
{
if (!_instance)
{
lumiera_error_set(LUMIERA_ERROR_FACADE_LIFECYCLE, 0);
lumiera_error_set(LUMIERA_ERROR_LIFECYCLE, 0);
return;
}

View file

@ -46,6 +46,9 @@
#include <memory>
namespace lumiera {
class Play;
}
namespace proc {
namespace play {
@ -54,14 +57,9 @@ namespace play {
//using std::shared_ptr;
using std::unique_ptr;
class Play;
class PlayService;
//typedef lib::ScopedPtrVect<DisplayerSlot> DisplayerTab;
/**************************************************//**
* Management of external Output connections.
@ -73,7 +71,7 @@ namespace play {
, public lib::Sync<>
{
using SigTerm = lumiera::Subsys::SigTerm;
using PlayServiceHandle = lib::DependInject<Play>::ServiceInstance<PlayService>;
using PlayServiceHandle = lib::DependInject<lumiera::Play>::ServiceInstance<PlayService>;
PlayServiceHandle player_;
///////TODO more components and connections to manage here...

View file

@ -47,6 +47,8 @@ namespace lumiera {
Play::~Play() { } // emit VTables here...
/** static storage for the facade access front-end */
lib::Depend<Play> Play::facade;
}//(End) namespace lumiera

View file

@ -68,7 +68,6 @@ namespace proc {
namespace play {
using std::string;
using lumiera::facade::InterfaceFacadeLink;
//using lumiera::Subsys;
//using lumiera::Display;
//using lumiera::DummyPlayer;

View file

@ -28508,8 +28508,8 @@
<icon BUILTIN="yes"/>
<node CREATED="1522697230906" ID="ID_1495746023" MODIFIED="1522697253419" TEXT="alle Bindings sind vom Instance-Handle zu entkoppeln"/>
<node CREATED="1522697255215" ID="ID_1841184306" MODIFIED="1522697273416" TEXT="f&#xfc;r jedes Binding soll eine TranslationUnit frei w&#xe4;hlbar sein"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522697350106" ID="ID_138544872" MODIFIED="1522697365816" TEXT="Technik zur Entkoppelung ben&#xf6;tigt">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522697350106" ID="ID_138544872" MODIFIED="1522724906505" TEXT="Technik zur Entkoppelung ben&#xf6;tigt">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
@ -28551,14 +28551,14 @@
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522697646161" ID="ID_1020206021" MODIFIED="1522697654713" TEXT="Technologie">
<icon BUILTIN="pencil"/>
<node CREATED="1522697675229" ID="ID_1605136526" MODIFIED="1522697732617" STYLE="fork" TEXT="Indirektion notwendig">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522697690651" ID="ID_1244533717" MODIFIED="1522697720935" TEXT="Erzeugung">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522697690651" ID="ID_1244533717" MODIFIED="1522724892373" TEXT="Erzeugung">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522697699297" ID="ID_891061833" MODIFIED="1522697720295" TEXT="Zerst&#xf6;rung">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522697699297" ID="ID_891061833" MODIFIED="1522724893954" TEXT="Zerst&#xf6;rung">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522697702521" ID="ID_1874387796" MODIFIED="1522697719559" TEXT="Zugriff auf Facade(Proxy)">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522697702521" ID="ID_1874387796" MODIFIED="1522724895488" TEXT="Zugriff auf Facade(Proxy)">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1522697743604" ID="ID_829814208" MODIFIED="1522697751286" TEXT="m&#xf6;gliche L&#xf6;sungen">
@ -28657,6 +28657,18 @@
</node>
<node CREATED="1522709579398" ID="ID_1445259032" MODIFIED="1522709595885" TEXT="kann man spezialisieren und zugleich Instantiieren?">
<icon BUILTIN="help"/>
<node CREATED="1522720815569" ID="ID_1906873483" MODIFIED="1522720817589" TEXT="nein"/>
<node CREATED="1522720818625" ID="ID_693558811" MODIFIED="1522720821985" TEXT="wie schade">
<icon BUILTIN="smily_bad"/>
</node>
</node>
</node>
<node CREATED="1522724948516" ID="ID_1547993807" MODIFIED="1522724964722" TEXT="explizite Instantiierung notwendig">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1522724966777" ID="ID_650754221" MODIFIED="1522724973013" TEXT="h&#xe4;&#xdf;lich und umst&#xe4;ndlich"/>
<node CREATED="1522724973625" ID="ID_1016558302" MODIFIED="1522724976780" TEXT="Code dupliziert"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1522724977440" ID="ID_686663661" MODIFIED="1522724991255" TEXT="bessere L&#xf6;sung?">
<icon BUILTIN="flag-pink"/>
</node>
</node>
</node>
@ -28711,23 +28723,25 @@
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="ksmiletris"/>
</node>
<node CREATED="1522709629935" ID="ID_151551561" MODIFIED="1522709645169" TEXT="L&#xf6;sung zum Entkoppeln der Proxy-Definition"/>
<node COLOR="#338800" CREATED="1522709629935" ID="ID_151551561" MODIFIED="1522724915985" TEXT="L&#xf6;sung zum Entkoppeln der Proxy-Definition">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522709654308" ID="ID_1059248114" MODIFIED="1522709793386" TEXT="bestehenden Code umschreiben">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522709669498" ID="ID_9288802" MODIFIED="1522709700910" TEXT="alle bestehenden Proxies">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522635397309" ID="ID_590180071" MODIFIED="1522709705713" TEXT="SessionCommandService">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522709669498" ID="ID_9288802" MODIFIED="1522724927071" TEXT="alle bestehenden Proxies">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1522635397309" ID="ID_590180071" MODIFIED="1522724921600" TEXT="SessionCommandService">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522635417932" ID="ID_1711611771" MODIFIED="1522709706659" TEXT="DisplayService">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522635417932" ID="ID_1711611771" MODIFIED="1522724922888" TEXT="DisplayService">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522635433910" ID="ID_444280759" MODIFIED="1522709723772" TEXT="GuiNotification">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522635433910" ID="ID_444280759" MODIFIED="1522724924183" TEXT="GuiNotification">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522635450269" ID="ID_1963184158" MODIFIED="1522709725003" TEXT="DummyPlayerService">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522635450269" ID="ID_1963184158" MODIFIED="1522724925717" TEXT="DummyPlayerService">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1522709729297" ID="ID_1293938610" MODIFIED="1522717901995" TEXT="Facade-Accessoren auf lib::Depend umstellen">