Navigator: decide upon the fine points of meaning
anchorage vs. coverage partial vs total possible anchorage possible coverage
This commit is contained in:
parent
4b6b4ad708
commit
5530bbede8
5 changed files with 147 additions and 23 deletions
|
|
@ -176,32 +176,60 @@ namespace interact {
|
|||
|
||||
/* === query functions === */
|
||||
|
||||
/** */
|
||||
/** is this path explicitly anchored at an existing window?
|
||||
* @remarks this also implies the path is complete and explicit (no wildcards).
|
||||
*/
|
||||
bool
|
||||
isAnchored() const
|
||||
{
|
||||
UNIMPLEMENTED ("path anchorage check");
|
||||
return res_.isResolved
|
||||
and res_.anchor and res_.anchor != Symbol::BOTTOM;
|
||||
}
|
||||
|
||||
/** */
|
||||
/** determine if a mutation is possible to anchor the path explicitly
|
||||
* @remarks basically this either means the path isAnchored(), or we're able
|
||||
* to calculate a path resolution, interpolating any wildcards.
|
||||
* And while the path resolution as such might fail, it was at least
|
||||
* successful to determine an anchor point. The existence of such an
|
||||
* anchor point implies the path is not totally in contradiction to the
|
||||
* existing UI*/
|
||||
bool
|
||||
canAnchor() const
|
||||
{
|
||||
UNIMPLEMENTED ("determine if a mutation is possible to anchor the path explicitly");
|
||||
return isAnchored()
|
||||
or (res_.isResolved and res_.covfefe)
|
||||
or pathResolution()
|
||||
or isAnchored(); // resolution failed, but computed at least an anchor
|
||||
}
|
||||
|
||||
/** */
|
||||
/** is this path at least _partially_ covered?
|
||||
* A covered path describes an access path through widgets actually existing in the UI.
|
||||
* @remarks this also implies the path is anchored, complete and explicit.
|
||||
* @note this predicate tests for _partial_ coverage, which means, there might
|
||||
* be some extraneous suffix in this path descending beyond existing UI
|
||||
*/
|
||||
bool
|
||||
isCovered() const
|
||||
{
|
||||
UNIMPLEMENTED ("path coverage check");
|
||||
return res_.isResolved
|
||||
and res_.depth > 0;
|
||||
}
|
||||
|
||||
/** */
|
||||
/** determine if a mutation is possible to get the path (partially) covered.
|
||||
* @remarks in order to be successful, a path resolution must interpolate any gaps in the
|
||||
* path spec _and_ reach a point behind / below the gap (wildcards), where an existing
|
||||
* explicitly stated component in the path can be confirmed (covered) by the existing UI.
|
||||
* The idea behind this definition is that we do not want just some interpolated wildcards,
|
||||
* rather we really want to _confirm_ the essence of the path specification. Yet we accept
|
||||
* an extraneous suffix _in the explicitly given part_ of the path spec to extend beyond or
|
||||
* below what exists currently within the UI.
|
||||
*/
|
||||
bool
|
||||
canCover() const
|
||||
{
|
||||
UNIMPLEMENTED ("determine if a mutation is possible to get the path covered");
|
||||
return isCovered()
|
||||
or (res_.isResolved and res_.covfefe)
|
||||
or pathResolution();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@ namespace interact {
|
|||
|
||||
|
||||
/**
|
||||
* @remark an _explicit_ coordinate spec does nut use wildcards
|
||||
* @remark an _explicit_ coordinate spec does not use wildcards
|
||||
* and is anchored in a window spec
|
||||
*/
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ namespace test {
|
|||
virtual void
|
||||
run (Arg)
|
||||
{
|
||||
// verify_simpleUsage();
|
||||
verify_simpleUsage();
|
||||
verify_backingQuery();
|
||||
verify_queryAnchor();
|
||||
verify_queryCoverage();
|
||||
|
|
@ -114,7 +114,7 @@ namespace test {
|
|||
// helper to answer "location queries" backed by this structure
|
||||
GenNodeLocationQuery locationQuery{dummyUiStructure};
|
||||
|
||||
UICoord uic{"window-1","*","panelX","someView"};
|
||||
UICoord uic{"window-2","*","panelX","someView"};
|
||||
UICoordResolver resolver{uic, locationQuery};
|
||||
|
||||
CHECK (not resolver.isCovered());
|
||||
|
|
|
|||
|
|
@ -9648,7 +9648,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="201710152313" tags="def draft spec GuiPattern" changecount="12">
|
||||
<div title="UICoord" creator="Ichthyostega" modifier="Ichthyostega" created="201709222300" modified="201710300046" tags="def draft spec GuiPattern" changecount="14">
|
||||
<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
|
||||
|
|
@ -9696,6 +9696,7 @@ In addition to the //locally decidable properties// of a coordinate spec, which
|
|||
:* it is //partially covered// with an remaining, uncovered extension part
|
||||
:* it is //possible to cover completely//
|
||||
:* it is //impossible to cover//
|
||||
__Some fine points to note__: Anchorage and coverage are not the same thing, but coverage implies anchorage. Only when a path is complete (starts with the window spec) and explicit (has no wildcards), then anchorage implies also partial coverage (namely at least to depth 1). To determine the possible coverage means to perform a resolution with backtracking to pick the maximal solution. Moreover, since "covered" means that the path specification //is at least partially supported by the real UI,// we establish an additional constraint to ensure this resolution did not just match some arbitrary wildcards. Rather we demand that beind / below the last wildcard there is at least one further explicit component in the path spec, which is supported by the real UI. As a consequence, the coverage resolution may fail altogether, will still providing at least an possible anchor point.
|
||||
!!!Mutations
|
||||
In addition to querying the interpretation of a given coordinate spec with respect to the current UI environment, it is also possible to rewrite or extend the spec based on this environment
|
||||
;anchoring
|
||||
|
|
|
|||
|
|
@ -4266,6 +4266,86 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1509323422183" ID="ID_1262448971" MODIFIED="1509323429562" TEXT="feine Punkte...">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1509323432989" ID="ID_1373680102" MODIFIED="1509323467821" TEXT="per default nur bei expliziten Pfaden">
|
||||
<node CREATED="1509323478248" ID="ID_101102957" MODIFIED="1509323487630" TEXT="vollständig (fängt mit Window an)"/>
|
||||
<node CREATED="1509323473576" ID="ID_193021518" MODIFIED="1509323477588" TEXT="keine Wildcards"/>
|
||||
<node CREATED="1509323560821" ID="ID_294426477" MODIFIED="1509323871911" TEXT="in dem Fall ist anchern und covern äquivalent">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1509323573047" ID="ID_263907664" MODIFIED="1509323580255" TEXT="covern: meint partiell"/>
|
||||
</node>
|
||||
<node CREATED="1509323496205" ID="ID_231710474" MODIFIED="1509323516558" TEXT="möglich">
|
||||
<node CREATED="1509323517362" ID="ID_1758863955" MODIFIED="1509323518982" TEXT="ankern"/>
|
||||
<node CREATED="1509323520018" ID="ID_895622034" MODIFIED="1509323522485" TEXT="covern"/>
|
||||
<node CREATED="1509323523193" ID="ID_1088301010" MODIFIED="1509323862956" TEXT="ist nicht das gleiche">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1509323532816" ID="ID_1206148872" MODIFIED="1509323697998" TEXT="covern kann scheitern">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...denn wir verlangen, daß wir nach dem Interpolieren über eine Lücke
|
||||
</p>
|
||||
<p>
|
||||
immer noch <i>mindestens ein explizt gegebenes</i> Element im Pfad haben,
|
||||
</p>
|
||||
<p>
|
||||
welches auch von der UI-Topologie bestätigt wird.
|
||||
</p>
|
||||
<p>
|
||||
Grund: wir wollen vermeiden, abschließende Wildcards <i>bloß irgendwie</i> zu binden
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1509323537479" ID="ID_1638614197" MODIFIED="1509323754716" TEXT="und trotzedm einen Anker finden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
nämlich wenn der Pfad mit einem explizit gegebenen Präfix anfängt,
|
||||
</p>
|
||||
<p>
|
||||
dann aber Wildcards enthält, die nicht nach den verschärften Bedingungen gecovert werden können.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1509323760466" ID="ID_446881733" MODIFIED="1509323858164" TEXT="oder eben doch komplett im Widerspruch zum UI stehen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
beispielsweise
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
wenn schon das Präfix nicht paßt
|
||||
</li>
|
||||
<li>
|
||||
wenn das erste Element nach dem Gap nirgends im realen UI in der tiefe existiert
|
||||
</li>
|
||||
<li>
|
||||
wenn mehr Wildcards da sind, als restliche Tiefe zum Matchen
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1508537087378" ID="ID_548549576" MODIFIED="1508537098305" TEXT="Wildcards interpolieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
|
|
@ -4373,7 +4453,7 @@
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1508539152568" ID="ID_153711822" MODIFIED="1508539175926" TEXT="Beschreibung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1508539226014" ID="ID_1714773115" MODIFIED="1508539921109" TEXT="informell...">
|
||||
<node CREATED="1508539226014" ID="ID_1714773115" MODIFIED="1509320125060" TEXT="informell...">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -4383,7 +4463,7 @@
|
|||
Tiefensuche über die reale UI-Topologie
|
||||
</p>
|
||||
<p>
|
||||
Ziel ist den Pfad <i>bestmöglich</i> zu covern
|
||||
Ziel ist, den Pfad <i>bestmöglich</i> zu covern
|
||||
</p>
|
||||
<p>
|
||||
Es gilt die erste maximal abdeckende Lösung
|
||||
|
|
@ -4468,8 +4548,8 @@
|
|||
<node CREATED="1508540835505" ID="ID_191493714" MODIFIED="1508540848899" TEXT="swap(*this, Coverage)"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1508538883715" ID="ID_506584428" MODIFIED="1508538968865" TEXT="Basis: LocationQuery">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1508538883715" ID="ID_506584428" MODIFIED="1509319976183" TEXT="Basis: LocationQuery">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1508538979935" ID="ID_1139910958" MODIFIED="1508539033702" TEXT="immer explizit">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
|
@ -4503,18 +4583,33 @@
|
|||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1508539108398" ID="ID_681619275" MODIFIED="1508539127755" TEXT="coverage">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1508539108398" ID="ID_681619275" MODIFIED="1509319949242" TEXT="coverage">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1508539968020" ID="ID_64225559" MODIFIED="1508539972951" TEXT="in: expliziter Pfad"/>
|
||||
<node CREATED="1508539973587" ID="ID_822140715" MODIFIED="1508539984350" TEXT="out: Tiefe(Zahl)"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1508539115533" ID="ID_1048456515" MODIFIED="1508539126245" TEXT="child Iteration">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1508539115533" ID="ID_1048456515" MODIFIED="1509319964032" TEXT="child Iteration">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1508539986290" ID="ID_821465952" MODIFIED="1508539992221" TEXT="in: expliziter Pfad"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1508539992944" ID="ID_1384353532" MODIFIED="1508540003849" TEXT="out: IterSource<Literal>">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1508539992944" ID="ID_1384353532" MODIFIED="1509319961089" TEXT="out: IterSource<Literal>"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1509319992204" HGAP="60" ID="ID_258976142" MODIFIED="1509320035975" TEXT="prototypische Implementierung...." VSHIFT="21">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...verwendet einen GenNode-Tree
|
||||
</p>
|
||||
<p>
|
||||
als Repräsentation des real-existierenden UI
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1506957414370" ID="ID_848105210" MODIFIED="1506957613469">
|
||||
|
|
@ -4617,7 +4712,7 @@
|
|||
<icon BUILTIN="ksmiletris"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1509142651113" ID="ID_99734013" MODIFIED="1509145529638">
|
||||
<node CREATED="1509142651113" FOLDED="true" ID="ID_99734013" MODIFIED="1509319931404">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue