UI-top-level: install presentation state recording service (#1081)

This commit is contained in:
Fischlurch 2017-02-19 04:46:13 +01:00
parent 60adaa5639
commit 198ccff396
8 changed files with 102 additions and 15 deletions

View file

@ -85,6 +85,7 @@
#include "lib/idi/entry-id.hpp"
#include "include/session-command-facade.h"
#include "gui/notification-service.hpp"
#include "gui/ctrl/state-recorder.hpp"
#include "gui/ctrl/command-handler.hpp"
#include "gui/ctrl/bus-term.hpp"
#include "gui/ctrl/nexus.hpp"
@ -109,6 +110,7 @@ namespace ctrl{
{
Nexus uiBusBackbone_;
StateRecorder stateRecorder_;
NotificationService activateNotificationService_;
@ -121,9 +123,9 @@ namespace ctrl{
virtual void
note (ID subject, GenNode const& mark) override
note (ID subject, GenNode const& stateMark) override
{
UNIMPLEMENTED ("receive and handle presentation state note messages.");
stateRecorder_.recordState (subject, stateMark);
}
@ -132,12 +134,20 @@ namespace ctrl{
CoreService (ID identity =lib::idi::EntryID<CoreService>())
: BusTerm(identity, uiBusBackbone_)
, uiBusBackbone_{*this}
, stateRecorder_{*this}
, activateNotificationService_(uiBusBackbone_) // opens the GuiNotificationService instance
{
INFO (gui, "UI-Backbone operative.");
}
~CoreService();
StateManager&
getStateManager()
{
return stateRecorder_;
}
};

View file

@ -33,8 +33,8 @@
*/
#ifndef GUI_INTERACT_STATE_MAP_GROUPING_STORAGE_H
#define GUI_INTERACT_STATE_MAP_GROUPING_STORAGE_H
#ifndef GUI_CTRL_STATE_MAP_GROUPING_STORAGE_H
#define GUI_CTRL_STATE_MAP_GROUPING_STORAGE_H
#include "lib/error.hpp"
@ -54,7 +54,7 @@ namespace ctrl {
using lib::idi::BareEntryID;
using lib::diff::GenNode;
using lib::diff::Ref;
using util::unConst;
using ::util::unConst;
using std::string;
@ -223,4 +223,4 @@ namespace ctrl {
}} // namespace gui::ctrl
#endif /*GUI_INTERACT_STATE_MAP_GROUPING_STORAGE_H*/
#endif /*GUI_CTRL_STATE_MAP_GROUPING_STORAGE_H*/

View file

@ -57,8 +57,9 @@ namespace ctrl {
* Initialise storage for global interface state
* @see ctrl::CoreService
*/
UiState::UiState (FocusTracker& focusTracker)
: tracker_{focusTracker}
UiState::UiState (StateManager& stateManager, FocusTracker& focusTracker)
: stateManager_{stateManager}
, tracker_{focusTracker}
{ }

View file

@ -69,6 +69,7 @@ namespace ctrl {
// using std::string;
// class GlobalCtx;
class StateManager;
@ -83,10 +84,11 @@ namespace ctrl {
class UiState
: boost::noncopyable
{
StateManager& stateManager_;
interact::FocusTracker& tracker_;
public:
UiState (interact::FocusTracker&);
UiState (StateManager&, interact::FocusTracker&);
~UiState();
private:

View file

@ -73,7 +73,7 @@ namespace interact {
, spotLocator_{new SpotLocator}
, navigator_{new Navigator{*spotLocator_}}
, tracker_{new FocusTracker{*navigator_}}
, uiState_{new UiState{*tracker_}}
, uiState_{new UiState{globals.uiBus_.getStateManager(), *tracker_}}
, assets_{new AssetController{session::Root::getAssetID(), this->uiBus_}}
, timelines_{}
{

View file

@ -74,7 +74,14 @@ namespace controller {
{
return *coreService_;
}
ctrl::StateManager&
UiBus::getStateManager()
{
return coreService_->getStateManager();
}
namespace ctrl {

View file

@ -163,7 +163,8 @@ namespace gui {
UiBus();
~UiBus();
ctrl::BusTerm& getAccessPoint();
ctrl::BusTerm& getAccessPoint();
ctrl::StateManager& getStateManager();
};

View file

@ -2178,9 +2178,75 @@
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1487313454220" ID="ID_640048374" MODIFIED="1487313460055" TEXT="Abgriff in CoreServices">
<node CREATED="1487313462963" ID="ID_342355040" MODIFIED="1487313471974" TEXT="injizieren"/>
<node CREATED="1487313475593" ID="ID_951423078" MODIFIED="1487313479932" TEXT="&#xfc;ber Lifecycle nachdenken"/>
<node CREATED="1487313454220" ID="ID_640048374" MODIFIED="1487475809793" TEXT="Abgriff in CoreServices">
<icon BUILTIN="button_ok"/>
<node CREATED="1487313462963" ID="ID_342355040" MODIFIED="1487475672626" TEXT="injizieren">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1487313475593" ID="ID_951423078" MODIFIED="1487475676372" TEXT="&#xfc;ber Lifecycle nachdenken">
<icon BUILTIN="button_ok"/>
<node CREATED="1487472682881" ID="ID_1575753680" MODIFIED="1487472687124" TEXT="UI-Bus zuerst"/>
<node CREATED="1487472687641" ID="ID_731426548" MODIFIED="1487472699179" TEXT="dann Ui-Manager -&gt; InteractionDirector -&gt; Ui-State"/>
<node CREATED="1487472711453" ID="ID_759583421" MODIFIED="1487472719128" TEXT="beim Zerst&#xf6;ren von GtkLumiera">
<node CREATED="1487472720476" ID="ID_1676214656" MODIFIED="1487472730102" TEXT="sollte die Event-Loop bereits beendet sein"/>
<node CREATED="1487472730667" ID="ID_1826692985" MODIFIED="1487472740645" TEXT="k&#xf6;nnen aber noch Fenster existieren"/>
<node CREATED="1487472757439" ID="ID_977443666" MODIFIED="1487475766036">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
wird der Link zwischen CoreService und UI-State <i>dangling</i>
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#659ba4" DESTINATION="ID_977443666" ENDARROW="None" ENDINCLINATION="552;26;" ID="Arrow_ID_1335141107" SOURCE="ID_1261936534" STARTARROW="Default" STARTINCLINATION="462;0;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1487472781532" ID="ID_957134114" MODIFIED="1487472800205" TEXT="kurz darauf wird auch CoreService + Nexus zerst&#xf6;rt"/>
</node>
<node CREATED="1487472971330" ID="ID_81364279" MODIFIED="1487472986931" TEXT="grunds&#xe4;tzliches Shutdown-Problem">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1487472987984" ID="ID_1443542622" MODIFIED="1487473080769" TEXT="aber harmlos">
<icon BUILTIN="button_ok"/>
<node CREATED="1487472993439" ID="ID_310404379" MODIFIED="1487473004097" TEXT="unter der Annahme, da&#xdf; das UI wirklich single-threaded l&#xe4;uft"/>
<node CREATED="1487473004949" ID="ID_1092623141" MODIFIED="1487473018151" TEXT="wenn wir die Garantie haben, da&#xdf; die Event-Loop nichts mehr macht"/>
<node CREATED="1487473038377" ID="ID_393673106" MODIFIED="1487473076368" TEXT="Policy: kein Tangible darf im dtor mit dem UI-Bus reden">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...mit der Ausnahme des Automatismus,
</p>
<p>
der es selbst vom Bus abkoppelt
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node CREATED="1487475679257" ID="ID_1700311138" MODIFIED="1487475708423" TEXT="wir injizieren anders herum">
<icon BUILTIN="forward"/>
<node CREATED="1487475695910" ID="ID_1341876014" MODIFIED="1487475704865" TEXT="StateManager als sub-Service"/>
<node CREATED="1487475711092" ID="ID_838045301" MODIFIED="1487475719743" TEXT="geh&#xf6;rt CoreService"/>
<node CREATED="1487475720363" ID="ID_693101732" MODIFIED="1487475723182" TEXT="l&#xe4;uft immer"/>
<node CREATED="1487475723771" ID="ID_959927308" MODIFIED="1487475737732" TEXT="wird in UiState injiziert"/>
<node CREATED="1487475738369" ID="ID_1261936534" MODIFIED="1487475782408" TEXT="harmloses Problem beseitigt">
<arrowlink COLOR="#659ba4" DESTINATION="ID_977443666" ENDARROW="None" ENDINCLINATION="552;26;" ID="Arrow_ID_1335141107" STARTARROW="Default" STARTINCLINATION="462;0;"/>
<icon BUILTIN="ksmiletris"/>
</node>
</node>
<node COLOR="#338800" CREATED="1487475796409" ID="ID_49608905" MODIFIED="1487475804801" TEXT="StateRecorder nun angeschlossen">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1487313659680" ID="ID_1420397002" MODIFIED="1487313667475" TEXT="FocusTap">
<node CREATED="1487313668423" ID="ID_1248049801" MODIFIED="1487313679321" TEXT="Signal in model::Tangible"/>