ViewSpec: implement the generic access function in ViewLocator
still missing: internal wiring from the allocation token(s) of the DSL into the ElementAccess service designed last week.
This commit is contained in:
parent
ba3d9e57b5
commit
d0538a55ff
4 changed files with 131 additions and 36 deletions
|
|
@ -57,26 +57,27 @@
|
|||
#define GUI_INTERACT_VIEW_LOCATOR_H
|
||||
|
||||
#include "lib/depend-inject.hpp"
|
||||
#include "gui/interact/view-spec-dsl.hpp"
|
||||
#include "gui/id-scheme.hpp"
|
||||
#include "gui/interact/view-spec-dsl.hpp"
|
||||
#include "gui/model/element-access.hpp"
|
||||
#include "lib/idi/genfunc.hpp"
|
||||
#include "lib/symbol.hpp"
|
||||
#include "lib/nocopy.hpp"
|
||||
|
||||
#include <functional>
|
||||
//#include <string>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
|
||||
|
||||
namespace gui {
|
||||
namespace model{
|
||||
class ElementAccess;
|
||||
}
|
||||
namespace ctrl{
|
||||
class PanelLocator;
|
||||
}
|
||||
namespace interact {
|
||||
|
||||
using std::unique_ptr;
|
||||
// using std::string;
|
||||
using std::string;
|
||||
using lib::Symbol;
|
||||
|
||||
class UILocationSolver;
|
||||
|
||||
|
|
@ -118,7 +119,14 @@ namespace interact {
|
|||
inline V&
|
||||
ViewLocator::get()
|
||||
{
|
||||
UNIMPLEMENTED ("what is the *generic way* to access such a component? does it always involve the PanelLocator? Is there a generic Panel-API?");
|
||||
using ViewSpec = idi::Descriptor<V>;
|
||||
ViewSpec viewSpec; /////////////////////////////////////////////////////////TICKET #1129 : can't create instances all the time. Need some kind of Factory
|
||||
Symbol viewID{lib::idi::typeSymbol<V>()};
|
||||
|
||||
UICoord targetLocation = viewSpec.locate(viewID);
|
||||
UICoord realView = viewSpec.alloc (targetLocation);
|
||||
|
||||
return elementAccess().access<V> (realView);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
#include "gen-node-location-query.hpp"
|
||||
#include "test/test-element-access.hpp"
|
||||
#include "lib/depend-inject.hpp"
|
||||
#include "lib/format-cout.hpp"
|
||||
#include "lib/format-cout.hpp" ////////////////TODO only while this test is under development
|
||||
//#include "lib/idi/entry-id.hpp"
|
||||
//#include "lib/diff/gen-node.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
|
|
@ -186,6 +186,19 @@ namespace test {
|
|||
}
|
||||
|
||||
|
||||
/** @test generic integrated access through ViewLocator
|
||||
* This test demonstrates and verifies the way ViewLocator combines type based
|
||||
* selection of the applicable DSL clauses, the invocation of those DSL definitions,
|
||||
* the allocation of a suitable element and finally specifically typed access to this
|
||||
* located or allocated element.
|
||||
* @remarks due to limitations of our unit test setup (GTK is prohibited), this component
|
||||
* integration test can not be performed against the actual DSL definitions of the
|
||||
* real UI, even while it uses the actual code from ViewLocator. Simply because we
|
||||
* can not instantiated UI widgets in a unit test. We have to resort to mock UI
|
||||
* elements and thus use a dummy "view type" together with faked DSL definitions
|
||||
* for this dummy. These definitions are given in the test fixture above, right
|
||||
* within this translation unit. (see `namespace idi` and the class `MockView1`).
|
||||
*/
|
||||
void
|
||||
verify_genericInvocation()
|
||||
{
|
||||
|
|
@ -204,11 +217,22 @@ namespace test {
|
|||
MockLoationSolver mock ([&]{ return new UILocationSolver{locationQuery}; });
|
||||
|
||||
MockElementAccess fakeAccessor;
|
||||
fakeAccessor.triggerCreate();
|
||||
//--------------------------------------------------------------(End)Test-Fixture
|
||||
|
||||
|
||||
//--------------------------------------------------------------Staging: Testcase-1
|
||||
using idi::MockView1;
|
||||
fakeAccessor->existingPath = UICoord{"win-1","perspective","parentLocation"};
|
||||
CHECK (not fakeAccessor->response); // not yet created
|
||||
//--------------------------------------------------------------Staging: Testcase-1
|
||||
|
||||
MockView1& view1 = viewLocator.get<MockView1>();
|
||||
cout << "created view:" << view1.getID() << endl;
|
||||
/////////////////////////////////////////////TICKET 1129 : some way to verify the last allocated path. Should be a child of "parentLocation"
|
||||
|
||||
|
||||
|
||||
// TimelineView timeline = viewLocator.get<TimelineView>();
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////TICKET 1129 : use an EventLog to verify the forwarded invocations??
|
||||
|
|
|
|||
|
|
@ -2906,7 +2906,7 @@ Command instances are like prototypes -- thus each additional level of different
|
|||
see the description in &rarr; CommandSetup
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiComponentView" creator="Ichthyostega" modifier="Ichthyostega" created="201709021521" modified="201804062230" tags="def GuiPattern design" changecount="52">
|
||||
<div title="GuiComponentView" creator="Ichthyostega" modifier="Ichthyostega" created="201709021521" modified="201804150106" tags="def GuiPattern design" changecount="56">
|
||||
<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
|
||||
|
|
@ -2930,7 +2930,9 @@ The global access point to component views is the ViewLocator within Interaction
|
|||
* get (possibly create) some view of given type
|
||||
* get (possibly create) a view with specific identity
|
||||
* destroy a specific view
|
||||
While these operations expose a strictly typed direct reference to the respective view component and thus allow to //manage them like child objects,// in many cases it is sufficient to address a component view just via the UI-Bus. This is possible since component ~IDs are formed systematically and thus always predictable: it is the same ID as used within Proc-Layer, which basically is an {{{EntryID<TYPE>}}}, where {{{TYPE}}} denotes the corresponding model type in the [[Session model|HighLevelModel]].
|
||||
For all these direct access operations, elements are designated by a private name-ID, which is actually more like a type-~IDs, and just serves to distinguish the element from its siblings. The same ~IDs are used for the components in [[UI coordinate specifications|UICoord]]; both usages are closely interconnected, because view access is accomplished by forming an UI coordinate path to the element, which is then in turn used to navigate the internal UI widget structure to reach out for the actual implementation element.
|
||||
|
||||
While these aforementioned access operations expose a strictly typed direct reference to the respective view component and thus allow to //manage them like child objects,// in many cases we are more interested in UI elements representing tangible elements from the session. In those cases, it is sufficient to address the desired component view just via the UI-Bus. This is possible since component ~IDs of such globally relevant elements are formed systematically and thus always predictable: it is the same ID as used within Proc-Layer, which basically is an {{{EntryID<TYPE>}}}, where {{{TYPE}}} denotes the corresponding model type in the [[Session model|HighLevelModel]].
|
||||
|
||||
!!!Configuration of view allocation
|
||||
Since view allocation offers a choice amongst several complex patterns of behaviour, it seems adequate to offer at least some central configuration site with a DSL for readability. That being said -- it is conceivable that we'll have to open this topic altogether for general configuration by the user. For this reason, the configuration site and DSL are designed in a way to foster further evolution of possibilites...
|
||||
|
|
@ -9846,7 +9848,7 @@ The dispatch of //diff messages// is directly integrated into the UI-Bus -- whic
|
|||
|
||||
The Graphical User interface, the upper layer in this hierarchy, embodies everything of tangible relevance to the user working with the application. The interplay with Proc-Layer, the middle layer below the UI, is organised along the distinction between two realms of equal importance: on one side, there is the immediate //mechanics of the interface,// which is implemented directly within the ~UI-Layer, based on the Graphical User Interface Toolkit. And, on the other side, there are those //core concerns of working with media,// which are cast into the HighLevelModel at the heart of the middle layer.</pre>
|
||||
</div>
|
||||
<div title="UICoord" creator="Ichthyostega" modifier="Ichthyostega" created="201709222300" modified="201804062229" tags="def draft spec Concepts GuiPattern" changecount="27">
|
||||
<div title="UICoord" creator="Ichthyostega" modifier="Ichthyostega" created="201709222300" modified="201804150100" tags="def draft spec Concepts GuiPattern" changecount="29">
|
||||
<pre>//A topological addressing scheme to designate structural locations within the UI.//
|
||||
Contrary to conventional screen pixel coordinates, here we aim at a topological description of the UI structure. Such a framework of structural reference allows us
|
||||
* to refer to some "place" or "space" within the interface
|
||||
|
|
@ -9864,6 +9866,9 @@ As starting point for the design of such a framework, we'll pick the notion of a
|
|||
!Properties
|
||||
UI coordinates are a symbolic specification, and as such, their representation is immutable value-like. Essentially, a coordinate specification designates a pathway, and thus is comprised of a sequence of symbols. The individual path component symbol can be addressed by its depth index, starting with the top level window as rooting point. The meaning of first steps within each path is thus always fixed (top-level window, perspective, panel, view), followed by an essentially open sequence of local component names. Yet a given index position need not necessarily be actually defined. A coordinate spec can be indeterminate (NIL), but in all other cases a minimal consecutive sequence of symbols is guaranteed to exist.
|
||||
|
||||
!!!about component names
|
||||
The individual components within such a coordinate spec are given as name-~IDs. In this context, we are more interested in the //topology// of UI components, and thus the names serve to distinguish sibling nodes. In fact, those names are created as type names and then decorated with number suffix while creating actual components. In this form, those name become real identifiers attached to those widgets, and can be used to access the respective implementation entity. Most of the elements designated and accessed this way are //mere UI entities// -- however, some elements can be representations of corresponding elements in the session (e.g. Tracks, Clips). If that is the case, obviously the name-ID has to match the "official" ID as used within the session.
|
||||
|
||||
!!!flavours of meaning
|
||||
A given coordinate spec needs to be //interpreted// with the help of a resolver, which supplies additional knowledge regarding the actual window and UI configuration backing those interpretations. Such an interpretation allows to query for some typical predications, and it allows for //mutating operations,// which actually build a new coordinate spec from the given one. The general assumption is for all those coordinate interpretations to happen not within an excessively performance critical zone, where a little bit of iteration and repeated recomputation is deemed less costly than extended caching of evaluation state.
|
||||
|
||||
|
|
@ -9912,7 +9917,7 @@ In addition to querying the interpretation of a given coordinate spec with respe
|
|||
__Navigation mutations:__ //In theory,// it would even be possible to extend the path by creating suitable child components; but actually this would require all "elements" to implement a suitable mutation interface -- which in the case of //generic elements// might be far beyond the common ground. For this reason, we keep mutation of the backing environment outside of a path mutator's scope and rather keep mutation limited to the path itself.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="UILowLevelAccess" creator="Ichthyostega" modifier="Ichthyostega" created="201804062255" modified="201804062321" tags="spec draft GuiPattern" changecount="2">
|
||||
<div title="UILowLevelAccess" creator="Ichthyostega" modifier="Ichthyostega" created="201804062255" modified="201804150051" tags="spec draft GuiPattern" changecount="4">
|
||||
<pre>//Cross cutting access to elementary UI structures.//
|
||||
We have several orthogonal identification and access schemes within the UI. A naively written UI application just attaches the core logic below some widgets and controllers -- not only does this lead to a hard to maintain code base, this approach is even outright impossible in our case, due to the strict decoupling between core and GUI, which places us into the situation to connect a self contained core with a self contained UI. This is a binding, which, as a sideline, also generates a control structure of its own. We can indeed write code dealing with a generic UI element -- but there needs to be some place where this kind of generic designation is translated into internal structures of the UI toolkit (GTK in our case), to obtain a direct (language) reference to some implementation widget finally.
|
||||
|
||||
|
|
@ -9920,6 +9925,11 @@ A service to translate some generic address scheme into actual entities builds t
|
|||
|
||||
!Notes about design and implementation {{red{WIP 4/2018}}}
|
||||
At the time of this writing, it is not really clear if we need such a facility and what form its implementation will take -- which in turn places several further planning steps and design consideration into dangling state. The programmer's usual remedy in such a situation is to create yet another abstraction as a tie break. We do not know what it is, but at least we can write unit tests against it to find out what it could be.
|
||||
* we need to confine ourselves to a small selection of base interfaces to cover all possible elements accessible this way: {{{gui::model::Tangible}}}, {{{Gtk::Widget}}}, ...?
|
||||
* looks like this accessor service will be backed by a structure similar to {{{LocationQuery}}} -- maybe it will even be the same backing structure at the end.
|
||||
* so effectively an access request will drill down the real UI topology, following the path of the given UI Coordinates.
|
||||
* the result can then be packaged into a {{{lib::Variant}}} and use a //variant visitor// (double dispatch) to invoke the apropriate {{{dynamic_cast}}}
|
||||
* together, this mechanism allows us to return direct language references to actual implementation widgets
|
||||
</pre>
|
||||
</div>
|
||||
<div title="ViewConnection" modifier="Ichthyostega" created="201105221854" modified="201501091154" tags="def Model SessionLogic" changecount="3">
|
||||
|
|
|
|||
|
|
@ -3422,8 +3422,8 @@
|
|||
<node CREATED="1492965830381" ID="ID_1556963629" MODIFIED="1518487921062" TEXT="globalCtx -> find active window">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#990000" CREATED="1492965845115" ID="ID_1375700494" MODIFIED="1518487921062" TEXT="TODO Panel-Aktionen">
|
||||
<arrowlink DESTINATION="ID_1176492517" ENDARROW="Default" ENDINCLINATION="14;-313;" ID="Arrow_ID_1083220093" STARTARROW="None" STARTINCLINATION="632;-20;"/>
|
||||
<node COLOR="#990000" CREATED="1492965845115" ID="ID_1375700494" MODIFIED="1523752843329" TEXT="TODO Panel-Aktionen">
|
||||
<arrowlink DESTINATION="ID_1176492517" ENDARROW="Default" ENDINCLINATION="-68;-316;" ID="Arrow_ID_1083220093" STARTARROW="None" STARTINCLINATION="550;-23;"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1492965914018" ID="ID_1134955241" MODIFIED="1518487921062" TEXT="UNIMPLEMENTED"/>
|
||||
<node CREATED="1493852058451" ID="ID_1074189286" MODIFIED="1518487921062" TEXT="war schon seit 2009 deaktiviert"/>
|
||||
|
|
@ -9414,7 +9414,7 @@
|
|||
<node COLOR="#338800" CREATED="1515631646108" ID="ID_1553855476" MODIFIED="1518840394020" TEXT="UICoordResolver erzeugen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1515979648475" FOLDED="true" HGAP="38" ID="ID_350272872" MODIFIED="1523727268917" TEXT="Funktionsweise der "Resolution" klären" VSHIFT="1">
|
||||
<node COLOR="#338800" CREATED="1515979648475" FOLDED="true" HGAP="38" ID="ID_350272872" MODIFIED="1523750561721" TEXT="Funktionsweise der "Resolution" klären" VSHIFT="1">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1515980158112" ID="ID_1744041635" MODIFIED="1522939070606" TEXT="der Reihe nach prüfen">
|
||||
<icon BUILTIN="info"/>
|
||||
|
|
@ -9432,7 +9432,7 @@
|
|||
</node>
|
||||
</node>
|
||||
<node CREATED="1515980170359" ID="ID_1820091983" MODIFIED="1518487921067" TEXT="Lösung erfordert wenigstens partielle coverage"/>
|
||||
<node CREATED="1515982274106" FOLDED="true" ID="ID_1283888757" MODIFIED="1522939055262" TEXT="Problem: Match ermöglichen">
|
||||
<node CREATED="1515982274106" FOLDED="true" ID="ID_1283888757" MODIFIED="1523750160257" TEXT="Problem: Match ermöglichen">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1515982295663" ID="ID_208797931" MODIFIED="1518487921067" TEXT="der View-Name fehlt noch"/>
|
||||
<node CREATED="1515982302678" ID="ID_1579006450" MODIFIED="1518487921067" TEXT="nicht existierende Parents"/>
|
||||
|
|
@ -9572,7 +9572,7 @@
|
|||
</node>
|
||||
<node CREATED="1517011530017" ID="ID_1904091651" MODIFIED="1518487921067" TEXT="Sonderbehandlung Perspektive notwendig"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1516916140785" FOLDED="true" ID="ID_1667593991" MODIFIED="1518762143615" TEXT="wie umschiffen wir konkret das Problem mit der Perspektive?">
|
||||
<node COLOR="#338800" CREATED="1516916140785" FOLDED="true" ID="ID_1667593991" MODIFIED="1523750166585" TEXT="wie umschiffen wir konkret das Problem mit der Perspektive?">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1517011709672" ID="ID_755188751" MODIFIED="1518487921067" TEXT="Problem ist...">
|
||||
<icon BUILTIN="info"/>
|
||||
|
|
@ -9806,7 +9806,7 @@
|
|||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1516916210656" FOLDED="true" ID="ID_1339759450" MODIFIED="1518762134400" TEXT="wie ermitteln wir das zu erzeugende Suffix des Pfades?">
|
||||
<node COLOR="#338800" CREATED="1516916210656" FOLDED="true" ID="ID_1339759450" MODIFIED="1523750153049" TEXT="wie ermitteln wir das zu erzeugende Suffix des Pfades?">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1517016683468" ID="ID_174913733" MODIFIED="1518487921068" TEXT=""create()"-Fall ⟹ partiallyCovered()">
|
||||
<icon BUILTIN="idea"/>
|
||||
|
|
@ -9951,7 +9951,7 @@
|
|||
<arrowlink COLOR="#8e6e9e" DESTINATION="ID_1208480183" ENDARROW="Default" ENDINCLINATION="-458;-16;" ID="Arrow_ID_504124124" STARTARROW="None" STARTINCLINATION="-600;49;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#48639d" CREATED="1516916599018" FOLDED="true" ID="ID_809925267" MODIFIED="1522938899458" TEXT="wie genau muß die Aufrufschnittstelle aussehen?">
|
||||
<node COLOR="#48639d" CREATED="1516916599018" FOLDED="true" ID="ID_809925267" MODIFIED="1523750553834" TEXT="wie genau muß die Aufrufschnittstelle aussehen?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1517084001346" ID="ID_101484926" MODIFIED="1518487921068" TEXT="bekannter Ausgangspunkt">
|
||||
<node CREATED="1517083926212" ID="ID_1898315920" MODIFIED="1518487921068" TEXT="location">
|
||||
|
|
@ -10051,6 +10051,7 @@
|
|||
<node CREATED="1517505580870" ID="ID_1902973372" MODIFIED="1518487921069" TEXT="mutiert ggfs das UI"/>
|
||||
<node CREATED="1517505599515" ID="ID_1414969254" MODIFIED="1518487921069" TEXT="liefert Pfad">
|
||||
<node CREATED="1517505605363" ID="ID_1831975809" MODIFIED="1518487921069" TEXT="zeigt auf gewünschtes Element"/>
|
||||
<node CREATED="1523750537195" ID="ID_1546579450" MODIFIED="1523750551293" TEXT="hat ggfs die typID/Namens-ID dekoriert"/>
|
||||
<node CREATED="1517505614937" ID="ID_262899447" MODIFIED="1518487921069" TEXT="totally covered"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -10129,7 +10130,7 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#990000" CREATED="1518658696759" FOLDED="true" ID="ID_68856104" MODIFIED="1518839544741">
|
||||
<node COLOR="#990000" CREATED="1518658696759" FOLDED="true" ID="ID_68856104" MODIFIED="1523750392628">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -10315,11 +10316,11 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1517505328936" FOLDED="true" ID="ID_406973235" MODIFIED="1522939019647" TEXT="Umbauen Locator in Functor">
|
||||
<node COLOR="#338800" CREATED="1517505328936" FOLDED="true" ID="ID_406973235" MODIFIED="1523750383626" TEXT="Umbauen Locator in Functor">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1517505339663" ID="ID_470503309" MODIFIED="1522808890833" TEXT="DSL-Header restrukturieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1517507830918" FOLDED="true" ID="ID_1112334086" MODIFIED="1522808864668" TEXT="Locator analog zu Allocator definieren">
|
||||
<node COLOR="#338800" CREATED="1517507830918" FOLDED="true" ID="ID_1112334086" MODIFIED="1523750300583" TEXT="Locator analog zu Allocator definieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1519355684307" ID="ID_336676610" MODIFIED="1519355726724">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -10578,11 +10579,11 @@
|
|||
<arrowlink COLOR="#2c5db0" DESTINATION="ID_578310400" ENDARROW="Default" ENDINCLINATION="52;3;" ID="Arrow_ID_808786860" STARTARROW="None" STARTINCLINATION="52;3;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1519355422807" FOLDED="true" ID="ID_1718427051" MODIFIED="1522808665775" TEXT="Service-Zugang regeln">
|
||||
<node COLOR="#338800" CREATED="1519355422807" FOLDED="true" ID="ID_1718427051" MODIFIED="1523750314540" TEXT="Service-Zugang regeln">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1520221913300" ID="ID_906905" MODIFIED="1520221920710" TEXT="Design?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1520221927138" ID="ID_782466951" MODIFIED="1522806883217" TEXT="hintenrum injizieren">
|
||||
<node CREATED="1520221927138" ID="ID_782466951" MODIFIED="1523750340372" TEXT="hintenrum injizieren">
|
||||
<arrowlink COLOR="#3391c4" DESTINATION="ID_1058958215" ENDARROW="Default" ENDINCLINATION="356;0;" ID="Arrow_ID_1958186293" STARTARROW="None" STARTINCLINATION="40;166;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1520222029276" ID="ID_1305200988" MODIFIED="1520222040102" TEXT="magisch"/>
|
||||
|
|
@ -10659,7 +10660,7 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1517505346701" FOLDED="true" ID="ID_1733459677" MODIFIED="1518839586558" TEXT="LocationSolver einführen">
|
||||
<node COLOR="#338800" CREATED="1517505346701" FOLDED="true" ID="ID_1733459677" MODIFIED="1523750378340" TEXT="LocationSolver einführen">
|
||||
<linktarget COLOR="#7999a3" DESTINATION="ID_1733459677" ENDARROW="Default" ENDINCLINATION="460;0;" ID="Arrow_ID_1447990036" SOURCE="ID_570287604" STARTARROW="None" STARTINCLINATION="-15;211;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1517505662323" ID="ID_1295083929" MODIFIED="1518487921069" TEXT="baut auf LocationQuery auf">
|
||||
|
|
@ -10996,7 +10997,7 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1519347191513" ID="ID_1058958215" MODIFIED="1522883286186" TEXT="Zugang zum LocationSolver">
|
||||
<node COLOR="#338800" CREATED="1519347191513" ID="ID_1058958215" MODIFIED="1523750340372" TEXT="Zugang zum LocationSolver">
|
||||
<arrowlink COLOR="#33a0d6" DESTINATION="ID_1459009906" ENDARROW="Default" ENDINCLINATION="766;0;" ID="Arrow_ID_393354619" STARTARROW="None" STARTINCLINATION="-338;0;"/>
|
||||
<linktarget COLOR="#3391c4" DESTINATION="ID_1058958215" ENDARROW="Default" ENDINCLINATION="356;0;" ID="Arrow_ID_1958186293" SOURCE="ID_782466951" STARTARROW="None" STARTINCLINATION="40;166;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -11236,8 +11237,8 @@
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1519354443485" ID="ID_1474832227" MODIFIED="1519354447748" TEXT="always create">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1519354760313" ID="ID_321705251" MODIFIED="1523118358268" TEXT="Umgang mit Duplikaten">
|
||||
<linktarget COLOR="#807e9b" DESTINATION="ID_321705251" ENDARROW="Default" ENDINCLINATION="85;-104;" ID="Arrow_ID_1030149985" SOURCE="ID_1792932496" STARTARROW="None" STARTINCLINATION="243;-203;"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1519354760313" ID="ID_321705251" MODIFIED="1523752503840" TEXT="Umgang mit Duplikaten">
|
||||
<linktarget COLOR="#807e9b" DESTINATION="ID_321705251" ENDARROW="Default" ENDINCLINATION="127;-96;" ID="Arrow_ID_1030149985" SOURCE="ID_1792932496" STARTARROW="None" STARTINCLINATION="390;-188;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1519354813458" ID="ID_168710453" MODIFIED="1519354818789" TEXT="beiseite schieben"/>
|
||||
<node CREATED="1519354819473" ID="ID_996615547" MODIFIED="1519354824572" TEXT="Tab innerhalb erzeugen"/>
|
||||
|
|
@ -11278,8 +11279,8 @@
|
|||
<node CREATED="1519354685828" ID="ID_966759751" MODIFIED="1519354691638" TEXT="genau wie global"/>
|
||||
</node>
|
||||
<node CREATED="1519354697578" ID="ID_1780825164" MODIFIED="1519354715139" TEXT="pro Endpunkt">
|
||||
<node CREATED="1519354849469" ID="ID_1792932496" MODIFIED="1523118074184" TEXT="Variante des create-Mechanismus">
|
||||
<arrowlink COLOR="#807e9b" DESTINATION="ID_321705251" ENDARROW="Default" ENDINCLINATION="85;-104;" ID="Arrow_ID_1030149985" STARTARROW="None" STARTINCLINATION="243;-203;"/>
|
||||
<node CREATED="1519354849469" ID="ID_1792932496" MODIFIED="1523752503840" TEXT="Variante des create-Mechanismus">
|
||||
<arrowlink COLOR="#807e9b" DESTINATION="ID_321705251" ENDARROW="Default" ENDINCLINATION="127;-96;" ID="Arrow_ID_1030149985" STARTARROW="None" STARTINCLINATION="390;-188;"/>
|
||||
</node>
|
||||
<node CREATED="1519354723262" ID="ID_1902026620" MODIFIED="1519354929283" TEXT="erbt dessen mögliche Ausprägung"/>
|
||||
</node>
|
||||
|
|
@ -11452,6 +11453,15 @@
|
|||
<node CREATED="1515634282345" ID="ID_788516837" MODIFIED="1518487921071" TEXT="klären, wer sie umsetzt">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523752547477" ID="ID_1121433532" MODIFIED="1523752551764" TEXT="limitAllocation">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523752559939" ID="ID_597346628" MODIFIED="1523752566099" TEXT="umsetzen auf ElementAccess-API">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523752571241" ID="ID_1806352950" MODIFIED="1523752593134" TEXT="Anzahl Instanzen herausfinden">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1515634076196" HGAP="-17" ID="ID_1380959703" MODIFIED="1518487921071" TEXT="Implementierung" VSHIFT="20">
|
||||
|
|
@ -11476,13 +11486,26 @@
|
|||
<node CREATED="1522940113349" ID="ID_378188810" MODIFIED="1522940183464" TEXT="in ViewLocator">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522940118628" ID="ID_356408235" MODIFIED="1522940180942" TEXT="auf Typ getemplated">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1522940118628" ID="ID_356408235" MODIFIED="1523752865657" TEXT="auf Typ getemplated">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1523750592900" ID="ID_266745032" MODIFIED="1523750611005" TEXT=""viewID" ist erst mal eine Typ-ID"/>
|
||||
<node CREATED="1523750621640" ID="ID_776549392" MODIFIED="1523750635474" TEXT="wird aber ggfs noch dekoriert (wg. Multiplizität)"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522940124932" ID="ID_636475854" MODIFIED="1522940194187" TEXT="Aufruf-Mechanismus">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1522940151016" ID="ID_254319466" MODIFIED="1522940158818" TEXT="Strategy in id-scheme.hpp"/>
|
||||
<node CREATED="1522940161655" ID="ID_1905184084" MODIFIED="1522940166466" TEXT="pro Typ spezialisiert"/>
|
||||
<node CREATED="1522940161655" ID="ID_1905184084" MODIFIED="1522940166466" TEXT="pro Typ spezialisiert">
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1523752892269" ID="ID_1603142051" MODIFIED="1523752899141" TEXT="Problem: Instanzen">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node CREATED="1523752902739" ID="ID_1018267741" MODIFIED="1523752943957" TEXT="statische Felder gehen nicht ohne Weiteres">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1523752911010" ID="ID_1174940020" MODIFIED="1523752930531" TEXT="...also brauchen wir Instanzen der Deskriptoren"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523752932735" ID="ID_225005955" MODIFIED="1523752937567" TEXT="geeignete Factory finden">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1522940167125" ID="ID_980922327" MODIFIED="1522940174904" TEXT="hält die konkrete ViewSpec-DSL"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522940203377" ID="ID_1539937928" MODIFIED="1522940298042" TEXT="Testabdeckung">
|
||||
|
|
@ -11703,7 +11726,7 @@
|
|||
<node CREATED="1506984645748" ID="ID_670536416" MODIFIED="1518487921071" TEXT="verify_queryCoverage">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
<node CREATED="1515209280278" ID="ID_959372189" MODIFIED="1518487921071" TEXT="sinnlos, da man das Ergebnis nicht sieht"/>
|
||||
<node CREATED="1515209292804" ID="ID_907780055" MODIFIED="1518487921071" TEXT="ansonsten redundant zur Mutierung"/>
|
||||
<node CREATED="1515209292804" ID="ID_907780055" MODIFIED="1523750073991" TEXT="ansonsten redundant zur Mutation"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1506984645748" ID="ID_1171284706" MODIFIED="1518487921071" TEXT="verify_mutateAnchor">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -12116,6 +12139,36 @@
|
|||
<node CREATED="1523746796508" ID="ID_1839059733" MODIFIED="1523746796508" TEXT="Aufruf nur nachbauen"/>
|
||||
<node CREATED="1523746798210" ID="ID_1076120435" MODIFIED="1523746818187" TEXT="Fake-DSL-Definitionen verwenden"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523749882439" ID="ID_1150944546" MODIFIED="1523749902400" TEXT="Schritt-1">
|
||||
<icon BUILTIN="full-1"/>
|
||||
<node CREATED="1523749910106" ID="ID_542105863" MODIFIED="1523750022741" TEXT="einfache direkte Erzeugung von einem View">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523749925224" ID="ID_1469440140" MODIFIED="1523750019076" TEXT="minimale Verifikation">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523749888005" ID="ID_1904054486" MODIFIED="1523749907772" TEXT="Schritt-2">
|
||||
<icon BUILTIN="full-2"/>
|
||||
<node CREATED="1523749931480" ID="ID_1388717184" MODIFIED="1523750026436" TEXT="komplexere Fake-DSL">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523749938023" ID="ID_873547886" MODIFIED="1523750017157" TEXT="Alternativen und wirkliche Lösung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523749952356" ID="ID_1622746609" MODIFIED="1523749963165" TEXT="Schritt-3">
|
||||
<icon BUILTIN="full-3"/>
|
||||
<node CREATED="1523749968914" ID="ID_998334237" MODIFIED="1523750029454" TEXT="Test-Mock verwendet GenNode-Tree-Repräsentation">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523749987776" ID="ID_1752498971" MODIFIED="1523750010189" TEXT="Allokations-Mechanismus genauer spezifizieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523750001990" ID="ID_1324123993" MODIFIED="1523750009285" TEXT="Allokation konkret abdecken">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1523746600925" HGAP="1" ID="ID_435582808" MODIFIED="1523746656723" VSHIFT="36">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -13200,8 +13253,8 @@
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1493852906845" HGAP="24" ID="ID_1176492517" MODIFIED="1518487921076" TEXT="siehe auch #1097 clarify the role of the panels in the UI" VSHIFT="9">
|
||||
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1176492517" ENDARROW="Default" ENDINCLINATION="14;-313;" ID="Arrow_ID_1083220093" SOURCE="ID_1375700494" STARTARROW="None" STARTINCLINATION="632;-20;"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1493852906845" HGAP="24" ID="ID_1176492517" MODIFIED="1523752843329" TEXT="siehe auch #1097 clarify the role of the panels in the UI" VSHIFT="9">
|
||||
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1176492517" ENDARROW="Default" ENDINCLINATION="-68;-316;" ID="Arrow_ID_1083220093" SOURCE="ID_1375700494" STARTARROW="None" STARTINCLINATION="550;-23;"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue