command-invocation: use case analysis
This commit is contained in:
parent
40eba94917
commit
c068779a80
3 changed files with 887 additions and 5493 deletions
BIN
doc/devel/uml/Command-ui-usage.png
Normal file
BIN
doc/devel/uml/Command-ui-usage.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
6368
uml/Lumiera.xmi
6368
uml/Lumiera.xmi
File diff suppressed because it is too large
Load diff
|
|
@ -2582,12 +2582,20 @@ This contrastive approach attempts to keep knowledge and definition clustered in
|
|||
→ GuiCommandCycle
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiCommandCycle" creator="Ichthyostega" modifier="Ichthyostega" created="201703031817" modified="201703031837" tags="design operational GuiPattern GuiIntegration draft discuss" changecount="3">
|
||||
<div title="GuiCommandCycle" creator="Ichthyostega" modifier="Ichthyostega" created="201703031817" modified="201703032258" tags="design operational GuiPattern GuiIntegration draft discuss" changecount="10">
|
||||
<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.
|
||||
|
||||
In a nutshell, we understand each such core command as a ''sentence'', with a //subject//, a //predication//, which is the command script in ~Proc-Layer and can be represented by an ID, and possibly additional arguments. And the key point to note is: //such an action sentence need to be formed, before it can be issued.//
|
||||
In a nutshell, we understand each such core command as a ''sentence'', with a //subject//, a //predication//, which is the command script in ~Proc-Layer and can be represented by an ID, and possibly additional arguments. And the key point to note is: //such an action sentence needs to be formed, before it can be issued.//
|
||||
[>img[Command usage in UI|uml/Command-ui-usage.png]]
|
||||
|
||||
!use case analysis
|
||||
To gain some understanding of the topic, we pose the question "who has to deal with core commands"?
|
||||
* the developer of ~Proc-Layer, obviously. The result of that development process is a set of [[command definitions|CommandHandling]], which get installed during start-up of the SessionSubsystem
|
||||
* global menu actions (and keybindings) want to issue a specific command, but possibly also need context information
|
||||
* a widget, button or context-menu binding typically want to trigger a command on some [[tangible element|UI-Element]] (widget or controller)
|
||||
* some InteractionStateManager observes contextual change and needs to mark possible consequences for invoking a given command
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiConnection" modifier="Ichthyostega" created="200812050543" modified="201703031816" tags="GuiIntegration overview" changecount="9">
|
||||
|
|
|
|||
Loading…
Reference in a new issue