Design: Backbone of the GUI

This is the first step towards a generic backbone to connect
any GUI elements to the session within Proc-Layer.

It is based on a spefic understanding of Model-View-Controller,
which turns the Model-Controller interactions into messages.
This commit is contained in:
Fischlurch 2015-01-06 14:37:26 +01:00
parent 371c13f790
commit 8b6177a1c5
22 changed files with 1098 additions and 39 deletions

BIN
doc/devel/uml/fig158213.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View file

@ -0,0 +1,75 @@
/*
BusController - service for
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 bus-controller.cpp
** Service for bus-controller.
** This header defines the basics of...
**
** @note as of X/2015 this is complete bs
** @todo WIP ///////////////////////TICKET #
**
** @see ////TODO_test usage example
** @see bus-controller.cpp implementation
**
*/
#include "lib/util.hpp"
//#include "lib/symbol.hpp"
//#include "include/logging.h"
#include "gui/ctrl/bus-controller.hpp"
//#include <boost/noncopyable.hpp>
#include <string>
#include <map>
using std::map;
using std::string;
using util::contains;
using util::isnil;
namespace { // internal details
} // internal details
//NA::~NA() { }
/**
*
* @param id
* @return
*/
string
fun (string& id)
{
return "x"+id;
}

View file

@ -0,0 +1,110 @@
/*
bus-controller.hpp - service for
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 bus-controller.hpp
** Service for bus-controller.
** This header defines the basics of...
**
** @note as of X/2015 this is complete bs
** @todo WIP ///////////////////////TICKET #
**
** @see ////TODO_test usage example
** @see bus-controller.cpp implementation
**
*/
#ifndef GUI_CTRL_BUS_CONTROLLER_H
#define GUI_CTRL_BUS_CONTROLLER_H
#include "lib/error.hpp"
//#include "lib/hash-value.h"
//#include "lib/symbol.hpp"
#include "lib/util.hpp"
#include <boost/noncopyable.hpp>
#include <string>
namespace gui {
namespace ctrl{
using util::isnil;
using std::string;
/**
* Manage operation of the UI-Bus
*
* @todo WIP 1/2015
*/
class BusController
: boost::noncopyable
{
string nothing_;
public:
explicit
BusController (string const& b)
: nothing_(b)
{ }
/* == Adapter interface for == */
void
setSolution (string const& solution ="")
{
UNIMPLEMENTED ("tbw");
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #888
if (isDeaf())
this->transmogrify (solution);
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #888
}
protected:
void maybe () const;
};
/** @internal in case
*/
inline void
BusController::maybe () const
{
UNIMPLEMENTED ("tbw");
}
}} // namespace gui::ctrl
#endif /*GUI_CTRL_BUS_CONTROLLER_H*/

View file

@ -21,7 +21,7 @@
* *****************************************************/
#include "gui/controller/playback-controller.hpp"
#include "gui/ctrl/playback-controller.hpp"
#include "gui/display-service.hpp"
#include "lib/error.hpp"
#include "include/logging.h"

View file

@ -24,7 +24,7 @@
#include "gui/gtk-lumiera.hpp"
#include "gui/window-manager.hpp"
#include "gui/workspace/workspace-window.hpp"
#include "gui/controller/controller.hpp"
#include "gui/ui-bus.hpp"
#include "gui/model/project.hpp"
#include "lib/format-string.hpp"
#include "lib/depend.hpp"

View file

@ -0,0 +1,73 @@
/*
CONTROLLER.hpp - generic interface of a sub-controller
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 controller.hpp
** Common Abstraction of all sub-controller, coordinated by the UI-Bus.
**
** @todo as of 1/2015 this is complete WIP-WIP-WIP
**
** @see model::Tangible
** @see gui::UIBus
** @see ////TODO_test usage example
**
*/
#ifndef GUI_MODEL_CONTROLLER_H_
#define GUI_MODEL_CONTROLLER_H_
#include "lib/error.hpp"
//#include "lib/symbol.hpp"
//#include "lib/util.hpp"
//#include <string>
namespace gui {
namespace model {
// using lib::HashVal;
// using util::isnil;
// using std::string;
/**
* @todo write type comment...
*/
class Controller
: public Tangible
{
public:
Controller();
~Controller();
protected:
string maybe () const;
};
}} // namespace gui::model
#endif /*GUI_MODEL_CONTROLLER_H_*/

77
src/gui/model/element.cpp Normal file
View file

@ -0,0 +1,77 @@
/*
gui::model::Element - a generic element in the UI-Model
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 element.cpp
** Service for element.
** This header defines the basics of...
**
** @note as of X/2015 this is complete bs
** @todo WIP ///////////////////////TICKET #
**
** @see ////TODO_test usage example
** @see element.cpp implementation
**
*/
#include "lib/util.hpp"
//#include "lib/symbol.hpp"
//#include "include/logging.h"
#include "gui/model/element.hpp"
//#include <boost/noncopyable.hpp>
#include <string>
#include <map>
using std::map;
using std::string;
using util::contains;
using util::isnil;
namespace gui {
namespace model {
namespace { // internal details
} // internal details
//NA::~NA() { }
/**
*
* @param id
* @return
*/
string
fun (string& id)
{
return "x"+id;
}
}} // namespace gui::model

127
src/gui/model/element.hpp Normal file
View file

@ -0,0 +1,127 @@
/*
ELEMENT.hpp - a generic element in the UI-Model
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 element.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 #959
**
** @see ////TODO_test usage example
** @see element.cpp implementation
**
*/
#ifndef GUI_MODEL_ELEMENT_H
#define GUI_MODEL_ELEMENT_H
#include "lib/error.hpp"
#include "lib/hash-value.h"
//#include "lib/symbol.hpp"
#include "lib/util.hpp"
#include <boost/noncopyable.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 Element
{
string nothing_;
public:
explicit
Element (string const& b)
: nothing_(b)
{ }
// using default copy/assignment
/* == Adapter interface for == */
void
setSolution (string const& solution ="")
{
UNIMPLEMENTED ("tbw");
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #888
if (isDeaf())
this->transmogrify (solution);
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #888
}
protected:
void maybe () const;
friend HashVal
hash_value (Element const& entry)
{
return hash_value (entry.nothing_);
}
};
/** @internal in case
*/
template<class X>
inline void
Element<X>::maybe () const
{
UNIMPLEMENTED ("tbw");
}
}} // namespace gui::model
#endif /*GUI_MODEL_ELEMENT_H*/

View file

@ -0,0 +1,74 @@
/*
TANGIBLE.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 tangible.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_MODEL_TANGIBLE_H_
#define GUI_MODEL_TANGIBLE_H_
#include "lib/error.hpp"
//#include "lib/symbol.hpp"
//#include "lib/util.hpp"
#include <boost/noncopyable.hpp>
#include <string>
namespace gui {
namespace model {
// using lib::HashVal;
// using util::isnil;
using std::string;
/**
* @todo write type comment...
*/
class Tangible
: boost::noncopyable
{
string nothing_;
public:
Tangible();
~Tangible();
protected:
string maybe () const;
};
}} // namespace gui::model
#endif /*GUI_MODEL_TANGIBLE_H_*/

73
src/gui/model/widget.hpp Normal file
View file

@ -0,0 +1,73 @@
/*
WIDGET.hpp - generic interface of a UI widget element
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 widget.hpp
** Common Abstraction of all UIBus connected widget elements.
**
** @todo as of 1/2015 this is complete WIP-WIP-WIP
**
** @see gui::model::Tangible
** @see ////TODO_test usage example
**
*/
#ifndef GUI_MODEL_WIDGET_H_
#define GUI_MODEL_WIDGET_H_
#include "lib/error.hpp"
#include "gui/model/tangible.hpp"
//#include "lib/symbol.hpp"
//#include "lib/util.hpp"
//#include <string>
namespace gui {
namespace model {
// using lib::HashVal;
// using util::isnil;
// using std::string;
/**
* @todo write type comment...
*/
class Widget
: public Tangible
{
public:
Widget();
~Widget();
protected:
string maybe () const;
};
}} // namespace gui::model
#endif /*GUI_MODEL_WIDGET_H_*/

View file

@ -27,7 +27,7 @@
#include "gui/workspace/workspace-window.hpp"
#include "gui/model/project.hpp"
#include "gui/controller/controller.hpp"
#include "gui/ui-bus.hpp"
#include "lib/util.hpp"

View file

@ -24,8 +24,8 @@
#include "gui/panels/viewer-panel.hpp"
#include "gui/workspace/workspace-window.hpp"
#include "gui/controller/controller.hpp"
#include "gui/controller/playback-controller.hpp"
#include "gui/ui-bus.hpp" ///////////////////////////////////TODO why are we forced to include this after workspace-window.hpp ?? Ambiguity between std::ref and boost::reference_wrapper
#include "gui/ctrl/playback-controller.hpp"
#include "gui/display-service.hpp"

View file

@ -3,6 +3,7 @@
Copyright (C) Lumiera.org
2008, Joel Holdsworth <joel@airwebreathe.org.uk>
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
@ -21,7 +22,7 @@
* *****************************************************/
#include "gui/controller/controller.hpp"
#include "gui/ui-bus.hpp"
namespace gui {
namespace controller {

View file

@ -3,6 +3,7 @@
Copyright (C) Lumiera.org
2009, Joel Holdsworth <joel@airwebreathe.org.uk>
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
@ -31,7 +32,8 @@
#define CONTROLLER_HPP
#include "gui/controller/playback-controller.hpp"
#include "gui/gtk-lumiera.hpp" //////////////////////////////////////////////////////TODO remove any GTK dependency if possible
#include "gui/ctrl/playback-controller.hpp"
namespace gui {

View file

@ -50,11 +50,12 @@ namespace test{
/**
* \par Implementation notes
* GCC / G++ subscribes to a cross-vendor ABI for C++, sometimes called the IA64 ABI
* because it happens to be the native ABI for that platform. It is summarised
* because it happens to be the native ABI for that platform. It is summarised at
* \link http://www.codesourcery.com/cxx-abi/ mentor-embedded \endlink
* along with the current specification. For users of GCC greater than or equal to 3.x,
* entry points are exposed through the standard library in \c <cxxabi.h>
* relies on a vendor neutral ABI for C++ compiled programs
*
* This implementation relies on a vendor neutral ABI for C++ compiled programs
*
* char* abi::__cxa_demangle(const char* mangled_name,
* char* output_buffer, size_t* length,
@ -73,7 +74,7 @@ namespace test{
* - \c status
* error flag: `*status` is set to one of the following values:
*
* 0: The demangling operation succeeded.
* 0: The demangling operation succeeded.
* -1: A memory allocation failure occurred.
* -2: mangled_name is not a valid name under the C++ ABI mangling rules.
* -3: One of the arguments is invalid.

View file

@ -248,7 +248,7 @@ namespace test {
//---key--+-value-+-hash-function---
//---key--+-value-+-hash-function---
typedef std::unordered_map<DummyID, string, DummyID::UseEmbeddedHash> Hashtable;
/** @test build a hashtable, using EntryID as key,

View file

@ -1,30 +1,311 @@
format 38
format 74
"GUI" // GUI
revision 1
revision 2
modified_by 5 "hiv"
// class settings
//class diagram settings
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
//use case diagram settings
package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
package_name_in_tab default show_context default auto_label_position default draw_all_relations default class_drawing_mode default shadow default show_stereotype_properties default
//sequence diagram settings
show_full_operations_definition default write_horizontally default drawing_language default draw_all_relations default shadow default
show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default show_stereotype_properties default show_class_context_mode default show_msg_context_mode default
//collaboration diagram settings
show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default show_msg_context default draw_all_relations default shadow default show_stereotype_properties default
//object diagram settings
write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
//component diagram settings
package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
draw_component_as_icon default show_component_req_prov default show_component_rea default
draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
//deployment diagram settings
package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
draw_component_as_icon default show_component_req_prov default show_component_rea default
draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
//state diagram settings
package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
show_activities default region_horizontally default drawing_language default
show_activities default region_horizontally default drawing_language default show_stereotype_properties default
//activity diagram settings
package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
show_infonote default drawing_language default
show_infonote default drawing_language default show_stereotype_properties default
comment "GUI is here just a container to hold any entities considered to be User Interface related, which is not in focus for this Design draft"
classview 143365 "Backbone"
//class diagram settings
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
//collaboration diagram settings
show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default show_msg_context default draw_all_relations default shadow default show_stereotype_properties default
//object diagram settings
write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
//sequence diagram settings
show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default show_stereotype_properties default show_class_context_mode default show_msg_context_mode default
//state diagram settings
package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
show_activities default region_horizontally default drawing_language default show_stereotype_properties default
//class settings
//activity diagram settings
package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
show_infonote default drawing_language default show_stereotype_properties default
classdiagram 158213 "UIBus"
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
size A4
end
class 192389 "Tangible"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
classrelation 231685 // <unidirectional association>
relation 220549 --->
a role_name "" protected
cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value};
"
classrelation_ref 231685 // <unidirectional association>
b parent class_ref 192773 // BusTerm
end
end
class 192517 "Widget"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
classrelation 231429 // <generalisation>
relation 220293 ---|>
a public
cpp default "${type}"
classrelation_ref 231429 // <generalisation>
b parent class_ref 192389 // Tangible
end
end
class 192645 "Controller"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
classrelation 231557 // <generalisation>
relation 220421 ---|>
a public
cpp default "${type}"
classrelation_ref 231557 // <generalisation>
b parent class_ref 192389 // Tangible
end
end
class 192773 "BusTerm"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
attribute 141061 "ID"
public explicit_type ""
cpp_decl " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value};
"
java_decl ""
php_decl ""
python_decl ""
idl_decl ""
end
classrelation 232325 // <unidirectional association>
relation 221189 --->
a role_name "" protected
cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value};
"
classrelation_ref 232325 // <unidirectional association>
b parent class_ref 193541 // BusController
end
end
class 192901 "GUINotificationFacade"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
classrelation 231941 // <dependency>
relation 220805 -_->
a default
cpp default "#include in source"
classrelation_ref 231941 // <dependency>
b parent class_ref 193669 // DiffMessage
end
end
class 193029 "GUIModel"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
classrelation 231813 // <directional composition>
relation 220677 *-->
a role_name "" protected
cpp default " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value};
"
classrelation_ref 231813 // <directional composition>
b parent class_ref 193157 // Element
end
end
class 193157 "Element"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
attribute 140933 "ID"
public explicit_type ""
cpp_decl " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value};
"
java_decl ""
php_decl ""
python_decl ""
idl_decl ""
end
end
class 193285 "SessionFacade"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
end
class 193413 "HighLevelModel"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
end
class 193541 "BusController"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
classrelation 232069 // <dependency>
relation 220933 -_->
a default
cpp default "#include in source"
classrelation_ref 232069 // <dependency>
b parent class_ref 193669 // DiffMessage
end
classrelation 232453 // <dependency>
relation 221317 -_->
a default
cpp default "#include in source"
classrelation_ref 232453 // <dependency>
b parent class_ref 193029 // GUIModel
end
classrelation 232581 // <unidirectional association>
relation 221445 --->
a role_name "" protected
cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value};
"
classrelation_ref 232581 // <unidirectional association>
b parent class_ref 177029 // Dispatcher
end
end
class 193669 "DiffMessage"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
classrelation 232197 // <dependency>
relation 221061 -_->
a default
cpp default "#include in source"
classrelation_ref 232197 // <dependency>
b parent class_ref 193541 // BusController
end
end
end
end

140
uml/lumiera/158213.diagram Normal file
View file

@ -0,0 +1,140 @@
format 74
fragment 128005 "Workspace"
color lightyellow xyzwh 61 211 2000 272 196
end
classcanvas 128133 class_ref 192389 // Tangible
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 138 272 2005
end
classcanvas 128261 class_ref 192517 // Widget
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 129 346 2005
end
classcanvas 128389 class_ref 192645 // Controller
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 188 346 2005
end
classcanvas 129541 class_ref 192773 // BusTerm
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 215 238 2005
end
fragment 129925 "UI Bus"
color lightmediumblue xyzwh 60 119 2000 563 60
end
classcanvas 130053 class_ref 192901 // GUINotificationFacade
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 501 337 2000
end
classcanvas 130181 class_ref 193029 // GUIModel
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 214 25 2000
end
classcanvas 130309 class_ref 193157 // Element
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 309 56 2000
end
classcanvas 130693 class_ref 193285 // SessionFacade
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 378 440 2000
end
classcanvas 130821 class_ref 193413 // HighLevelModel
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 407 493 2000
end
classcanvas 130949 class_ref 128645 // Placement
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 439 531 2000
end
classcanvas 131077 class_ref 128517 // MObject
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 560 537 2006
end
fragment 131333 "Session"
xyzwh 332 422 2000 291 191
end
classcanvas 131461 class_ref 177029 // Dispatcher
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 476 408 2005
end
classcanvas 131589 class_ref 193541 // BusController
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 214 131 2005
end
classcanvas 131717 class_ref 193669 // DiffMessage
draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
xyz 499 131 2005
end
relationcanvas 128517 relation_ref 220293 // <generalisation>
geometry VHV
from ref 128261 z 2006 to point 149 324
line 129285 z 2006 to point 163 324
line 129413 z 2006 to ref 128133
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 128773 relation_ref 220421 // <generalisation>
geometry VHV
from ref 128389 z 2006 to point 215 324
line 129029 z 2006 to point 163 324
line 129157 z 2006 to ref 128133
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 129669 relation_ref 220549 // <unidirectional association>
geometry HV
from ref 128133 z 2006 to point 237 287
line 129797 z 2006 to ref 129541
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 130437 relation_ref 220677 // <directional composition>
from ref 130181 z 2006 to point 289 73
line 130565 z 2006 to ref 130309
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 131205 relation_ref 142981 // <unidirectional association>
from ref 130949 z 2007 to ref 131077
role_a_pos 514 552 3000 no_role_b
multiplicity_a_pos 543 570 3000 multiplicity_b_pos 509 570 3000
end
relationcanvas 131845 relation_ref 220805 // <dependency>
from ref 130053 z 2006 to ref 131717
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 131973 relation_ref 220933 // <dependency>
decenter_begin 257
decenter_end 257
from ref 131589 z 2006 to ref 131717
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 132229 relation_ref 221061 // <dependency>
from ref 131717 z 2006 to ref 131589
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 132357 relation_ref 221189 // <unidirectional association>
decenter_begin 690
from ref 129541 z 2006 to ref 131589
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 132485 relation_ref 221317 // <dependency>
decenter_begin 354
decenter_end 474
from ref 131589 z 2006 to ref 130181
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 132613 relation_ref 221445 // <unidirectional association>
from ref 131589 z 2006 to point 318 164
line 132741 z 2006 to point 472 164
line 132869 z 2006 to ref 131461
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
preferred_whz 650 663 1
end

View file

@ -2,26 +2,31 @@ window_sizes 1619 1028 270 1339 883 71
diagrams
classdiagram_ref 136453 // Session backbone
631 352 100 4 0 0
active objectdiagram_ref 138885 // ModelAssetRelations
objectdiagram_ref 138885 // ModelAssetRelations
730 488 100 4 0 0
active classdiagram_ref 158213 // UIBus
650 663 100 4 0 0
end
show_stereotypes
selected
package_ref 129 // lumiera
package_ref 129 // lumiera
open
package_ref 128005 // design
classview_ref 128389 // Controller Workings
package_ref 128005 // design
package_ref 133637 // Play
package_ref 129029 // Control
package_ref 132229 // Session
package_ref 133637 // Play
package_ref 132229 // Session
class_ref 153733 // QueryFocusStack
classview_ref 128261 // Builder Workings
usecaseview_ref 128261 // config examples
package_ref 128389 // RenderEngine
package_ref 128389 // RenderEngine
package_ref 129157 // BackendLayer
package_ref 129157 // BackendLayer
class_ref 192773 // BusTerm
class_ref 193157 // Element
end
end

View file

@ -1,6 +1,6 @@
format 74
"lumiera"
revision 74
revision 75
modified_by 5 "hiv"
cpp_root_dir "../../src/"
@ -57,7 +57,7 @@ format 74
2008, Hermann Vosseler <Ichthyostega@web.de>
"
key "html dir" value "/mnt/Lager/heim/devel/lumi/doc/devel/uml/"
key "html dir" value "/Werk/devel/lumi/doc/devel/uml/"
key "" value ""
package_ref 128005 // design

View file

@ -2262,7 +2262,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="GuiCommunication" modifier="Ichthyostega" created="200812050543" modified="200812050555" tags="GuiIntegration draft">
<div title="GuiConnection" modifier="Ichthyostega" created="200812050543" modified="201501052157" tags="GuiIntegration overview" changecount="1">
<pre>All communication between Proc-Layer and GUI has to be routed through the respective LayerSeparationInterfaces. Following a fundamental design decision within Lumiera, these interface are //intended to be language agnostic// &amp;mdash; forcing them to stick to the least common denominator. Which creates the additional problem of how to create a smooth integration without forcing the architecture into functional decomposition style. To solve this problem, we rely on the well known solution of using a __business facade__ and delegation proxies.
Thus, the Proc-Layer exposes (one or several) facade interfaces for the GUI to use it's functionality, and similarily the GUI provides a [[notification facade|GuiNotificationFacade]] for pushing back status information created as result of the edit operations, the build process and the render tasks.
@ -2282,13 +2282,15 @@ Thus, the Proc-Layer exposes (one or several) facade interfaces for the GUI to u
Probably the most important aspect regarding the GUI integration is how to get [[access to and operate on the Session|SessionInterface]]. More specifically, this includes [[referring to individual objects|MObjectRef]]. On top of these generic access mechanisms, we create a [[proxy GUI model|GuiModel]] for binding. The interface of this GUI model is tailored for display and translation into UI entities.</pre>
</div>
<div title="GuiModel" creator="Ichthyostega" modifier="Ichthyostega" created="201410170142" modified="201501051037" tags="GuiIntegration design draft" changecount="8">
<div title="GuiModel" creator="Ichthyostega" modifier="Ichthyostega" created="201410170142" modified="201501061108" tags="GuiIntegration design draft" changecount="9">
<pre>Building a layered architecture is a challenge, since the lower layer //really// needs to be self-contained, while prepared for usage by the higher layer.
A major fraction of all desktop applications is written in a way where operational logic is built around the invocation from UI events -- what should be a shell turns into a backbone. One possible way to escape from this common anti pattern is to introduce a mediating entity, to translate between two partially incompatible demands and concerns: Sure, the &quot;tangible stuff&quot; is what matters, but you can not build any significant piece of technology if all you want is to &quot;serve&quot; the user.
Within the Lumiera GTK GUI, we use a proxying model as a mediating entity. It is based upon the ''generic aspect'' of the SessionInterface, but packaged and conditioned in a way to allow a direct mapping of GUI entities on top. The widgets in the GUI can be conceived as decorating this model. Callbacks can be wired back, allowing to transform UI events into a stream of commands for the Proc-Layer sitting below.
The GUI model is largely comprised of immutable ID elements, which can be treated as values. A mutated model configuration in Proc-Layer is pushed upwards as a new structure and translated into a ''diff'' against the previous structure -- ready to be consumed by the GUI widgets; this diff can be broken down into parts and consumed recursively -- leaving it to the leaf widgets to adapt themselves to reflect the new situation. &amp;rarr; [[GUI update mechanics|GuiModelUpdate]]
The GUI model is largely comprised of immutable ID elements, which can be treated as values. A mutated model configuration in Proc-Layer is pushed upwards as a new structure and translated into a ''diff'' against the previous structure -- ready to be consumed by the GUI widgets; this diff can be broken down into parts and consumed recursively -- leaving it to the leaf widgets to adapt themselves to reflect the new situation.
&amp;rarr; [[Building blocks of the GUI model|GuiModelElements]]
&amp;rarr; [[GUI update mechanics|GuiModelUpdate]]
!synchronisation guarantees
We acknowledge that the gui model is typically used from within the GUI event dispatch thread. This is //not// the thread where any session state is mutated. Thus it is the responsibility of this proxying model within the GUI to ensure that the retrieved structure is a coherent snapshot of the session state. Especially the {{{gui::model::SessionFacade}}} ensures that there was a read barrier between the state retrieval and any preceding mutation command. Actually, this is implemented down in Proc-Layer, with the help of the ProcDispatcher.
@ -2296,7 +2298,19 @@ We acknowledge that the gui model is typically used from within the GUI event di
The forwarding of model changes to the GUI widgets is another concern, since notifications from session mutations arrive asynchronous after each [[Builder]] run. In this case, we send a notification to the widgets registered as listeners, but wait for //them// to call back and fetch the [[diffed state|TreeDiffModel]]. This callback will be scheduled by the widgets to perform in the GUI event thread.
</pre>
</div>
<div title="GuiModelUpdate" creator="Ichthyostega" modifier="Ichthyostega" created="201410250121" modified="201501051031" tags="GuiIntegration GuiPattern design decision discuss draft" changecount="22">
<div title="GuiModelElements" creator="Ichthyostega" modifier="Ichthyostega" created="201501061138" modified="201501061231" tags="GuiIntegration design draft img" changecount="17">
<pre>''Building Blocks for the User Interface Model and Control structure''
The fundamental pattern for building graphical user interfaces is to segregates into the roles of __M__odel, __V__iew and __C__controler ([[MVC|http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller]]). This approach is so succesful, that it turned into a de-facto standard in commen UI toolkit sets. But larger, more elaborate and specialised applications introduce several cross cutting concerns, which create a tension within this MVC solution pattern.
[&lt;img[UI-Bus and GUI model elements|uml/fig158213.png]]
The Lumiera GTK UI is built around a distinct backbone, separate from the structures required and provided by GTK.
While GTK -- especially in the object oirented incantation given by Gtkmm -- hooks up a hierarchy of widgets into a UI workspace, each of these widgets can and should incorporate the necessary control and data elements. But actually, these elements are local access points to the backbone structure, which we define as the UI-Bus. So, in fact, the local widgets and controllers wired into the interface are turned into ''Decorators'' of a backbone structure. This backbone is a ''messaging system'' (hence the name &quot;Bus&quot;). The terminal points of this messaging system allow for direct wiring of GTK signals. Operations triggered by UI interactions are transformed into [[Command]] invocations into the Proc-Layer, while the model data elements remain abstract and generic. The entities in our UI model are not directly connected to the actual model, but they are in correspondence to such actual model elements within the [[Session]]. Moreover, there is an uniform identification scheme.
</pre>
</div>
<div title="GuiModelUpdate" creator="Ichthyostega" modifier="Ichthyostega" created="201410250121" modified="201501061118" tags="GuiIntegration GuiPattern design decision discuss draft" changecount="26">
<pre>Considerations regarding the [[structure of custom timeline widgets|GuiTimelineWidgetStructure]] highlight again the necessity of a clean separation of concerns and an &quot;open closed design&quot;. For the purpose of updating the timeline(s) to reflect the HighLevelModel in Proc-Layer, several requirements can be identified
* we need incremental updates: we must not start redrawing each and everything on each tiny change
* we need recursive programming, since this is the only sane way to deal with tree like nested structures.
@ -2305,7 +2319,7 @@ The forwarding of model changes to the GUI widgets is another concern, since not
* we need a naming and identification scheme. Proc must be able to &quot;cast&quot; callback state and information //somehow towards the GUI// -- without having to handle the specifics.
!the UI bus
Hereby we introduce a new in-layer abstraction.
Hereby we introduce a new in-layer abstraction: The UI-Bus.
* some events and wiring is strictly UI related. This can be handled the conventional way: Connect a ~SigC handler to the slot, in the ctor of your widget.
* but anything related to model interaction has to be targetted at the next applicable service point of the UI bus.
* the UI bus is implemented and covered by unit tests -- and //must not expose any GTK dependecies.// (maybe with the exception of {{{GString}}})
@ -2478,7 +2492,7 @@ Besides routing to a global pipe, wiring plugs can also connect to the source po
Finally, this example shows an ''automation'' data set controlling some parameter of an effect contained in one of the global pipes. From the effect's POV, the automation is simply a ParamProvider, i.e a function yielding a scalar value over time. The automation data set may be implemented as a bézier curve, or by a mathematical function (e.g. sine or fractal pseudo random) or by some captured and interpolated data values. Interestingly, in this example the automation data set has been placed relatively to the meta clip (albeit on another track), thus it will follow and adjust when the latter is moved.
</pre>
</div>
<div title="ImplementationDetails" modifier="Ichthyostega" created="200708080322" modified="201202181658" tags="overview">
<div title="ImplementationDetails" modifier="Ichthyostega" created="200708080322" modified="201501052156" tags="overview" changecount="1">
<pre>This wiki page is the entry point to detail notes covering some technical decisions, details and problems encountered in the course of the implementation of the Lumiera Renderengine, the Builder and the related parts.
* [[Packages, Interfaces and Namespaces|InterfaceNamespaces]]
@ -2500,7 +2514,7 @@ Finally, this example shows an ''automation'' data set controlling some paramete
* considerations regarding [[identity and equality|ModelObjectIdentity]] of objects in the HighLevelModel
* the [[identification of frames and nodes|NodeFrameNumbering]]
* the relation of [[Project, Timelines and Sequences|TimelineSequences]]
* how to [[start the GUI|GuiStart]] and how to [[communicate|GuiCommunication]]
* how to [[start the GUI|GuiStart]] and how to [[connect|GuiConnection]] to the running UI.
* build the first LayerSeparationInterfaces
* create an uniform pattern for [[passing and accessing object collections|ForwardIterator]]
* decide on SessionInterface and create [[Session datastructure layout|SessionDataMem]]
@ -7940,6 +7954,12 @@ For now, as of 6/10, we use specialised QueryResolver instances explicitly and d
&amp;rarr; QueryRegistration
</pre>
</div>
<div title="UI-Bus" creator="Ichthyostega" modifier="Ichthyostega" created="201501061115" modified="201501061128" tags="GuiPattern Concepts def design draft" changecount="6">
<pre>Abstraction used in the Backbone of Lumiera's GTK User Interface
The UI-Bus is a ''Mediator'' -- impersonating the role of the //Model// and the //Controler// in the [[MVC-Pattern|http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller]] in common UI architecture.
The ~MVC-Pattern as such is fine, and probably the best we know for construction of user interfaces. But it doesn't scale well towards the integration into a larger and more structured system. There is a tension between the Controller in the UI and other parts of an application, which as well need to be //in control.// And, even more important, there is a tension between the demands of UI elements for support by a model, and the demands to be placed on a core domain model of a large scale application. This tension is resolved by enacting these roles while transforming the requests and demands into //Messages.//</pre>
</div>
<div title="ViewConnection" modifier="Ichthyostega" created="201105221854" modified="201105221902" tags="def Model SessionLogic">
<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).