UI-top-level: decide upon the relation of ViewLocator and Navigator
...and how the former can rely on the latter, abstracted as LocationQuery
This commit is contained in:
parent
d0b59a1c52
commit
3c32cd5acb
7 changed files with 231 additions and 32 deletions
|
|
@ -83,9 +83,9 @@ namespace interact {
|
||||||
InteractionDirector::InteractionDirector (GlobalCtx& globals)
|
InteractionDirector::InteractionDirector (GlobalCtx& globals)
|
||||||
: model::Controller(session::Root::getID(), globals.uiBus_.getAccessPoint())
|
: model::Controller(session::Root::getID(), globals.uiBus_.getAccessPoint())
|
||||||
, globalCtx_(globals)
|
, globalCtx_(globals)
|
||||||
, viewLocator_{new ViewLocator{globals.windowLoc_.locatePanel()}}
|
, viewLocator_{new ViewLocator{globals, [this]() -> LocationQuery& { return *navigator_; }}}
|
||||||
, spotLocator_{new SpotLocator}
|
, spotLocator_{new SpotLocator}
|
||||||
, navigator_{new Navigator{*spotLocator_}}
|
, navigator_{new Navigator{*spotLocator_, *viewLocator_}}
|
||||||
, tracker_{new FocusTracker{*navigator_}}
|
, tracker_{new FocusTracker{*navigator_}}
|
||||||
, uiState_{new UiState{globals.uiBus_.getStateManager(), *tracker_}}
|
, uiState_{new UiState{globals.uiBus_.getStateManager(), *tracker_}}
|
||||||
, assets_{new AssetController{session::Root::getAssetID(), this->uiBus_}}
|
, assets_{new AssetController{session::Root::getAssetID(), this->uiBus_}}
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,14 @@
|
||||||
|
|
||||||
/** @file navigator.cpp
|
/** @file navigator.cpp
|
||||||
** Implementation of global interface navigation mechanisms.
|
** Implementation of global interface navigation mechanisms.
|
||||||
|
** Especially we implement the LocationQuery interface, which exposes the structures
|
||||||
|
** of the UI as an abstracted, tree-shaped topology. This task adds up to levelling all the
|
||||||
|
** specifics of accessing individual components and to assemble them into a virtual component tree.
|
||||||
|
** The actual details of component access are thereby delegated to the ViewLocator, which is a sibling
|
||||||
|
** service maintained by the InteractionDirector.
|
||||||
**
|
**
|
||||||
** @todo WIP 2/2017 early draft / foundations of "interaction control"
|
** @todo WIP 2/2017 early draft / foundations of "interaction control"
|
||||||
|
** @todo WIP 1/2018 integrating the concept of UI-Coordinate navigation and resolution. Still WIP-WIP-WIP...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -47,11 +53,36 @@ namespace interact {
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
Navigator::Navigator (SpotLocator& spotLocator)
|
Navigator::Navigator (SpotLocator& spotLoc, ViewLocator& viewLoc)
|
||||||
: spotLocator_{spotLocator}
|
: spotLocator_{spotLoc}
|
||||||
|
, viewLocator_{viewLoc}
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
/* ==== implementing the LocationQuery API ==== */
|
||||||
|
|
||||||
|
Literal
|
||||||
|
Navigator::determineAnchor (UICoord const& path)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED ("LocationQuery in real UI: resolve anchor point of given UI-Coordinates");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
size_t
|
||||||
|
Navigator::determineCoverage (UICoord const& path)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED ("LocationQuery in real UI: determine explicit coverage of given UI-Coordinates");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
LocationQuery::ChildIter
|
||||||
|
Navigator::getChildren (UICoord const& path, size_t pos)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED ("LocationQuery in real UI: build child iterator rooted at given point in the UI tree");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@
|
||||||
#define GUI_INTERACT_NAVIGATOR_H
|
#define GUI_INTERACT_NAVIGATOR_H
|
||||||
|
|
||||||
#include "gui/gtk-base.hpp"
|
#include "gui/gtk-base.hpp"
|
||||||
|
#include "gui/interact/ui-coord-resolver.hpp"
|
||||||
|
|
||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
//#include <string>
|
//#include <string>
|
||||||
|
|
@ -53,6 +54,7 @@ namespace interact {
|
||||||
|
|
||||||
// class GlobalCtx;
|
// class GlobalCtx;
|
||||||
class SpotLocator;
|
class SpotLocator;
|
||||||
|
class ViewLocator;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -63,14 +65,21 @@ namespace interact {
|
||||||
* @see UiCoordResolver
|
* @see UiCoordResolver
|
||||||
*/
|
*/
|
||||||
class Navigator
|
class Navigator
|
||||||
: boost::noncopyable
|
: public LocationQuery
|
||||||
|
, boost::noncopyable
|
||||||
{
|
{
|
||||||
SpotLocator& spotLocator_;
|
SpotLocator& spotLocator_;
|
||||||
|
ViewLocator& viewLocator_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Navigator (SpotLocator&);
|
Navigator (SpotLocator&, ViewLocator&);
|
||||||
~Navigator ();
|
~Navigator ();
|
||||||
|
|
||||||
|
/* === LocationQuery API === */
|
||||||
|
Literal determineAnchor (UICoord const& path) override final;
|
||||||
|
size_t determineCoverage (UICoord const& path) override final;
|
||||||
|
ChildIter getChildren (UICoord const& path, size_t pos) override final;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -29,13 +29,18 @@
|
||||||
|
|
||||||
|
|
||||||
#include "gui/interact/view-locator.hpp"
|
#include "gui/interact/view-locator.hpp"
|
||||||
//#include "gui/ctrl/global-ctx.hpp"
|
#include "gui/ctrl/panel-locator.hpp"
|
||||||
|
#include "gui/ctrl/window-locator.hpp"
|
||||||
|
#include "gui/interact/ui-coord-resolver.hpp"
|
||||||
|
#include "gui/ctrl/global-ctx.hpp"
|
||||||
#include "lib/symbol.hpp"
|
#include "lib/symbol.hpp"
|
||||||
//#include "lib/util.hpp"
|
//#include "lib/util.hpp"
|
||||||
|
|
||||||
//using util::cStr;
|
//using util::cStr;
|
||||||
//using util::isnil;
|
//using util::isnil;
|
||||||
using lib::Symbol;
|
using lib::Symbol;
|
||||||
|
using gui::ctrl::PanelLocator;
|
||||||
|
using gui::ctrl::WindowLocator;
|
||||||
|
|
||||||
|
|
||||||
namespace gui {
|
namespace gui {
|
||||||
|
|
@ -52,11 +57,29 @@ namespace interact {
|
||||||
ViewLocator::~ViewLocator() { }
|
ViewLocator::~ViewLocator() { }
|
||||||
|
|
||||||
|
|
||||||
ViewLocator::ViewLocator (ctrl::PanelLocator& panelLocator)
|
ViewLocator::ViewLocator (ctrl::GlobalCtx& uiTopLevel, std::function<LocationQuery&()> getLocQuery)
|
||||||
: panelLoc_{panelLocator}
|
: globals_{uiTopLevel}
|
||||||
|
, locationQuery{getLocQuery}
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
/* === Service accessors within global context === */
|
||||||
|
|
||||||
|
PanelLocator&
|
||||||
|
ViewLocator::panelLocator()
|
||||||
|
{
|
||||||
|
return globals_.windowLoc_.locatePanel();
|
||||||
|
}
|
||||||
|
|
||||||
|
WindowLocator&
|
||||||
|
ViewLocator::windowLocator()
|
||||||
|
{
|
||||||
|
return globals_.windowLoc_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,19 +45,26 @@
|
||||||
|
|
||||||
#include "gui/gtk-base.hpp"
|
#include "gui/gtk-base.hpp"
|
||||||
#include "gui/id-scheme.hpp"
|
#include "gui/id-scheme.hpp"
|
||||||
#include "gui/ctrl/panel-locator.hpp"
|
|
||||||
|
|
||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
|
#include <functional>
|
||||||
//#include <string>
|
//#include <string>
|
||||||
//#include <memory>
|
//#include <memory>
|
||||||
|
|
||||||
|
|
||||||
namespace gui {
|
namespace gui {
|
||||||
|
namespace ctrl{
|
||||||
|
class GlobalCtx;
|
||||||
|
class PanelLocator;
|
||||||
|
class WindowLocator;
|
||||||
|
}
|
||||||
namespace interact {
|
namespace interact {
|
||||||
|
|
||||||
// using std::unique_ptr;
|
// using std::unique_ptr;
|
||||||
// using std::string;
|
// using std::string;
|
||||||
|
using std::function;
|
||||||
|
|
||||||
|
class LocationQuery;
|
||||||
// class GlobalCtx;
|
// class GlobalCtx;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -70,10 +77,10 @@ namespace interact {
|
||||||
class ViewLocator
|
class ViewLocator
|
||||||
: boost::noncopyable
|
: boost::noncopyable
|
||||||
{
|
{
|
||||||
ctrl::PanelLocator& panelLoc_;
|
ctrl::GlobalCtx& globals_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ViewLocator (ctrl::PanelLocator&);
|
ViewLocator (ctrl::GlobalCtx&, function<LocationQuery&()>);
|
||||||
~ViewLocator();
|
~ViewLocator();
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -84,6 +91,10 @@ namespace interact {
|
||||||
V& get();
|
V& get();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
/* === accessors to sibling global services === */
|
||||||
|
function<LocationQuery&()> locationQuery;
|
||||||
|
ctrl::PanelLocator& panelLocator();
|
||||||
|
ctrl::WindowLocator& windowLocator();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3705,7 +3705,7 @@ Especially the focus navigation entails the use of some kind of ubiquitous [[coo
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div title="InteractionDirector" creator="Ichthyostega" modifier="Ichthyostega" created="201702102146" modified="201709021522" tags="def design GuiPattern" changecount="25">
|
<div title="InteractionDirector" creator="Ichthyostega" modifier="Ichthyostega" created="201702102146" modified="201801132336" tags="def design GuiPattern" changecount="27">
|
||||||
<pre>//the top-level controller within the UI.//
|
<pre>//the top-level controller within the UI.//
|
||||||
In Lumiera, the structures of the model within the [[Session]] (the so called HighLevelModel) are mapped onto corresponding [[tangible UI entities|UI-Element]], which serve as a front-end to represent those entities towards the user. Within this model, there is a //conceptual root node// -- which logically corresponds to the session itself. This [[root element in model|ModelRootMO]] links together the actual top-level entities, which are the (multiple) timelines, together with the asset management and defaults and rules configuration within the session.
|
In Lumiera, the structures of the model within the [[Session]] (the so called HighLevelModel) are mapped onto corresponding [[tangible UI entities|UI-Element]], which serve as a front-end to represent those entities towards the user. Within this model, there is a //conceptual root node// -- which logically corresponds to the session itself. This [[root element in model|ModelRootMO]] links together the actual top-level entities, which are the (multiple) timelines, together with the asset management and defaults and rules configuration within the session.
|
||||||
|
|
||||||
|
|
@ -3726,7 +3726,7 @@ The InteractionDirector is part of the model, and thus we have to distinguish be
|
||||||
:anything related to forming and tracking of user interactions &rarr; InteractionControl
|
:anything related to forming and tracking of user interactions &rarr; InteractionControl
|
||||||
:* the SpotLocator is what is "moved" when the [[Spot]] of current activity moves
|
:* the SpotLocator is what is "moved" when the [[Spot]] of current activity moves
|
||||||
:* the FocusTracker is responsible for //detecting changes in current selection and focus.//
|
:* the FocusTracker is responsible for //detecting changes in current selection and focus.//
|
||||||
:* the [[Navigator]] is a special controller to handle moving the SpotLocator
|
:* the [[Navigator]] is a special controller to handle moving the SpotLocator within the UI tree topology
|
||||||
|
|
||||||
!Collaborations
|
!Collaborations
|
||||||
* several global actions are exposed here, like opening the session and creating a new timeline.<br/>Such operations are typically bound into menu and action buttons, and in turn invoke [[commands|CommandHandling]] into the Session
|
* several global actions are exposed here, like opening the session and creating a new timeline.<br/>Such operations are typically bound into menu and action buttons, and in turn invoke [[commands|CommandHandling]] into the Session
|
||||||
|
|
@ -3736,6 +3736,9 @@ The InteractionDirector is part of the model, and thus we have to distinguish be
|
||||||
** or can exist only once per top level window
|
** or can exist only once per top level window
|
||||||
** some might even be required once per window
|
** some might even be required once per window
|
||||||
** while others may be duplicated locally or globally
|
** while others may be duplicated locally or globally
|
||||||
|
|
||||||
|
!!!cyclic dependencies
|
||||||
|
The InteractionDirector interconnects various aspects of UI management and thus can be expected to exhibit cyclic dependencies on several levels. Bootstraping the InteractionDirector is thus a tricky procedure and requires all participating services to operate demand-driven. In fact, these services represent some aspects of the same whole -- the UI. They are bounded by thematic considerations, not so much implementation concerns, and many of them rely on their siblings actually provide some essential part of their service. For example, the Navigator exposes the UI as topological tree structure, while the ViewLocator encapsulates the concrete access paths towards specific kinds of UI entities (views, panels). Obviously, the Navigator needs the ViewLocator to build its tree abstraction on top. But, thematically, //resolving a view// is part of accessing and / or creating some view, and thus the ViewLocator becomes indirectly dependent on the tree topology established by the Navigator.
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div title="InteractionState" creator="Ichthyostega" modifier="Ichthyostega" created="201511280402" modified="201704171824" tags="def design GuiIntegration draft" changecount="9">
|
<div title="InteractionState" creator="Ichthyostega" modifier="Ichthyostega" created="201511280402" modified="201704171824" tags="def design GuiIntegration draft" changecount="9">
|
||||||
|
|
|
||||||
|
|
@ -762,7 +762,7 @@
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1484876114521" ID="ID_1082250595" MODIFIED="1501778463955" TEXT="Protokoll zur Kommunikation">
|
<node CREATED="1484876114521" ID="ID_1082250595" MODIFIED="1501778463955" TEXT="Protokoll zur Kommunikation">
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1484876122960" ID="ID_31825421" MODIFIED="1514829311463" TEXT="UI-Bus nur im GUI-Thread">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1484876122960" ID="ID_31825421" MODIFIED="1515885889041" TEXT="UI-Bus nur im GUI-Thread">
|
||||||
<arrowlink COLOR="#6c5f80" DESTINATION="ID_489078622" ENDARROW="Default" ENDINCLINATION="289;0;" ID="Arrow_ID_485145709" STARTARROW="None" STARTINCLINATION="1538;-37;"/>
|
<arrowlink COLOR="#6c5f80" DESTINATION="ID_489078622" ENDARROW="Default" ENDINCLINATION="289;0;" ID="Arrow_ID_485145709" STARTARROW="None" STARTINCLINATION="1538;-37;"/>
|
||||||
<linktarget COLOR="#b7748e" DESTINATION="ID_31825421" ENDARROW="Default" ENDINCLINATION="560;150;" ID="Arrow_ID_1434676575" SOURCE="ID_935689465" STARTARROW="Default" STARTINCLINATION="587;44;"/>
|
<linktarget COLOR="#b7748e" DESTINATION="ID_31825421" ENDARROW="Default" ENDINCLINATION="560;150;" ID="Arrow_ID_1434676575" SOURCE="ID_935689465" STARTARROW="Default" STARTINCLINATION="587;44;"/>
|
||||||
<icon BUILTIN="messagebox_warning"/>
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
|
|
@ -2436,7 +2436,7 @@
|
||||||
<node CREATED="1483921070115" ID="ID_398046799" MODIFIED="1483921131646" TEXT="Prototyp-Service"/>
|
<node CREATED="1483921070115" ID="ID_398046799" MODIFIED="1483921131646" TEXT="Prototyp-Service"/>
|
||||||
<node CREATED="1483921132114" ID="ID_1652398711" MODIFIED="1483921138070" TEXT="liefert dekorierte Command-ID"/>
|
<node CREATED="1483921132114" ID="ID_1652398711" MODIFIED="1483921138070" TEXT="liefert dekorierte Command-ID"/>
|
||||||
<node CREATED="1483921149368" ID="ID_1028150245" MODIFIED="1483921160762" TEXT="im GUI nur noch Command-IDs"/>
|
<node CREATED="1483921149368" ID="ID_1028150245" MODIFIED="1483921160762" TEXT="im GUI nur noch Command-IDs"/>
|
||||||
<node CREATED="1483924872930" ID="ID_242219866" MODIFIED="1483925475104">
|
<node CREATED="1483924872930" ID="ID_242219866" MODIFIED="1515885915837">
|
||||||
<richcontent TYPE="NODE"><html>
|
<richcontent TYPE="NODE"><html>
|
||||||
<head>
|
<head>
|
||||||
|
|
||||||
|
|
@ -2447,7 +2447,7 @@
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html></richcontent>
|
</html></richcontent>
|
||||||
<linktarget COLOR="#e9ba2d" DESTINATION="ID_242219866" ENDARROW="Default" ENDINCLINATION="-784;1692;" ID="Arrow_ID_1617518648" SOURCE="ID_1479669922" STARTARROW="None" STARTINCLINATION="3436;-1136;"/>
|
<linktarget COLOR="#e9ba2d" DESTINATION="ID_242219866" ENDARROW="Default" ENDINCLINATION="-822;1685;" ID="Arrow_ID_1617518648" SOURCE="ID_1479669922" STARTARROW="None" STARTINCLINATION="3436;-1136;"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1483927472385" HGAP="30" ID="ID_774425061" MODIFIED="1483927503424" VSHIFT="13">
|
<node CREATED="1483927472385" HGAP="30" ID="ID_774425061" MODIFIED="1483927503424" VSHIFT="13">
|
||||||
<richcontent TYPE="NODE"><html>
|
<richcontent TYPE="NODE"><html>
|
||||||
|
|
@ -4201,6 +4201,15 @@
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506181800067" ID="ID_196802981" MODIFIED="1515209565927" TEXT="Wiring">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506181800067" ID="ID_196802981" MODIFIED="1515209565927" TEXT="Wiring">
|
||||||
<icon BUILTIN="hourglass"/>
|
<icon BUILTIN="hourglass"/>
|
||||||
<node CREATED="1515209567856" ID="ID_1008245035" MODIFIED="1515209577219" TEXT="warten auf reales UI..."/>
|
<node CREATED="1515209567856" ID="ID_1008245035" MODIFIED="1515209577219" TEXT="warten auf reales UI..."/>
|
||||||
|
<node COLOR="#338800" CREATED="1515891216245" ID="ID_1439162441" MODIFIED="1515891233851" TEXT="Verhältnis von ViewLocator und Navigator klären">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1515891241785" ID="ID_1731852581" MODIFIED="1515891272422" TEXT="Komponenten-Zugriffe in ViewLocator">
|
||||||
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1515891256616" ID="ID_1103868933" MODIFIED="1515891271590" TEXT="Baum-Abstraktion im Navigator">
|
||||||
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#338800" CREATED="1506181802699" ID="ID_582767851" MODIFIED="1508625703401" TEXT="Test-Setup">
|
<node COLOR="#338800" CREATED="1506181802699" ID="ID_582767851" MODIFIED="1508625703401" TEXT="Test-Setup">
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
|
|
@ -9009,27 +9018,138 @@
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1506957414370" ID="ID_848105210" MODIFIED="1506957613469">
|
<node CREATED="1506957414370" ID="ID_848105210" MODIFIED="1515884149284">
|
||||||
<richcontent TYPE="NODE"><html>
|
<richcontent TYPE="NODE"><html>
|
||||||
<head>
|
<head>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
Integration
|
Integration ViewLocator
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Resolver / Navigator
|
Resolver / Navigator
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html></richcontent>
|
</html>
|
||||||
|
</richcontent>
|
||||||
<linktarget COLOR="#3f4b87" DESTINATION="ID_848105210" ENDARROW="Default" ENDINCLINATION="-1260;542;" ID="Arrow_ID_1760927309" SOURCE="ID_1256149179" STARTARROW="None" STARTINCLINATION="1244;-591;"/>
|
<linktarget COLOR="#3f4b87" DESTINATION="ID_848105210" ENDARROW="Default" ENDINCLINATION="-1260;542;" ID="Arrow_ID_1760927309" SOURCE="ID_1256149179" STARTARROW="None" STARTINCLINATION="1244;-591;"/>
|
||||||
<icon BUILTIN="help"/>
|
<icon BUILTIN="help"/>
|
||||||
|
<node CREATED="1515884080567" ID="ID_1610510897" MODIFIED="1515884091139" TEXT="Frage der Abhängigkeit">
|
||||||
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
|
<node CREATED="1515884093053" ID="ID_578386223" MODIFIED="1515884098622" TEXT="könnte zyklisch sein">
|
||||||
|
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1515884156717" ID="ID_1719646750" MODIFIED="1515885023884" TEXT="ViewLocator">
|
||||||
|
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||||
|
<node CREATED="1515884167067" ID="ID_252275651" MODIFIED="1515884182853" TEXT="Einzel-Zugang"/>
|
||||||
|
<node CREATED="1515884183937" ID="ID_1146786067" MODIFIED="1515884192404" TEXT="explizit per Typ"/>
|
||||||
|
<node CREATED="1515884193464" ID="ID_680693474" MODIFIED="1515885158375">
|
||||||
|
<richcontent TYPE="NODE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
aber auch: <b>Resolver</b>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</richcontent>
|
||||||
|
<linktarget COLOR="#3b6680" DESTINATION="ID_680693474" ENDARROW="Default" ENDINCLINATION="-178;8;" ID="Arrow_ID_1157808975" SOURCE="ID_1356241564" STARTARROW="None" STARTINCLINATION="98;0;"/>
|
||||||
|
<font NAME="SansSerif" SIZE="12"/>
|
||||||
|
<node CREATED="1515884215165" ID="ID_1855078495" MODIFIED="1515884219600" TEXT="baut auf DSL auf"/>
|
||||||
|
<node CREATED="1515884220428" ID="ID_513230162" MODIFIED="1515884234262" TEXT="Struktur-Regeln"/>
|
||||||
|
<node CREATED="1515884235658" ID="ID_1028909961" MODIFIED="1515884243981" TEXT="finden oder zeugen"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1515885720655" ID="ID_1092683882" MODIFIED="1515891084044" TEXT="bündelt low-level-Zugang">
|
||||||
|
<linktarget COLOR="#8c98a0" DESTINATION="ID_1092683882" ENDARROW="Default" ENDINCLINATION="-155;0;" ID="Arrow_ID_1761525173" SOURCE="ID_150080053" STARTARROW="None" STARTINCLINATION="-156;6;"/>
|
||||||
|
<node CREATED="1515885728374" ID="ID_152777185" MODIFIED="1515885746768" TEXT="Bezug auf GlobalCtx">
|
||||||
|
<node CREATED="1515885839951" ID="ID_123309845" MODIFIED="1515885846514" TEXT="für WindowLocator"/>
|
||||||
|
<node CREATED="1515885847767" ID="ID_1781347382" MODIFIED="1515885853122" TEXT="für PanelManager"/>
|
||||||
|
<node CREATED="1515885855014" ID="ID_1634512088" MODIFIED="1515885976709" TEXT="für LocationQuery">
|
||||||
|
<arrowlink COLOR="#8c98a0" DESTINATION="ID_150080053" ENDARROW="Default" ENDINCLINATION="198;0;" ID="Arrow_ID_1806083846" STARTARROW="None" STARTINCLINATION="10;48;"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1515885751787" ID="ID_1669926039" MODIFIED="1515885759828" TEXT="indirekt zyklisch">
|
||||||
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1515885762754" ID="ID_657098401" MODIFIED="1515885821023" TEXT="ist OK">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
die Regel ist:
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Bei zyklischen Abhängigkeiten erfolgt der Ringschluß
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
an einer Stelle über eine allgemeine Abstraktion
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</richcontent>
|
||||||
|
<icon BUILTIN="yes"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1515884935318" ID="ID_1231381049" MODIFIED="1515885022531" TEXT="Navigator">
|
||||||
|
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||||
|
<node CREATED="1515884949013" ID="ID_562171495" MODIFIED="1515884954959" TEXT="nur lesend"/>
|
||||||
|
<node CREATED="1515884972018" ID="ID_105092644" MODIFIED="1515884977708" TEXT="leistet Baum-Abstraktion"/>
|
||||||
|
<node CREATED="1515884955620" ID="ID_1330012545" MODIFIED="1515884963254" TEXT="manipuliert Zustand, nicht Struktur"/>
|
||||||
|
<node CREATED="1515885006181" ID="ID_150080053" MODIFIED="1515891084044">
|
||||||
|
<richcontent TYPE="NODE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
implementiert <b>LocationQuery</b>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</richcontent>
|
||||||
|
<arrowlink COLOR="#8c98a0" DESTINATION="ID_1092683882" ENDARROW="Default" ENDINCLINATION="-155;0;" ID="Arrow_ID_1761525173" STARTARROW="None" STARTINCLINATION="-156;6;"/>
|
||||||
|
<linktarget COLOR="#8c98a0" DESTINATION="ID_150080053" ENDARROW="Default" ENDINCLINATION="198;0;" ID="Arrow_ID_1806083846" SOURCE="ID_1634512088" STARTARROW="None" STARTINCLINATION="10;48;"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1515891291587" HGAP="42" ID="ID_1000521247" MODIFIED="1515891329347" TEXT="Design" VSHIFT="11">
|
||||||
|
<node CREATED="1515891297466" ID="ID_1885414397" MODIFIED="1515891306893" TEXT="Komponenten sind nach Themen geschnitten"/>
|
||||||
|
<node CREATED="1515891308057" ID="ID_89499528" MODIFIED="1515891321467" TEXT="Zyklen werden über abstrakte Interfaces geführt"/>
|
||||||
|
<node CREATED="1515891349731" ID="ID_1663035567" MODIFIED="1515891368503" TEXT="ViewLocator "generiert nebenbei" die DSL-Token">
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506175097367" ID="ID_1442345755" MODIFIED="1506181085379" TEXT="ViewSpec-DSL">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506175097367" ID="ID_1442345755" MODIFIED="1506181085379" TEXT="ViewSpec-DSL">
|
||||||
<arrowlink COLOR="#b45c5a" DESTINATION="ID_686917529" ENDARROW="Default" ENDINCLINATION="-468;-196;" ID="Arrow_ID_1955094318" STARTARROW="None" STARTINCLINATION="360;85;"/>
|
<arrowlink COLOR="#b45c5a" DESTINATION="ID_686917529" ENDARROW="Default" ENDINCLINATION="-468;-196;" ID="Arrow_ID_1955094318" STARTARROW="None" STARTINCLINATION="360;85;"/>
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
<node CREATED="1515877499720" HGAP="-59" ID="ID_1283126436" MODIFIED="1515877526258" TEXT="Basis" VSHIFT="29">
|
||||||
|
<node CREATED="1515877527300" ID="ID_1356241564" MODIFIED="1515885188347" TEXT="ist Teil des ViewLocators">
|
||||||
|
<arrowlink COLOR="#3b6680" DESTINATION="ID_344392695" ENDARROW="Default" ENDINCLINATION="-269;-228;" ID="Arrow_ID_408957918" STARTARROW="Default" STARTINCLINATION="-858;0;"/>
|
||||||
|
<arrowlink COLOR="#3b6680" DESTINATION="ID_680693474" ENDARROW="Default" ENDINCLINATION="-178;8;" ID="Arrow_ID_1157808975" STARTARROW="None" STARTINCLINATION="98;0;"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1515877545642" ID="ID_1723275956" MODIFIED="1515877557060" TEXT="lebt in der Implementierung"/>
|
||||||
|
<node CREATED="1515877577414" ID="ID_664776417" MODIFIED="1515877611753" TEXT="Bausteine sind sichtbar...">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
...als Namespace-globale Variable mit externer Linkage
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</richcontent>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506181855132" ID="ID_787628963" MODIFIED="1506181859251" TEXT="ViewSpec">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506181855132" ID="ID_787628963" MODIFIED="1506181859251" TEXT="ViewSpec">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506181868898" ID="ID_1852393086" MODIFIED="1506181871266" TEXT="Resolver">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506181868898" ID="ID_1852393086" MODIFIED="1506181871266" TEXT="Resolver">
|
||||||
|
|
@ -9121,7 +9241,7 @@
|
||||||
<icon BUILTIN="yes"/>
|
<icon BUILTIN="yes"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#338800" CREATED="1515726221600" ID="ID_1657507656" MODIFIED="1515803758366" TEXT="Implementierung">
|
<node COLOR="#338800" CREATED="1515726221600" FOLDED="true" ID="ID_1657507656" MODIFIED="1515874594393" TEXT="Implementierung">
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
<node CREATED="1515726234742" ID="ID_95404514" MODIFIED="1515726237056" TEXT="Prinzip">
|
<node CREATED="1515726234742" ID="ID_95404514" MODIFIED="1515726237056" TEXT="Prinzip">
|
||||||
<node CREATED="1515726238061" ID="ID_1475189544" MODIFIED="1515726244416" TEXT="ctor nimmt beliebige Funktion"/>
|
<node CREATED="1515726238061" ID="ID_1475189544" MODIFIED="1515726244416" TEXT="ctor nimmt beliebige Funktion"/>
|
||||||
|
|
@ -10424,9 +10544,10 @@
|
||||||
<node CREATED="1487461242609" ID="ID_164538059" MODIFIED="1487461245308" TEXT="Struktur">
|
<node CREATED="1487461242609" ID="ID_164538059" MODIFIED="1487461245308" TEXT="Struktur">
|
||||||
<node CREATED="1487461304560" ID="ID_349728972" MODIFIED="1488492188626" TEXT="betreibt">
|
<node CREATED="1487461304560" ID="ID_349728972" MODIFIED="1488492188626" TEXT="betreibt">
|
||||||
<node CREATED="1487273437019" ID="ID_1653934212" MODIFIED="1506956689947" TEXT="Navigator">
|
<node CREATED="1487273437019" ID="ID_1653934212" MODIFIED="1506956689947" TEXT="Navigator">
|
||||||
<node CREATED="1506957512565" ID="ID_1256149179" MODIFIED="1507935759248" TEXT="dient als Resolver">
|
<node CREATED="1515879320297" ID="ID_1194515598" MODIFIED="1515879338135" TEXT="(abstrahierte) Baum-Struktur"/>
|
||||||
|
<node CREATED="1506957512565" ID="ID_1256149179" MODIFIED="1515879353706" TEXT="dient als Resolver">
|
||||||
<arrowlink COLOR="#3f4b87" DESTINATION="ID_848105210" ENDARROW="Default" ENDINCLINATION="-1260;542;" ID="Arrow_ID_1760927309" STARTARROW="None" STARTINCLINATION="1244;-591;"/>
|
<arrowlink COLOR="#3f4b87" DESTINATION="ID_848105210" ENDARROW="Default" ENDINCLINATION="-1260;542;" ID="Arrow_ID_1760927309" STARTARROW="None" STARTINCLINATION="1244;-591;"/>
|
||||||
<linktarget COLOR="#5068a8" DESTINATION="ID_1256149179" ENDARROW="Default" ENDINCLINATION="-87;78;" ID="Arrow_ID_1490250373" SOURCE="ID_650732591" STARTARROW="None" STARTINCLINATION="225;-6;"/>
|
<linktarget COLOR="#5068a8" DESTINATION="ID_1256149179" ENDARROW="Default" ENDINCLINATION="-104;99;" ID="Arrow_ID_1490250373" SOURCE="ID_650732591" STARTARROW="None" STARTINCLINATION="225;-6;"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1487270206369" ID="ID_1888334597" MODIFIED="1487461321289" TEXT="SpotLocator"/>
|
<node CREATED="1487270206369" ID="ID_1888334597" MODIFIED="1487461321289" TEXT="SpotLocator"/>
|
||||||
|
|
@ -10476,19 +10597,20 @@
|
||||||
</html></richcontent>
|
</html></richcontent>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1507935461787" ID="ID_1244300168" MODIFIED="1507935472477" TEXT="bietet command-and-query-Interface"/>
|
<node CREATED="1507935461787" ID="ID_1244300168" MODIFIED="1507935472477" TEXT="bietet command-and-query-Interface"/>
|
||||||
<node CREATED="1507935474273" ID="ID_650732591" MODIFIED="1507935737076" TEXT="dient als (Pfad-)Resolver für UI-Coord">
|
<node CREATED="1507935474273" ID="ID_650732591" MODIFIED="1515879353706" TEXT="dient als (Pfad-)Resolver für UI-Coord">
|
||||||
<arrowlink COLOR="#5068a8" DESTINATION="ID_1256149179" ENDARROW="Default" ENDINCLINATION="-87;78;" ID="Arrow_ID_1490250373" STARTARROW="None" STARTINCLINATION="225;-6;"/>
|
<arrowlink COLOR="#5068a8" DESTINATION="ID_1256149179" ENDARROW="Default" ENDINCLINATION="-104;99;" ID="Arrow_ID_1490250373" STARTARROW="None" STARTINCLINATION="225;-6;"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1507935538409" ID="ID_1407528424" MODIFIED="1507935647550" TEXT="stützt sich auf ViewLocator ab">
|
<node CREATED="1507935538409" ID="ID_1407528424" MODIFIED="1515879366384" TEXT="stützt sich auf ViewLocator ab">
|
||||||
<arrowlink COLOR="#89919c" DESTINATION="ID_344392695" ENDARROW="Default" ENDINCLINATION="90;-49;" ID="Arrow_ID_1845784021" STARTARROW="None" STARTINCLINATION="-18;26;"/>
|
<arrowlink COLOR="#89919c" DESTINATION="ID_344392695" ENDARROW="Default" ENDINCLINATION="90;-49;" ID="Arrow_ID_1845784021" STARTARROW="None" STARTINCLINATION="-22;31;"/>
|
||||||
<icon BUILTIN="idea"/>
|
<icon BUILTIN="idea"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1504368969990" ID="ID_344392695" MODIFIED="1507935619563" TEXT="ViewLocator">
|
<node CREATED="1504368969990" ID="ID_344392695" MODIFIED="1515879429968" TEXT="ViewLocator">
|
||||||
<linktarget COLOR="#9da9b7" DESTINATION="ID_344392695" ENDARROW="Default" ENDINCLINATION="-96;-128;" ID="Arrow_ID_17315740" SOURCE="ID_948587913" STARTARROW="None" STARTINCLINATION="-94;5;"/>
|
<linktarget COLOR="#9da9b7" DESTINATION="ID_344392695" ENDARROW="Default" ENDINCLINATION="-96;-128;" ID="Arrow_ID_17315740" SOURCE="ID_948587913" STARTARROW="None" STARTINCLINATION="-94;5;"/>
|
||||||
<linktarget COLOR="#89919c" DESTINATION="ID_344392695" ENDARROW="Default" ENDINCLINATION="90;-49;" ID="Arrow_ID_1845784021" SOURCE="ID_1407528424" STARTARROW="None" STARTINCLINATION="-18;26;"/>
|
<linktarget COLOR="#89919c" DESTINATION="ID_344392695" ENDARROW="Default" ENDINCLINATION="90;-49;" ID="Arrow_ID_1845784021" SOURCE="ID_1407528424" STARTARROW="None" STARTINCLINATION="-22;31;"/>
|
||||||
<linktarget COLOR="#7c8aa8" DESTINATION="ID_344392695" ENDARROW="Default" ENDINCLINATION="-676;143;" ID="Arrow_ID_1224269755" SOURCE="ID_869653682" STARTARROW="None" STARTINCLINATION="641;-106;"/>
|
<linktarget COLOR="#7c8aa8" DESTINATION="ID_344392695" ENDARROW="Default" ENDINCLINATION="-676;143;" ID="Arrow_ID_1224269755" SOURCE="ID_869653682" STARTARROW="None" STARTINCLINATION="641;-106;"/>
|
||||||
<linktarget COLOR="#7f97bd" DESTINATION="ID_344392695" ENDARROW="Default" ENDINCLINATION="-977;81;" ID="Arrow_ID_1627222173" SOURCE="ID_1747666798" STARTARROW="None" STARTINCLINATION="1159;303;"/>
|
<linktarget COLOR="#7f97bd" DESTINATION="ID_344392695" ENDARROW="Default" ENDINCLINATION="-977;81;" ID="Arrow_ID_1627222173" SOURCE="ID_1747666798" STARTARROW="None" STARTINCLINATION="1159;303;"/>
|
||||||
|
<linktarget COLOR="#3b6680" DESTINATION="ID_344392695" ENDARROW="Default" ENDINCLINATION="-269;-228;" ID="Arrow_ID_408957918" SOURCE="ID_1356241564" STARTARROW="Default" STARTINCLINATION="-858;0;"/>
|
||||||
<node CREATED="1504387078950" ID="ID_1433555277" MODIFIED="1504387097144" TEXT="bietet Komponenten-Management">
|
<node CREATED="1504387078950" ID="ID_1433555277" MODIFIED="1504387097144" TEXT="bietet Komponenten-Management">
|
||||||
<node CREATED="1504387105363" ID="ID_631730744" MODIFIED="1504387110342" TEXT="neue Komponente"/>
|
<node CREATED="1504387105363" ID="ID_631730744" MODIFIED="1504387110342" TEXT="neue Komponente"/>
|
||||||
<node CREATED="1504387110866" ID="ID_879632055" MODIFIED="1504387115157" TEXT="Komponente löschen"/>
|
<node CREATED="1504387110866" ID="ID_879632055" MODIFIED="1504387115157" TEXT="Komponente löschen"/>
|
||||||
|
|
@ -19304,8 +19426,8 @@
|
||||||
<node CREATED="1492205732389" ID="ID_1080697951" MODIFIED="1492205739216" TEXT="wir können stets gleich triggern"/>
|
<node CREATED="1492205732389" ID="ID_1080697951" MODIFIED="1492205739216" TEXT="wir können stets gleich triggern"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1492205741483" ID="ID_1132272888" MODIFIED="1492205758781" TEXT="Command wird sofort nach dem Binden getriggert"/>
|
<node CREATED="1492205741483" ID="ID_1132272888" MODIFIED="1492205758781" TEXT="Command wird sofort nach dem Binden getriggert"/>
|
||||||
<node COLOR="#338800" CREATED="1483925280108" HGAP="30" ID="ID_1479669922" MODIFIED="1492205824434" TEXT="Protokoll-Erweiterung" VSHIFT="8">
|
<node COLOR="#338800" CREATED="1483925280108" HGAP="30" ID="ID_1479669922" MODIFIED="1515885915837" TEXT="Protokoll-Erweiterung" VSHIFT="8">
|
||||||
<arrowlink COLOR="#e9ba2d" DESTINATION="ID_242219866" ENDARROW="Default" ENDINCLINATION="-784;1692;" ID="Arrow_ID_1617518648" STARTARROW="None" STARTINCLINATION="3436;-1136;"/>
|
<arrowlink COLOR="#e9ba2d" DESTINATION="ID_242219866" ENDARROW="Default" ENDINCLINATION="-822;1685;" ID="Arrow_ID_1617518648" STARTARROW="None" STARTINCLINATION="3436;-1136;"/>
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
<node CREATED="1483925298713" ID="ID_347702585" MODIFIED="1483925306749" TEXT="Command-Prototyp forken"/>
|
<node CREATED="1483925298713" ID="ID_347702585" MODIFIED="1483925306749" TEXT="Command-Prototyp forken"/>
|
||||||
<node CREATED="1483925307385" ID="ID_509982277" MODIFIED="1492205808486" TEXT="ID durch Kontext-ID dekorieren"/>
|
<node CREATED="1483925307385" ID="ID_509982277" MODIFIED="1492205808486" TEXT="ID durch Kontext-ID dekorieren"/>
|
||||||
|
|
@ -19352,7 +19474,7 @@
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1501778430101" ID="ID_489078622" MODIFIED="1514829311464" TEXT="#1098 hand-over to UI thread">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1501778430101" ID="ID_489078622" MODIFIED="1515885889041" TEXT="#1098 hand-over to UI thread">
|
||||||
<linktarget COLOR="#6c5f80" DESTINATION="ID_489078622" ENDARROW="Default" ENDINCLINATION="289;0;" ID="Arrow_ID_485145709" SOURCE="ID_31825421" STARTARROW="None" STARTINCLINATION="1538;-37;"/>
|
<linktarget COLOR="#6c5f80" DESTINATION="ID_489078622" ENDARROW="Default" ENDINCLINATION="289;0;" ID="Arrow_ID_485145709" SOURCE="ID_31825421" STARTARROW="None" STARTINCLINATION="1538;-37;"/>
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
</node>
|
</node>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue