ElementAccess: consider helper to encapsulte access to actual GTK structures (#1134)
This commit is contained in:
parent
eae775b725
commit
dc97ab5546
7 changed files with 686 additions and 38 deletions
128
src/gui/ctrl/elem-access-dir.hpp
Normal file
128
src/gui/ctrl/elem-access-dir.hpp
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
ELEM-ACCESS-DIR.hpp - service to access generic elements in the UI
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2018, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/** @file elem-access-directory.hpp
|
||||
** Generic building block in the Lumiera GUI model.
|
||||
** A model::Element has a unique identifier, which is tied to the
|
||||
** identification scheme used in the "real" model in Proc-Layer.
|
||||
** Model elements can be addressed receive mutations caused by changes
|
||||
** and rebuilding of elements within the Session; moreover, a generic
|
||||
** representation of attributes is provided.
|
||||
**
|
||||
** @note as of 1/2015 this is a first draft and WIP-WIP-WIP
|
||||
** @todo WIP ///////////////////////TICKET #1134
|
||||
**
|
||||
** @see ////TODO_test usage example
|
||||
** @see element.cpp implementation
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GUI_CTRL_ELEM_ACCESS_DIR_H
|
||||
#define GUI_CTRL_ELEM_ACCESS_DIR_H
|
||||
|
||||
|
||||
#include "lib/error.hpp"
|
||||
#include "lib/nocopy.hpp"
|
||||
#include "lib/hash-value.h"
|
||||
#include "gui/model/element-access.hpp"
|
||||
//#include "lib/symbol.hpp"
|
||||
#include "lib/util.hpp"
|
||||
|
||||
#include <string>
|
||||
|
||||
|
||||
|
||||
namespace gui {
|
||||
namespace model {
|
||||
|
||||
using lib::HashVal;
|
||||
using util::isnil;
|
||||
using std::string;
|
||||
|
||||
|
||||
/**
|
||||
* Basic (abstracted) view of...
|
||||
*
|
||||
* @see SomeSystem
|
||||
* @see NA_test
|
||||
*/
|
||||
template<class X>
|
||||
class ElemAccessDir
|
||||
{
|
||||
string nothing_;
|
||||
|
||||
public:
|
||||
explicit
|
||||
ElemAccessDir (string const& b)
|
||||
: nothing_(b)
|
||||
{ }
|
||||
|
||||
// using default copy/assignment
|
||||
|
||||
|
||||
|
||||
/* == Adapter interface for == */
|
||||
|
||||
void
|
||||
setSolution (string const& solution ="")
|
||||
{
|
||||
UNIMPLEMENTED ("tbw");
|
||||
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1134
|
||||
if (isDeaf())
|
||||
this->transmogrify (solution);
|
||||
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1134
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
void maybe () const;
|
||||
|
||||
|
||||
friend HashVal
|
||||
hash_value (Element const& entry)
|
||||
{
|
||||
return hash_value (entry.nothing_);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** @internal in case
|
||||
*/
|
||||
template<class X>
|
||||
inline void
|
||||
ElementAccess<X>::maybe () const
|
||||
{
|
||||
UNIMPLEMENTED ("tbw");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}} // namespace gui::model
|
||||
#endif /*GUI_CTRL_ELEM_ACCESS_DIR_H*/
|
||||
|
|
@ -134,7 +134,7 @@ namespace interact {
|
|||
* LocatorSpec is basically a set of [UI coordinates](\ref UICoord), with the additional possibility
|
||||
* of specifying several alternatives, with the intention to pick the first applicable one.
|
||||
* @tparam depth the level in the tree addressed by this locator
|
||||
* @remarks Locator is build from a DSL expression, which is basically a UICoord::Builder.
|
||||
* @remarks Locator is built from a DSL expression, which is basically a UICoord::Builder.
|
||||
* This coordinate spec describes a sequence of several places where to locate
|
||||
* the UI-Element in question. The template parameter clarifies if we're talking
|
||||
* about windows here, or panels or views. The latter is the [default case](\ref ViewSpec).
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
ELEMENT.hpp - a generic element in the UI-Model
|
||||
ELEMENT-ACCESS.hpp - access to generic elements in the UI
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2015, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
*/
|
||||
|
||||
|
||||
/** @file element.hpp
|
||||
/** @file element-access.hpp
|
||||
** Generic building block in the Lumiera GUI model.
|
||||
** A model::Element has a unique identifier, which is tied to the
|
||||
** identification scheme used in the "real" model in Proc-Layer.
|
||||
|
|
@ -30,7 +30,7 @@
|
|||
** representation of attributes is provided.
|
||||
**
|
||||
** @note as of 1/2015 this is a first draft and WIP-WIP-WIP
|
||||
** @todo WIP ///////////////////////TICKET #959
|
||||
** @todo WIP ///////////////////////TICKET #1134
|
||||
**
|
||||
** @see ////TODO_test usage example
|
||||
** @see element.cpp implementation
|
||||
|
|
@ -38,8 +38,8 @@
|
|||
*/
|
||||
|
||||
|
||||
#ifndef GUI_MODEL_ELEMENT_H
|
||||
#define GUI_MODEL_ELEMENT_H
|
||||
#ifndef GUI_MODEL_ELEMENT_ACCESS_H
|
||||
#define GUI_MODEL_ELEMENT_ACCESS_H
|
||||
|
||||
|
||||
#include "lib/error.hpp"
|
||||
|
|
@ -67,13 +67,13 @@ namespace model {
|
|||
* @see NA_test
|
||||
*/
|
||||
template<class X>
|
||||
class Element
|
||||
class ElementAccess
|
||||
{
|
||||
string nothing_;
|
||||
|
||||
public:
|
||||
explicit
|
||||
Element (string const& b)
|
||||
ElementAccess (string const& b)
|
||||
: nothing_(b)
|
||||
{ }
|
||||
|
||||
|
|
@ -87,10 +87,10 @@ namespace model {
|
|||
setSolution (string const& solution ="")
|
||||
{
|
||||
UNIMPLEMENTED ("tbw");
|
||||
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #888
|
||||
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1134
|
||||
if (isDeaf())
|
||||
this->transmogrify (solution);
|
||||
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #888
|
||||
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1134
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -114,7 +114,7 @@ namespace model {
|
|||
*/
|
||||
template<class X>
|
||||
inline void
|
||||
Element<X>::maybe () const
|
||||
ElementAccess<X>::maybe () const
|
||||
{
|
||||
UNIMPLEMENTED ("tbw");
|
||||
}
|
||||
|
|
@ -124,4 +124,4 @@ namespace model {
|
|||
|
||||
|
||||
}} // namespace gui::model
|
||||
#endif /*GUI_MODEL_ELEMENT_H*/
|
||||
#endif /*GUI_MODEL_ELEMENT_ACCESS_H*/
|
||||
127
tests/gui/ctrl/element-access-test.cpp
Normal file
127
tests/gui/ctrl/element-access-test.cpp
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
/*
|
||||
ElementAccess(Test) - verify mechanics of low-level UI element access
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2018, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
* *****************************************************/
|
||||
|
||||
/** @file view-spec-dsl-test.cpp
|
||||
** unit test \ref ViewSpecDSL_test
|
||||
*/
|
||||
|
||||
|
||||
#include "lib/test/run.hpp"
|
||||
#include "lib/test/test-helper.hpp"
|
||||
#include "gui/interact/view-spec-dsl.hpp"
|
||||
#include "gui/interact/ui-coord.hpp"
|
||||
#include "gui/interact/gen-node-location-query.hpp"
|
||||
#include "lib/depend-inject.hpp"
|
||||
#include "lib/format-cout.hpp"
|
||||
//#include "lib/idi/entry-id.hpp"
|
||||
//#include "lib/diff/gen-node.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
|
||||
//#include <string>
|
||||
//#include <vector>
|
||||
|
||||
|
||||
using std::string;
|
||||
using lib::diff::MakeRec;
|
||||
using lib::diff::Rec;
|
||||
//using lib::idi::EntryID;
|
||||
//using lib::diff::GenNode;
|
||||
//using util::isSameObject;
|
||||
//using util::isnil;
|
||||
|
||||
|
||||
namespace gui {
|
||||
namespace interact {
|
||||
namespace test {
|
||||
|
||||
// using lumiera::error::LUMIERA_ERROR_WRONG_TYPE;
|
||||
using lib::test::showSizeof;
|
||||
|
||||
using MockLoationSolver = lib::DependInject<UILocationSolver>::Local<>;
|
||||
|
||||
namespace { //Test fixture...
|
||||
|
||||
}//(End)Test fixture
|
||||
|
||||
|
||||
/******************************************************************************//**
|
||||
* @test verify the mechanics of a functor based internal DSL
|
||||
* to configure access and allocation patters for component views.
|
||||
*
|
||||
* @see id-scheme.hpp
|
||||
* @see ViewLocator
|
||||
* @see UICoord_test
|
||||
*/
|
||||
class ElementAccess_test : public Test
|
||||
{
|
||||
|
||||
virtual void
|
||||
run (Arg)
|
||||
{
|
||||
// verify_basicProperties();
|
||||
verify_standardUsage();
|
||||
verify_alternatives();
|
||||
|
||||
verify_genericInvocation();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
verify_basicProperties()
|
||||
{
|
||||
UNIMPLEMENTED ("basic properties of the view spec DSL");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
verify_standardUsage()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
verify_alternatives()
|
||||
{
|
||||
UNIMPLEMENTED ("querying and selection of location alternatives");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
verify_genericInvocation()
|
||||
{
|
||||
/////////////////////////////////////////////////////////////////////////////////////////TICKET 1134 : how to create ViewLocator mock without global context??
|
||||
//-------------------------------------------------------------Test-Fixture
|
||||
//--------------------------------------------------------------(End)Test-Fixture
|
||||
|
||||
// ErrorLogView errorLog = viwLocator.get<ErrorLogView>();
|
||||
// TimelineView timeline = viwLocator.get<TimelineView>();
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////TICKET 1134 : use an EventLog to verify the forwarded invocations??
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/** Register this test class... */
|
||||
LAUNCHER (ElementAccess, "unit gui");
|
||||
|
||||
|
||||
}}} // namespace gui::interact::test
|
||||
128
tests/gui/test/test-element-access.hpp
Normal file
128
tests/gui/test/test-element-access.hpp
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
TEST-ELEMENT-ACCESS.hpp - fake access directory to handle generic UI entities for test
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2018, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/** @file test-element-access.hpp
|
||||
** Generic building block in the Lumiera GUI model.
|
||||
** A model::Element has a unique identifier, which is tied to the
|
||||
** identification scheme used in the "real" model in Proc-Layer.
|
||||
** Model elements can be addressed receive mutations caused by changes
|
||||
** and rebuilding of elements within the Session; moreover, a generic
|
||||
** representation of attributes is provided.
|
||||
**
|
||||
** @note as of 1/2015 this is a first draft and WIP-WIP-WIP
|
||||
** @todo WIP ///////////////////////TICKET #1134
|
||||
**
|
||||
** @see ////TODO_test usage example
|
||||
** @see element.cpp implementation
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GUI_MODEL_TEST_ELEMENT_ACCESS_H
|
||||
#define GUI_MODEL_TEST_ELEMENT_ACCESS_H
|
||||
|
||||
|
||||
#include "lib/error.hpp"
|
||||
#include "lib/nocopy.hpp"
|
||||
#include "lib/hash-value.h"
|
||||
#include "gui/model/element-access.hpp"
|
||||
//#include "lib/symbol.hpp"
|
||||
#include "lib/util.hpp"
|
||||
|
||||
#include <string>
|
||||
|
||||
|
||||
|
||||
namespace gui {
|
||||
namespace model {
|
||||
|
||||
using lib::HashVal;
|
||||
using util::isnil;
|
||||
using std::string;
|
||||
|
||||
|
||||
/**
|
||||
* Basic (abstracted) view of...
|
||||
*
|
||||
* @see SomeSystem
|
||||
* @see NA_test
|
||||
*/
|
||||
template<class X>
|
||||
class ElementAccess
|
||||
{
|
||||
string nothing_;
|
||||
|
||||
public:
|
||||
explicit
|
||||
ElementAccess (string const& b)
|
||||
: nothing_(b)
|
||||
{ }
|
||||
|
||||
// using default copy/assignment
|
||||
|
||||
|
||||
|
||||
/* == Adapter interface for == */
|
||||
|
||||
void
|
||||
setSolution (string const& solution ="")
|
||||
{
|
||||
UNIMPLEMENTED ("tbw");
|
||||
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1134
|
||||
if (isDeaf())
|
||||
this->transmogrify (solution);
|
||||
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1134
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
void maybe () const;
|
||||
|
||||
|
||||
friend HashVal
|
||||
hash_value (Element const& entry)
|
||||
{
|
||||
return hash_value (entry.nothing_);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** @internal in case
|
||||
*/
|
||||
template<class X>
|
||||
inline void
|
||||
ElementAccess<X>::maybe () const
|
||||
{
|
||||
UNIMPLEMENTED ("tbw");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}} // namespace gui::model
|
||||
#endif /*GUI_MODEL_TEST_ELEMENT_ACCESS_H*/
|
||||
|
|
@ -2906,7 +2906,7 @@ Command instances are like prototypes -- thus each additional level of different
|
|||
see the description in &rarr; CommandSetup
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiComponentView" creator="Ichthyostega" modifier="Ichthyostega" created="201709021521" modified="201802240154" tags="def GuiPattern design" changecount="51">
|
||||
<div title="GuiComponentView" creator="Ichthyostega" modifier="Ichthyostega" created="201709021521" modified="201804062230" tags="def GuiPattern design" changecount="52">
|
||||
<pre>//A view within the UI, featuring some component of relevance to »the model«.//
|
||||
While any UI is comprised of numerous widgets acting as //view of something,// only some of those views play the prominent role to act as //building block component// of the user interface.
|
||||
Such UI component views exhibit some substantial traits
|
||||
|
|
@ -3037,6 +3037,7 @@ It is not clear yet {{red{as of 2/2018}}}, if those additional complexities are
|
|||
|
||||
!!!Semantics of allocation
|
||||
While the process of probing and matching the location specification finally yields an explicit UICoord path to the desired element, it is up to the allocation step actually to decide on the action to be taken. Some allocation operations impose some kind of limit, and are thus free to ignore the given spec and rather return an existing element in place. In the end, the purpose of this whole matching and allocation process is to get hold of a suitable UI component without knowing its precise coordinates in the UI topology. And this is the very property to enable flexible mapping of the strictly hierarchical session structures onto the UI in a fluid way.
|
||||
&rarr; [[low level component access|UILowLevelAccess]]
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiConnection" modifier="Ichthyostega" created="200812050543" modified="201705192329" tags="GuiIntegration overview" changecount="11">
|
||||
|
|
@ -4357,7 +4358,7 @@ The UI-Bus offers a dedicated API to direct ~MutationMessages towards {{{Tangibl
|
|||
|
||||
In the case at hand, the basic building block of the Lumiera UI, the {{{Tangible}}} offers this interface and thus the ability to construct a concrete TreeMutator, which in turn is bound to the internals of the actual UI-Element in question. Together this allows for a generic implementation of MutationMessage handling, where the designated UI-Element is reshaped by applying a concrete diff sequence embedded in the message with the help of a {{{DiffApplicator<DiffMutable>}}}, based on the TreeMutator exposed.</pre>
|
||||
</div>
|
||||
<div title="Navigator" creator="Ichthyostega" modifier="Ichthyostega" created="201710132354" modified="201802240130" tags="spec decision draft GuiPattern" changecount="23">
|
||||
<div title="Navigator" creator="Ichthyostega" modifier="Ichthyostega" created="201710132354" modified="201804062245" tags="spec decision draft GuiPattern" changecount="24">
|
||||
<pre>//Service to navigate through the UI as generic structure.//
|
||||
The Navigator is a component maintained by the InteractionDirector, and the actual implementation is backed by several facilities of the GuiTopLevel. It serves as foundation to treat the UI as a topological network of abstracted locations, represented as [[UI-Coordinates|UICoord]]. This design, together with the UI-Bus helps to reduce coupling within the UI implementation, since it enables to //get somewhere// and reach //some place// -- without the necessity to rely on concrete widget implementation structure.
|
||||
|
||||
|
|
@ -4391,7 +4392,7 @@ From these use cases we conclude that the actual requirements for a Navigator co
|
|||
In fact it is sufficient to keep //the actual element// entirely opaque, so the Navigator works on [[UI coordinates|UICoord]] solely. The result -- some other UI coordinates -- can then be used to accomplish some tasks implemented elsewhere, like allocating a new view or actually moving [[the Spot|Spot]] (&rarr; InteractionControl)
|
||||
|
||||
!Challenges of the implementation
|
||||
Some tricky problems remain to be solved, though: since the Navigator works on UI coordinates, the fundamental problem remains how to acquire the initial coordinates to start navigation. This is a problem of //reverse lookup:// given a concrete element of the UI, find it's UI coordinates. While we should note that it might not be necessary to "discover" coordinates, because in fact we may know them already -- either the element has to store them (on creation), or some lookup index table could be maintained to serve the same purpose
|
||||
Some tricky problems remain to be solved, though: since the Navigator works on UI coordinates, the fundamental problem remains how to acquire the initial coordinates to start navigation. This is a problem of //reverse lookup:// given a concrete element of the UI, find it's UI coordinates. While we should note that it might not be necessary to "discover" coordinates, because in fact we may know them already -- either the element has to store them (on creation), or some lookup index table could be maintained to serve the same purpose. The actual access to low-level UI entities generates a host of further tecnicalities, which we attempt to stash away into a different low-level service, the [[gui:ctrl::ElmAccessDir|UILowLevelAccess]].
|
||||
|
||||
Moreover, the design of coordinate matching and resolving incurs a structure similar to [[render job planning|FrameDispatcher]] -- and the corresponding design problems remain to be solved in a satisfactory way &rarr; [[some notes...|AboutMonads]]
|
||||
|
||||
|
|
@ -9845,7 +9846,7 @@ The dispatch of //diff messages// is directly integrated into the UI-Bus -- whic
|
|||
|
||||
The Graphical User interface, the upper layer in this hierarchy, embodies everything of tangible relevance to the user working with the application. The interplay with Proc-Layer, the middle layer below the UI, is organised along the distinction between two realms of equal importance: on one side, there is the immediate //mechanics of the interface,// which is implemented directly within the ~UI-Layer, based on the Graphical User Interface Toolkit. And, on the other side, there are those //core concerns of working with media,// which are cast into the HighLevelModel at the heart of the middle layer.</pre>
|
||||
</div>
|
||||
<div title="UICoord" creator="Ichthyostega" modifier="Ichthyostega" created="201709222300" modified="201801100331" tags="def draft spec Concepts GuiPattern" changecount="26">
|
||||
<div title="UICoord" creator="Ichthyostega" modifier="Ichthyostega" created="201709222300" modified="201804062229" tags="def draft spec Concepts GuiPattern" changecount="27">
|
||||
<pre>//A topological addressing scheme to designate structural locations within the UI.//
|
||||
Contrary to conventional screen pixel coordinates, here we aim at a topological description of the UI structure. Such a framework of structural reference allows us
|
||||
* to refer to some "place" or "space" within the interface
|
||||
|
|
@ -9877,7 +9878,7 @@ The first distinction to draw is the ''anchor point'' of a given coordinate spec
|
|||
!UI coordinate path evaluation
|
||||
As indicated above, evaluation of UI coordinates requires a ''resolver'', to perform a search and matching operation and to hold the evaluation state. Evaluation is accomplished by first constituting an anchoring, followed by traversal of the coordinate spec and matching against a navigation path within the actual UI window configuration. This process might involve interpretation of some meta-symbols and interpolation of wildcards.
|
||||
|
||||
Internally the coordinate resolver in turn relies on a context query interface, to find out about existing windows, panels, views and tabs and to navigate the real UI structure. The actual implementation of this context query interface is backed by the [[Navigator]] component exposed through the InteractionDirector.
|
||||
Internally the coordinate resolver in turn relies on a context query interface, to find out about existing windows, panels, views and tabs and to navigate the real UI structure. The actual implementation of this context query interface is backed by the [[Navigator]] component exposed through the InteractionDirector. In practice, the Navigator relies on another service for the [[low level access to UI components|UILowLevelAccess]]
|
||||
!!!Query operations
|
||||
In addition to the //locally decidable properties// of a coordinate spec, which are the explicitness and the presence of some component, several contextual predications may be queried
|
||||
;anchorage
|
||||
|
|
@ -9911,6 +9912,16 @@ In addition to querying the interpretation of a given coordinate spec with respe
|
|||
__Navigation mutations:__ //In theory,// it would even be possible to extend the path by creating suitable child components; but actually this would require all "elements" to implement a suitable mutation interface -- which in the case of //generic elements// might be far beyond the common ground. For this reason, we keep mutation of the backing environment outside of a path mutator's scope and rather keep mutation limited to the path itself.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="UILowLevelAccess" creator="Ichthyostega" modifier="Ichthyostega" created="201804062255" tags="spec draft GuiPattern" changecount="1">
|
||||
<pre>//Cross cutting access to elementary UI structures.//
|
||||
We have several orthogonal identification and access schemes within the UI. A naively written UI application just attaches the core logic below some widgets and controllers -- not only does this lead to a hard to maintain codebase, this approch is even outright impossible in our case, due to the strict decoupling between core and GUI, which places us into the situation to connect a self contained core with a self contained UI. This is a binding, which, as a sideline, also generates a control structure of its own. We can indeed write code dealing with a generic UI element -- but there needs to be some place where this kind of generic designation is translated into internal structures of the UI toolkit (GTK in our case), to obtain a direct (language) reference to some implementation widget finally.
|
||||
|
||||
A service to translate some generic address scheme into actual entities builds the foundation of designating a "place withih the UI" by abstracted topological [[UI coordinates|UICoord]]. It allows to define //rules// how some generic [[kind of view|GuiComponentView]] shall be //placed and allocated// into the existing UI structure.
|
||||
|
||||
!Notes about design and implementation {{red{WIP 4/2018}}}
|
||||
At the time of this writing, it is not really clear if we need such a facility and what form its implementation will take -- which in turn places several further planning steps and design consideration into dangling state. The programmer's usual remedy in such a situation is to create yet another abstraction as a tie break. We do not know what it is, but at least we can write unit tests against it to find out what it could be.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="ViewConnection" modifier="Ichthyostega" created="201105221854" modified="201501091154" tags="def Model SessionLogic" changecount="3">
|
||||
<pre>For any kind of playback to happen, timeline elements (or similar model objects) need to be attached to a Viewer element through a special kind of [[binding|BindingMO]], called a ''view connection''. In the most general case, this creates an additional OutputMapping (and in the typical standard case, this boils down to a 1:1 association, sending the master bus of each media kind to the standard OutputDesignation for that kind).
|
||||
|
||||
|
|
|
|||
|
|
@ -3565,7 +3565,8 @@
|
|||
<node CREATED="1487034180712" ID="ID_1371598611" MODIFIED="1518487921063" TEXT="und jedes genau weiß, was die andern können"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1504393149140" HGAP="16" ID="ID_48107354" MODIFIED="1518487921063" TEXT="Addressierung" VSHIFT="27">
|
||||
<node CREATED="1504393149140" HGAP="16" ID="ID_48107354" MODIFIED="1523022936584" TEXT="Addressierung" VSHIFT="27">
|
||||
<arrowlink COLOR="#4f5d91" DESTINATION="ID_974158229" ENDARROW="Default" ENDINCLINATION="383;-2505;" ID="Arrow_ID_1832380552" STARTARROW="None" STARTINCLINATION="-597;127;"/>
|
||||
<node CREATED="1504393160466" ID="ID_450547493" MODIFIED="1518487921063" TEXT="globales ID-Schema">
|
||||
<node CREATED="1504393168946" ID="ID_390425361" MODIFIED="1518487921063" TEXT="Model-Typen"/>
|
||||
<node CREATED="1504393177712" ID="ID_1686403667" MODIFIED="1518487921063" TEXT="View-Deskriptor">
|
||||
|
|
@ -9312,8 +9313,9 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506175097367" ID="ID_1442345755" MODIFIED="1518487921066" TEXT="ViewSpec-DSL">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506175097367" ID="ID_1442345755" MODIFIED="1523022775958" TEXT="ViewSpec-DSL">
|
||||
<arrowlink COLOR="#b45c5a" DESTINATION="ID_686917529" ENDARROW="Default" ENDINCLINATION="-468;-196;" ID="Arrow_ID_1955094318" STARTARROW="None" STARTINCLINATION="360;85;"/>
|
||||
<linktarget COLOR="#6a8499" DESTINATION="ID_1442345755" ENDARROW="Default" ENDINCLINATION="-971;84;" ID="Arrow_ID_1191206769" SOURCE="ID_1844877136" STARTARROW="None" STARTINCLINATION="502;0;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1515877499720" HGAP="-59" ID="ID_1283126436" MODIFIED="1518487921066" TEXT="Basis" VSHIFT="29">
|
||||
<node CREATED="1515877527300" ID="ID_1356241564" MODIFIED="1518487921066" TEXT="ist Teil des ViewLocators">
|
||||
|
|
@ -10038,8 +10040,7 @@
|
|||
ein <b>LocationSolver</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1517021326957" ID="ID_20403834" MODIFIED="1522938411626">
|
||||
|
|
@ -10052,8 +10053,7 @@
|
|||
<b>LocationQuery</b> qua Navigator
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1517021298929" ID="ID_621970077" MODIFIED="1518487921069">
|
||||
|
|
@ -10081,8 +10081,7 @@
|
|||
sehen <b>ViewLocator</b>-API
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -11963,28 +11962,29 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506182023288" ID="ID_1539184761" MODIFIED="1522883337660" TEXT="ViewSpecDSL_test">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506182023288" ID="ID_1539184761" MODIFIED="1523053425474" STYLE="fork" TEXT="ViewSpecDSL_test">
|
||||
<arrowlink COLOR="#43667c" DESTINATION="ID_1234019560" ENDARROW="Default" ENDINCLINATION="-345;-1481;" ID="Arrow_ID_839730277" STARTARROW="None" STARTINCLINATION="-530;453;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506182077694" ID="ID_839824654" MODIFIED="1518487921072" TEXT="verify_basicProperties">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506182077694" ID="ID_839824654" MODIFIED="1523053425474" TEXT="verify_basicProperties">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1515633695710" ID="ID_1540478220" MODIFIED="1518487921072" TEXT="aus standardUsage ablzuleiten"/>
|
||||
<node CREATED="1515633710396" ID="ID_335824710" MODIFIED="1518487921072" TEXT="spezifiziert die formalen Basis-Eigenschaften"/>
|
||||
<node CREATED="1515633695710" ID="ID_1540478220" MODIFIED="1523053425474" TEXT="aus standardUsage ablzuleiten"/>
|
||||
<node CREATED="1515633710396" ID="ID_335824710" MODIFIED="1523053425474" TEXT="spezifiziert die formalen Basis-Eigenschaften"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1506182037003" ID="ID_439307131" MODIFIED="1522883325632" TEXT="verify_standardUsage">
|
||||
<node COLOR="#338800" CREATED="1506182037003" ID="ID_439307131" MODIFIED="1523053425474" TEXT="verify_standardUsage">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1515633645885" ID="ID_1659749577" MODIFIED="1518487921072" TEXT="einfaches Dummy-Setup"/>
|
||||
<node CREATED="1515633651212" ID="ID_704575529" MODIFIED="1518487921072" TEXT="erlaubt, die Strukturen zu bauen"/>
|
||||
<node CREATED="1515633658483" ID="ID_149158343" MODIFIED="1518487921072" TEXT="läuft ohne die UI-Backbone">
|
||||
<node CREATED="1515633645885" ID="ID_1659749577" MODIFIED="1523053425474" TEXT="einfaches Dummy-Setup"/>
|
||||
<node CREATED="1515633651212" ID="ID_704575529" MODIFIED="1523053425474" TEXT="erlaubt, die Strukturen zu bauen"/>
|
||||
<node CREATED="1515633658483" ID="ID_149158343" MODIFIED="1523053425474" TEXT="läuft ohne die UI-Backbone">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506182087462" ID="ID_47070993" MODIFIED="1518487921072" TEXT="verify_alternatives">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506182087462" ID="ID_47070993" MODIFIED="1523053425474" TEXT="verify_alternatives">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1515633722883" ID="ID_9454050" MODIFIED="1518487921072" TEXT="rein technische Erweiterung"/>
|
||||
<node CREATED="1515633737905" ID="ID_1500220475" MODIFIED="1518487921072" TEXT="Auswahl der ersten "passenden" Lösung"/>
|
||||
<node CREATED="1515633770884" ID="ID_861669562" MODIFIED="1518487921072" TEXT="Dummy: GenNodeLocationQuery anstelle eines realen UI"/>
|
||||
<node CREATED="1515633722883" ID="ID_9454050" MODIFIED="1523053425474" TEXT="rein technische Erweiterung"/>
|
||||
<node CREATED="1515633737905" ID="ID_1500220475" MODIFIED="1523053425474" TEXT="Auswahl der ersten "passenden" Lösung"/>
|
||||
<node CREATED="1515633770884" ID="ID_861669562" MODIFIED="1523053425474" TEXT="Dummy: GenNodeLocationQuery anstelle eines realen UI"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522940227022" ID="ID_1745396406" MODIFIED="1522940273981" TEXT="verify_invocation">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522940227022" ID="ID_1745396406" MODIFIED="1523053425474" TEXT="verify_invocation">
|
||||
<linktarget COLOR="#4c8891" DESTINATION="ID_1745396406" ENDARROW="Default" ENDINCLINATION="-828;-41;" ID="Arrow_ID_1830310728" SOURCE="ID_1539937928" STARTARROW="None" STARTINCLINATION="242;22;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
|
|
@ -12577,6 +12577,76 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523019202064" HGAP="-88" ID="ID_1224438713" MODIFIED="1523023211290" TEXT="Low-Level-Zugriff" VSHIFT="93">
|
||||
<arrowlink COLOR="#48678b" DESTINATION="ID_435980488" ENDARROW="Default" ENDINCLINATION="-1768;-2819;" ID="Arrow_ID_689216354" STARTARROW="Default" STARTINCLINATION="309;919;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1523023060481" ID="ID_1061103814" MODIFIED="1523023064036" TEXT="Zweck">
|
||||
<node CREATED="1523020311838" ID="ID_118722698" MODIFIED="1523020315553" TEXT="Bindeglied">
|
||||
<node CREATED="1523020317117" ID="ID_36029855" MODIFIED="1523020327967" TEXT="UI-Koordinaten"/>
|
||||
<node CREATED="1523020328651" ID="ID_57107983" MODIFIED="1523020334087" TEXT="Component Views"/>
|
||||
<node CREATED="1523020334770" ID="ID_1169326637" MODIFIED="1523020339014" TEXT="konkrete Widgets"/>
|
||||
</node>
|
||||
<node CREATED="1523023241752" ID="ID_1541233512" MODIFIED="1523023254890">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Schicht <i>unter</i> dem ViewLocator
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1523023256246" ID="ID_1600604589" MODIFIED="1523023271295" TEXT="UI-Koordinaten ->">
|
||||
<node CREATED="1523023272292" ID="ID_81266590" MODIFIED="1523023288805" TEXT="konkretes Element erreichen"/>
|
||||
<node CREATED="1523023289345" ID="ID_625415004" MODIFIED="1523023295980" TEXT="konkretes Element erzeugen"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1523028361507" ID="ID_393788551" MODIFIED="1523028366222" TEXT="Abstraktion">
|
||||
<node CREATED="1523028367338" ID="ID_204804362" MODIFIED="1523051167969" TEXT="ElementAccess">
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
</node>
|
||||
<node CREATED="1523028460629" ID="ID_683539946" MODIFIED="1523028462433" TEXT="Service">
|
||||
<node CREATED="1523028463213" ID="ID_795295203" MODIFIED="1523030738854" TEXT="lib::Depend<ElementAccess>"/>
|
||||
<node CREATED="1523030678458" ID="ID_1970353135" MODIFIED="1523030681637" TEXT="mockbar"/>
|
||||
</node>
|
||||
<node CREATED="1523055325343" ID="ID_1512953348" MODIFIED="1523055328331" TEXT="Dienste">
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1523055329159" ID="ID_1316858206" MODIFIED="1523055337404" TEXT="noch nicht wirklich klar">
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
<node CREATED="1523055339293" ID="ID_805375580" MODIFIED="1523055357236" TEXT="erst mal ein Hilfsmittel für das Design">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1523055360002" ID="ID_1183834156" MODIFIED="1523055363894" TEXT="yet another abstraction"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1523053331956" ID="ID_563797148" MODIFIED="1523053334615" TEXT="Test">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1523053336219" ID="ID_1234019560" MODIFIED="1523053434519" TEXT="ElementAccess_test">
|
||||
<linktarget COLOR="#43667c" DESTINATION="ID_1234019560" ENDARROW="Default" ENDINCLINATION="-345;-1481;" ID="Arrow_ID_839730277" SOURCE="ID_1539184761" STARTARROW="None" STARTINCLINATION="-530;453;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node CREATED="1523055378032" ID="ID_1727349685" MODIFIED="1523055384523" TEXT="Test-Hilfsmittel">
|
||||
<node CREATED="1523055393950" ID="ID_62932320" MODIFIED="1523055412955" TEXT="TestElementAccess">
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
<node CREATED="1523055422074" ID="ID_1765892157" MODIFIED="1523055430229" TEXT="Fake-Implementierung des Interfaces">
|
||||
<node CREATED="1523055519972" ID="ID_52044142" MODIFIED="1523055528879" TEXT="könnte sich mal zu einem Test-Framework auswachsen"/>
|
||||
<node CREATED="1523055529443" ID="ID_567387345" MODIFIED="1523055536280" TEXT="...aber nicht jetzt">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1523055431649" ID="ID_1190698125" MODIFIED="1523055442076" TEXT="kein GTK dahinter">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1523055476638" ID="ID_1252887483" MODIFIED="1523055485333" TEXT="verwende Marker-Dummy-Typen"/>
|
||||
<node CREATED="1523055489736" ID="ID_1578213763" MODIFIED="1523055499219" TEXT="um polymorphen und generischen Zugang zu prüfen"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1489777673022" HGAP="-43" ID="ID_873069403" MODIFIED="1518487921075" TEXT="Zugang zu Proc-Commands" VSHIFT="34">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1489777702971" HGAP="125" ID="ID_1780068142" MODIFIED="1518487921075" TEXT="Framework muß geschaffen werden" VSHIFT="-42">
|
||||
|
|
@ -14912,6 +14982,190 @@
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#3a8df0" DESTINATION="ID_1618124128" ENDARROW="Default" ENDINCLINATION="-25;-262;" ID="Arrow_ID_539627804" STARTARROW="Default" STARTINCLINATION="-2;35;"/>
|
||||
<node CREATED="1523019258000" HGAP="-55" ID="ID_974158229" MODIFIED="1523022936584" TEXT="Struktur-Schemata" VSHIFT="-28">
|
||||
<linktarget COLOR="#4f5d91" DESTINATION="ID_974158229" ENDARROW="Default" ENDINCLINATION="383;-2505;" ID="Arrow_ID_1832380552" SOURCE="ID_48107354" STARTARROW="None" STARTINCLINATION="-597;127;"/>
|
||||
<font NAME="SansSerif" SIZE="14"/>
|
||||
<node CREATED="1523019333461" ID="ID_631113825" MODIFIED="1523019344239" TEXT="UI-Element - Hierarchie">
|
||||
<node CREATED="1523019501198" ID="ID_531041967" MODIFIED="1523019517194" TEXT="Systematisches UI-Modell">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1523021670034" ID="ID_1102842396" MODIFIED="1523021676897" TEXT="Einstiegspunkte">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1523021679960" ID="ID_1386792927" MODIFIED="1523021704154">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
(GlobalCtx)-><b>InteractionDirector</b> (=Model Root)
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1523019349923" ID="ID_353542665" MODIFIED="1523019373947" TEXT="UI-Koordinaten (UICoord)">
|
||||
<node CREATED="1523019476817" ID="ID_1756924881" MODIFIED="1523019520204" TEXT="abstrahierte UI-Topologie">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1523021751558" ID="ID_816148300" MODIFIED="1523021811070" TEXT="Einstiegspunkte">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1523020094460" ID="ID_950968515" MODIFIED="1523021776371">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
(GlobalCtx)->InteractionDirector-><b>Navigator</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<node CREATED="1523021779698" ID="ID_1153977477" MODIFIED="1523021791197" TEXT="erforschen der aktuellen Topologie"/>
|
||||
<node CREATED="1523021791784" ID="ID_1683105699" MODIFIED="1523021800219" TEXT="Navigation von einem Punkt weg"/>
|
||||
</node>
|
||||
<node CREATED="1523019770144" ID="ID_385008471" MODIFIED="1523020297176">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
(GlobalCtx)->WindowLocator-><b>UIComponentAccessor</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node CREATED="1523021816637" ID="ID_217124542" MODIFIED="1523021829911" TEXT="Element zu gegebenen Koordinaten"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1523019393893" ID="ID_1642953007" MODIFIED="1523019399464" TEXT="Component View">
|
||||
<node CREATED="1523019457868" ID="ID_1319307429" MODIFIED="1523019522833" TEXT="Menge relevanter Entitäten">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1523021612818" ID="ID_366179512" MODIFIED="1523021633434" TEXT="Per Konvention festgelegt">
|
||||
<node CREATED="1523022525819" ID="ID_1844877136" MODIFIED="1523022775958" TEXT="ViewSpec-DSL">
|
||||
<arrowlink COLOR="#6a8499" DESTINATION="ID_1442345755" ENDARROW="Default" ENDINCLINATION="-971;84;" ID="Arrow_ID_1191206769" STARTARROW="None" STARTINCLINATION="502;0;"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1523021634614" ID="ID_1226976079" MODIFIED="1523021641914" TEXT="flacher Namensraum"/>
|
||||
<node CREATED="1523021642573" ID="ID_488343933" MODIFIED="1523021654544" TEXT="komplett von ihrem Ort abstrahiert"/>
|
||||
</node>
|
||||
<node CREATED="1523020082453" ID="ID_1678299024" MODIFIED="1523020148531" TEXT="Einstiegspunkte">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1523020094460" ID="ID_970478590" MODIFIED="1523020111929">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
(GlobalCtx)->InteractionDirector-><b>ViewLocator</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<node CREATED="1523021575831" ID="ID_952406415" MODIFIED="1523021592656" TEXT="findet oder belegt"/>
|
||||
<node CREATED="1523021593460" ID="ID_565564905" MODIFIED="1523021606966" TEXT="Prinzip: ein Stück vom Typ XYZ"/>
|
||||
</node>
|
||||
<node CREATED="1523019770144" ID="ID_435980488" MODIFIED="1523023211290">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
(GlobalCtx)->WindowLocator-><b>UIComponentAccessor</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<linktarget COLOR="#48678b" DESTINATION="ID_435980488" ENDARROW="Default" ENDINCLINATION="-1768;-2819;" ID="Arrow_ID_689216354" SOURCE="ID_1224438713" STARTARROW="Default" STARTINCLINATION="309;919;"/>
|
||||
<node CREATED="1523020311838" ID="ID_807452449" MODIFIED="1523020315553" TEXT="Bindeglied">
|
||||
<node CREATED="1523020317117" ID="ID_1026544092" MODIFIED="1523020327967" TEXT="UI-Koordinaten"/>
|
||||
<node CREATED="1523020328651" ID="ID_1384216871" MODIFIED="1523020334087" TEXT="Component Views"/>
|
||||
<node CREATED="1523020334770" ID="ID_446983517" MODIFIED="1523020339014" TEXT="konkrete Widgets"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1523019409939" ID="ID_13197399" MODIFIED="1523019426500" TEXT="Fenster - Panel - Widget">
|
||||
<node CREATED="1523019435095" FOLDED="true" ID="ID_1087922610" MODIFIED="1523020033004" TEXT="die natürliche Ordnung">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1523019528770" ID="ID_880857626" MODIFIED="1523019581654" TEXT="der real existierende konkrete Inhalt des UI"/>
|
||||
<node CREATED="1523019583242" ID="ID_1200584395" MODIFIED="1523019592269" TEXT="ein Wildwuchs an nativen Komponenten"/>
|
||||
<node CREATED="1523019593833" ID="ID_770462134" MODIFIED="1523019612266" TEXT="ausschließlich an das UI-Toolkit gebunden"/>
|
||||
<node CREATED="1523019635739" ID="ID_883974404" MODIFIED="1523019732087" TEXT="Einzelfall-Wissen vorausgesetzt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
man muß die Implementierungs-Details <i>jeder einzelnen Komponente</i> kennen,
|
||||
</p>
|
||||
<p>
|
||||
um damit überhaupt etwas anfangen zu können. Es gibt hier keine schematische Ordnung.
|
||||
</p>
|
||||
<p>
|
||||
Selbst die Frage, ob es sich um ein Blatt handelt, oder um einen inneren Knoten,
|
||||
</p>
|
||||
<p>
|
||||
erfordert bereits Kenntnis der Innereien
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1523019753259" ID="ID_281223690" MODIFIED="1523019759668" TEXT="Einstiegspunkte">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1523019770144" FOLDED="true" ID="ID_253563802" MODIFIED="1523020030446">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
(GlobalCtx)-><b>WindowLocator</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<node CREATED="1523019793861" ID="ID_656158432" MODIFIED="1523019804904" TEXT="für die top-level WorkspaceWindows"/>
|
||||
<node CREATED="1523019808196" ID="ID_674258018" MODIFIED="1523019813886" TEXT="kann diese erzeugen und zerstören"/>
|
||||
</node>
|
||||
<node CREATED="1523019770144" FOLDED="true" ID="ID_1782262126" MODIFIED="1523020031797">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
(GlobalCtx)->WindowLocator-><b>PanelLocator</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<node CREATED="1523019918268" ID="ID_830201534" MODIFIED="1523019927679" TEXT="Zugang zu einzelnen docking-Panels"/>
|
||||
<node CREATED="1523019928387" ID="ID_928262089" MODIFIED="1523019940676" TEXT="jedes Fenster hat eignen PanelManager">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1523019972924" ID="ID_1402741681" MODIFIED="1523019977168" TEXT="Grundbausteine">
|
||||
<node CREATED="1523019978236" ID="ID_103533434" MODIFIED="1523019981695" TEXT="GTK-Container"/>
|
||||
<node CREATED="1523019982331" ID="ID_533152750" MODIFIED="1523019983943" TEXT="Widget"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1448070545132" HGAP="31" ID="ID_1410368513" MODIFIED="1518487921085" TEXT="Element" VSHIFT="-7">
|
||||
<font NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue