planning the fundamentals of UI-Bus communication

This commit is contained in:
Fischlurch 2015-11-25 00:20:56 +01:00
parent d305254837
commit 16c01ab2bd
2 changed files with 92 additions and 18 deletions

View file

@ -8314,7 +8314,7 @@ The UI-Bus is a ''Mediator'' -- impersonating the role of the //Model// and the
The ~MVC-Pattern as such is fine, and probably the best we know for construction of user interfaces. But it doesn't scale well towards the integration into a larger and more structured system. There is a tension between the Controller in the UI and other parts of an application, which as well need to be //in control.// And, even more important, there is a tension between the demands of UI elements for support by a model, and the demands to be placed on a core domain model of a large scale application. This tension is resolved by enacting these roles while transforming the requests and demands into //Messages.//</pre>
</div>
<div title="UI-Element" creator="Ichthyostega" modifier="Ichthyostega" created="201511210307" modified="201511210357" tags="GuiPattern design draft decision" changecount="8">
<div title="UI-Element" creator="Ichthyostega" modifier="Ichthyostega" created="201511210307" modified="201511242314" tags="GuiPattern design draft decision" changecount="10">
<pre>While our UI widgets are implemented the standard way as proposed by GTKmm, some key elements -- which are especially relevant for the anatomy and mechanics of the interface -- are made to conform to a common interface and behaviour protocol. {{red{WIP 11/15 work out what this protocol is all about}}}. #975
As a starting point, we know
* there is a backbone structure known as the UI-Bus
@ -8339,6 +8339,28 @@ These manipulations in itself do not constitute an action. But there typically i
A special case of state marking is the presentation of transient feedback. Such feedback is pushed from &quot;somewhere&quot; towards given elements, which react through an implementation dependent visual state change (flushing, colour change, marker icon). If such state marking is to be persistent, the interface element has in turn to send a specific state mark. An example would be a permanent error flag with a explanatory text showed in mouse over. Which in turn means there can also be sweeping state reset messages, which are to be broadcasted: A general &quot;reset&quot;, an indication to collapse everything, or to clear pending error flags.
And finally, there are the //essential updates// -- any changes in the model //for real.// These are sent as notifications just to some top level element, expecting this element to request a diff and to recursively mutate contents into shape.
!Interactions
;new
:connect to an existing term, supply the {{{EntryID}}} of the new element
;act
:send a GenNode representing the action
;mark
:send a GenNode representing the //state mark//
;note
:receive a GenNode representing the //feedback//
;signals
:the individual element exposes some generic signal slots
:* sigMut prompts the element to draw a diff to alter its configuration
:* sigExpand promts the element to transition into expanded / unfolded state. If this state is sticky, the element should answer with a ''mark''
:* sigShow prompts the element to bring the indicated child into sight
;diff
:ask to retrieve a diff, which
:* either is an incremental status update
:* or is a from-scratch reconfiguration
We should note that these conventions of interchange lead to a ''self similar design'' of the UI-Bus: Each {{{BusTerm}}} is a personalised connection to yet another {{{BusTerm}}}. Even the ''bus master'' appears as just another {{{BusTerm}}} to all the communication partners. The overall topology of the bus might be reshaped without the participating elements being aware of such a change.
</pre>
</div>
<div title="ViewConnection" modifier="Ichthyostega" created="201105221854" modified="201501091154" tags="def Model SessionLogic" changecount="3">

View file

@ -17,8 +17,7 @@
Struktur
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<arrowlink COLOR="#3a8df0" DESTINATION="ID_1618124128" ENDARROW="Default" ENDINCLINATION="-19;-25;" ID="Arrow_ID_539627804" STARTARROW="Default" STARTINCLINATION="-2;35;"/>
<node CREATED="1448070545132" HGAP="31" ID="ID_1410368513" MODIFIED="1448078995370" TEXT="Element" VSHIFT="-7">
<icon BUILTIN="pencil"/>
@ -41,8 +40,7 @@
hei&#223;t: Element registriert sich am UI-Bus
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1448078473068" ID="ID_510866826" MODIFIED="1448078879162" TEXT="zerst&#xf6;ren">
<richcontent TYPE="NOTE"><html>
@ -54,8 +52,7 @@
hei&#223;t: Element deregistriert sich am UI-Bus
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node CREATED="1448078308690" ID="ID_185716114" MODIFIED="1448078316540" TEXT="Aktionen">
@ -69,8 +66,7 @@
...ist <i>immer</i>&#160;ein <b>tangible</b>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1448078516094" ID="ID_201691188" MODIFIED="1448078519937" TEXT="Commands"/>
<node CREATED="1448078325679" ID="ID_946047770" MODIFIED="1448078510722" TEXT="tweaks"/>
@ -88,8 +84,7 @@
state
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<node CREATED="1448078381288" ID="ID_1570425925" MODIFIED="1448078383420" TEXT="state mark">
<node CREATED="1448078528725" ID="ID_1776152068" MODIFIED="1448078551096">
<richcontent TYPE="NODE"><html>
@ -101,8 +96,7 @@
vom <i>tangible </i>initiiert
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1448078554385" ID="ID_181795198" MODIFIED="1448078560332" TEXT="wird zur&#xfc;ckgespielt"/>
<node CREATED="1448078678961" ID="ID_1905336344" MODIFIED="1448078681261" TEXT="Arten">
@ -137,8 +131,7 @@
Nachricht an <i>irgend ein</i>&#160;Wurzel-Element
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1448078835044" ID="ID_358413966" MODIFIED="1448078844783" TEXT="bezieht daraufhin einen Diff"/>
<node CREATED="1448078845419" ID="ID_189415188" MODIFIED="1448078851438" TEXT="wendet diesen rekursiv an"/>
@ -148,9 +141,68 @@
</node>
</node>
<node CREATED="1448070547667" ID="ID_669457401" MODIFIED="1448070553662" TEXT="Bus-Terminal">
<node CREATED="1448070601165" ID="ID_1711137699" MODIFIED="1448070603296" TEXT="Methoden"/>
<node CREATED="1448070605948" ID="ID_1779744719" MODIFIED="1448070608272" TEXT="Verhalten"/>
<node CREATED="1448070618434" ID="ID_1925738380" MODIFIED="1448070621878" TEXT="Zuordnung"/>
<node CREATED="1448070601165" ID="ID_1711137699" MODIFIED="1448070603296" TEXT="Methoden">
<node CREATED="1448407030239" ID="ID_619913132" MODIFIED="1448407053748">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
mark: Nachricht <i>upstream</i>&#160;bzw <i>broadcast</i>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1448407054900" ID="ID_1277028437" MODIFIED="1448407096966">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
note: Nachricht <i>downstream</i>
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node CREATED="1448070605948" ID="ID_1779744719" MODIFIED="1448070608272" TEXT="Verhalten">
<node CREATED="1448407128826" ID="ID_1974801494" MODIFIED="1448407138941" TEXT="Bus-Master ist ein speziell implementiertes BusTerm"/>
<node CREATED="1448407139441" ID="ID_392543622" MODIFIED="1448407152451" TEXT="das gew&#xf6;hnliche BusTerm ist an ein Tangible angeschlossen"/>
<node CREATED="1448407187035" ID="ID_1622894914" MODIFIED="1448407197917" TEXT="sowie bus-seitig an ein &quot;upstream&quot; BusTerm"/>
</node>
<node CREATED="1448070618434" ID="ID_1925738380" MODIFIED="1448070621878" TEXT="Zuordnung">
<node CREATED="1448406963801" ID="ID_1506114314" MODIFIED="1448406975982">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Bus-Design is <b>selbst&#228;hnlich</b>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1448406977350" ID="ID_1450959387" MODIFIED="1448406993656" TEXT="jedes BusTerm ist lediglich eine personalisierte Bus-Anbindung"/>
<node CREATED="1448406994860" ID="ID_846198635" MODIFIED="1448407022869">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Kennzeichen ist die <b>EntryID</b>&#160;des zugeh&#246;rigen Elements
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
</node>
<node CREATED="1434128059966" ID="ID_823283341" MODIFIED="1434128067529" TEXT="Connect">