diff --git a/src/gui/interact/ui-coord-resolver.cpp b/src/gui/interact/ui-coord-resolver.cpp new file mode 100644 index 000000000..281dc2d71 --- /dev/null +++ b/src/gui/interact/ui-coord-resolver.cpp @@ -0,0 +1,53 @@ +/* + UICoordResolver - resolve UI coordinate spec against actual window topology + + Copyright (C) Lumiera.org + 2017, Hermann Vosseler + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +* *****************************************************/ + + +/** @file ui-coord-resolver.cpp + ** Implementation details of resolving a UICoord path against the actual UI topology. + ** + ** @todo WIP 10/2017 initial draft ////////////////////////////////////////////////////////////TICKET #1107 + */ + + +#include "gui/interact/ui-coord-resolver.hpp" +//#include "gui/ctrl/global-ctx.hpp" +//#include "lib/symbol.hpp" +//#include "lib/util.hpp" + +//using util::cStr; +//using util::isnil; +using lib::Symbol; + + +namespace gui { +namespace interact { + + /** */ + bool + UICoordResolver::pathResolution() + { + UNIMPLEMENTED ("backtracking reolution of path wildcards"); + } + + + +}}// namespace gui::interact diff --git a/src/gui/interact/ui-coord-resolver.hpp b/src/gui/interact/ui-coord-resolver.hpp index fb5a7b3c1..1a3278691 100644 --- a/src/gui/interact/ui-coord-resolver.hpp +++ b/src/gui/interact/ui-coord-resolver.hpp @@ -48,13 +48,15 @@ #include "lib/error.hpp" #include "lib/symbol.hpp" #include "gui/interact/ui-coord.hpp" +#include "lib/iter-source.hpp" +#include "lib/iter-stack.hpp" //#include "lib/util.hpp" //#include //#include //#include #include -//#include +#include namespace gui { @@ -64,8 +66,8 @@ namespace interact { // using std::unique_ptr; // using std::string; -// using lib::Literal; - using lib::Symbol; + using lib::Literal; +// using lib::Symbol; // using util::unConst; // using util::isnil; // using util::min; @@ -82,12 +84,36 @@ namespace interact { public: virtual ~LocationQuery() { } ///< this is an interface + using ChildIter = lib::IterSource; + /** */ }; + namespace path { ///< @internal implementation details of UICoord resolution against actual UI + + struct Resolution + { + const char* anchor = nullptr; + size_t depth = 0; + std::unique_ptr covfefe; + bool isComplete = false; + }; + + struct ResolutionState + { + using ChildIter = LocationQuery::ChildIter; + + lib::IterStack backlog; + lib::IterQueue solutions; + }; + + }//(End) implementation details + + + /** * Query and mutate UICoord specifications in relation to actual UI topology. * @@ -96,11 +122,17 @@ namespace interact { class UICoordResolver : public UICoord::Builder { + LocationQuery& query_; + path::Resolution res_; public: UICoordResolver (UICoord const& uic, LocationQuery& queryAPI) : Builder{uic} - { } + , query_{queryAPI} + , res_{} + { + attempt_trivialResolution(); + } /* === query functions === */ @@ -158,6 +190,14 @@ namespace interact { private: + void + attempt_trivialResolution() + { + UNIMPLEMENTED ("if possible, establish a trivial anchorage and coverage right away"); + } + + /** @internal algorithm to resolve this UICoord path against the actual UI topology */ + bool pathResolution(); }; diff --git a/tests/gui/interact/ui-coord-resolver-test.cpp b/tests/gui/interact/ui-coord-resolver-test.cpp index 372e4619f..50766d584 100644 --- a/tests/gui/interact/ui-coord-resolver-test.cpp +++ b/tests/gui/interact/ui-coord-resolver-test.cpp @@ -114,7 +114,7 @@ namespace test { UICoordResolver resolver{uic, locationQuery}; CHECK (not resolver.isCovered()); - CHECK (not resolver.canCover()); + CHECK ( resolver.canCover()); UICoord uic2 = resolver.cover() .extend("otherView"); diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 0b3b88663..636bfe717 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -220,7 +220,7 @@ - + @@ -233,7 +233,8 @@ aber nur via einfacher "uplink"-Verbindung

-
+ +
@@ -272,7 +273,7 @@ - + @@ -291,7 +292,8 @@ Term-Signal nicht ausgesendet würde.

-
+ +
@@ -356,7 +358,7 @@ - + @@ -375,9 +377,10 @@ Anmerkung: ein "frestehendes" BusTerm ist valide und zugelassen, es hat halt nur eine uplink-Connection.

-
+ +
- + @@ -390,7 +393,8 @@ es muß dazu auch jede Menge Methoden implementieren.

-
+ +
@@ -526,7 +530,7 @@ - + @@ -563,7 +567,8 @@ dann kann der Shutdown-Prozeß den Start des GUI überholen.

-
+ +
@@ -781,7 +786,7 @@ - + @@ -803,7 +808,8 @@ und ihre "Methoden" sind Commands auf der Session!

-
+ +
@@ -1163,7 +1169,7 @@
- + @@ -1176,7 +1182,8 @@ Das wird eine ganze Me

-
+ + @@ -1427,7 +1434,7 @@
- + @@ -1440,7 +1447,8 @@ indem wir ein GTK-Signal erzeugen, das das Hauptfenster schließt

-
+ + @@ -1537,7 +1545,7 @@ - + @@ -1547,7 +1555,8 @@ ...indem der NotificatonService nun vom UI-Manager gemanaged wird :)

-
+ +
@@ -2740,7 +2749,7 @@
- + @@ -2753,10 +2762,11 @@ daß die alte, obsolete Timeline zurückgebaut ist

-
+ +
- + @@ -2772,7 +2782,8 @@ bevor die Notification-Facade geöffnet werden konnte

-
+ +
@@ -2849,7 +2860,7 @@ - + @@ -2877,7 +2888,8 @@ ist, daß Gio::Application sofort auch gleich eine dBus-Verbindung hochfährt.

-
+ +
@@ -2973,7 +2985,7 @@ - + @@ -2998,14 +3010,15 @@ diesen "aktuellen Kontext" irgendwo aufzufischen

-
+ + - + @@ -3167,7 +3180,7 @@ - + @@ -3180,7 +3193,8 @@ InvocationTrail ist tot

-
+ +
@@ -3349,7 +3363,7 @@
- + @@ -3362,7 +3376,8 @@ da es nur darum geht, via globalCtx auf den passenden Controller zuzugreifen

-
+ +
@@ -3523,7 +3538,7 @@ - + @@ -3590,12 +3605,12 @@ - + - + @@ -3605,9 +3620,10 @@ ...and this anchorage can be covered and backed by the currently existing UI configuration

-
+ +
- + @@ -3617,9 +3633,10 @@ ...by interpolation of some wildcards

-
+ +
- + @@ -3629,7 +3646,8 @@ ...need to be extended to allow anchoring

-
+ +
@@ -3637,14 +3655,14 @@ - - - + + + - - + + @@ -3653,11 +3671,11 @@ - + - + @@ -3667,16 +3685,17 @@ we may construct the covered part of a given spec, including automatic anchoring.

-
+ +
- + - + @@ -3689,13 +3708,14 @@ designated by the given coordinate spec

-
- - - - + + + + + + - + @@ -3740,7 +3760,7 @@ - + @@ -3753,7 +3773,8 @@ sind denkbar und müssen in der Strategy konfigurierbar sein?

-
+ +
@@ -4214,6 +4235,265 @@ + + + + + + + + +

+ welche Operationen +

+

+ sind wirklich notwendig +

+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+ Innerhalb einer Kinder-Folge gibt es keine duplikaten IDs. +

+

+ Das heißt, es genügt, den ersten Match zu nehmen. +

+

+ Warnung: diese Konvention ist besonders tückisch, +

+

+ denn eine Verletzung kann weithin unbemerkt bleiben +

+ + +
+ + +
+ + + + + + +

+ der Resolver macht kein Memory-Management, +

+

+ sondern speichert einfach Zeiger. +

+

+ Es wird erwartet, daß diese gültig bleiben, +

+

+ solange irgend jemand auf den Resolver oder den +

+

+ daraus resultierenden Pfad zugreift +

+ + +
+ + +
+ + + + + + +

+ die Topologie, aber auch der Fokus-Zustand +

+

+ ändern sich nicht während der aktiven Lebensdauer eines Resolvers +

+

+ Hierbei ist aktive Lebensdauer wie bei einem Iterator zu verstehen. +

+ + +
+ + +
+ + + + + + +

+ aber es gibt Konsistenzchecks + Exceptions +

+

+ wenn die Auswertung aufgrund einer gebrochenen Konvention entgleist +

+ + +
+ + +
+
+ + + + + + + + + + +

