planning and analysis regarding command invocation
This commit is contained in:
parent
ff42530f25
commit
cfe9cc96f6
2 changed files with 143 additions and 3 deletions
|
|
@ -2582,7 +2582,7 @@ This contrastive approach attempts to keep knowledge and definition clustered in
|
|||
→ GuiCommandCycle
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiCommandCycle" creator="Ichthyostega" modifier="Ichthyostega" created="201703031817" modified="201703140110" tags="design operational GuiPattern GuiIntegration draft discuss img" changecount="31">
|
||||
<div title="GuiCommandCycle" creator="Ichthyostega" modifier="Ichthyostega" created="201703031817" modified="201703150206" tags="design operational GuiPattern GuiIntegration draft discuss img" changecount="33">
|
||||
<pre>//the process of issuing a session command from the UI//
|
||||
Within the Lumiera UI, we distinguish between core concerns and the //local mechanics of the UI.// The latter is addressed in the usual way, based on a variation of the [[MVC-Pattern|http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller]]. The UI toolkit set, here the GTK, affords ample ways to express actions and reactions within this framework, where widgets in the presentation view are wired with the corresponding controllers vice versa (GTK terms these connections as //"signals"//, we rely on {{{libSigC++}}} for implementation).
|
||||
A naive approach would extend these mature mechanisms to also cover the actual functionality of the application. This compelling solution allows quickly to get "something tangible" up and running, yet -- on the long run -- inevitably leads to core concerns being tangled into the presentation layer, which in turn becomes hard to maintain and loaded with "code behind". Since we are here "for the long run", we immediately draw the distinction between UI mechanics and core concerns. The latter are, by decree and axiom, required to perform without even an UI layer running. This decision gives rise to the challenge how to form and integrate the invocation of ''core commands'' into the presentation layer.
|
||||
|
|
@ -2622,7 +2622,7 @@ from these use cases, we can derive the //crucial activities for command handlin
|
|||
* on invocation, the ID of the instance is sent via UI-Bus to the {{{CmdInstanceManager}}}
|
||||
* which in turn removes the instance handle from its registration table and hands it over into the ProcDispatcher
|
||||
[<img[Access to Session Commands from UI|uml/Command-ui-access.png]]
|
||||
Consequently this means that command instances will be formed //per {{{InteractionStateManager}}} instance.// Thus, each distinct kind of control system has its own instances, which are kept around, until they are ready for invocation. Each invocation "burns" an instance -- on next access, a new instance ID will be allocated, and the next command invocation cycle starts...
|
||||
Consequently this means that command instances will be formed //per instance// of InteractionStateManager. Thus, each distinct kind of control system has its own instances, which are kept around, until they are ready for invocation. Each invocation "burns" an instance -- on next access, a new instance ID will be allocated, and the next command invocation cycle starts...
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiConnection" modifier="Ichthyostega" created="200812050543" modified="201703031816" tags="GuiIntegration overview" changecount="9">
|
||||
|
|
@ -3414,11 +3414,13 @@ From experiences with other middle scale projects, I prefer having the test code
|
|||
[img[Example: Interfaces/Namespaces of the ~Session-Subsystems|uml/fig130053.png]]
|
||||
</pre>
|
||||
</div>
|
||||
<div title="InvocationTrail" creator="Ichthyostega" modifier="Ichthyostega" created="201512190210" modified="201702142312" tags="def GuiIntegration draft" changecount="4">
|
||||
<div title="InvocationTrail" creator="Ichthyostega" modifier="Ichthyostega" created="201512190210" modified="201703150336" tags="def GuiIntegration draft" changecount="5">
|
||||
<pre>//A command in preparation of being issued from the UI.//
|
||||
The actual persistent operations on the session model are defined through DSL scripts acting on the session interface, and configured as a //command prototype.// Typically these need to be enriched with at least the actual subject to invoke this command on; many commands require additional parameters, e.g. some time or colour value. These actual invocation parameters need to be picked up from UI elements, and the process of preparing and outfitting a generic command with these actual values is tracked by an ''InvocationTrail handle''. When ready, finally this handle can be issued on any bus terminal, i.e. on any [[tangible interface element|UI-Element]].
|
||||
|
||||
&rarr; CommandInvocationAnalysis
|
||||
|
||||
An invocation trail represents one specific path leading to the invocation of a command. It is a value object (handle), and it serves as the interface used by the UI-Element to retrieve or supply the arguments and finally to prepare the invocation message(s). But while the invocation trail is generic to some degree, the entity to trigger the command invocation needs explicit and concrete knowledge about the circumstances involved into this invocation. Simply, because in some cases, very specific information need to be provided as argument. For example, a widget just needs to know that the setting of a specific slider will be what becomes a likewise specific argument.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="JobTicket" modifier="Ichthyostega" created="201202120018" modified="201208311625" tags="spec Rendering draft">
|
||||
|
|
|
|||
|
|
@ -2090,6 +2090,144 @@
|
|||
<node CREATED="1489461872367" ID="ID_1191906862" MODIFIED="1489461882010" TEXT="bedingt CmdAccessor"/>
|
||||
<node CREATED="1489461905083" ID="ID_1232900605" MODIFIED="1489461911390" TEXT="bedingt Service-Zugang"/>
|
||||
</node>
|
||||
<node CREATED="1489544225984" ID="ID_1436775081" MODIFIED="1489544240309" TEXT="Triggern">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1489544261547" ID="ID_1624183619" MODIFIED="1489544266933" TEXT="wer">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1489544403984" ID="ID_1230750297" MODIFIED="1489544416135" TEXT=""ein UI-Element"">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
</node>
|
||||
<node CREATED="1489544439187" ID="ID_1231587220" MODIFIED="1489544450590" TEXT="Beispiel: Toolbar-Button"/>
|
||||
<node CREATED="1489544452034" ID="ID_745673239" MODIFIED="1489544459404" TEXT="Beispiel: Kontextmenü-Eintrag"/>
|
||||
<node CREATED="1489544513577" ID="ID_128032926" MODIFIED="1489544521044" TEXT="Beispiel: Aktion per Keybinding"/>
|
||||
<node CREATED="1489544524128" ID="ID_1668808893" MODIFIED="1489544534314" TEXT="Beispiel: Signal drag-n-drop"/>
|
||||
</node>
|
||||
<node CREATED="1489544268018" ID="ID_452323402" MODIFIED="1489544273089" TEXT="was">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1489544652414" ID="ID_1351449548" MODIFIED="1489544658199" TEXT="lokal bekannt"/>
|
||||
<node CREATED="1489544640288" ID="ID_1518540017" MODIFIED="1489544651898" TEXT="fest verdrahtet"/>
|
||||
<node CREATED="1489544659597" ID="ID_1444251202" MODIFIED="1489544666376" TEXT="ggfs. Auswahl aus kleiner Menge"/>
|
||||
</node>
|
||||
<node CREATED="1489544717333" ID="ID_1695877485" MODIFIED="1489544720305" TEXT="falls">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1489544722261" ID="ID_1263012116" MODIFIED="1489544725320" TEXT="ausführbar"/>
|
||||
<node CREATED="1489544725860" ID="ID_1167910092" MODIFIED="1489544728848" TEXT="d.h. aktiviert"/>
|
||||
<node CREATED="1489544826383" ID="ID_166753518" MODIFIED="1489544970504" TEXT="zwei verschiedene Effekte">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1489544836757" ID="ID_1543872004" MODIFIED="1489544891968" TEXT="Ausführung abweisen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...stattdessen einen Fehler-Indikator auslösen
|
||||
</p>
|
||||
<p>
|
||||
(Beispiel "in-point fehlt")
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1489544910395" ID="ID_82086808" MODIFIED="1489544965386" TEXT="enable Action">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...das ist eine Reaktion,
|
||||
</p>
|
||||
<p>
|
||||
die von einem managing Ui-Element ausgeführt wird,
|
||||
</p>
|
||||
<p>
|
||||
aber von einem externen State-Change getriggert wird
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#252298" CREATED="1489546623162" HGAP="-17" ID="ID_1622574347" MODIFIED="1489546668633" TEXT="was wird gebraucht" VSHIFT="10">
|
||||
<font NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node COLOR="#ff0000" CREATED="1489546678250" ID="ID_228157787" MODIFIED="1489547976088" TEXT="Vorsicht UI-Programmierung">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1489546705798" ID="ID_43582318" MODIFIED="1489546746697" TEXT="keine neue Programmiersprache entwerfen">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1489546724892" ID="ID_1763781107" MODIFIED="1489546749259" TEXT="muß letztlich explizit sein">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1489546837172" ID="ID_665817500" MODIFIED="1489546841173" TEXT="aber">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<node CREATED="1489546843356" ID="ID_1556795494" MODIFIED="1489546854590" TEXT="ich will Gestaltbarkeit"/>
|
||||
<node CREATED="1489546855202" ID="ID_1824748232" MODIFIED="1489546862101" TEXT="ich will Konfigurierbarkeit"/>
|
||||
</node>
|
||||
<node CREATED="1489546994743" ID="ID_1851585461" MODIFIED="1489546998138" TEXT="im Einzelnen">
|
||||
<node CREATED="1489546998918" ID="ID_668687712" MODIFIED="1489547001785" TEXT="Aktivierung">
|
||||
<node CREATED="1489547002918" ID="ID_728456926" MODIFIED="1489547015360" TEXT="Callback installieren"/>
|
||||
<node CREATED="1489547016564" ID="ID_41325273" MODIFIED="1489547028606" TEXT="Anfrage: ist dies aktivierbar?"/>
|
||||
</node>
|
||||
<node CREATED="1489547086458" ID="ID_1858100202" MODIFIED="1489547091270" TEXT="Argumente">
|
||||
<node CREATED="1489547096857" ID="ID_184341736" MODIFIED="1489547103300" TEXT=""gib mir die Argumente!"">
|
||||
<node CREATED="1489547170463" ID="ID_1981926549" MODIFIED="1489547178266" TEXT="wirklich?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node CREATED="1489547179254" ID="ID_192306839" MODIFIED="1489547197378" TEXT="ist das der richtige Ansatz?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node CREATED="1489547208282" ID="ID_99440101" MODIFIED="1489547228707" TEXT="läßt sich das überhaupt jeh realisieren?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1489547112255" ID="ID_270498008" MODIFIED="1489548210093" TEXT="generische Rollen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
die Idee ist hier,
|
||||
</p>
|
||||
<p>
|
||||
daß diese generischen Rollen bereits in der Einrichtung der Command-Definition verwendet werden.
|
||||
</p>
|
||||
<p>
|
||||
Das heißt, für einen bestimmten Invocation-Trail legt man fest,
|
||||
</p>
|
||||
<p>
|
||||
daß ein bestimmtes Argument an eine gewisse Rolle gebunden wird,
|
||||
</p>
|
||||
<p>
|
||||
oder andernfalls einen bestimmten Namen bekommt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1489547124597" ID="ID_408090908" MODIFIED="1489547128224" TEXT="das Subjekt"/>
|
||||
<node CREATED="1489547128837" ID="ID_865724442" MODIFIED="1489547131120" TEXT="der Container"/>
|
||||
<node CREATED="1489547498122" ID="ID_1669169317" MODIFIED="1489547504003" TEXT="die Dauer"/>
|
||||
<node CREATED="1489547283807" ID="ID_559442696" MODIFIED="1489547286467" TEXT="der Wert"/>
|
||||
</node>
|
||||
<node CREATED="1489547506625" ID="ID_1063184971" MODIFIED="1489547632364" TEXT="konkret....">
|
||||
<node CREATED="1489547511224" ID="ID_954080965" MODIFIED="1489547530586" TEXT="das UI-Element weiß explizit was gebraucht wird"/>
|
||||
<node CREATED="1489547542852" ID="ID_271774122" MODIFIED="1489547548943" TEXT="und stellt selber das Tupel zusammen"/>
|
||||
<node CREATED="1489547574504" ID="ID_49978062" MODIFIED="1489547582019" TEXT="oder ruft einen Funktor auf"/>
|
||||
<node CREATED="1489547588102" ID="ID_985840704" MODIFIED="1489547597465" TEXT="wodurch die Argument-Typen dokumentiert sind"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1489548252324" HGAP="78" ID="ID_1622068086" MODIFIED="1489548276247" TEXT="das könnte der InvocationTrail sein" VSHIFT="20">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1489461946997" HGAP="-10" ID="ID_1526466868" MODIFIED="1489462026528" TEXT="direkt von den Lambdas aus delegieren" VSHIFT="7">
|
||||
|
|
|
|||
Loading…
Reference in a new issue