Lumiera
0.pre.03
»edit your freedom«
|
Go to the source code of this file.
Under construction: the top level UI controller.
The Lumiera GTK GUI is built around a generic backbone structure known as UI-Bus. This is a messaging system and taps into any widget of more than local relevance. To that end, any globally relevant (custom) widget, and all secondary controllers inherit from the stage::model::Tangible base. The top-level stage::UiBus element is a front-end and framework component managed by the GTK-main.
The UI-Bus acts as a mediating backbone, impersonating the role of the Model and the Controller in the MVC-Pattern in common UI architecture.
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.
Through this architectural decision, we introduce the distinction between the local, tangible UI "mechanics" on one side, and the common, generic interaction patterns on the other side. The former, the mere "mechanics" of the UI shall be kept simple and reduced to immediate feedback and reactions to operating some interface controls. Any actual operations and actions relevant to the application as a whole, are to be sent as messages into the UI-Bus. The interface code can assume some "core services" to be available somewhere; these core services will receive the messages, act on them and respond asynchronously.
The UI-Bus has a star shaped topology, with a central "bus master" hub, the NexusNexus"", which maintains a routing table. Attachment and detachment of elements can be managed automatically, since all of the UI-Bus operations perform within the UI event thread.
We distinguish between up-link messages, directed towards some central service (presentation state management or command invocation) and down-link messages, directed towards individual elements. The interactions at the bus are closely interrelated with the elementary UI-Element operations.
Definition in file ui-bus.hpp.
#include "stage/gtk-base.hpp"
#include "stage/ctrl/playback-controller.hpp"
#include "lib/nocopy.hpp"
#include <memory>
Classes | |
class | Controller |
class | UiBus |
Backbone of the Lumiera GTK GUI. More... | |
Namespaces | |
stage | |
Lumiera GTK UI implementation root. | |
stage::ctrl | |
Backbone of the Lumiera GTK UI. | |
stage::model | |
The Lumiera GTK-GUI uses a thin proxy layer data model on top of the actual "high-level-model", which lives in the Steam-Layer below. | |