+ Tiefensuche über die reale UI-Topologie +

+

+ Ziel ist den Pfad bestmöglich zu covern +

+

+ Es gilt die erste maximal abdeckende Lösung +

+ + +
+ +
+ + + + + + + + + + + + + + +

+ Tiefe, bis zu der dieser Pfad gedeckt ist. +

+

+ Sofern der Pfad bereits explizit ist, genügt diese Info allein +

+ + +
+ +
+ + + + + + +

+ heap-allozierter expliziter Pfad. +

+
    +
  • + wird notwendig, wenn *this wildcards enthält +
  • +
  • + Lösung wird unter Alternativen ausgewählt (nach maximaler Tiefe) +
  • +
+ + +
+ +
+
+
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ ...das heißt: keine Wildcards, keine pseudo-Specs (currentWindow) +

+ + +
+ +
+ + + + + + + + + + + + + + + + @@ -4315,7 +4595,7 @@ - + @@ -4336,7 +4616,8 @@ - + + @@ -4387,7 +4668,7 @@ - + @@ -4415,7 +4696,8 @@ bewirkt nur eine Entkoppelung vom Implementierungs-Kontext

-
+ +
@@ -4433,7 +4715,7 @@ - + @@ -4449,7 +4731,8 @@ sondern interpretieren jeweils nur eine einzige feste Konfiguration

-
+ +
@@ -4499,7 +4782,7 @@ - + @@ -4512,7 +4795,8 @@ um auszudrücken, daß gewissen Angaben ausgelassen wurden

-
+ +
@@ -5165,7 +5449,7 @@ - + @@ -5175,7 +5459,8 @@ ...denn das ist das vereinfachte Setup für "einfache" Applikationen

-
+ +
@@ -5338,7 +5623,7 @@ - + @@ -5348,9 +5633,10 @@ das Diff wird auf den Platzhalter angewendet

-
+ +
- + @@ -5363,7 +5649,8 @@ dann muß dieses automatisch deregistriert werden

-
+ +
@@ -5628,7 +5915,7 @@ - + @@ -5644,7 +5931,8 @@ Details im  TiddlyWiki....

-
+ +
@@ -6147,7 +6435,7 @@ - + @@ -6157,7 +6445,8 @@ ...abstraktes Interface

-
+ + @@ -6187,7 +6476,7 @@ - + @@ -6200,7 +6489,8 @@ oder eine Sequenz ohne root-Fork zulassen

-
+ + @@ -6626,7 +6916,7 @@ - + @@ -6642,7 +6932,8 @@ Verwende das als Leitgedanke, um das Layout zu entwickeln

-
+ + @@ -6793,7 +7084,7 @@ - + @@ -6803,7 +7094,8 @@ ...um mal was im UI anzeigen zu können

-
+ +
@@ -6816,7 +7108,7 @@ - + @@ -6832,7 +7124,8 @@ Die Icon-Größen ergeben sich aus den Boxes auf 'plate'

-
+ +
@@ -6867,7 +7160,7 @@ - + @@ -6880,7 +7173,8 @@ mehr als ein top-level Fenster offen

-
+ +
@@ -7028,7 +7322,7 @@
- + @@ -7041,7 +7335,8 @@ aber es kann davon mehrere geben

-
+ +
@@ -7309,7 +7604,7 @@
- + @@ -7332,9 +7627,10 @@ was haben alle UI-Elemente wirklich gemeinsam?

-
+ + - + @@ -7350,7 +7646,8 @@ oder handelt es sich nur um ein Implementierungsdetail der UI-Bus-Anbindung?

-
+ + @@ -13734,7 +14031,7 @@ - + @@ -13752,14 +14049,15 @@ - + + - + @@ -13783,7 +14081,8 @@ - + + @@ -13817,7 +14116,7 @@ - + @@ -13830,11 +14129,12 @@ Implementierung der real-world-Variante fehlt!

-
+ + - + @@ -13850,7 +14150,8 @@ wie Session- und State-Managment, Commands etc.

-
+ +
@@ -14127,7 +14428,7 @@ - + @@ -14143,7 +14444,8 @@ und ebenso die Gesten abstrahieren

-
+ +
@@ -14160,7 +14462,7 @@ - + @@ -14188,7 +14490,8 @@ - + + @@ -14456,7 +14759,7 @@ - + @@ -14472,11 +14775,12 @@ mit dem InteractionDirector verdrahtet sein muß!

