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:
parent
371c13f790
commit
8b6177a1c5
22 changed files with 1098 additions and 39 deletions
BIN
doc/devel/uml/fig158213.png
Normal file
BIN
doc/devel/uml/fig158213.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
75
src/gui/ctrl/bus-controller.cpp
Normal file
75
src/gui/ctrl/bus-controller.cpp
Normal 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;
|
||||
}
|
||||
|
||||
110
src/gui/ctrl/bus-controller.hpp
Normal file
110
src/gui/ctrl/bus-controller.hpp
Normal 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*/
|
||||
|
|
@ -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"
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
73
src/gui/model/controller.hpp
Normal file
73
src/gui/model/controller.hpp
Normal 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
77
src/gui/model/element.cpp
Normal 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
127
src/gui/model/element.hpp
Normal 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*/
|
||||
74
src/gui/model/tangible.hpp
Normal file
74
src/gui/model/tangible.hpp
Normal 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
73
src/gui/model/widget.hpp
Normal 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_*/
|
||||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
@ -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 {
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
140
uml/lumiera/158213.diagram
Normal 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
|
||||
|
|
@ -2,8 +2,10 @@ 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
|
||||
|
|
@ -11,7 +13,8 @@ package_ref 129 // lumiera
|
|||
open
|
||||
|
||||
package_ref 128005 // design
|
||||
classview_ref 128389 // Controller Workings
|
||||
|
||||
package_ref 129029 // Control
|
||||
|
||||
package_ref 133637 // Play
|
||||
|
||||
|
|
@ -23,5 +26,7 @@ package_ref 132229 // Session
|
|||
package_ref 128389 // RenderEngine
|
||||
|
||||
package_ref 129157 // BackendLayer
|
||||
class_ref 192773 // BusTerm
|
||||
class_ref 193157 // Element
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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// &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 "tangible stuff" is what matters, but you can not build any significant piece of technology if all you want is to "serve" 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. &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.
|
||||
&rarr; [[Building blocks of the GUI model|GuiModelElements]]
|
||||
&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.
|
||||
[<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 "Bus"). 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 "open closed design". 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 "cast" 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
|
|||
&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).
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue