further decisions regarting the UI top-level
This commit is contained in:
parent
7a51a0bd18
commit
43bd5c3f57
5 changed files with 105 additions and 10 deletions
|
|
@ -100,7 +100,7 @@ namespace gui {
|
|||
//////////////////////TICKET #959 : establish the new backbone here / replaces Project and Controller
|
||||
UiBus uiBus;
|
||||
|
||||
workspace::UiManager uiManager;
|
||||
workspace::UiManager uiManager(uiBus);
|
||||
uiManager.init (Config::get (KEY_ICON_PATH), Config::get (KEY_UIRES_PATH));
|
||||
uiManager.setTheme (Config::get (KEY_STYLESHEET));
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
|
||||
#include "gui/gtk-lumiera.hpp"
|
||||
#include "gui/ui-bus.hpp"
|
||||
#include "gui/workspace/ui-manager.hpp"
|
||||
#include "lib/searchpath.hpp"
|
||||
#include "lib/util.hpp"
|
||||
|
|
@ -54,6 +55,11 @@ namespace workspace {
|
|||
IconSize UiManager::MenuIconSize = Gtk::ICON_SIZE_INVALID;
|
||||
|
||||
|
||||
UiManager::UiManager (UiBus& bus)
|
||||
: Gtk::UIManager()
|
||||
, uiBus_(bus)
|
||||
{ }
|
||||
|
||||
void
|
||||
UiManager::init (string const& iconPath, string const& resourcePath)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -63,11 +63,14 @@ namespace workspace {
|
|||
* icons and resources within Lumiera's GUI.
|
||||
*/
|
||||
class UiManager
|
||||
: boost::noncopyable
|
||||
: Gtk::UIManager
|
||||
, boost::noncopyable
|
||||
{
|
||||
string iconSearchPath_;
|
||||
string resourceSerachPath_;
|
||||
|
||||
UiBus& uiBus_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
|
|
@ -85,6 +88,15 @@ namespace workspace {
|
|||
|
||||
|
||||
public:
|
||||
/**
|
||||
* There is one global UiManager instance,
|
||||
* which is created by [the Application](\ref GtkLumiera)
|
||||
* and allows access to the UI-Bus backbone. The UiManager itself
|
||||
* is _not a ctrl::Controller,_ and thus not directly connected to the Bus.
|
||||
* Rather, supports the top-level windows for creating a consistent interface.
|
||||
*/
|
||||
UiManager (UiBus& bus);
|
||||
|
||||
/**
|
||||
* Initialise the window manager on application start.
|
||||
* Register the icon configuration and sizes and lookup
|
||||
|
|
|
|||
|
|
@ -2795,7 +2795,7 @@ The most fundamental principle is that of ''subsidiarity'': we understand both &
|
|||
Based on these foundations, we shape and form the core part of the interface, which is the [[timeline display|GuiTimelineView]]
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiStart" modifier="Ichthyostega" created="200812050525" modified="200902080720" tags="GuiIntegration">
|
||||
<div title="GuiStart" modifier="Ichthyostega" created="200812050525" modified="201701261938" tags="GuiIntegration GuiPattern" changecount="1">
|
||||
<pre>Starting up the GUI is optional and is considered part of the Application start/stop and lifecycle.
|
||||
* main and AppState activate the lifecyle methods on the ~GuiSubsysDescriptor, accessible via the GuiFacade
|
||||
* loading a GuiStarterPlugin actually
|
||||
|
|
@ -2814,6 +2814,9 @@ Note that we retain strict isolation in the other direction: no part of the lowe
|
|||
* these service objects in turn hold an ~InstanceHandle, which cares to register and open the corresponding C Language Interface
|
||||
* additionally this InstanceHandle is configured such as to create an "facade proxy" object, which is implemented within liblumieracommon.so
|
||||
Now, when invoking an operation on some public interface, the code in the lower layers actually executes an implementation of this operation //on the facade proxy,// which in turn forwards the call through the CL interface into the GUI, where it is actually implemented by the corresponding service object instance.
|
||||
|
||||
!!!UI top level
|
||||
Regarding the internal organisation of Lumiera's ~UI-Layer, there is a [[top level structure|GuiTopLevel]] to manage application lifecycle
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiStarterPlugin" modifier="Ichthyostega" created="200902080716" tags="def GuiIntegration">
|
||||
|
|
@ -2914,6 +2917,25 @@ Applying a diff changes the structure, that is, the structure of the local model
|
|||
Together this means we get a fix up stage after model changes, where the display is re-adjusted to fit the new situation. This works in concert with the [[display manager|TimelineDisplayManager]] representing only those elements as actual widgets, which get a real chance to become visible. This way we can build on the assumption that the actual number of widgets to be managed any time remains so small as to get away with simple linear list processing. It remains to be seen how far this assumption can be pushed -- the problem is that the GTK container components don't support anything beyond such simple linear list processing; there isn't even a call to remove all child widgets of a container in a single pass.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiTopLevel" creator="Ichthyostega" modifier="Ichthyostega" created="201701261944" modified="201701261950" tags="GuiPattern spec draft" changecount="4">
|
||||
<pre>To a large extent, the Lumiera user interface is built around a //backbone structure,// known as the UI-Bus.
|
||||
But there are some dedicated top-level entities, collaborating to maintain a consistent application lifecycle
|
||||
;Application
|
||||
:the application object, {{{GtkLumiera}}} is what executes within the GuiStarterPlugin and thus within the Gtk event thread
|
||||
:it is of no further relevance for any of the other UI entities, insofar it just creates and wires the top level constituents and encompasses their lifetime
|
||||
;~UI-Bus
|
||||
:the backbone of the user interface
|
||||
:as central communication system, the UI-Bus has a star shaped topology with a central router and attached CoreService
|
||||
;UI Manager
|
||||
:maintain a coherent global interface
|
||||
:responsible for all global framework concerns, resources and global application state
|
||||
;Window Manager
|
||||
:manage the top level workspace windows
|
||||
;Notification Façade
|
||||
:attachment point for lower layers and anyone in need to "talk to the UI"
|
||||
:the GuiNotificationFacade is a LayerSeparationInterface and integrated with Lumiera's interface system
|
||||
</pre>
|
||||
</div>
|
||||
<div title="HighLevelModel" modifier="Ichthyostega" created="200808152311" modified="201505310109" tags="Model spec design discuss img" changecount="2">
|
||||
<pre>While the low-level model holds the data used for carrying out the actual media data processing (=rendering), the high-level model is what the user works upon when performing edit operations through the GUI (or script driven in &raquo;headless mode&laquo;). Its building blocks and combination rules determine largely what structures can be created within the [[Session]].
|
||||
On the whole, it is a collection of [[media objects|MObjects]] stuck together and arranged by [[placements|Placement]].
|
||||
|
|
|
|||
|
|
@ -647,8 +647,7 @@
|
|||
}
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -660,13 +659,22 @@
|
|||
<node CREATED="1485124315795" ID="ID_178656069" MODIFIED="1485124323478" TEXT="unser WindowManager macht das Gleiche"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485130302095" HGAP="28" ID="ID_506541774" MODIFIED="1485130320914" TEXT="neuer WorkspaceManger wird dafür zuständig" VSHIFT="14">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485130302095" HGAP="28" ID="ID_506541774" MODIFIED="1485452531308" TEXT="neuer WorkspaceManger" VSHIFT="14">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1485452508180" ID="ID_549617075" MODIFIED="1485452515819" TEXT="wird dafür zuständig">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1485130321924" ID="ID_46787934" MODIFIED="1485130327728" TEXT="Funktion umziehen"/>
|
||||
<node CREATED="1485130328324" ID="ID_874057448" MODIFIED="1485130334983" TEXT="umschreiben auf gtk::Application"/>
|
||||
<node CREATED="1485130336235" ID="ID_125642886" MODIFIED="1485130353981" TEXT="Application-Objekt durchgeben"/>
|
||||
<node CREATED="1485130355377" ID="ID_175334188" MODIFIED="1485130395487" TEXT="Zugriff für NotificationFacade ermöglichen"/>
|
||||
</node>
|
||||
<node CREATED="1485452536138" ID="ID_599315721" MODIFIED="1485452566707" TEXT="vermittelt das">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1485452541583" ID="ID_790081376" MODIFIED="1485452548314" TEXT="Funktor speichern"/>
|
||||
<node CREATED="1485452548693" ID="ID_375213971" MODIFIED="1485452552248" TEXT="Sicherheit des Funktors"/>
|
||||
<node CREATED="1485130355377" ID="ID_483167177" MODIFIED="1485130395487" TEXT="Zugriff für NotificationFacade ermöglichen"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1484797808349" ID="ID_389264738" MODIFIED="1484797832804" TEXT="weitere Funktionen">
|
||||
|
|
@ -1628,7 +1636,6 @@
|
|||
<icon BUILTIN="bell"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485126400233" ID="ID_885004423" MODIFIED="1485126409402" TEXT="unsauberes Design">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node CREATED="1485126410424" ID="ID_1158773288" MODIFIED="1485126414947" TEXT="wir haben mehrere Fenster"/>
|
||||
<node CREATED="1485126418431" ID="ID_1145950660" MODIFIED="1485126426673" TEXT="GtkLumiera sollte kein Singleton sein"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1485126429445" ID="ID_832156304" MODIFIED="1485126432879" TEXT="aufräumen">
|
||||
|
|
@ -1647,9 +1654,57 @@
|
|||
<arrowlink COLOR="#872666" DESTINATION="ID_286857196" ENDARROW="Default" ENDINCLINATION="272;63;" ID="Arrow_ID_1606936924" STARTARROW="Default" STARTINCLINATION="1461;0;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1485126441508" ID="ID_1227132808" MODIFIED="1485126456054" TEXT="GtkLumiera == Applikation == Lebenszyklus"/>
|
||||
<node CREATED="1485126457025" ID="ID_1698853761" MODIFIED="1485126465460" TEXT="WorkspaceManger == Hub für Framework"/>
|
||||
<node CREATED="1485126466520" ID="ID_717310004" MODIFIED="1485126475339" TEXT="WindowManager : nur für die Hauptfenster zuständig"/>
|
||||
</node>
|
||||
<node CREATED="1485126441508" ID="ID_1227132808" MODIFIED="1485454325864" TEXT="GtkLumiera">
|
||||
<node CREATED="1485454326827" ID="ID_1493501410" MODIFIED="1485454331748" TEXT="Applikation == Lebenszyklus">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1485126457025" ID="ID_1698853761" MODIFIED="1485454369762" TEXT="workspace::UiManger">
|
||||
<node CREATED="1485454242368" ID="ID_482639947" MODIFIED="1485454312303" TEXT="Hub für Framework">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1485454284961" ID="ID_940728768" MODIFIED="1485454304731" TEXT="es gibt nur einen">
|
||||
<icon BUILTIN="yes"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1485454375917" ID="ID_1935695209" MODIFIED="1485457020772" TEXT="erbt von Gtk::UiManager">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485457021805" ID="ID_1476863246" MODIFIED="1485457036813" TEXT="Gtk::UiManager ist deprecated">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1485457105010" ID="ID_202831328" MODIFIED="1485457107477" TEXT="neuer Weg">
|
||||
<node CREATED="1485457108425" ID="ID_152284167" MODIFIED="1485457124586" TEXT="man erzeugt Gio::SimpleActionGroup"/>
|
||||
<node CREATED="1485457141853" ID="ID_1841602685" MODIFIED="1485457147592" TEXT="man fügt diese dem Fenster hinzu"/>
|
||||
</node>
|
||||
<node CREATED="1485454243767" ID="ID_3699127" MODIFIED="1485454247467" TEXT="konsistentes UI">
|
||||
<node CREATED="1485454248335" ID="ID_623536019" MODIFIED="1485454252273" TEXT="globales Menü"/>
|
||||
<node CREATED="1485454259637" ID="ID_432211008" MODIFIED="1485454262840" TEXT="globale Toolbar"/>
|
||||
<node CREATED="1485454252789" ID="ID_310049457" MODIFIED="1485454258553" TEXT="globale Aktionen"/>
|
||||
<node CREATED="1485454263876" ID="ID_543704434" MODIFIED="1485454270615" TEXT="globale Keybindings"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1485126466520" ID="ID_717310004" MODIFIED="1485457324752" TEXT="WindowManager">
|
||||
<node CREATED="1485457325724" ID="ID_1954589768" MODIFIED="1485457325724" TEXT="nur für die Hauptfenster zuständig"/>
|
||||
<node CREATED="1485457328043" ID="ID_1787642462" MODIFIED="1485457367904" TEXT="wir haben kein ApplicationWindow">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...denn das ist das vereinfachte Setup für "einfache" Applikationen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1485457370310" ID="ID_1931452525" MODIFIED="1485457379864" TEXT="GtkWindow sind völlig ausreichend"/>
|
||||
</node>
|
||||
<node CREATED="1485126481023" ID="ID_943652445" MODIFIED="1485126488201" TEXT="pro Fenster">
|
||||
<node CREATED="1485126488981" ID="ID_1346100835" MODIFIED="1485126494129" TEXT="WorkspaceWindow"/>
|
||||
<node CREATED="1485126494621" ID="ID_923407468" MODIFIED="1485126498416" TEXT="PanelManager"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue