parent
7b16c6b130
commit
42cec6d604
7 changed files with 366 additions and 43 deletions
|
|
@ -32,6 +32,8 @@
|
|||
** Besides, this header defines the basic NLS. Most parts of the GUI rely either
|
||||
** directly on this header, or through the inclusion of gtk-lumiera.hpp
|
||||
**
|
||||
** @warning include here only what is absolutely necessary,
|
||||
** for sake of compilation times and (debug) executable size.
|
||||
** @see GtkLumiera
|
||||
*/
|
||||
|
||||
|
|
@ -63,46 +65,10 @@
|
|||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
/* ======= Namespace Definitions ======= */
|
||||
|
||||
/** Lumiera GTK GUI implementation root. */
|
||||
namespace gui {
|
||||
|
||||
typedef Glib::ustring uString;
|
||||
typedef const uString cuString;
|
||||
|
||||
|
||||
/** Dialog box classes. */
|
||||
namespace dialog {}
|
||||
|
||||
/** The Lumiera GTK-GUI uses a thin proxy layer data model
|
||||
* on top of the actual "high-level-model", which lives in the
|
||||
* Proc-Layer below. GUI operations interact with these proxy model
|
||||
* entities, which in turn forward the calls to the actual objects
|
||||
* in the Proc-Layer, through the Command system (which enables UNDO).
|
||||
*
|
||||
* @todo: as of 1/2011 this connection between the GUI proxy model and
|
||||
* the Proc-Layer model needs to be set up. Currently, the GUI model
|
||||
* entities are just created standalone and thus dysfunctional.
|
||||
*/
|
||||
namespace model {}
|
||||
|
||||
/** The namespace of all video output implementations. */
|
||||
namespace output {}
|
||||
|
||||
/** Docking panel classes. */
|
||||
namespace panel {}
|
||||
|
||||
/** Lumiera custom widgets. */
|
||||
namespace widget {}
|
||||
|
||||
/** The workspace window and it's helper classes. */
|
||||
namespace workspace {}
|
||||
|
||||
/** GUI helpers, utility functions and classes. */
|
||||
namespace util {}
|
||||
|
||||
}// namespace gui
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -59,8 +59,66 @@
|
|||
#include <vector>
|
||||
|
||||
|
||||
|
||||
|
||||
/* ======= Namespace Definitions ======= */
|
||||
|
||||
/** Lumiera GTK UI implementation root. */
|
||||
namespace gui {
|
||||
|
||||
|
||||
/** Backbone of the Lumiera GTK UI.
|
||||
* All interface elements and controllers of global relevance
|
||||
* are connected to a communication structure known as UI-Bus.
|
||||
* This structure allows to address interface elements by ID
|
||||
* and to process command invocations with asynchronous feedback
|
||||
* in a uniform way.
|
||||
*/
|
||||
namespace ctrl {}
|
||||
|
||||
/** UI interaction control.
|
||||
* Any overarching concerns of interaction patterns,
|
||||
* selecting the subject, forming and binding of commands,
|
||||
* management of focus and perspective, keybindings and gestures.
|
||||
*/
|
||||
namespace interact {}
|
||||
|
||||
/** The Lumiera GTK-GUI uses a thin proxy layer data model
|
||||
* on top of the actual "high-level-model", which lives in the
|
||||
* Proc-Layer below. GUI operations interact with these proxy model
|
||||
* entities, which in turn forward the calls to the actual objects
|
||||
* in the Proc-Layer, through the Command system (which enables UNDO).
|
||||
*
|
||||
* @todo: as of 1/2011 this connection between the GUI proxy model and
|
||||
* the Proc-Layer model needs to be set up. Currently, the GUI model
|
||||
* entities are just created standalone and thus dysfunctional.
|
||||
* @todo: as of 11/2015 this connection between UI and Proc-Layer is actually
|
||||
* in the works, and it is clear by now that we won't use proxy objects,
|
||||
* but rather a generic bus-like connection and symbolic IDs to designate
|
||||
* the model elements
|
||||
*/
|
||||
namespace model {}
|
||||
|
||||
/** The namespace of all video output implementations. */
|
||||
namespace output {}
|
||||
|
||||
/** Dialog box classes. */
|
||||
namespace dialog {}
|
||||
|
||||
/** Docking panel classes. */
|
||||
namespace panel {}
|
||||
|
||||
/** Lumiera custom widgets. */
|
||||
namespace widget {}
|
||||
|
||||
/** The workspace window and it's helper classes. */
|
||||
namespace workspace {}
|
||||
|
||||
/** GUI helpers, utility functions and classes. */
|
||||
namespace util {}
|
||||
|
||||
|
||||
|
||||
using std::shared_ptr;
|
||||
|
||||
|
||||
|
|
|
|||
72
src/gui/interact/interaction-state-manager.cpp
Normal file
72
src/gui/interact/interaction-state-manager.cpp
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
InteractionStateManager - facility to watch and guide one aspect of UI interaction
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2015, 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 interaction-state-manager.cpp
|
||||
** Common base implementation for UI state tracking components.
|
||||
**
|
||||
** @see TODO___abstract-tangible-test.cpp
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
//#include "lib/util.hpp"
|
||||
//#include "lib/symbol.hpp"
|
||||
//#include "include/logging.h"
|
||||
#include "gui/interact/interaction-state-manager.hpp"
|
||||
|
||||
//#include <boost/noncopyable.hpp>
|
||||
//#include <string>
|
||||
//#include <map>
|
||||
|
||||
//using std::map;
|
||||
//using std::string;
|
||||
|
||||
//using util::contains;
|
||||
//using util::isnil;
|
||||
|
||||
namespace gui {
|
||||
namespace interact {
|
||||
|
||||
namespace { // internal details
|
||||
|
||||
} // internal details
|
||||
|
||||
|
||||
|
||||
//Tangible::~Tangible() { } // Emit VTables here...
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
string
|
||||
fun (string& id)
|
||||
{
|
||||
return "x"+id;
|
||||
}
|
||||
|
||||
}} // namespace gui::interact
|
||||
76
src/gui/interact/interaction-state-manager.hpp
Normal file
76
src/gui/interact/interaction-state-manager.hpp
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
INTERACTION-STATE-MANAGER.hpp - facility to watch and guide one aspect of UI interaction
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2015, 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 interaction-state-manager.hpp
|
||||
** Abstraction: a component to watch, maintain and guide UI state.
|
||||
** Typically, each such component is focused on one specific aspect
|
||||
** of complex interface interactions. An example would be a component
|
||||
** to track gestures for trimming edits.
|
||||
**
|
||||
** @todo as of 11/2015 this is complete WIP-WIP-WIP
|
||||
**
|
||||
** @see ////TODO_test usage example
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GUI_INTERACT_INTERACTION_STATE_MANAGER_H_
|
||||
#define GUI_INTERACT_INTERACTION_STATE_MANAGER_H_
|
||||
|
||||
|
||||
#include "lib/error.hpp"
|
||||
#include "gui/ctrl/bus-term.hpp"
|
||||
#include "lib/idi/entry-id.hpp"
|
||||
//#include "lib/symbol.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
|
||||
#include <boost/noncopyable.hpp>
|
||||
#include <string>
|
||||
|
||||
|
||||
namespace gui {
|
||||
namespace interact {
|
||||
|
||||
// using lib::HashVal;
|
||||
// using util::isnil;
|
||||
using std::string;
|
||||
|
||||
|
||||
/**
|
||||
* Abstract foundation of UI state tracking components.
|
||||
* @todo write type comment...
|
||||
*/
|
||||
class InteractionStateManager
|
||||
: boost::noncopyable
|
||||
{
|
||||
protected:
|
||||
|
||||
public:
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
|
||||
}} // namespace gui::interact
|
||||
#endif /*GUI_INTERACT_INTERACTION_STATE_MANAGER_H_*/
|
||||
97
src/gui/interact/invocation-trail.hpp
Normal file
97
src/gui/interact/invocation-trail.hpp
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
INVOCATION-TRAIL.hpp - a tangible element of the user interface
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2015, 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 invocation-trail.hpp
|
||||
** Abstraction: a tangible element of the User Interface.
|
||||
** Any such element is connected to the UIBus...
|
||||
**
|
||||
** @todo as of 1/2015 this is complete WIP-WIP-WIP
|
||||
**
|
||||
** @see ////TODO_test usage example
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GUI_INTERACT_INVOCATION_TRAIL_H_
|
||||
#define GUI_INTERACT_INVOCATION_TRAIL_H_
|
||||
|
||||
|
||||
#include "lib/error.hpp"
|
||||
#include "gui/ctrl/bus-term.hpp"
|
||||
#include "lib/idi/entry-id.hpp"
|
||||
//#include "lib/symbol.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
|
||||
#include <boost/noncopyable.hpp>
|
||||
#include <string>
|
||||
|
||||
|
||||
namespace gui {
|
||||
namespace interact {
|
||||
|
||||
// using lib::HashVal;
|
||||
// using util::isnil;
|
||||
using std::string;
|
||||
|
||||
|
||||
/**
|
||||
* Interface common to all UI elements of relevance for the Lumiera application.
|
||||
* Any non-local and tangible interface interaction will at some point pass through
|
||||
* this foundation element, which forms the joint and attachment to the UI backbone,
|
||||
* which is the [UI-Bus][ui-bus.hpp]. Any tangible element acquires a distinct identity
|
||||
* and has to be formed starting from an already existing bus nexus.
|
||||
*
|
||||
* @todo write type comment...
|
||||
*/
|
||||
class InvocationTrail
|
||||
: boost::noncopyable
|
||||
{
|
||||
protected:
|
||||
|
||||
Tangible(EntryID identity, ctrl::BusTerm nexus)
|
||||
: uiBus_(nexus.attach(identity))
|
||||
{ }
|
||||
|
||||
public:
|
||||
virtual ~Tangible(); ///< this is an interface
|
||||
|
||||
void reset();
|
||||
|
||||
void slotExpand();
|
||||
void slotReveal();
|
||||
|
||||
void noteMsg();
|
||||
void noteErr();
|
||||
void noteFlash();
|
||||
void noteMark();
|
||||
|
||||
protected:
|
||||
virtual void doExpand() =0;
|
||||
virtual void doReveal() =0;
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
|
||||
}} // namespace gui::interact
|
||||
#endif /*GUI_INTERACT_INVOCATION_TRAIL_H_*/
|
||||
|
|
@ -2383,7 +2383,7 @@ On a second thought, the fact that the [[Bus-MObject|BusMO]] is rather void of a
|
|||
:sound mixing desks use list style arrangement, and this has proven to be quite viable, when combined with the ability to //send over// output from one mixer stripe to the input of another, allowing to build arbitrary complex filter matrices. On the other hand, organising a mix in //subgroups// can be considered best practice. This leads to arranging the pipes //as wood:// by default and on top level as list, optionally expanding into a subtree with automatic rooting, augmented by the ability to route any output to any input (cycles being detected and flagged as error).
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiCommandBinding" creator="Ichthyostega" modifier="Ichthyostega" created="201511272246" modified="201511280006" tags="design decision operational GuiPattern GuiIntegration draft discuss" changecount="3">
|
||||
<div title="GuiCommandBinding" creator="Ichthyostega" modifier="Ichthyostega" created="201511272246" modified="201511280316" tags="design decision operational GuiPattern GuiIntegration draft discuss" changecount="4">
|
||||
<pre>The question //how to connect the notion of an ''interface action'' to the notion of a ''command'' issued towards the [[session model|HighLevelModel]].//
|
||||
|
||||
!prerequisites for issuing a command
|
||||
|
|
@ -2414,7 +2414,7 @@ This approach attempts to keep knowledge and definition clustered according to t
|
|||
* we need to introduce a new abstraction, termed InteractionStateManager. This is deliberately not a single entity, rather some distinct facility in charge for one specific kind of interaction, like gestures being formed by mouse, touch or pen input.
|
||||
* from the command definition site, we need to send a combination of //rules// and parameter accessors, which together define an invocation path for one specific flavour of a command
|
||||
* the InteractionStateManager, driven by the state changes he observes, will evaluate those rules and determine the feasibility of specific command invocation paths
|
||||
* he sends the //enablement of a command invocation path// as a preconfigured binding to the actual //trigger sites,// which in turn allows them to install actual reaction patterns
|
||||
* he sends the //enablement of a command invocation trail// as a preconfigured binding to the actual //trigger sites,// which in turn allows them to install actual reaction patterns
|
||||
* if finally some button is hit, the local event binding can issue the command right away, as preconfigured in this //enablement binding,// by accessiny just any UI-Bus terminal available within that context
|
||||
|
||||
The consequence of this approach is a separation between immediate low-level UI element reactions, and anything of relevance for the behaviour of the UI. The widget code as such becomes more or less meaningless beyond local concerns of layout and presentation. If you want to find out about the behaviour of the UI, you need to know where to look, and you need to know how to read and understand those enablement rules. Another consequence is the build-up of dedicated yet rather abstract state tracking facilities, hooking like an octopus into various widgets and controllers, which might work counter to the intentions behind the design of common UI toolkit sets.</pre>
|
||||
|
|
@ -2915,6 +2915,12 @@ The interface programming allows us to react on events and trigger behaviour, an
|
|||
;the ability to arrange what is relevant
|
||||
:we do the same stuff again and again, and this makes us observe and understand matters. As we reveal the inner nature of what we're doing, we desire to arrange close at hand what belongs together, and to expunge the superficial and distracting.</pre>
|
||||
</div>
|
||||
<div title="InteractionStateManager" creator="Ichthyostega" modifier="Ichthyostega" created="201511280402" tags="def design GuiIntegration draft" changecount="1">
|
||||
<pre>A facility within the GUI to// track and manage one specific aspect of interaction state.//
|
||||
In a more elaborate UI, as can be expected for a task like editing, there are interactions beyond "point and shot". For a fluid and natural interaction it is vital to build and exploit an operation context, so to guide and specify the ongoing operations. Interaction events can not be treated in isolation, but rather in spatial and temporal clusters known as ''gestures''. A good example is the intention to trim or roll an edit. Here the user has some clips in mind, which happen to be located in immediate succession, and the kind of adjustment has to be determined from the way the user approaches the junction point. To deal with such an interaction pattern, we need to track a possible future interpretation of the user's actions as a hypothesis, to be confirmed and executed when all pieces fall into place.
|
||||
|
||||
An InteractionStateManager is a global component, but rarely addressed directly. Rather this tracking component attaches and taps into various information sources to observe some aspects of global state. Moreover, it is outfitted with a set of rules, leading to enablement of some //command invocation trail.// These enablements or disablements are forwarded to the actual trigger points, which are those UI elements to witness the completion of a gesture.</pre>
|
||||
</div>
|
||||
<div title="InterfaceNamespaces" modifier="Ichthyostega" created="200708080338" modified="201003160209" tags="impl decision draft">
|
||||
<pre>Because we rely on strong decoupling and separation into self contained components, there is not much need for a common quasi-global namespace. Operations needing the cooperation of another subsystem will be delegated or even dispatched, consequently implementation code needs only the service acces points from "direct cooperation partner" subsystems. Hierarchical scopes besides classes are needed only when multiple subsystems share a set of common abstractions. Interface and Implementation use separate namespaces.
|
||||
|
||||
|
|
|
|||
|
|
@ -203,7 +203,8 @@
|
|||
<node CREATED="1448658755071" ID="ID_1033500384" MODIFIED="1448658767933" TEXT="wie definieren">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1448658974985" ID="ID_974207484" MODIFIED="1448658989011" TEXT="Definition braucht Session-Modell"/>
|
||||
<node CREATED="1448659018412" ID="ID_1988707066" MODIFIED="1448659020791" TEXT="zentral">
|
||||
<node CREATED="1448659018412" ID="ID_1988707066" MODIFIED="1448683550111" TEXT="zentral">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1448659021803" ID="ID_1800666256" MODIFIED="1448659025502" TEXT="nah an der Session"/>
|
||||
<node CREATED="1448659026042" ID="ID_831434285" MODIFIED="1448659032566" TEXT="ein Schnittstellen-Paket"/>
|
||||
<node CREATED="1448669306480" ID="ID_1009169288" MODIFIED="1448669482182">
|
||||
|
|
@ -221,7 +222,8 @@
|
|||
<arrowlink COLOR="#5f0ac8" DESTINATION="ID_329609486" ENDARROW="Default" ENDINCLINATION="219;-148;" ID="Arrow_ID_1101633958" STARTARROW="None" STARTINCLINATION="-205;4;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1448659051823" ID="ID_1995941804" MODIFIED="1448659054738" TEXT="dezentral">
|
||||
<node CREATED="1448659051823" ID="ID_1995941804" MODIFIED="1448683546775" TEXT="dezentral">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1448659059734" ID="ID_1682547207" MODIFIED="1448659065617" TEXT="im GUI-Kontext"/>
|
||||
<node CREATED="1448659079044" ID="ID_508900352" MODIFIED="1448659121799" TEXT="muß Session referenzieren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -245,6 +247,21 @@
|
|||
<node CREATED="1448659283641" ID="ID_209203268" MODIFIED="1448659290276" TEXT="letztlich ein String"/>
|
||||
<node CREATED="1448659347728" ID="ID_508578010" MODIFIED="1448659355835" TEXT="Konstante bei der Command-Funktion"/>
|
||||
<node CREATED="1448659334058" ID="ID_683316035" MODIFIED="1448659340357" TEXT="Makro + Namenskonvention"/>
|
||||
<node CREATED="1448683561882" ID="ID_839961131" MODIFIED="1448683880173">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
besser: <b>InvocationTrail</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<arrowlink COLOR="#81759f" DESTINATION="ID_1679641405" ENDARROW="Default" ENDINCLINATION="604;-108;" ID="Arrow_ID_1210299906" STARTARROW="None" STARTINCLINATION="702;0;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1448658819990" ID="ID_405705528" MODIFIED="1448658836635" TEXT="API explizit">
|
||||
<icon BUILTIN="help"/>
|
||||
|
|
@ -259,6 +276,32 @@
|
|||
<node CREATED="1448658885973" ID="ID_1734626095" MODIFIED="1448658940946" TEXT="ctxt-Menü aufbauen"/>
|
||||
<node CREATED="1448659158177" ID="ID_1496901578" MODIFIED="1448659162165" TEXT="Namen müssen matchen"/>
|
||||
<node CREATED="1448659163089" ID="ID_431765107" MODIFIED="1448659252553" TEXT="man muß Korrektheit prüfen"/>
|
||||
<node CREATED="1448683674443" ID="ID_1931753413" MODIFIED="1448683684206" TEXT="Einheitlichkeit gefährdet"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1448683454504" HGAP="26" ID="ID_510876193" MODIFIED="1448683468155" TEXT="API generisch">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1448683636672" ID="ID_1485949406" MODIFIED="1448683647815" TEXT="verhindert Wildwuchs"/>
|
||||
<node CREATED="1448683475853" ID="ID_24599710" MODIFIED="1448683492586">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Command und Verhaltensmuster
|
||||
</p>
|
||||
<p>
|
||||
bleiben zusammen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1448683496794" ID="ID_821199097" MODIFIED="1448683517556" TEXT="unterstützt weiterreichende Konzepte">
|
||||
<node CREATED="1448683518496" ID="ID_1987782234" MODIFIED="1448683521843" TEXT="Perspektiven"/>
|
||||
<node CREATED="1448683522359" ID="ID_723377610" MODIFIED="1448683525346" TEXT="Fokus-Konzept"/>
|
||||
<node CREATED="1448683525822" ID="ID_1395068730" MODIFIED="1448683529258" TEXT="Gesten"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -273,8 +316,12 @@
|
|||
<node CREATED="1448669517796" ID="ID_1165902172" MODIFIED="1448669526326" TEXT="für mich eigentlich sofort klar"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#990000" CREATED="1448669527274" ID="ID_129855368" MODIFIED="1448669537302" TEXT="aber Vorsicht">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1448669556607" ID="ID_493021007" MODIFIED="1448669561914" TEXT="wird nie fertig"/>
|
||||
<node CREATED="1448669562478" ID="ID_869338862" MODIFIED="1448669600653" TEXT="niemand wird es verstehen"/>
|
||||
<node CREATED="1448669556607" ID="ID_493021007" MODIFIED="1448683719946" TEXT="das wird nie fertig...">
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
<node CREATED="1448669562478" ID="ID_869338862" MODIFIED="1448683732978" TEXT="niemand wird es verstehen">
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
</node>
|
||||
<node CREATED="1448669567765" ID="ID_1254931544" MODIFIED="1448669587150" TEXT="bürstet die UI-Toolkits »gegen den Strich«"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -286,7 +333,8 @@
|
|||
<node CREATED="1448669675495" ID="ID_1257367197" MODIFIED="1448669679146" TEXT="Perspektiven"/>
|
||||
<node CREATED="1448669699148" ID="ID_1264820517" MODIFIED="1448669700591" TEXT="Gesten"/>
|
||||
</node>
|
||||
<node CREATED="1448669742334" ID="ID_1679641405" MODIFIED="1448669755652" TEXT="InteractionStateManager">
|
||||
<node CREATED="1448669742334" ID="ID_1679641405" MODIFIED="1448683880174" TEXT="InteractionStateManager">
|
||||
<linktarget COLOR="#81759f" DESTINATION="ID_1679641405" ENDARROW="Default" ENDINCLINATION="604;-108;" ID="Arrow_ID_1210299906" SOURCE="ID_839961131" STARTARROW="None" STARTINCLINATION="702;0;"/>
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="13"/>
|
||||
<node CREATED="1448669816476" ID="ID_1895677880" MODIFIED="1448669822183" TEXT="lauscht als Observer mit"/>
|
||||
<node CREATED="1448669824243" ID="ID_1225519733" MODIFIED="1448669832398" TEXT="hängt sich in diverse Punkte ein"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue