Library: allow to check if Advice was explicitly given

For context: The »Advice System« was coined a long time ago, in 2010,
based on the vague impression that it might be useful for that kind of application
we are about to build here. And, as can be expected, none of the usage situations
envisioned at that time was brought to bear. Non the less, the facility came in
handy at times, precisely because it is cross-cutting and allows to pass
information without imposing any systematic relationship between the
communication partners.

And now we've got again such a situation.
The global style manager in the UI has to build a virtual CSS path,
which is needed by drawing code somewhere deep down, and we absolutely
do not want to pass a reference to the style manager over 20 recursive calls.

The alternatives would be
 (1) to turn the style manager into a public service
 (2) to have a static access function somewhere
 (3) to use a global variable.
For rationale, (1) would be overblown, because we do not actually request
a service to do work for us, rather we need some global piece of information.
(2) would be equivalent to (1), just more confusing. And (3) is basically
what the Advice system does, with the added benefit of a clear-cut service
access point and a well defined lifecycle.

This changeset adds the ability to check if actual Advice has been published,
which allows us to invoke the (possibly expensive) GTK path building and
style context building code only once.
This commit is contained in:
Fischlurch 2019-07-13 17:00:23 +02:00
parent dde3778cad
commit 6b4bf0a6ea
4 changed files with 410 additions and 58 deletions

View file

@ -148,7 +148,7 @@ namespace advice {
explicit
PointOfAdvice (Binding const& binding)
: pattern_(binding.buildMatcher())
, resolution_(0)
, resolution_(nullptr)
{ }
// using default copy/assignment
@ -291,6 +291,12 @@ namespace advice {
discardSolutions();
}
bool
isGiven() const
{
return bool{this->getSolution()};
}
void
defineBinding (Literal topic)
{
@ -413,7 +419,7 @@ namespace advice {
* Access point for the advised entity (client).
* This is the interface intended for client code to request advice
* of a specific type and optionally limited to a special topic (binding).
* Instantiating an \c Request<AD> object automatically entails a registration
* Instantiating an `Request<AD>` object automatically entails a registration
* with the AdviceSystem behind the scenes, and deleting it causes deregistration.
* Request objects may be instantiated and copied freely, and the binding pattern
* may be changed. The actual advice is accessed through the member function
@ -470,6 +476,18 @@ namespace advice {
}
/**
* @return `true` if this request retrieves a piece of information specifically set
* by an Advisor, as opposed to just delivering a default fallback result.
*/
bool
isMatched() const
{
return bool{this->getSolution()};
}
/** set and possibly change the binding term used to retrieve Advice */
void
defineBinding (Literal topic)
{

View file

@ -12,7 +12,7 @@ return: 0
END
PLANNED "Advice constellations" AdviceSituations_test <<END
TEST "Advice constellations" AdviceSituations_test <<END
return: 0
END

View file

@ -30,28 +30,6 @@
#include "common/advice.hpp"
//#include "lib/p.hpp"
//#include "steam/assetmanager.hpp"
//#include "steam/asset/inventory.hpp"
//#include "steam/mobject/session/clip.hpp"
//#include "steam/mobject/session/fork.hpp"
//#include "lib/meta/trait-special.hpp"
//#include "lib/util-foreach.hpp"
//#include "lib/symbol.hpp"
//#include <string>
//using lib::test::showSizeof;
//using lib::test::randStr;
//using util::isSameObject;
//using util::and_all;
//using util::for_each;
//using util::isnil;
//using lib::Literal;
//using lib::Symbol;
//using liab::P;
//using std::string;
namespace lumiera {
@ -67,7 +45,7 @@ namespace test {
* @test documentation of the fundamental usage scenarios envisioned in the Advice concept.
* This test will be augmented and completed as the Lumiera application matures.
*
* @todo partially unimplemented and thus commented out ////////////////////TICKET #335
* @todo yet more use cases to come.... ////////////////////////////////////////////////////////TICKET #335
*
* @see advice.hpp
* @see AdviceBasics_test
@ -79,31 +57,85 @@ namespace test {
virtual void
run (Arg)
{
check_ProxyRenderingAdvice();
check_DependencyInjection();
pattern01_justPickAndBeHappy();
pattern02_pickIfPresent();
pattern03_installOnlyOnce();
TODO ("more advice usage scenarios.....?");
}
/** @test usage scenario: switch a processing node into proxy mode. */
/** @test usage pattern 01: simply consume Advice -- irrespective if set explicitly. */
void
check_ProxyRenderingAdvice()
pattern01_justPickAndBeHappy()
{
UNIMPLEMENTED ("anything regarding proxy rendering");
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #335
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #335
Request<int> generic{"solution(life_and_universe_and_everything)"};
CHECK (0 == generic.getAdvice()); // the early bird gets the worm...
Provision<int> universal{"solution(life_and_universe_and_everything)"};
universal.setAdvice(5);
CHECK (5 == generic.getAdvice()); // ...while the bad girls go everywhere
universal.retractAdvice();
CHECK (0 == generic.getAdvice()); // nothing to see here, just move on
}
/** @test usage scenario: dependency injection for tests */
/** @test usage pattern 01: detect if specific advice was given. */
void
check_DependencyInjection()
pattern02_pickIfPresent()
{
UNIMPLEMENTED ("suitable advice to request and transfer test dependencies");
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #335
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #335
Request<int> request{"something(special)"};
CHECK (not request.isMatched());
Provision<int> info{"something(special)"};
info.setAdvice(55);
CHECK (request.isMatched());
CHECK (55 == request.getAdvice());
info.retractAdvice();
CHECK (not request.isMatched());
}
/** @test usage pattern 01: . */
void
pattern03_installOnlyOnce()
{
Provision<int> info{"something(special)"};
CHECK (not info.isGiven());
Request<int> question{"something(special)"};
CHECK (0 == question.getAdvice());
CHECK (not question.isMatched());
auto publish = [&](int i)
{
if (not info.isGiven())
info.setAdvice (i);
};
for (uint i=0; i<5; ++i)
if (i % 2)
publish (i);
CHECK (1 == question.getAdvice());
CHECK (question.isMatched());
info.retractAdvice();
CHECK (not info.isGiven());
CHECK (not question.isMatched());
}
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #335
/** @test usage pattern ∞ : somewhat literally fantastic */
void
check_SevenMoreWondersOfTheWorld()
{
UNIMPLEMENTED ("suitable advice to save the world");
}
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #335
// more to come.....
};

View file

@ -6089,7 +6089,7 @@
<node CREATED="1485457141853" ID="ID_1841602685" MODIFIED="1557498707220" TEXT="man f&#xfc;gt diese dem Fenster hinzu"/>
</node>
</node>
<node CREATED="1485454243767" HGAP="43" ID="ID_3699127" MODIFIED="1557498707220" TEXT="Aufgabe: konsistentes UI" VSHIFT="-4">
<node CREATED="1485454243767" HGAP="43" ID="ID_3699127" MODIFIED="1563020397025" TEXT="Zweck: konsistentes UI" VSHIFT="-4">
<node CREATED="1485454248335" ID="ID_623536019" MODIFIED="1557498707220" TEXT="globales Men&#xfc;"/>
<node CREATED="1485454259637" ID="ID_432211008" MODIFIED="1557498707220" TEXT="globale Toolbar"/>
<node CREATED="1485454252789" ID="ID_310049457" MODIFIED="1557498707220" TEXT="globale Aktionen"/>
@ -6112,6 +6112,58 @@
</node>
</node>
</node>
<node CREATED="1563020384655" ID="ID_1309805657" MODIFIED="1563020388552" TEXT="Aufgaben">
<node CREATED="1563020407852" ID="ID_280366952" MODIFIED="1563020411340" TEXT="Style / CSS">
<node CREATED="1563020429008" ID="ID_8715605" MODIFIED="1563020434665" TEXT="Delegate: UIStyle">
<node CREATED="1563020438839" ID="ID_390066923" MODIFIED="1563020453938" TEXT="der &#xbb;StyleManager&#xab;"/>
<node CREATED="1563020456445" ID="ID_134906113" MODIFIED="1563020474783" TEXT="Stand 2019: weitgehend Funktionen von Joel Holdsworth"/>
</node>
<node CREATED="1563019888259" ID="ID_1755242650" MODIFIED="1563021428072" TEXT="UiManager: CSS-Pfad bereitstellen">
<linktarget COLOR="#4b31cd" DESTINATION="ID_1755242650" ENDARROW="Default" ENDINCLINATION="-1204;55;" ID="Arrow_ID_847790641" SOURCE="ID_331912016" STARTARROW="Default" STARTINCLINATION="-1798;0;"/>
<node CREATED="1563020493385" ID="ID_393380948" MODIFIED="1563020503179" TEXT="publiziert via Advice-System"/>
<node CREATED="1563020504983" ID="ID_743553538" MODIFIED="1563020535783" TEXT="Topics">
<node CREATED="1563020586598" MODIFIED="1563020586598" TEXT="style(trackBody)"/>
</node>
<node CREATED="1563020595314" HGAP="39" ID="ID_517868337" MODIFIED="1563021744134" TEXT="CSS-Pfad initial">
<linktarget COLOR="#3976e4" DESTINATION="ID_517868337" ENDARROW="Default" ENDINCLINATION="-1204;103;" ID="Arrow_ID_1481718697" SOURCE="ID_1653425334" STARTARROW="None" STARTINCLINATION="1024;21;"/>
<node CREATED="1563020651779" ID="ID_64689753" MODIFIED="1563020660375" TEXT="wenn sich das erste TimelineWidget meldet"/>
<node CREATED="1563020662916" ID="ID_87556518" MODIFIED="1563020678127" TEXT="von diesem den konkreten Pfad zum BodyCanvasWidget beziehen"/>
<node CREATED="1563020681159" ID="ID_1474481449" MODIFIED="1563020687466" TEXT="diesen Pfad virtuell ausbauen">
<node CREATED="1563020689334" ID="ID_1244087719" MODIFIED="1563020703963" TEXT="Knoten: fork.timeline"/>
</node>
<node CREATED="1563020712094" ID="ID_363709831" MODIFIED="1563020720694" TEXT="Gtk::StyleKontext damit populieren"/>
<node CREATED="1563020723228" ID="ID_710572596" MODIFIED="1563020736448" TEXT="und per Advice-Provision publizieren">
<node CREATED="1563022011347" ID="ID_1677449627" MODIFIED="1563022020514" TEXT="nur beim ersten Mal">
<icon BUILTIN="idea"/>
</node>
<node COLOR="#338800" CREATED="1563022850037" ID="ID_1908316447" MODIFIED="1563028947984" TEXT="kann das Advice-System das?">
<arrowlink COLOR="#1dba57" DESTINATION="ID_1996378025" ENDARROW="Default" ENDINCLINATION="3933;-460;" ID="Arrow_ID_1546347584" STARTARROW="None" STARTINCLINATION="2657;0;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1563020737596" ID="ID_79793328" MODIFIED="1563020874158" TEXT="Ablauf/Timings">
<icon BUILTIN="info"/>
<node CREATED="1563020748317" ID="ID_1777148552" MODIFIED="1563020773686" TEXT="getriggert von InteractionDirector::injectTimeline()"/>
<node CREATED="1563020775222" ID="ID_234951225" MODIFIED="1563020785721" TEXT="zu dem Zeitpunkt ist das TimelineWidget komplett konstruiert"/>
<node CREATED="1563020786593" ID="ID_306641433" MODIFIED="1563020795432" TEXT="und in der &#xfc;bergordneten TimelinePane verankter"/>
<node CREATED="1563020796267" ID="ID_714522948" MODIFIED="1563020804769" TEXT="aber noch nicht realisiert / gezeichnet"/>
<node CREATED="1563020808469" ID="ID_1476613816" MODIFIED="1563020824176" TEXT="der Advice wird fr&#xfc;hestens beim ersten draw()-Aufruf gebraucht"/>
<node CREATED="1563020836874" ID="ID_729790149" MODIFIED="1563020858525" TEXT="der Advice wird beim Shutdown des globalen UI-Kontext zur&#xfc;ckgezogen"/>
<node COLOR="#435e98" CREATED="1563020825077" ID="ID_1941111431" MODIFIED="1563020864694" TEXT="garantiert wasserdicht">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node CREATED="1563020603946" ID="ID_717062852" MODIFIED="1563020609158" TEXT="aktualisiert">
<icon BUILTIN="hourglass"/>
<node CREATED="1563020611154" ID="ID_1878310069" MODIFIED="1563020617763" TEXT="7/2019 noch gar nicht"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1563020618619" ID="ID_1265253347" MODIFIED="1563020633923" TEXT="Plan: beim Laden eines neuen Stylesheet">
<icon BUILTIN="bell"/>
</node>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1489460861250" HGAP="91" ID="ID_771159819" MODIFIED="1557498707220" TEXT="globaler Kontext" VSHIFT="-26">
<font NAME="SansSerif" SIZE="15"/>
@ -18158,6 +18210,53 @@
</node>
</node>
</node>
<node CREATED="1563019044455" ID="ID_1947863751" MODIFIED="1563019051553" TEXT="Style / CSS-Struktur">
<node CREATED="1563019065682" ID="ID_277910782" MODIFIED="1563019083259" TEXT="grunds&#xe4;tzlich durch Widget im UI definiert"/>
<node CREATED="1563019091550" ID="ID_342336016" MODIFIED="1563019113940" TEXT="Struktur im TimelineWidget">
<node CREATED="1563019373733" ID="ID_412703124" MODIFIED="1563019379308" TEXT="Widget-Struktur">
<node CREATED="1563019390913" ID="ID_197164350" MODIFIED="1563019403082" TEXT="teilweise ein Implementierungs-Detail"/>
</node>
<node CREATED="1563019380597" ID="ID_7366061" MODIFIED="1563019384050" TEXT="Kontrollstruktur"/>
</node>
<node CREATED="1563019137720" ID="ID_1085825572" MODIFIED="1563019142563" TEXT="systematisch">
<node CREATED="1563019146591" ID="ID_105242868" MODIFIED="1563019178642" TEXT="&quot;auf was k&#xf6;nnen CSS-Selektoren aufbauen&quot;?">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1563019196947" ID="ID_1289853928" MODIFIED="1563019204755" TEXT="Ankerpunkt">
<node CREATED="1563019232304" ID="ID_206396832" MODIFIED="1563019237151" TEXT="Class: .timeline-page"/>
<node CREATED="1563019248349" ID="ID_795857264" MODIFIED="1563019257692" TEXT="Element: paned"/>
</node>
<node CREATED="1563019278662" ID="ID_649362322" MODIFIED="1563019282193" TEXT="Kinder">
<node CREATED="1563019283116" ID="ID_1537337657" MODIFIED="1563019286632" TEXT="head.timeline"/>
<node CREATED="1563019287444" ID="ID_262145100" MODIFIED="1563019291575" TEXT="body.timeline">
<node CREATED="1563019321399" ID="ID_1831987488" MODIFIED="1563019329149" TEXT="fork.timeline"/>
<node CREATED="1563019330262" ID="ID_847433793" MODIFIED="1563019334721" TEXT="canvas.timeline"/>
</node>
</node>
</node>
<node CREATED="1563019421405" ID="ID_985036312" MODIFIED="1563019426415" TEXT="Beispiele">
<icon BUILTIN="idea"/>
<node CREATED="1563019440558" ID="ID_1321598849" MODIFIED="1563019471434" TEXT="Scope-Insets">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
die Vertiefungen im Anzeige-Profil
</p>
<p>
auf der rechten Seite, wo der Content angezeigt wird
</p>
</body>
</html>
</richcontent>
<node CREATED="1563019476308" ID="ID_83481977" MODIFIED="1563021613503" TEXT=".timeline-page &gt; body.timeline fork.timeline">
<linktarget COLOR="#419bcf" DESTINATION="ID_83481977" ENDARROW="Default" ENDINCLINATION="666;0;" ID="Arrow_ID_1386111155" SOURCE="ID_1803180287" STARTARROW="None" STARTINCLINATION="-787;0;"/>
</node>
</node>
</node>
</node>
<node CREATED="1479688613990" ID="ID_1537299376" MODIFIED="1557498707224" TEXT="Struktur&#xe4;nderung">
<node CREATED="1479688621637" ID="ID_71591229" MODIFIED="1557498707224" TEXT="notwendig: strukturelles Modell">
<icon BUILTIN="messagebox_warning"/>
@ -19182,7 +19281,7 @@
<node CREATED="1560698618689" ID="ID_231185798" MODIFIED="1560698625444" TEXT="notification-Callbacks">
<node CREATED="1560698764250" ID="ID_926915515" MODIFIED="1560698770146" TEXT="Publisher-Subscriber"/>
<node CREATED="1560698668089" ID="ID_1609727906" MODIFIED="1560698674278" TEXT="ebenso problematisch"/>
<node CREATED="1560698675226" ID="ID_1528720357" MODIFIED="1561042754690" TEXT="Signale sind aber Callbacks....">
<node CREATED="1560698675226" ID="ID_1528720357" MODIFIED="1563021623445" TEXT="Signale sind aber Callbacks....">
<richcontent TYPE="NOTE"><html>
<head>
@ -19193,13 +19292,13 @@
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#fcc76b" DESTINATION="ID_64926941" ENDARROW="Default" ENDINCLINATION="24;-35;" ID="Arrow_ID_1800480673" STARTARROW="None" STARTINCLINATION="-57;0;"/>
<arrowlink COLOR="#fcc76b" DESTINATION="ID_64926941" ENDARROW="Default" ENDINCLINATION="39;-39;" ID="Arrow_ID_1800480673" STARTARROW="None" STARTINCLINATION="-57;0;"/>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1560698625944" ID="ID_64926941" MODIFIED="1561048698955" TEXT="ein spezielles Signal hierf&#xfc;r">
<linktarget COLOR="#fcc76b" DESTINATION="ID_64926941" ENDARROW="Default" ENDINCLINATION="24;-35;" ID="Arrow_ID_1800480673" SOURCE="ID_1528720357" STARTARROW="None" STARTINCLINATION="-57;0;"/>
<node COLOR="#435e98" CREATED="1560698625944" ID="ID_64926941" MODIFIED="1563021623445" TEXT="ein spezielles Signal hierf&#xfc;r">
<linktarget COLOR="#fcc76b" DESTINATION="ID_64926941" ENDARROW="Default" ENDINCLINATION="39;-39;" ID="Arrow_ID_1800480673" SOURCE="ID_1528720357" STARTARROW="None" STARTINCLINATION="-57;0;"/>
<icon BUILTIN="forward"/>
<node CREATED="1560698805704" ID="ID_1490359824" MODIFIED="1561042627539" TEXT="wer tr&#xe4;gt es?">
<arrowlink DESTINATION="ID_1799554074" ENDARROW="Default" ENDINCLINATION="93;0;" ID="Arrow_ID_576839005" STARTARROW="None" STARTINCLINATION="169;0;"/>
@ -19269,6 +19368,22 @@
<icon BUILTIN="hourglass"/>
</node>
</node>
<node CREATED="1563019548130" ID="ID_1803180287" MODIFIED="1563021613503" TEXT="Aufgabe: systematischen CSS-Pfad erzeugen">
<arrowlink COLOR="#419bcf" DESTINATION="ID_83481977" ENDARROW="Default" ENDINCLINATION="666;0;" ID="Arrow_ID_1386111155" STARTARROW="None" STARTINCLINATION="-787;0;"/>
<arrowlink COLOR="#8b7ea0" DESTINATION="ID_561705172" ENDARROW="Default" ENDINCLINATION="-2256;70;" ID="Arrow_ID_57895594" STARTARROW="None" STARTINCLINATION="465;29;"/>
<icon BUILTIN="pencil"/>
<node CREATED="1563021472845" ID="ID_63684521" MODIFIED="1563021488846" TEXT="braucht konkreten Gtk::WidgetPath als Anker">
<node CREATED="1563021490328" ID="ID_1982999427" MODIFIED="1563021498980" TEXT="vom BodyCanvasWidget"/>
<node CREATED="1563021499977" ID="ID_125420561" MODIFIED="1563021519170" TEXT="...im TimelineWidget &gt; TimelineLayout"/>
</node>
<node CREATED="1563021522198" HGAP="84" ID="ID_349220035" MODIFIED="1563021584919" TEXT="erg&#xe4;nzt um virtuelle Knoten" VSHIFT="-9">
<icon BUILTIN="idea"/>
<node CREATED="1563020900138" ID="ID_1653425334" MODIFIED="1563021712946" TEXT="implementiert im UiManger / UiStyle">
<arrowlink COLOR="#3976e4" DESTINATION="ID_517868337" ENDARROW="Default" ENDINCLINATION="-1204;103;" ID="Arrow_ID_1481718697" STARTARROW="None" STARTINCLINATION="1024;21;"/>
</node>
<node CREATED="1563021556105" ID="ID_629948451" MODIFIED="1563021569720" TEXT="publiziert via Avice &quot;style(trackBody)&quot;"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480694550601" ID="ID_1306244096" MODIFIED="1557498707226" 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;"/>
@ -21383,8 +21498,8 @@
<node CREATED="1562237265912" ID="ID_1827698275" MODIFIED="1562237275771" TEXT="&quot;leuchtende&quot; Elemente"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1562237357741" ID="ID_836338266" MODIFIED="1562237366133" TEXT="Prototyp / Evaluierung">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1562237357741" ID="ID_836338266" MODIFIED="1562972876507" TEXT="Prototyp / Evaluierung">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1562238962640" ID="ID_1949200690" MODIFIED="1562843653138" TEXT="#1201 Prototype: custom styled timeline profile">
<linktarget COLOR="#3a84dd" DESTINATION="ID_1949200690" ENDARROW="Default" ENDINCLINATION="-483;0;" ID="Arrow_ID_16837481" SOURCE="ID_424517976" STARTARROW="None" STARTINCLINATION="566;0;"/>
<icon BUILTIN="flag-yellow"/>
@ -21519,6 +21634,10 @@
</node>
</node>
</node>
<node CREATED="1562972564394" ID="ID_47205096" MODIFIED="1562972572357" TEXT="scheint zu funktionieren...">
<node CREATED="1562972574838" ID="ID_425700528" MODIFIED="1562972585258" TEXT="bekomme den Pfad: &quot;paned:dir-ltr.horizontal box:dir-ltr.vertical TrackScope.timeline&quot;"/>
<node CREATED="1562972605077" ID="ID_1232397111" MODIFIED="1562972636996" TEXT="das w&#xe4;re das TimelineWidget, dann der BodyCanvas, und die neue virtuelle CSS-Node"/>
</node>
</node>
<node CREATED="1562969880923" ID="ID_1675178851" MODIFIED="1562969892966" TEXT="damit einen Gtk::StyleContext konfigurieren">
<node CREATED="1562969894183" ID="ID_1066073394" MODIFIED="1562969914243" TEXT="StyleContext per Factory erzeugen">
@ -21559,7 +21678,8 @@
</node>
</node>
</node>
<node CREATED="1562878898257" ID="ID_79779793" MODIFIED="1562878916739" TEXT="Implementierungs-Themen">
<node CREATED="1562878898257" ID="ID_79779793" MODIFIED="1562972881199" TEXT="Implementierungs-Themen">
<icon BUILTIN="pencil"/>
<node CREATED="1562878930347" ID="ID_886529991" MODIFIED="1562878932485" TEXT="Fragen">
<node CREATED="1562878933594" ID="ID_309429528" MODIFIED="1562878946223" TEXT="wer definiert sinnvollerweise die Layout-Pfade?"/>
<node CREATED="1562878948640" ID="ID_1131723159" MODIFIED="1562878968203" TEXT="wer erstellt den zugeh&#xf6;rigen StyleContext, und wann?"/>
@ -21593,11 +21713,28 @@
<node CREATED="1562938985427" ID="ID_1430350400" MODIFIED="1562939000802" TEXT="und das Advice-System bietet hierf&#xfc;r die ad&#xe4;quate Infrastruktur"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1562972719033" ID="ID_1528071219" MODIFIED="1563020034710" TEXT="kl&#xe4;ren: ist der Style-Pfad sinnvoll / korrekt?">
<linktarget COLOR="#46558a" DESTINATION="ID_1528071219" ENDARROW="Default" ENDINCLINATION="-639;0;" ID="Arrow_ID_1602346272" SOURCE="ID_678877446" STARTARROW="None" STARTINCLINATION="564;0;"/>
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1562972742894" ID="ID_340313615" MODIFIED="1562972762823" TEXT="man sollte die custom-widgets explizit benennen">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1562972764593" ID="ID_315266947" MODIFIED="1562972781566" TEXT="warum beginnt der Pfad mit dem Timeline-Widget?">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1562972783861" ID="ID_284818197" MODIFIED="1562972793575" TEXT="ist das nicht korrekt veranktert?"/>
<node CREATED="1562972794679" ID="ID_522042066" MODIFIED="1562972802573" TEXT="liegt das an der lib GDL?"/>
<node CREATED="1562972821550" ID="ID_440374994" MODIFIED="1562972834594" TEXT="oder liegt das am Zeitpunkt des Aufrufs?"/>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1562237138185" ID="ID_677602530" MODIFIED="1562237172328" TEXT="vermutlich eine Misch-L&#xf6;sung, mit Erg&#xe4;nzungen nach dem ersten Ansatz"/>
</node>
<node CREATED="1563019888259" HGAP="51" ID="ID_678877446" MODIFIED="1563020041476" TEXT="systematischen CSS-Pfad bereitstellen" VSHIFT="12">
<arrowlink COLOR="#46558a" DESTINATION="ID_1528071219" ENDARROW="Default" ENDINCLINATION="-639;0;" ID="Arrow_ID_1602346272" STARTARROW="None" STARTINCLINATION="564;0;"/>
<linktarget COLOR="#4b31cd" DESTINATION="ID_678877446" ENDARROW="Default" ENDINCLINATION="-711;38;" ID="Arrow_ID_643305825" SOURCE="ID_331912016" STARTARROW="Default" STARTINCLINATION="-237;18;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1554516547904" ID="ID_229346999" MODIFIED="1557498707230" TEXT="Implementierung">
<icon BUILTIN="pencil"/>
@ -21809,7 +21946,8 @@
</node>
</node>
</node>
<node CREATED="1561742210044" HGAP="29" ID="ID_561705172" MODIFIED="1561898378502" TEXT="Problem: woher stammt der Style?" VSHIFT="-32">
<node CREATED="1561742210044" HGAP="29" ID="ID_561705172" MODIFIED="1563020104355" TEXT="Problem: woher stammt der Style?" VSHIFT="-32">
<linktarget COLOR="#8b7ea0" DESTINATION="ID_561705172" ENDARROW="Default" ENDINCLINATION="-2256;70;" ID="Arrow_ID_57895594" SOURCE="ID_1803180287" STARTARROW="None" STARTINCLINATION="465;29;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1561898385345" ID="ID_959729268" MODIFIED="1561898420583" TEXT="allgemeines Problem">
<arrowlink COLOR="#cf284f" DESTINATION="ID_30064777" ENDARROW="Default" ENDINCLINATION="-6;190;" ID="Arrow_ID_970836248" STARTARROW="None" STARTINCLINATION="-914;34;"/>
@ -21833,6 +21971,12 @@
</node>
</node>
</node>
<node CREATED="1563019837771" ID="ID_331912016" MODIFIED="1563021396900" TEXT="generiere und publiziere einen CSS-Pfad">
<arrowlink COLOR="#4b31cd" DESTINATION="ID_678877446" ENDARROW="Default" ENDINCLINATION="-711;38;" ID="Arrow_ID_643305825" STARTARROW="Default" STARTINCLINATION="-237;18;"/>
<arrowlink COLOR="#4b31cd" DESTINATION="ID_1755242650" ENDARROW="Default" ENDINCLINATION="-1204;55;" ID="Arrow_ID_847790641" STARTARROW="Default" STARTINCLINATION="-1798;0;"/>
<node CREATED="1563019856854" ID="ID_1799510436" MODIFIED="1563019861202" TEXT="Gtk::WidgetPath"/>
<node CREATED="1563019863670" ID="ID_1584577599" MODIFIED="1563019868785" TEXT="Gtk::StyleContext"/>
</node>
</node>
</node>
<node CREATED="1561742196428" ID="ID_1908345164" MODIFIED="1561742202862" TEXT="Fl&#xe4;chen"/>
@ -39242,7 +39386,7 @@
<linktarget COLOR="#b6829b" DESTINATION="ID_1359158691" ENDARROW="Default" ENDINCLINATION="1134;-1646;" ID="Arrow_ID_927211935" SOURCE="ID_1305671938" STARTARROW="None" STARTINCLINATION="1359;916;"/>
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<node CREATED="1515975677462" ID="ID_1848164117" MODIFIED="1515975685784" TEXT="Problem: Lebenszyklus">
<node COLOR="#338800" CREATED="1492094235291" HGAP="36" ID="ID_451964727" MODIFIED="1561827466064" TEXT="#1086 unify Depend singleton and instance management" VSHIFT="-20">
<node COLOR="#338800" CREATED="1492094235291" FOLDED="true" HGAP="36" ID="ID_451964727" MODIFIED="1563022756032" TEXT="#1086 unify Depend singleton and instance management" VSHIFT="-20">
<linktarget COLOR="#7188b5" DESTINATION="ID_451964727" ENDARROW="Default" ENDINCLINATION="2227;-4042;" ID="Arrow_ID_1654818003" SOURCE="ID_871055051" STARTARROW="None" STARTINCLINATION="775;393;"/>
<linktarget COLOR="#5c71a3" DESTINATION="ID_451964727" ENDARROW="Default" ENDINCLINATION="767;-2073;" ID="Arrow_ID_1454095581" SOURCE="ID_1714114896" STARTARROW="None" STARTINCLINATION="1892;380;"/>
<linktarget COLOR="#8697be" DESTINATION="ID_451964727" ENDARROW="Default" ENDINCLINATION="200;-562;" ID="Arrow_ID_1211717131" SOURCE="ID_1032947061" STARTARROW="None" STARTINCLINATION="1387;-152;"/>
@ -39542,7 +39686,7 @@
</node>
<node COLOR="#338800" CREATED="1520722149761" ID="ID_39179906" MODIFIED="1531584013616" TEXT="neue Implementierung" VGAP="6">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1521160662691" ID="ID_1475127406" MODIFIED="1561827466081" TEXT="Design Syntax und Nutzungsmuster">
<node COLOR="#338800" CREATED="1521160662691" FOLDED="true" ID="ID_1475127406" MODIFIED="1563022738735" TEXT="Design Syntax und Nutzungsmuster">
<icon BUILTIN="button_ok"/>
<node CREATED="1521161117092" ID="ID_672223000" MODIFIED="1521161119935" TEXT="Syntax">
<node CREATED="1521161120859" ID="ID_1236102866" MODIFIED="1521161279265" TEXT="Depend&lt;Bla&gt; instance"/>
@ -40058,7 +40202,7 @@
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1521160691830" ID="ID_53329830" MODIFIED="1561827466112" TEXT="Implementierung ausf&#xfc;hren">
<node COLOR="#338800" CREATED="1521160691830" FOLDED="true" ID="ID_53329830" MODIFIED="1563022733852" TEXT="Implementierung ausf&#xfc;hren">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1521418559868" ID="ID_592269917" MODIFIED="1521688403021" TEXT="Depend&lt;SRV&gt; Front-End">
<icon BUILTIN="button_ok"/>
@ -40853,7 +40997,7 @@
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1520722155112" ID="ID_1512641426" MODIFIED="1531584013635" TEXT="Integration">
<node COLOR="#338800" CREATED="1520722155112" FOLDED="true" ID="ID_1512641426" MODIFIED="1563022719444" TEXT="Integration">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1521160755182" ID="ID_678080556" MODIFIED="1522428573233" TEXT="Umbenennen">
<icon BUILTIN="button_ok"/>
@ -40956,7 +41100,7 @@
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1521858774321" ID="ID_302686020" MODIFIED="1561827466137" TEXT="aufr&#xe4;umen">
<node COLOR="#338800" CREATED="1521858774321" FOLDED="true" ID="ID_302686020" MODIFIED="1563022715568" TEXT="aufr&#xe4;umen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1521858779614" ID="ID_62114860" MODIFIED="1521928808594" TEXT="was ist depend4test?">
<icon BUILTIN="help"/>
@ -41535,7 +41679,7 @@
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1522033564057" ID="ID_1294295502" MODIFIED="1561827466157" TEXT="Nacharbeiten">
<node COLOR="#338800" CREATED="1522033564057" FOLDED="true" ID="ID_1294295502" MODIFIED="1563022708690" TEXT="Nacharbeiten">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1522454023039" ID="ID_1828121921" MODIFIED="1525124215498" TEXT="Folge-Probleme">
<icon BUILTIN="button_ok"/>
@ -41571,9 +41715,10 @@
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1522454146645" FOLDED="true" ID="ID_818640049" MODIFIED="1561827483843" TEXT="Advice-System">
<node CREATED="1522454146645" FOLDED="true" ID="ID_818640049" MODIFIED="1563022698843" TEXT="Advice-System">
<arrowlink DESTINATION="ID_1843874673" ENDARROW="Default" ENDINCLINATION="-398;-418;" ID="Arrow_ID_908178206" STARTARROW="None" STARTINCLINATION="1004;0;"/>
<linktarget COLOR="#7a8fa9" DESTINATION="ID_818640049" ENDARROW="Default" ENDINCLINATION="-384;-20;" ID="Arrow_ID_1167388040" SOURCE="ID_1527905225" STARTARROW="None" STARTINCLINATION="309;-116;"/>
<icon BUILTIN="info"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1522454318558" ID="ID_65008261" MODIFIED="1522454338494" TEXT="braucht sicht selbst beim Runterfahren">
<icon BUILTIN="smiley-oh"/>
</node>
@ -41816,7 +41961,7 @@
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1521160792856" ID="ID_367925099" MODIFIED="1561827466166" TEXT="System l&#xe4;uft wie zuvor">
<node COLOR="#338800" CREATED="1521160792856" FOLDED="true" ID="ID_367925099" MODIFIED="1563022707025" TEXT="System l&#xe4;uft wie zuvor">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1522457229331" ID="ID_1130290094" MODIFIED="1522632193064" TEXT="Test-Suite">
<icon BUILTIN="button_ok"/>
@ -41906,7 +42051,7 @@
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="yes"/>
</node>
<node CREATED="1515976448409" ID="ID_775751243" MODIFIED="1515976453931" TEXT="Probleme">
<node CREATED="1515976448409" FOLDED="true" ID="ID_775751243" MODIFIED="1563022778225" TEXT="Probleme">
<node CREATED="1515976471557" ID="ID_1775190424" MODIFIED="1515976477336" TEXT="Lebenszyklus tricky"/>
<node CREATED="1515976478852" ID="ID_443463816" MODIFIED="1515976504093" TEXT="API / Subklasse"/>
<node CREATED="1515976504801" ID="ID_1385819621" MODIFIED="1515976664450" TEXT="Test/Mocking">
@ -41931,7 +42076,164 @@
</node>
</node>
</node>
<node COLOR="#990000" CREATED="1522457000411" ID="ID_736034555" MODIFIED="1561827466176" TEXT="Basis-System">
<node CREATED="1563022290903" ID="ID_1738614427" MODIFIED="1563022298518" TEXT="Logik/Informations-Technik">
<node CREATED="1563022305566" ID="ID_1375417763" MODIFIED="1563028982708">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
das &#171;<b>Regel</b>-System&#187;
</p>
</body>
</html>
</richcontent>
<node CREATED="1563029003092" ID="ID_1788007006" MODIFIED="1563029014836" TEXT="...ist bisher nicht mehr als eine Schnappsidee">
<icon BUILTIN="smiley-oh"/>
</node>
</node>
<node CREATED="1563022311632" ID="ID_1353415142" MODIFIED="1563028970867">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
das &#171;<b>Advice</b>-System&#187;
</p>
</body>
</html>
</richcontent>
<node CREATED="1563022363974" ID="ID_290527164" MODIFIED="1563022368517" TEXT="Konzept">
<node CREATED="1563022369373" ID="ID_201969563" MODIFIED="1563022372857" TEXT="von 2010"/>
<node CREATED="1563022373578" ID="ID_1190645627" MODIFIED="1563022412089" TEXT="immer noch experimentell">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
auch in 2019...
</p>
<ul>
<li>
nur einige sporadische Use-Cases
</li>
<li>
ich halte es aber weiterhin f&#252;r wichtig
</li>
</ul>
</body>
</html>
</richcontent>
</node>
<node CREATED="1563022416308" ID="ID_1045079282" MODIFIED="1563022427519">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
ein <b>Whiteboard-System</b>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1563022428253" ID="ID_488828433" MODIFIED="1563022438478" TEXT="geplante Erweiterung: Unifikation">
<icon BUILTIN="hourglass"/>
</node>
</node>
<node CREATED="1563022526728" ID="ID_1836336225" MODIFIED="1563028919215" TEXT="Features">
<icon BUILTIN="info"/>
<node CREATED="1563022531695" ID="ID_1537850929" MODIFIED="1563022538906" TEXT="Topic">
<node COLOR="#338800" CREATED="1563022540464" ID="ID_1729592768" MODIFIED="1563022542831" TEXT="getypt">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1563022543998" ID="ID_1378204754" MODIFIED="1563022562327" TEXT="ground-atom">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1563022569367" ID="ID_912699059" MODIFIED="1563022575513" TEXT="Advice setzen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1563022582735" ID="ID_249193090" MODIFIED="1563022586647" TEXT="Advice &#xfc;berschreiben">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1563022576324" ID="ID_756916431" MODIFIED="1563022581713" TEXT="Advice zur&#xfc;ckziehen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1563022612700" FOLDED="true" ID="ID_1996378025" MODIFIED="1563028914778" TEXT="Vorliegen von Advice feststellen">
<linktarget COLOR="#1dba57" DESTINATION="ID_1996378025" ENDARROW="Default" ENDINCLINATION="3933;-460;" ID="Arrow_ID_1546347584" SOURCE="ID_1908316447" STARTARROW="None" STARTINCLINATION="2657;0;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1563023237085" ID="ID_1601131217" MODIFIED="1563023251307" TEXT="genauer: ein dediziertes Binding"/>
<node CREATED="1563023252134" ID="ID_1294314783" MODIFIED="1563023257630" TEXT="nicht die default-L&#xf6;sung"/>
<node CREATED="1563023271763" ID="ID_807996870" MODIFIED="1563023274919" TEXT="sinnvoll?">
<node CREATED="1563023275863" ID="ID_309537458" MODIFIED="1563023285142" TEXT="ja: das Advice-System ist inh&#xe4;rent stateful"/>
<node CREATED="1563023286238" ID="ID_1249260795" MODIFIED="1563023304193" TEXT="man mu&#xdf; es ja nicht nutzen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
....denn es gibt die default-L&#246;sung
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node COLOR="#338800" CREATED="1563023660812" ID="ID_1579367227" MODIFIED="1563028899851" TEXT="Implementierung">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1563023667023" ID="ID_1893665226" MODIFIED="1563028901796" TEXT="trivial">
<icon BUILTIN="button_ok"/>
<node CREATED="1563023671305" ID="ID_70860178" MODIFIED="1563023709037" TEXT="Request und Provision erben beide von PointOfAdvice"/>
<node CREATED="1563023710113" ID="ID_208212985" MODIFIED="1563023724579" TEXT="dort kann man auf Vorliegen einer NULL-L&#xf6;sung testen"/>
</node>
<node COLOR="#338800" CREATED="1563023728681" ID="ID_1738823249" MODIFIED="1563028903194" TEXT="Unit-Test">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1563023769944" ID="ID_621456362" MODIFIED="1563028904417" TEXT="AdviceSituations_test">
<icon BUILTIN="button_ok"/>
<node CREATED="1563023774448" ID="ID_139010445" MODIFIED="1563023779163" TEXT="bisher reiner Platzhalter"/>
<node CREATED="1563023779807" ID="ID_871541450" MODIFIED="1563028909666" TEXT="umfunktionieren">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
im Sinne des Erfinders...
</p>
<p>
blo&#223; jetzt etwas abstrakter
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1563022446403" ID="ID_705506377" MODIFIED="1563022449971" TEXT="Implementierung">
<node CREATED="1563022451864" ID="ID_1018435620" MODIFIED="1563022457829" TEXT="globales Singleton"/>
<node CREATED="1563022462513" ID="ID_774294960" MODIFIED="1563022475492" TEXT="global gelockte Binding-Hashtable"/>
<node CREATED="1563022479454" ID="ID_184511843" MODIFIED="1563022496031" TEXT="Zugrif auf Advice ist &quot;wild&quot;, ohne Locking">
<node CREATED="1563022500900" ID="ID_1591934024" MODIFIED="1563022507279" TEXT="via Pointer"/>
<node CREATED="1563022509564" ID="ID_1679754158" MODIFIED="1563022512540" TEXT="daher atomar"/>
<node CREATED="1563022513810" ID="ID_283300133" MODIFIED="1563022521780" TEXT="aber ohne Zustellungs-Garantie"/>
</node>
</node>
<node CREATED="1563022664127" ID="ID_1843874673" MODIFIED="1563022698843" TEXT="Probleme">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1843874673" ENDARROW="Default" ENDINCLINATION="-398;-418;" ID="Arrow_ID_908178206" SOURCE="ID_818640049" STARTARROW="None" STARTINCLINATION="1004;0;"/>
</node>
</node>
</node>
<node COLOR="#990000" CREATED="1522457000411" FOLDED="true" ID="ID_736034555" MODIFIED="1563022234022" TEXT="Basis-System">
<linktarget COLOR="#af98b6" DESTINATION="ID_736034555" ENDARROW="Default" ENDINCLINATION="2208;-356;" ID="Arrow_ID_1927977085" SOURCE="ID_1228603701" STARTARROW="None" STARTINCLINATION="448;721;"/>
<icon BUILTIN="button_cancel"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457035478" ID="ID_1692167558" MODIFIED="1522556857858" TEXT="#1133 dependable base system">