-
+ + - + @@ -14489,9 +14793,10 @@ und auch nichts mit der Trennung zwischen Layern und Subsystemen

-
+ +
- + @@ -14504,11 +14809,12 @@ aka DependencyInjection + Lifecycle Management

-
+ + - + @@ -14529,7 +14835,8 @@ - + + @@ -14538,7 +14845,7 @@ - + @@ -14551,10 +14858,11 @@ es könnte auch ausreichen, einfach die passende InteractionStateManager-Impl zu verwenden

-
+ +
- + @@ -14564,11 +14872,12 @@ denn InteractionStateManager ist ein Interface!

-
+ +
- + @@ -14587,9 +14896,10 @@ Das könnte ein Advice sein

-
+ +
- + @@ -14608,9 +14918,10 @@ In diesem Fall wird das Command enabled

-
+ +
- + @@ -14620,9 +14931,10 @@ eine Argumentliste mit mehreren Parametern wir Schritt für Schritt geschlossen

-
+ +
- + @@ -14635,7 +14947,8 @@ wird das gemäß Scope "nächstgelegne" genommen

-
+ +
@@ -15232,7 +15545,7 @@
- + @@ -15250,7 +15563,8 @@ - + + @@ -15406,7 +15720,7 @@ - + @@ -15419,9 +15733,10 @@ (Beispiel "in-point fehlt")

-
+ +
- + @@ -15437,7 +15752,8 @@ aber von einem externen State-Change getriggert wird

-
+ +
@@ -15544,7 +15860,7 @@
- + @@ -15560,7 +15876,8 @@ CommandID.KontextID == Instanz

-
+ + @@ -15972,7 +16289,7 @@ - + @@ -15988,12 +16305,13 @@ Also genügt es, einen anonymen Klon dieser Instanz zu halten

-
+ +
- + @@ -16015,7 +16333,8 @@ Beispiel: Menü-Eintrag "create duplicate"

-
+ + @@ -16032,7 +16351,7 @@
- + @@ -16054,7 +16373,8 @@ oder andernfalls einen bestimmten Namen bekommt

-
+ + @@ -16078,7 +16398,7 @@ - + @@ -16097,7 +16417,8 @@ wieder komplett zurückgebaut habe

-
+ +
@@ -18829,7 +19150,7 @@ - + @@ -18842,7 +19163,8 @@ nach dem Umzug auf Github heißt es gason

-
+ + @@ -19015,7 +19337,7 @@ - + @@ -19028,11 +19350,12 @@ we need to wait for the current command or builder run to be completed

-
+ +
- + @@ -19042,7 +19365,8 @@ ...noch nicht implementiert 1/17

-
+ + @@ -19061,7 +19385,7 @@ - + @@ -19071,7 +19395,8 @@ Guard beim Zugang über das Interface

-
+ +
@@ -19151,7 +19476,7 @@ - + @@ -19190,7 +19515,8 @@ OO rocks!

-
+ +
@@ -19257,7 +19583,7 @@
- + @@ -19275,7 +19601,8 @@ - + +
@@ -19452,7 +19779,7 @@
- + @@ -19476,7 +19803,8 @@ - + + @@ -19487,7 +19815,7 @@ - + @@ -19506,7 +19834,8 @@ Alles in ein Framework zwingen. Alternativlos, capisce?

-
+ +
@@ -19571,7 +19900,7 @@ - + @@ -19590,7 +19919,8 @@ Gtk-Main verwendet inzwischen den gleichen Mechanismus

-
+ +
@@ -19603,7 +19933,7 @@ - + @@ -19625,7 +19955,8 @@ Das ist eine subtile Falle.

-
+ +
@@ -19644,7 +19975,7 @@ - + @@ -19667,7 +19998,8 @@ alles das nicht aus dem GUI-Thread heraus geschieht

-
+ +
@@ -19704,7 +20036,7 @@ - + @@ -19717,7 +20049,8 @@ Siehe Beschreibung im Beispiel/Tutorial

-
+ +
@@ -20111,7 +20444,7 @@ - + @@ -20129,7 +20462,8 @@ Beachte: der Text-Cursor (Marker "insert") hat right gravity

-
+ +
@@ -20191,7 +20525,7 @@ - + @@ -20216,9 +20550,10 @@ Query<RES>::resolveBy

-
+ +
- + @@ -20253,14 +20588,15 @@ sonst kommt Doxygen durcheinander

-
+ +
- + @@ -20282,7 +20618,8 @@ wird hier kein Link erzeugt

-
+ +
@@ -20297,7 +20634,7 @@ - + @@ -20307,7 +20644,8 @@ ...im Besonderen die guten Diagramme für Pulse, ALSA und Jack

-
+ +
@@ -20343,7 +20681,7 @@
- + @@ -20366,10 +20704,11 @@ "-Wl,-rpath-link=target/modules"

-
+ +
- + @@ -20379,14 +20718,15 @@ laufen wieder alle

-
+ + - + @@ -20396,7 +20736,8 @@ test.sh Zeile 138

-
+ +
@@ -20455,7 +20796,7 @@
- + @@ -20465,7 +20806,8 @@ ist klar, hab ich gebrochen

-
+ + @@ -20481,7 +20823,7 @@ - + @@ -20494,7 +20836,8 @@ Vorher hatte ich erste Kollisionen nach 25000 Nummern

-
+ +
@@ -20533,7 +20876,7 @@
- + @@ -20546,7 +20889,8 @@ Aug 10 04:51:39 flaucher kernel: traps: test-suite[8249] trap int3 ip:7ffff7deb241 sp:7fffffffe5c8 error:0

-
+ + @@ -20687,7 +21031,7 @@
- + @@ -20703,10 +21047,11 @@ und tatsächlich: das ist daneben, GCC hat Recht!

-
+ +
- + @@ -20716,7 +21061,8 @@ aktualisieren und neu bauen

-
+ +
@@ -20736,7 +21082,7 @@ - + @@ -20746,7 +21092,8 @@ wähle Kompatibiltät genau so, daß Ubuntu-Trusty noch unterstützt wird.

-
+ + @@ -20780,7 +21127,7 @@ - + @@ -20793,9 +21140,10 @@ Ich meine also: zu Beginn vom Build sollte das Buildsystem einmal eine Infozeile ausgeben

-
+ +
- + @@ -20805,7 +21153,8 @@ ...denn die stören jeweils beim erzeugen eines Hotfix/Patch im Paketbau per dpkg --commit

-
+ +
@@ -20852,7 +21201,7 @@
- + @@ -20862,11 +21211,12 @@ Doku durchkämmen nach Müll

-
+ + - + @@ -20879,10 +21229,11 @@ WICHTIG: keine vorgreifende Infor publizieren!!!!!

-
+ +
- + @@ -20898,7 +21249,8 @@ insgesamt sorgfältig durchlesen

-
+ + @@ -20908,7 +21260,7 @@ - + @@ -20918,7 +21270,8 @@ knappe Kennzeichnung des Releases in den Kommentar

-
+ + @@ -20926,7 +21279,7 @@ - + @@ -20945,7 +21298,8 @@ denn wir wollen keine DEB-Info im Master haben!

-
+ + @@ -20958,7 +21312,7 @@
- + @@ -20971,7 +21325,8 @@ die unmittelbaren Release-Dokumente durchgehen

-
+ + @@ -20985,7 +21340,7 @@ - + @@ -20998,7 +21353,8 @@ Sollte konfliktfrei sein

-
+ +
@@ -21021,7 +21377,7 @@
- + @@ -21031,7 +21387,8 @@ ...das heißt bauen und hochladen

-
+ + @@ -21085,7 +21442,7 @@ - + @@ -21098,9 +21455,10 @@ unter Debian/Jessie wird das ignoriert

-
+ +
- + @@ -21126,7 +21484,8 @@ Die Wahrscheinlichkeit, daß irgend jemand Lumiera unter Ubuntu/Trusty installieren möchte, erscheint mir akademisch

-
+ +
@@ -21152,7 +21511,7 @@ - + @@ -21162,7 +21521,8 @@ in lib/hash-standard.hpp

-
+ +
@@ -21177,7 +21537,7 @@ - + @@ -21197,7 +21557,8 @@ es gibt Probleme beim Linken mit den Boost-Libraries, die auf Ubuntu/wily mit gcc-5 gebaut sind.

-
+ +
@@ -21205,7 +21566,7 @@ - + @@ -21215,7 +21576,8 @@ Wichtig: hier nur was wirklich gebaut ist und funktioniert!

-
+ +
@@ -21239,7 +21601,7 @@ - + @@ -21255,7 +21617,8 @@ bestehen, aber irgendwann müssen wir das schon glattziehen

-
+ +
@@ -21293,7 +21656,7 @@ - + @@ -21303,7 +21666,8 @@ seit gcc-4.8 ist kein static_assert mehr in der STDlib

-
+ +