Boost logo

Boost-Commit :

From: stipe_at_[hidden]
Date: 2008-08-28 14:08:36


Author: srajko
Date: 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
New Revision: 48423
URL: http://svn.boost.org/trac/boost/changeset/48423

Log:
guigl window, button, labeled_button and slider work OK
Added:
   sandbox/guigl/boost/guigl/
   sandbox/guigl/boost/guigl/access.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/application.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/event.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/layout/
   sandbox/guigl/boost/guigl/layout/grid.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/parameters.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/platform/
   sandbox/guigl/boost/guigl/platform/glut.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/platform/opengl.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/types.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/
   sandbox/guigl/boost/guigl/view/active_colored.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/base.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/clickable.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/colored.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/compound.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/draggable.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/impl/
   sandbox/guigl/boost/guigl/view/impl/active_colored.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/impl/clickable.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/impl/colored.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/impl/compound.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/impl/draggable.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/impl/labeled.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/impl/mouse_tracking.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/impl/positioned.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/impl/solid_background.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/impl/window.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/labeled.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/mouse_tracking.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/positioned.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/solid_background.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/view/window.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/widget/
   sandbox/guigl/boost/guigl/widget/button.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/widget/labeled_button.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/widget/slider.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/widget/window.hpp (contents, props changed)
   sandbox/guigl/boost/guigl/window.hpp (contents, props changed)
   sandbox/guigl/boost/parameter/
   sandbox/guigl/boost/parameter/aux_/
   sandbox/guigl/boost/parameter/aux_/typed_arg_list.hpp (contents, props changed)
   sandbox/guigl/boost/parameter/aux_/typed_tagged_argument.hpp (contents, props changed)
   sandbox/guigl/boost/parameter/typed_keyword.hpp (contents, props changed)
   sandbox/guigl/boost/parameter/typed_name.hpp (contents, props changed)
   sandbox/guigl/libs/guigl/build/
   sandbox/guigl/libs/guigl/build/xcodeide/
   sandbox/guigl/libs/guigl/build/xcodeide/guigl.xcodeproj/
   sandbox/guigl/libs/guigl/build/xcodeide/guigl.xcodeproj/project.pbxproj (contents, props changed)
   sandbox/guigl/libs/guigl/example/
   sandbox/guigl/libs/guigl/example/Jamfile (contents, props changed)
   sandbox/guigl/libs/guigl/example/window_example.cpp (contents, props changed)
   sandbox/guigl/libs/guigl/src/
   sandbox/guigl/libs/guigl/src/application.cpp (contents, props changed)
   sandbox/guigl/libs/guigl/src/view/
   sandbox/guigl/libs/guigl/src/view/compound.cpp (contents, props changed)
   sandbox/guigl/libs/guigl/src/view/positioned.cpp (contents, props changed)
   sandbox/guigl/libs/guigl/src/view/solid_background.cpp (contents, props changed)
   sandbox/guigl/libs/guigl/src/view/window.cpp (contents, props changed)
   sandbox/guigl/libs/guigl/src/widget/
   sandbox/guigl/libs/guigl/src/widget/button.cpp (contents, props changed)
   sandbox/guigl/libs/guigl/src/widget/labeled_button.cpp (contents, props changed)
   sandbox/guigl/libs/guigl/src/widget/slider.cpp (contents, props changed)
   sandbox/guigl/libs/guigl/src/widget/window.cpp (contents, props changed)
   sandbox/guigl/libs/guigl/src/window.cpp (contents, props changed)
   sandbox/guigl/libs/guigl/test/test_parameter.cpp (contents, props changed)
Text files modified:
   sandbox/guigl/libs/guigl/test/Jamfile | 12 +-----------
   sandbox/guigl/libs/guigl/test/test_parameter_compilation.cpp | 4 +++-
   sandbox/guigl/libs/guigl/test/test_parameter_compilation.hpp | 23 ++++++++++++++++-------
   sandbox/guigl/libs/guigl/test/test_parameter_dispatch_compilation.cpp | 2 +-
   sandbox/guigl/libs/guigl/test/test_parameter_dispatch_compilation.hpp | 7 ++++++-
   5 files changed, 27 insertions(+), 21 deletions(-)

Added: sandbox/guigl/boost/guigl/access.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/access.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,59 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__ACCESS_HPP
+#define BOOST__GUIGL__ACCESS_HPP
+
+
+namespace boost { namespace guigl {
+
+namespace view {
+
+template<typename BaseView>
+class compound;
+
+namespace detail {
+
+ template<typename BaseView>
+ class compound_event_visitor;
+
+}
+
+}
+
+struct access
+{
+private:
+ template<typename T>
+ static void draw(T &t)
+ {
+ t.draw();
+ }
+
+ template<typename T, typename E>
+ static bool on_event(T &t, const E& e)
+ {
+ return t.on_event(e);
+ }
+
+ template<typename Child, typename Parent>
+ static void parent(Child &child, Parent &parent)
+ {
+ child.parent(parent);
+ }
+
+ friend class window;
+ template<typename BaseType>
+ friend class view::compound;
+ template<typename BaseType>
+ friend class view::detail::compound_event_visitor;
+};
+
+}}
+
+#endif // BOOST__GUIGL__ACCESS_HPP

Added: sandbox/guigl/boost/guigl/application.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/application.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,25 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__APPLICATION_HPP
+#define BOOST__GUIGL__APPLICATION_HPP
+
+
+#include <GLUT/glut.h>
+
+
+namespace boost { namespace guigl {
+
+class application {
+public:
+ static void run();
+};
+
+}}
+
+#endif // BOOST__GUIGL__APPLICATION_HPP

Added: sandbox/guigl/boost/guigl/event.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/event.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,73 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__EVENT_HPP
+#define BOOST__GUIGL__EVENT_HPP
+
+
+#include <boost/guigl/types.hpp>
+#include <boost/variant.hpp>
+
+
+namespace boost { namespace guigl {
+
+namespace button {
+
+enum enum_type
+{
+ left, middle, right
+};
+
+}
+
+namespace direction {
+
+enum enum_type
+{
+ up, down
+};
+
+}
+
+namespace region
+{
+
+enum enum_type
+{
+ entry, exit
+};
+
+}
+
+struct movement_event
+{
+ position_type position;
+};
+
+struct entry_exit_event
+{
+ entry_exit_event()
+ {}
+ entry_exit_event(region::enum_type value)
+ : region(value)
+ {}
+ region::enum_type region;
+};
+
+struct button_event
+{
+ position_type position;
+ button::enum_type button;
+ direction::enum_type direction;
+};
+
+typedef boost::variant<button_event, movement_event, entry_exit_event> event_type;
+
+}}
+
+#endif // BOOST__GUIGL__ACCESS_HPP

Added: sandbox/guigl/boost/guigl/layout/grid.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/layout/grid.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,81 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__LAYOUT__GRID_HPP
+#define BOOST__GUIGL__LAYOUT__GRID_HPP
+
+
+#include <boost/guigl/view/base.hpp>
+#include <boost/guigl/types.hpp>
+#include <memory>
+
+
+namespace boost { namespace guigl {
+
+namespace major_direction
+{
+ enum enum_type
+ {
+ horizontal=0,vertical=1
+ };
+}
+
+namespace keywords {
+
+ BOOST_PARAMETER_TYPED_NAME(grid_size,const size_type)
+ BOOST_PARAMETER_TYPED_NAME_WDEFAULT(horizontal,const unsigned,1)
+ BOOST_PARAMETER_TYPED_NAME_WDEFAULT(vertical,const unsigned,1)
+ BOOST_PARAMETER_TYPED_NAME_WDEFAULT(direction,const major_direction::enum_type,major_direction::horizontal)
+
+ typedef boost::parameter::aux::empty_typed_arg_list default_parameters;
+}
+
+
+namespace layout {
+
+class grid
+{
+public:
+ template<typename ArgumentPack>
+ grid(const ArgumentPack &args)
+ : m_size(args[_grid_size])
+ , m_element_size(m_size.x / args[_horizontal], m_size.y/args[_vertical])
+ , m_direction(args[_direction])
+ {
+ m_dimensions[0] = args[_horizontal];
+ m_dimensions[1] = args[_vertical];
+ m_next[0] = m_next[1] = 0;
+ }
+
+ template<typename T, typename ArgumentPack>
+ T *create(const ArgumentPack &args)
+ {
+ T *element(new T((
+ args,
+ _size = m_element_size,
+ _position = position_type(m_element_size.x * m_next[0], m_element_size.y * m_next[1])
+ )) );
+
+ if(++m_next[m_direction] >= m_dimensions[m_direction])
+ {
+ m_next[m_direction] = 0;
+ m_next[!m_direction]++;
+ }
+ return element;
+ }
+private:
+ size_type m_size;
+ size_type m_element_size;
+ unsigned m_dimensions[2];
+ unsigned m_next[2];
+ major_direction::enum_type m_direction;
+};
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__POSITIONED_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/parameters.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/parameters.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,56 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__PARAMETER_MAP_HPP
+#define BOOST__GUIGL__PARAMETER_MAP_HPP
+
+#include <boost/guigl/types.hpp>
+#include <boost/parameter/typed_name.hpp>
+
+namespace boost { namespace guigl {
+
+namespace keywords {
+ BOOST_PARAMETER_TYPED_NAME_WDEFAULT(label,const std::string,"")
+ BOOST_PARAMETER_TYPED_NAME_WDEFAULT(size,const size_type,(size_type(200,200)))
+ BOOST_PARAMETER_TYPED_NAME_WDEFAULT(position,const position_type,(size_type(0,0)))
+ BOOST_PARAMETER_TYPED_NAME_WDEFAULT(background,const color_type,(color_type(0,0,0)))
+ BOOST_PARAMETER_TYPED_NAME_WDEFAULT(color,const color_type,(color_type(1,1,1)))
+ BOOST_PARAMETER_TYPED_NAME_WDEFAULT(active_color,const color_type,(color_type(1,0,0)))
+
+ typedef boost::parameter::aux::empty_typed_arg_list default_parameters;
+}
+
+using namespace keywords;
+
+template<
+ typename T0=boost::parameter::void_, typename T1=boost::parameter::void_,
+ typename T2=boost::parameter::void_, typename T3=boost::parameter::void_,
+ typename T4=boost::parameter::void_, typename T5=boost::parameter::void_,
+ typename T6=boost::parameter::void_, typename T7=boost::parameter::void_>
+struct argument_pack
+{
+ typedef
+ boost::parameter::aux::typed_arg_list<
+ boost::parameter::aux::typed_tagged_argument<T0>,
+ typename argument_pack<T1, T2, T3, T4, T5, T6, T7>::type
+ > type;
+};
+
+template<>
+struct argument_pack<
+ boost::parameter::void_, boost::parameter::void_,
+ boost::parameter::void_, boost::parameter::void_,
+ boost::parameter::void_, boost::parameter::void_,
+ boost::parameter::void_, boost::parameter::void_>
+{
+ typedef boost::parameter::aux::empty_typed_arg_list type;
+};
+
+}}
+
+#endif // BOOST__GUIGL__PARAMETER_MAP_HPP

Added: sandbox/guigl/boost/guigl/platform/glut.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/platform/glut.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,9 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#include <GLUT/glut.h>

Added: sandbox/guigl/boost/guigl/platform/opengl.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/platform/opengl.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,9 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#include <OpenGL/gl.h>
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/types.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/types.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,24 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__TYPES_HPP
+#define BOOST__GUIGL__TYPES_HPP
+
+
+#include <boost/gil/utilities.hpp>
+#include <boost/gil/typedefs.hpp>
+
+namespace boost { namespace guigl {
+
+typedef gil::point2<double> size_type;
+typedef gil::point2<double> position_type;
+typedef gil::rgb32f_pixel_t color_type;
+
+}}
+
+#endif // BOOST__GUIGL__TYPES_HPP

Added: sandbox/guigl/boost/guigl/view/active_colored.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/active_colored.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,39 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__ACTIVE_COLORED_HPP
+#define BOOST__GUIGL__VIEW__ACTIVE_COLORED_HPP
+
+#include <boost/guigl/view/base.hpp>
+
+namespace boost { namespace guigl { namespace view {
+
+template<typename BaseView=base>
+class active_colored : public BaseView
+{
+ typedef BaseView base_type;
+public:
+ template<typename ArgumentPack>
+ active_colored(const ArgumentPack &args)
+ : base_type(args)
+ , m_active_color(args[_active_color])
+ {}
+
+ const color_type &active_color() const
+ { return m_active_color; }
+ const void active_color(const color_type &color)
+ { m_active_color = color; }
+protected:
+ void use_active_color();
+private:
+ color_type m_active_color;
+};
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__ACTIVE_COLORED_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/base.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/base.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,79 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__BASE_HPP
+#define BOOST__GUIGL__VIEW__BASE_HPP
+
+#include <boost/guigl/access.hpp>
+#include <boost/guigl/event.hpp>
+#include <boost/guigl/parameters.hpp>
+
+namespace boost { namespace guigl {
+
+class window;
+
+namespace view {
+
+class base
+{
+
+public:
+ template<typename ArgumentPack>
+ base(const ArgumentPack &args)
+ : m_size(args[_size])
+ {}
+ virtual ~base()
+ {}
+
+ const size_type &size() const
+ { return m_size; }
+
+protected:
+ virtual void draw()=0;
+ void draw_prologue() {}
+ void draw_epilogue() {}
+
+ virtual bool on_event(const event_type &e)
+ {
+ return false;
+ };
+
+ size_type m_size;
+
+ friend class boost::guigl::access;
+};
+
+}}}
+
+#define BOOST_GUIGL_DRAW \
+ void draw_prologue(); \
+ void draw_epilogue(); \
+
+#define BOOST_GUIGL_WIDGET_DRAW \
+ friend class ::boost::guigl::access; \
+ void draw(); \
+ void draw_prologue(); \
+ void draw_epilogue(); \
+
+#define BOOST_GUIGL_DRAW_IMPL(view_type) \
+template<typename BaseView> \
+void view_type<BaseView>::draw() \
+{ \
+ draw_prologue(); \
+ draw_epilogue(); \
+} \
+
+#define BOOST_GUIGL_WIDGET_DRAW_IMPL(widget)\
+void widget::draw() \
+{ \
+ draw_prologue(); \
+ draw_epilogue(); \
+} \
+
+
+#endif // BOOST__GUIGL__VIEW_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/clickable.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/clickable.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,52 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__CLICKABLE_HPP
+#define BOOST__GUIGL__VIEW__CLICKABLE_HPP
+
+#include <boost/guigl/view/base.hpp>
+
+namespace boost { namespace guigl { namespace view {
+
+namespace detail {
+
+ template<typename Derived, typename BaseView>
+ struct clickable_static_visitor;
+
+}
+
+template<typename Derived, typename BaseView=base>
+class clickable : public BaseView
+{
+ typedef BaseView base_type;
+public:
+ template<typename ArgumentPack>
+ clickable(const ArgumentPack &args)
+ : base_type(args)
+ , m_button_down(false)
+ {}
+
+protected:
+ bool on_event(const event_type &event_info);
+
+ bool button_down()
+ { return m_button_down; }
+private:
+ bool m_button_down;
+ void button_down(bool state);
+ void clickable_on_click()
+ {
+ static_cast<Derived *>(this)->clickable_on_click();
+ }
+
+ friend struct detail::clickable_static_visitor<Derived,BaseView>;
+};
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__CLICKABLE_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/colored.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/colored.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,40 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__COLORED_HPP
+#define BOOST__GUIGL__VIEW__COLORED_HPP
+
+#include <boost/guigl/view/base.hpp>
+
+namespace boost { namespace guigl { namespace view {
+
+template<typename BaseView=base>
+class colored : public BaseView
+{
+ typedef BaseView base_type;
+public:
+ template<typename ArgumentPack>
+ colored(const ArgumentPack &args)
+ : base_type(args)
+ , m_color(args[_color])
+ {}
+
+ const color_type &color() const
+ { return m_color; }
+ const void set_color(const color_type &color)
+ { m_color = color; }
+protected:
+ BOOST_GUIGL_DRAW
+
+private:
+ color_type m_color;
+};
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__COLORED_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/compound.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/compound.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,63 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__COMPOUND_HPP
+#define BOOST__GUIGL__VIEW__COMPOUND_HPP
+
+
+#include <boost/guigl/view/positioned.hpp>
+#include <boost/ptr_container/ptr_vector.hpp>
+
+namespace boost { namespace guigl { namespace view {
+
+namespace detail
+{
+ template<typename BaseView>
+ struct compound_event_visitor;
+}
+
+template<typename BaseView=base>
+class compound : public BaseView
+{
+public:
+ typedef BaseView base_type;
+
+ template<typename ArgumentPack>
+ compound(const ArgumentPack &args)
+ : base_type(args)
+ , m_mouse_focus_child(0)
+ {}
+
+ compound & operator << (positioned<> *v)
+ {
+ m_children.push_back(v);
+ access::parent(*v, *this);
+ return *this;
+ }
+
+ bool on_event(const event_type &event_info);
+
+ const ptr_vector<positioned<> > &children() const
+ { return m_children; }
+
+protected:
+ BOOST_GUIGL_DRAW
+
+ ptr_vector<positioned<> > &children()
+ { return m_children; }
+
+private:
+ ptr_vector<positioned<> > m_children;
+ positioned<> * m_mouse_focus_child;
+
+ friend class detail::compound_event_visitor<BaseView>;
+};
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/draggable.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/draggable.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,50 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__DRAGGABLE_HPP
+#define BOOST__GUIGL__VIEW__DRAGGABLE_HPP
+
+#include <boost/guigl/view/base.hpp>
+#include <boost/guigl/view/mouse_tracking.hpp>
+
+namespace boost { namespace guigl { namespace view {
+
+namespace detail {
+
+ template<typename Derived, typename BaseView>
+ struct draggable_static_visitor;
+
+}
+
+template<typename Derived, typename BaseView=base>
+class draggable : public mouse_tracking<BaseView>
+{
+ typedef mouse_tracking<BaseView> base_type;
+public:
+ template<typename ArgumentPack>
+ draggable(const ArgumentPack &args)
+ : base_type(args)
+ {}
+
+protected:
+ BOOST_GUIGL_DRAW
+
+ bool on_event(const event_type &event_info);
+
+private:
+ void draggable_on_drag(const position_type &position)
+ {
+ static_cast<Derived *>(this)->draggable_on_drag(position);
+ }
+
+ friend struct detail::draggable_static_visitor<Derived,BaseView>;
+};
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__CLICKABLE_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/impl/active_colored.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/impl/active_colored.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,25 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__IMPL__ACTIVE_COLORED_HPP
+#define BOOST__GUIGL__VIEW__IMPL__ACTIVE_COLORED_HPP
+
+#include <boost/guigl/view/active_colored.hpp>
+#include <boost/guigl/platform/opengl.hpp>
+
+namespace boost { namespace guigl { namespace view {
+
+template<typename BaseView>
+void active_colored<BaseView>::use_active_color()
+{
+ glColor3d(m_active_color[0],m_active_color[1],m_active_color[2]);
+}
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__IMPL__COLORED_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/impl/clickable.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/impl/clickable.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,84 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__IMPL__CLICKABLE_HPP
+#define BOOST__GUIGL__VIEW__IMPL__CLICKABLE_HPP
+
+#include <boost/guigl/view/colored.hpp>
+#include <boost/guigl/platform/opengl.hpp>
+
+
+namespace boost { namespace guigl { namespace view {
+
+template<typename Derived, typename BaseView>
+inline void clickable<Derived, BaseView>::button_down(bool state)
+{
+ m_button_down = state;
+ static_cast<Derived *>(this)->clickable_button_down(state);
+}
+
+namespace detail {
+
+ template<typename Derived, typename BaseView>
+ struct clickable_static_visitor
+ : public boost::static_visitor<>
+ {
+ public:
+ clickable_static_visitor(clickable<Derived, BaseView> &c)
+ : m_clickable(c)
+ {}
+
+ typedef bool result_type;
+
+ template<typename EventInfo>
+ bool operator()(const EventInfo &) const
+ {
+ return false;
+ }
+
+ bool operator()(const button_event &event_info) const
+ {
+ if(event_info.direction == direction::down)
+ {
+ m_clickable.button_down(true);
+ return true;
+ }
+ if(event_info.direction == direction::up && m_clickable.m_button_down)
+ {
+ m_clickable.button_down(false);
+ m_clickable.clickable_on_click();
+ return true;
+ }
+ return false;
+ }
+
+ bool operator()(const entry_exit_event &event_info) const
+ {
+ if(event_info.region == region::exit)
+ m_clickable.button_down(false);
+ return true;
+ }
+
+ clickable<Derived, BaseView> &m_clickable;
+ };
+
+}
+
+template<typename Derived, typename BaseView>
+inline bool clickable<Derived, BaseView>::on_event(const event_type &event_info)
+{
+ if(base_type::on_event(event_info))
+ return true;
+ else
+ return boost::apply_visitor(detail::clickable_static_visitor<Derived,BaseView>(*this), event_info);
+}
+
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__IMPL__CLICKABLE_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/impl/colored.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/impl/colored.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,33 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__IMPL__COLORED_HPP
+#define BOOST__GUIGL__VIEW__IMPL__COLORED_HPP
+
+#include <boost/guigl/view/colored.hpp>
+#include <boost/guigl/platform/opengl.hpp>
+
+
+namespace boost { namespace guigl { namespace view {
+
+template<typename BaseView>
+inline void colored<BaseView>::draw_prologue()
+{
+ BaseView::draw_prologue();
+ glColor3d(m_color[0], m_color[1], m_color[2]);
+}
+
+template<typename BaseView>
+inline void colored<BaseView>::draw_epilogue()
+{
+ BaseView::draw_epilogue();
+}
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__IMPL__COLORED_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/impl/compound.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/impl/compound.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,143 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__IMPL__COMPOUND_HPP
+#define BOOST__GUIGL__VIEW__IMPL__COMPOUND_HPP
+
+
+#include <boost/guigl/access.hpp>
+#include <boost/guigl/event.hpp>
+#include <boost/guigl/view/compound.hpp>
+
+#include <iostream>
+
+namespace boost { namespace guigl { namespace view {
+
+template<typename BaseView>
+inline void compound<BaseView>::draw_prologue()
+{
+ BaseView::draw_prologue();
+ for(ptr_vector<positioned<> >::iterator it=m_children.begin(); it!=m_children.end(); it++)
+ access::draw(*it);
+}
+
+template<typename BaseView>
+inline void compound<BaseView>::draw_epilogue()
+{
+ BaseView::draw_epilogue();
+}
+
+namespace detail {
+
+template<typename BaseView>
+struct compound_event_visitor
+ : public boost::static_visitor<>
+{
+public:
+ typedef bool result_type;
+
+ compound_event_visitor(compound<BaseView> &view, const event_type &event_info)
+ : view(view), event_info(event_info)
+ {}
+
+ void set_mouse_focus(positioned<> &child) const
+ {
+ if(!view.m_mouse_focus_child)
+ {
+ // we entered the mouse focus child
+ view.m_mouse_focus_child = &child;
+ access::on_event(child, entry_exit_event(region::entry));
+ }
+ else if(view.m_mouse_focus_child != &child)
+ {
+ // we changed the mouse focus child
+ access::on_event(*view.m_mouse_focus_child, entry_exit_event(region::exit));
+ view.m_mouse_focus_child = &child;
+ access::on_event(*view.m_mouse_focus_child, entry_exit_event(region::entry));
+ }
+ }
+
+ bool operator()(const button_event &event_info) const
+ {
+ for(ptr_vector<positioned<> >::iterator it=view.children().begin(); it!=view.children().end(); it++)
+ {
+ if(!inside(event_info.position, *it))
+ continue;
+ // if we are sending an event to a child view, it must be active
+ set_mouse_focus(*it);
+ if(access::on_event(*it, this->event_info))
+ return true;
+ }
+ return false;
+ }
+
+ bool operator()(const movement_event &event_info) const
+ {
+ for(ptr_vector<positioned<> >::iterator it=view.children().begin(); it!=view.children().end(); it++)
+ {
+ if(!inside(event_info.position, *it))
+ {
+ if(&*it == view.m_mouse_focus_child)
+ {
+ // we left the mouse focus child
+ view.m_mouse_focus_child = 0;
+ access::on_event(*it, entry_exit_event(region::exit));
+ }
+ continue;
+ }
+ else
+ {
+ set_mouse_focus(*it);
+ // only the mouse focus child gets movement events
+ // forward the movement event
+ movement_event translated_event_info(event_info);
+ translated_event_info.position -= it->position();
+ access::on_event(*it, translated_event_info);
+ return true;
+ }
+ }
+ return true;
+ }
+
+ bool operator()(const entry_exit_event &event_info) const
+ {
+ if(event_info.region == region::exit && view.m_mouse_focus_child)
+ access::on_event(*view.m_mouse_focus_child, event_info);
+ view.m_mouse_focus_child = 0;
+ return true;
+ }
+
+
+ static bool inside(const position_type &position, const positioned<> &view)
+ {
+ return inside(position.x, view.position().x, view.position().x + view.size().x)
+ && inside(position.y, view.position().y, view.position().y + view.size().y);
+ }
+ static bool inside(double pos, double min, double max)
+ {
+ return (pos >= min && pos <= max);
+ }
+
+ compound<BaseView> &view;
+ const event_type &event_info;
+};
+
+}
+
+template<typename BaseView>
+inline bool compound<BaseView>::on_event(const event_type &event_info)
+{
+ if(base_type::on_event(event_info))
+ return true;
+ else
+ return boost::apply_visitor( detail::compound_event_visitor<BaseView>(*this, event_info), event_info);
+}
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__IMPL__COMPOUND_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/impl/draggable.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/impl/draggable.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,81 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__IMPL__DRAGGABLE_HPP
+#define BOOST__GUIGL__VIEW__IMPL__DRAGGABLE_HPP
+
+#include <boost/guigl/view/draggable.hpp>
+#include <boost/guigl/view/impl/mouse_tracking.hpp>
+#include <boost/guigl/platform/opengl.hpp>
+
+
+namespace boost { namespace guigl { namespace view {
+
+template<typename Derived, typename BaseView>
+inline void draggable<Derived, BaseView>::draw_prologue()
+{
+ BaseView::draw_prologue();
+}
+
+template<typename Derived, typename BaseView>
+inline void draggable<Derived, BaseView>::draw_epilogue()
+{
+ BaseView::draw_epilogue();
+}
+
+namespace detail {
+
+ template<typename Derived, typename BaseView>
+ struct draggable_static_visitor
+ : public boost::static_visitor<>
+ {
+ public:
+ draggable_static_visitor(draggable<Derived, BaseView> &c)
+ : m_draggable(c)
+ {}
+
+ typedef bool result_type;
+
+ template<typename EventInfo>
+ bool operator()(const EventInfo &) const
+ {
+ return false;
+ }
+
+ bool operator()(const button_event &event_info) const
+ {
+ if(event_info.direction == direction::down)
+ m_draggable.draggable_on_drag(m_draggable.mouse_state().get().position);
+ return true;
+ }
+
+ bool operator()(const movement_event &event_info) const
+ {
+ if(m_draggable.mouse_state().get().button_down)
+ m_draggable.draggable_on_drag(event_info.position);
+ return true;
+ }
+
+ draggable<Derived, BaseView> &m_draggable;
+ };
+
+}
+
+template<typename Derived, typename BaseView>
+inline bool draggable<Derived, BaseView>::on_event(const event_type &event_info)
+{
+ if(base_type::on_event(event_info))
+ return true;
+ else
+ return boost::apply_visitor(detail::draggable_static_visitor<Derived,BaseView>(*this), event_info);
+}
+
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__IMPL__DRAGGABLE_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/impl/labeled.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/impl/labeled.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,37 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__IMPL__LABELED_HPP
+#define BOOST__GUIGL__VIEW__IMPL__LABELED_HPP
+
+#include <boost/guigl/view/labeled.hpp>
+#include <boost/guigl/platform/opengl.hpp>
+#include <boost/guigl/platform/glut.hpp>
+
+
+namespace boost { namespace guigl { namespace view {
+
+template<typename BaseView>
+inline void labeled<BaseView>::draw_prologue()
+{
+ BaseView::draw_prologue();
+
+ glRasterPos3f((BaseView::size().x - 9*m_label.size())/2, BaseView::size().y-(BaseView::size().y-15)/2, 0);
+ for (std::string::const_iterator it=m_label.begin(); it!=m_label.end(); it++)
+ glutBitmapCharacter(GLUT_BITMAP_9_BY_15, *it);
+}
+
+template<typename BaseView>
+inline void labeled<BaseView>::draw_epilogue()
+{
+ BaseView::draw_epilogue();
+}
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__IMPL__LABELED_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/impl/mouse_tracking.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/impl/mouse_tracking.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,98 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__IMPL__MOUSE_TRACKING_HPP
+#define BOOST__GUIGL__VIEW__IMPL__MOUSE_TRACKING_HPP
+
+#include <boost/guigl/view/mouse_tracking.hpp>
+#include <boost/guigl/platform/opengl.hpp>
+#include <boost/guigl/widget/window.hpp>
+
+#include <boost/utility/enable_if.hpp>
+
+#include <iostream>
+
+namespace boost { namespace guigl { namespace view {
+
+namespace detail {
+
+ template<typename BaseView, typename Enable=void>
+ struct get_button_state
+ {
+ static bool is_down(const mouse_tracking<BaseView> &)
+ { return false; }
+ };
+
+ template<typename BaseView>
+ struct get_button_state<BaseView, typename enable_if<is_positioned<BaseView> >::type>
+ {
+ static bool is_down(mouse_tracking<BaseView> &view)
+ {
+ const widget::window *window = dynamic_cast<const widget::window *> (view.root());
+ return window->mouse_state() ? window->mouse_state().get().button_down : false;
+ }
+ };
+
+ template<typename BaseView>
+ struct mouse_tracking_static_visitor
+ : public boost::static_visitor<>
+ {
+ public:
+ mouse_tracking_static_visitor(mouse_tracking<BaseView> &m)
+ : m_mouse_tracking(m)
+ {}
+
+ typedef bool result_type;
+
+ template<typename EventInfo>
+ bool operator()(const EventInfo &) const
+ {
+ return false;
+ }
+
+ bool operator()(const movement_event &event_info) const
+ {
+ m_mouse_tracking.m_mouse_state.get().position = event_info.position;
+ return false;
+ }
+
+ bool operator()(const button_event &event_info) const
+ {
+ m_mouse_tracking.m_mouse_state.get().button_down = (event_info.direction == direction::down);
+ return false;
+ }
+
+ bool operator()(const entry_exit_event &event_info) const
+ {
+ if(event_info.region == region::exit)
+ m_mouse_tracking.m_mouse_state = none_t();
+ else
+ {
+ m_mouse_tracking.m_mouse_state = mouse_state();
+ m_mouse_tracking.m_mouse_state.get().button_down = get_button_state<BaseView>::is_down(m_mouse_tracking);
+ }
+ return false;
+ }
+
+ mouse_tracking<BaseView> &m_mouse_tracking;
+ };
+
+}
+
+template<typename BaseView>
+inline bool mouse_tracking<BaseView>::on_event(const event_type &event_info)
+{
+ bool response = base_type::on_event(event_info);
+ boost::apply_visitor(detail::mouse_tracking_static_visitor<BaseView>(*this), event_info);
+ return response;
+}
+
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__IMPL__MOUSE_TRACKING_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/impl/positioned.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/impl/positioned.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,37 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__IMPL__POSITIONED_HPP
+#define BOOST__GUIGL__VIEW__IMPL__POSITIONED_HPP
+
+#include <boost/guigl/view/positioned.hpp>
+#include <boost/guigl/platform/opengl.hpp>
+
+
+namespace boost { namespace guigl { namespace view {
+
+//BOOST_GUIGL_DRAW_IMPL(positioned)
+
+template<typename BaseView>
+inline void positioned<BaseView>::draw_prologue()
+{
+ BaseView::draw_prologue();
+ glPushMatrix();
+ glTranslated(m_position.x, m_position.y, 0);
+}
+
+template<typename BaseView>
+inline void positioned<BaseView>::draw_epilogue()
+{
+ glPopMatrix();
+ BaseView::draw_epilogue();
+}
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__POSITIONED_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/impl/solid_background.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/impl/solid_background.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,36 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__IMPL__SOLID_BACKGROUND_HPP
+#define BOOST__GUIGL__VIEW__IMPL__SOLID_BACKGROUND_HPP
+
+#include <boost/guigl/view/solid_background.hpp>
+#include <boost/guigl/platform/opengl.hpp>
+
+
+namespace boost { namespace guigl { namespace view {
+
+//BOOST_GUIGL_DRAW_IMPL(solid_background)
+
+template<typename BaseView>
+inline void solid_background<BaseView>::draw_prologue()
+{
+ BaseView::draw_prologue();
+ glColor3d(m_background_color[0], m_background_color[1], m_background_color[2]);
+ glRectd(0.0, 0.0, solid_background::size().x, solid_background::size().y);
+}
+
+template<typename BaseView>
+inline void solid_background<BaseView>::draw_epilogue()
+{
+ BaseView::draw_epilogue();
+}
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__IMPL__SOLID_BACKGROUND_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/impl/window.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/impl/window.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,43 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__IMPL__WINDOW_HPP
+#define BOOST__GUIGL__VIEW__IMPL__WINDOW_HPP
+
+
+#include <boost/guigl/view/window.hpp>
+#include <boost/guigl/platform/opengl.hpp>
+
+
+namespace boost { namespace guigl { namespace view {
+
+//BOOST_GUIGL_DRAW_IMPL(window)
+
+template<typename BaseView>
+inline void window<BaseView>::draw_prologue()
+{
+ BaseView::draw_prologue();
+
+ glMatrixMode (GL_PROJECTION);
+ glLoadIdentity ();
+ glOrtho (0, window::size().x, window::size().y, 0, 0, 1);
+ glMatrixMode (GL_MODELVIEW);
+ glDisable(GL_DEPTH_TEST);
+ glClearColor(m_background_color[0], m_background_color[1], m_background_color[2], 0);
+ glClear(GL_COLOR_BUFFER_BIT);
+}
+
+template<typename BaseView>
+inline void window<BaseView>::draw_epilogue()
+{
+ BaseView::draw_epilogue();
+}
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__IMPL__WINDOW_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/labeled.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/labeled.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,39 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__LABELED_HPP
+#define BOOST__GUIGL__VIEW__LABELED_HPP
+
+#include <boost/guigl/view/base.hpp>
+
+namespace boost { namespace guigl { namespace view {
+
+template<typename BaseView=base>
+class labeled : public BaseView
+{
+ typedef BaseView base_type;
+public:
+ template<typename ArgumentPack>
+ labeled(const ArgumentPack &args)
+ : base_type(args)
+ , m_label(args[_label])
+ {}
+
+ const std::string &label() const
+ { return m_label; }
+
+protected:
+ BOOST_GUIGL_DRAW
+
+private:
+ std::string m_label;
+};
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__POSITIONED_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/mouse_tracking.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/mouse_tracking.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,55 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__MOUSE_TRACKING_HPP
+#define BOOST__GUIGL__VIEW__MOUSE_TRACKING_HPP
+
+#include <boost/guigl/view/base.hpp>
+
+namespace boost { namespace guigl {
+
+struct mouse_state
+{
+ position_type position;
+ bool button_down;
+};
+
+namespace view {
+
+namespace detail {
+
+ template<typename BaseView>
+ struct mouse_tracking_static_visitor;
+
+}
+
+template<typename BaseView=base>
+class mouse_tracking : public BaseView
+{
+ typedef BaseView base_type;
+public:
+ template<typename ArgumentPack>
+ mouse_tracking(const ArgumentPack &args)
+ : base_type(args)
+ {}
+
+ const boost::optional<guigl::mouse_state> &mouse_state() const
+ { return m_mouse_state; }
+
+protected:
+ bool on_event(const event_type &event_info);
+
+private:
+ boost::optional<guigl::mouse_state> m_mouse_state;
+
+ friend struct detail::mouse_tracking_static_visitor<BaseView>;
+};
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__CLICKABLE_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/positioned.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/positioned.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,69 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__POSITIONED_HPP
+#define BOOST__GUIGL__VIEW__POSITIONED_HPP
+
+#include <boost/guigl/view/base.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace guigl { namespace view {
+
+template<typename View>
+struct is_positioned
+ : public is_positioned<typename View::base_type>
+{};
+
+template<>
+struct is_positioned<base> : public mpl::false_
+{};
+
+template<typename BaseView=base>
+class positioned : public BaseView
+{
+ typedef BaseView base_type;
+public:
+ template<typename ArgumentPack>
+ positioned(const ArgumentPack &args)
+ : base_type(args)
+ , m_position(args[_position])
+ , m_parent(0)
+ {}
+
+ const position_type &position() const
+ { return m_position; }
+
+ const base *root() const
+ {
+ const base *root = this;
+ const positioned<> *p_view;
+ while((p_view = dynamic_cast<const positioned<> *>(root)))
+ root = p_view->m_parent;
+ return root;
+ }
+
+protected:
+ BOOST_GUIGL_DRAW
+
+ friend class access;
+ void parent(base &parent)
+ { m_parent = &parent; }
+private:
+
+ position_type m_position;
+ base *m_parent;
+};
+
+template<typename BaseView>
+struct is_positioned<positioned<BaseView> > : public mpl::true_
+{};
+
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__POSITIONED_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/solid_background.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/solid_background.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,42 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__SOLID_BACKGROUND_HPP
+#define BOOST__GUIGL__VIEW__SOLID_BACKGROUND_HPP
+
+#include <boost/guigl/parameters.hpp>
+#include <boost/guigl/view/base.hpp>
+
+
+namespace boost { namespace guigl { namespace view {
+
+template<typename BaseView=base>
+class solid_background : public BaseView
+{
+public:
+ typedef BaseView base_type;
+
+ template<typename ArgumentPack>
+ solid_background(const ArgumentPack &args)
+ : base_type(args)
+ , m_background_color(args[_background])
+ {}
+
+ const color_type &background_color() const
+ { return m_background_color; }
+
+protected:
+ BOOST_GUIGL_DRAW
+
+private:
+ color_type m_background_color;
+};
+
+}}}
+
+#endif // BOOST__GUIGL__VIEW__SOLID_BACKGROUND_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/view/window.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/view/window.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,40 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__VIEW__WINDOW_HPP
+#define BOOST__GUIGL__VIEW__WINDOW_HPP
+
+#include <boost/guigl/view/base.hpp>
+
+namespace boost { namespace guigl { namespace view {
+
+template<typename BaseView=base>
+class window : public BaseView
+{
+public:
+ typedef BaseView base_type;
+
+ template<typename Args>
+ window(const Args &args)
+ : base_type(args)
+ , m_background_color(args[_background])
+ {}
+
+ const color_type &background_color() const
+ { return m_background_color; }
+
+protected:
+ BOOST_GUIGL_DRAW
+
+private:
+ color_type m_background_color;
+};
+
+}}}
+
+#endif // BOOST__GUIGL__WINDOW_VIEW_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/widget/button.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/widget/button.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,52 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__WIDGET__BUTTON_HPP
+#define BOOST__GUIGL__WIDGET__BUTTON_HPP
+
+#include <boost/guigl/view/active_colored.hpp>
+#include <boost/guigl/view/clickable.hpp>
+#include <boost/guigl/view/positioned.hpp>
+#include <boost/guigl/view/solid_background.hpp>
+#include <boost/signal.hpp>
+
+namespace boost { namespace guigl { namespace widget {
+
+class button;
+
+typedef
+ view::active_colored<
+ view::solid_background<
+ view::clickable<button,
+ view::positioned<>
+ > > > button_base_type;
+
+class button : public button_base_type
+{
+ typedef button_base_type base_type;
+public:
+ template<typename ArgumentPack>
+ button(const ArgumentPack &args)
+ : button_base_type(args)
+ {}
+
+ boost::signal<void()> on_click;
+protected:
+ BOOST_GUIGL_WIDGET_DRAW
+
+private:
+ void clickable_button_down(bool state);
+ void clickable_on_click()
+ { on_click(); }
+
+ friend class view::clickable<button, view::positioned<> >;
+};
+
+}}}
+
+#endif // BOOST__GUIGL__WIDGET__BUTTON_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/widget/labeled_button.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/widget/labeled_button.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,38 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__WIDGET__LABELED_BUTTON_HPP
+#define BOOST__GUIGL__WIDGET__LABELED_BUTTON_HPP
+
+#include <boost/guigl/view/colored.hpp>
+#include <boost/guigl/view/labeled.hpp>
+#include <boost/guigl/widget/button.hpp>
+
+namespace boost { namespace guigl { namespace widget {
+
+typedef view::labeled<
+ view::colored<
+ widget::button
+ > > labeled_button_base_type;
+
+class labeled_button : public labeled_button_base_type
+{
+ typedef labeled_button_base_type base_type;
+public:
+ template<typename ArgumentPack>
+ labeled_button(const ArgumentPack &args)
+ : labeled_button_base_type(args)
+ {}
+
+protected:
+ BOOST_GUIGL_WIDGET_DRAW
+};
+
+}}}
+
+#endif // BOOST__GUIGL__WIDGET__LABELED_BUTTON_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/widget/slider.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/widget/slider.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,62 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__WIDGET__SLIDER_HPP
+#define BOOST__GUIGL__WIDGET__SLIDER_HPP
+
+#include <boost/guigl/view/active_colored.hpp>
+#include <boost/guigl/view/draggable.hpp>
+#include <boost/guigl/view/positioned.hpp>
+#include <boost/guigl/view/solid_background.hpp>
+#include <boost/signal.hpp>
+
+namespace boost { namespace guigl { namespace widget {
+
+class slider;
+
+typedef
+ view::active_colored<
+ view::draggable<slider,
+ view::solid_background<
+ view::positioned<>
+ > > > slider_base_type;
+
+class slider : public slider_base_type
+{
+ typedef slider_base_type base_type;
+public:
+ template<typename ArgumentPack>
+ slider(const ArgumentPack &args)
+ : slider_base_type(args)
+ , m_value(0)
+ {}
+
+ boost::signal<void(const double &)> on_value_change;
+ double value()
+ { return m_value; }
+ void set_value(double value)
+ {
+ m_value = value;
+ on_value_change(value);
+ }
+protected:
+ BOOST_GUIGL_WIDGET_DRAW
+
+private:
+ double m_value;
+ void draggable_on_drag(const position_type &position);
+
+ friend class view::draggable<slider,
+ view::solid_background<
+ view::positioned<>
+ > >;
+};
+
+}}}
+
+#endif // BOOST__GUIGL__WIDGET__SLIDER_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/widget/window.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/widget/window.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,39 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__WIDGET__WINDOW_HPP
+#define BOOST__GUIGL__WIDGET__WINDOW_HPP
+
+#include <boost/guigl/view/compound.hpp>
+#include <boost/guigl/view/mouse_tracking.hpp>
+#include <boost/guigl/view/window.hpp>
+
+namespace boost { namespace guigl { namespace widget {
+
+typedef view::compound<
+ view::mouse_tracking<
+ view::window<>
+ > > window_base_type;
+
+class window
+ : public window_base_type
+{
+ typedef window_base_type base_type;
+public:
+ template<typename ArgumentPack>
+ window(const ArgumentPack &args)
+ : base_type(args)
+ {}
+
+protected:
+ BOOST_GUIGL_WIDGET_DRAW
+};
+
+}}}
+
+#endif // BOOST__GUIGL__WIDGET__WINDOW_HPP
\ No newline at end of file

Added: sandbox/guigl/boost/guigl/window.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/guigl/window.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,44 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST__GUIGL__WINDOW_HPP
+#define BOOST__GUIGL__WINDOW_HPP
+
+
+#include <boost/guigl/access.hpp>
+#include <boost/guigl/event.hpp>
+#include <boost/guigl/parameters.hpp>
+#include <boost/guigl/widget/window.hpp>
+#include <boost/noncopyable.hpp>
+
+#include <memory>
+#include <string>
+
+
+namespace boost { namespace guigl {
+
+class window : public guigl::widget::window, boost::noncopyable
+{
+ typedef argument_pack<tag::label, tag::size, tag::position, tag::background>::type
+ argument_pack_type;
+
+public:
+ window(const argument_pack_type &map);
+ ~window();
+
+ static void redraw(const view::positioned<> &v);
+
+ class impl;
+private:
+ std::auto_ptr<impl> m_impl;
+
+};
+
+}}
+
+#endif // BOOST__GUIGL__WINDOW_HPP

Added: sandbox/guigl/boost/parameter/aux_/typed_arg_list.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/parameter/aux_/typed_arg_list.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,475 @@
+/*=================================---------------------------------------------
+ Copyright Daniel Wallin, David Abrahams 2005.
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef TYPED_ARG_LIST_050329_HPP
+#define TYPED_ARG_LIST_050329_HPP
+
+#include <boost/parameter/aux_/void.hpp>
+#include <boost/parameter/aux_/result_of0.hpp>
+#include <boost/parameter/aux_/default.hpp>
+#include <boost/parameter/aux_/parameter_requirements.hpp>
+#include <boost/parameter/aux_/yesno.hpp>
+#include <boost/parameter/aux_/maybe.hpp>
+#include <boost/parameter/aux_/arg_list.hpp>
+#include <boost/parameter/config.hpp>
+
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/begin.hpp>
+#include <boost/mpl/end.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+
+namespace boost { namespace parameter {
+
+// Forward declaration for aux::arg_list, below.
+template<class T> struct typed_keyword;
+
+namespace aux {
+
+// Tag type passed to MPL lambda.
+struct lambda_tag;
+
+//
+// Structures used to build the tuple of actual arguments. The
+// tuple is a nested cons-style list of arg_list specializations
+// terminated by an empty_arg_list.
+//
+// Each specialization of arg_list is derived from its successor in
+// the list type. This feature is used along with using
+// declarations to build member function overload sets that can
+// match against keywords.
+//
+
+// MPL sequence support
+struct typed_arg_list_tag;
+
+// Terminates typed_arg_list<> and represents an empty list. Since this
+// is just the terminating case you might want to look at typed_arg_list
+// first, to get a feel for what's really happening here.
+
+struct empty_typed_arg_list
+{
+ empty_typed_arg_list() {}
+
+ // Constructor taking BOOST_PARAMETER_MAX_ARITY empty_typed_arg_list
+ // arguments; this makes initialization
+ empty_typed_arg_list(
+ BOOST_PP_ENUM_PARAMS(
+ BOOST_PARAMETER_MAX_ARITY, void_ BOOST_PP_INTERCEPT
+ ))
+ {}
+
+ // A metafunction class that, given a keyword and a default
+ // type, returns the appropriate result type for a keyword
+ // lookup given that default
+ struct binding
+ {
+ template<class KW, class Default, class Reference>
+ struct apply
+ {
+ typedef Default type;
+ };
+ };
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ // Terminator for has_key, indicating that the keyword is unique
+ template <class KW>
+ static no_tag has_key(KW*);
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || (BOOST_WORKAROUND(__GNUC__, < 3)) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+
+ // The overload set technique doesn't work with these older
+ // compilers, so they need some explicit handholding.
+
+ // A metafunction class that, given a keyword, returns the type
+ // of the base sublist whose get() function can produce the
+ // value for that key
+ struct key_owner
+ {
+ template<class KW>
+ struct apply
+ {
+ typedef empty_typed_arg_list type;
+ };
+ };
+
+ template <class K, class T>
+ T& get(default_<K,T> x) const
+ {
+ return x.value;
+ }
+
+ template <class K, class F>
+ typename result_of0<F>::type
+ get(lazy_default<K,F> x) const
+ {
+ return x.compute_default();
+ }
+#endif
+
+ // If this function is called, it means there is no argument
+ // in the list that matches the supplied keyword. Just return
+ // the default value.
+ template <class Tag>
+ const typename Tag::value_type &operator[](const typed_keyword<Tag>&) const
+ {
+ return Tag::default_value();
+ }
+
+ // If this function is called, it means there is no argument
+ // in the list that matches the supplied keyword. Just return
+ // the default value.
+ template <class K, class Default>
+ Default& operator[](default_<K, Default> x) const
+ {
+ return x.value;
+ }
+
+ // If this function is called, it means there is no argument
+ // in the list that matches the supplied keyword. Just evaluate
+ // and return the default value.
+ template <class K, class F>
+ typename result_of0<F>::type
+ operator[](
+ BOOST_PARAMETER_lazy_default_fallback<K,F> x) const
+ {
+ return x.compute_default();
+ }
+
+ // No argument corresponding to ParameterRequirements::key_type
+ // was found if we match this overload, so unless that parameter
+ // has a default, we indicate that the actual arguments don't
+ // match the function's requirements.
+ template <class ParameterRequirements, class ArgPack>
+ static typename ParameterRequirements::has_default
+ satisfies(ParameterRequirements*, ArgPack*);
+
+ // MPL sequence support
+ typedef empty_typed_arg_list type; // convenience
+ typedef typed_arg_list_tag tag; // For dispatching to sequence intrinsics
+};
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+template<class KW>
+no_tag operator*(empty_typed_arg_list, KW*);
+#endif
+
+// Forward declaration for typed_arg_list::operator,
+template <class KW>
+struct typed_tagged_argument;
+
+// A tuple of tagged arguments, terminated with empty_typed_arg_list.
+// Every TaggedArg is an instance of typed_tagged_argument<>.
+template <class TaggedArg, class Next = empty_typed_arg_list>
+struct typed_arg_list : Next
+{
+ typedef typed_arg_list<TaggedArg,Next> self;
+ typedef typename TaggedArg::key_type key_type;
+
+ typedef typename is_maybe<typename TaggedArg::value_type>::type holds_maybe;
+
+ typedef typename mpl::eval_if<
+ holds_maybe
+ , get_reference<typename TaggedArg::value_type>
+ , get_reference<TaggedArg>
+ >::type reference;
+
+ typedef typename mpl::if_<
+ holds_maybe
+ , reference
+ , typename TaggedArg::value_type
+ >::type value_type;
+
+ TaggedArg arg; // Stores the argument
+
+ // Store the arguments in successive nodes of this list
+ template< // class A0, class A1, ...
+ BOOST_PP_ENUM_PARAMS(BOOST_PARAMETER_MAX_ARITY, class A)
+ >
+ typed_arg_list( // A0& a0, A1& a1, ...
+ BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PARAMETER_MAX_ARITY, A, & a)
+ )
+ : Next( // a1, a2, ...
+ BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PARAMETER_MAX_ARITY, a)
+ , void_reference()
+ )
+ , arg(a0)
+ {}
+
+ // Read the arguments from a typed_arg_list
+ template<typename CTaggedArg, typename CNext>
+ typed_arg_list(const typed_arg_list<CTaggedArg, CNext> &args)
+ : Next(args)
+ , arg(args[typed_keyword<key_type>()])
+ {}
+
+ // Create a new list by prepending arg to a copy of tail. Used
+ // when incrementally building this structure with the comma
+ // operator.
+ typed_arg_list(TaggedArg arg, Next const& tail)
+ : Next(tail)
+ , arg(arg)
+ {}
+
+ // A metafunction class that, given a keyword and a default
+ // type, returns the appropriate result type for a keyword
+ // lookup given that default
+ struct binding
+ {
+ template <class KW, class Default, class Reference>
+ struct apply
+ {
+ typedef typename mpl::eval_if<
+ boost::is_same<KW, key_type>
+ , mpl::if_<Reference, reference, value_type>
+ , mpl::apply_wrap3<typename Next::binding, KW, Default, Reference>
+ >::type type;
+ };
+ };
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && !BOOST_WORKAROUND(__GNUC__, == 2)
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ friend yes_tag operator*(typed_arg_list, key_type*);
+# define BOOST_PARAMETER_CALL_HAS_KEY(next, key) (*(next*)0 * (key*)0)
+# else
+ // Overload for key_type, so the assert below will fire if the
+ // same keyword is used again
+ static yes_tag has_key(key_type*);
+ using Next::has_key;
+
+# define BOOST_PARAMETER_CALL_HAS_KEY(next, key) next::has_key((key*)0)
+# endif
+
+ BOOST_MPL_ASSERT_MSG(
+ sizeof(BOOST_PARAMETER_CALL_HAS_KEY(Next,key_type)) == sizeof(no_tag)
+ , duplicate_keyword, (key_type)
+ );
+
+# undef BOOST_PARAMETER_CALL_HAS_KEY
+#endif
+ //
+ // Begin implementation of indexing operators for looking up
+ // specific arguments by name
+ //
+
+ // Helpers that handle the case when TaggedArg is
+ // empty<T>.
+ template <class D>
+ reference get_default(D const&, mpl::false_) const
+ {
+ return arg.value;
+ }
+
+ template <class D>
+ reference get_default(D const& d, mpl::true_) const
+ {
+ return arg.value ? arg.value.get() : arg.value.construct(d.value);
+ }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || BOOST_WORKAROUND(__GNUC__, < 3) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ // These older compilers don't support the overload set creation
+ // idiom well, so we need to do all the return type calculation
+ // for the compiler and dispatch through an outer function template
+
+ // A metafunction class that, given a keyword, returns the base
+ // sublist whose get() function can produce the value for that
+ // key.
+ struct key_owner
+ {
+ template<class KW>
+ struct apply
+ {
+ typedef typename mpl::eval_if<
+ boost::is_same<KW, key_type>
+ , mpl::identity<typed_arg_list<TaggedArg,Next> >
+ , mpl::apply_wrap1<typename Next::key_owner,KW>
+ >::type type;
+ };
+ };
+
+ // Outer indexing operators that dispatch to the right node's
+ // get() function.
+ template <class KW>
+ typename mpl::apply_wrap3<binding, KW, void_, mpl::true_>::type
+ operator[](keyword<KW> const& x) const
+ {
+ typename mpl::apply_wrap1<key_owner, KW>::type const& sublist = *this;
+ return sublist.get(x);
+ }
+
+ template <class KW, class Default>
+ typename mpl::apply_wrap3<binding, KW, Default&, mpl::true_>::type
+ operator[](default_<KW, Default> x) const
+ {
+ typename mpl::apply_wrap1<key_owner, KW>::type const& sublist = *this;
+ return sublist.get(x);
+ }
+
+ template <class KW, class F>
+ typename mpl::apply_wrap3<
+ binding,KW
+ , typename result_of0<F>::type
+ , mpl::true_
+ >::type
+ operator[](lazy_default<KW,F> x) const
+ {
+ typename mpl::apply_wrap1<key_owner, KW>::type const& sublist = *this;
+ return sublist.get(x);
+ }
+
+ // These just return the stored value; when empty_typed_arg_list is
+ // reached, indicating no matching argument was passed, the
+ // default is returned, or if no default_ or lazy_default was
+ // passed, compilation fails.
+ reference get(keyword<key_type> const&) const
+ {
+ BOOST_MPL_ASSERT_NOT((holds_maybe));
+ return arg.value;
+ }
+
+ template <class Default>
+ reference get(default_<key_type,Default> const& d) const
+ {
+ return get_default(d, holds_maybe());
+ }
+
+ template <class Default>
+ reference get(lazy_default<key_type, Default>) const
+ {
+ return arg.value;
+ }
+
+#else
+
+ reference operator[](typed_keyword<key_type> const&) const
+ {
+ BOOST_MPL_ASSERT_NOT((holds_maybe));
+ return arg.value;
+ }
+/*
+ template <class Default>
+ reference operator[](default_<key_type, Default> const& d) const
+ {
+ return get_default(d, holds_maybe());
+ }
+
+ template <class Default>
+ reference operator[](lazy_default<key_type, Default>) const
+ {
+ return arg.value;
+ }*/
+
+ // Builds an overload set including operator[]s defined in base
+ // classes.
+ using Next::operator[];
+
+ //
+ // End of indexing support
+ //
+
+
+ //
+ // For parameter_requirements matching this node's key_type,
+ // return a bool constant wrapper indicating whether the
+ // requirements are satisfied by TaggedArg. Used only for
+ // compile-time computation and never really called, so a
+ // declaration is enough.
+ //
+ template <class HasDefault, class Predicate, class ArgPack>
+ static typename mpl::apply_wrap2<
+ typename mpl::lambda<Predicate, lambda_tag>::type
+ , value_type, ArgPack
+ >::type
+ satisfies(
+ parameter_requirements<key_type,Predicate,HasDefault>*
+ , ArgPack*
+ );
+
+ // Builds an overload set including satisfies functions defined
+ // in base classes.
+ using Next::satisfies;
+#endif
+
+ // Comma operator to compose argument list without using parameters<>.
+ // Useful for argument lists with undetermined length.
+ template <class KW>
+ typed_arg_list<typed_tagged_argument<KW>, self>
+ operator,(typed_tagged_argument<KW> x) const
+ {
+ return typed_arg_list<typed_tagged_argument<KW>, self>(x, *this);
+ }
+
+ // MPL sequence support
+ typedef self type; // Convenience for users
+ typedef Next tail_type; // For the benefit of iterators
+ typedef typed_arg_list_tag tag; // For dispatching to sequence intrinsics
+};
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) // ETI workaround
+template <> struct typed_arg_list<int,int> {};
+#endif
+
+// MPL sequence support
+template <class ArgumentPack>
+struct typed_arg_list_iterator
+{
+ typedef mpl::forward_iterator_tag category;
+
+ // The incremented iterator
+ typedef typed_arg_list_iterator<typename ArgumentPack::tail_type> next;
+
+ // dereferencing yields the key type
+ typedef typename ArgumentPack::key_type type;
+};
+
+template <>
+struct typed_arg_list_iterator<empty_typed_arg_list> {};
+
+}} // namespace parameter::aux
+
+// MPL sequence support
+namespace mpl
+{
+ template <>
+ struct begin_impl<parameter::aux::typed_arg_list_tag>
+ {
+ template <class S>
+ struct apply
+ {
+ typedef parameter::aux::typed_arg_list_iterator<S> type;
+ };
+ };
+
+ template <>
+ struct end_impl<parameter::aux::typed_arg_list_tag>
+ {
+ template <class>
+ struct apply
+ {
+ typedef parameter::aux::typed_arg_list_iterator<parameter::aux::empty_typed_arg_list> type;
+ };
+ };
+}
+
+} // namespace boost
+
+#endif // ARG_LIST_050329_HPP
+

Added: sandbox/guigl/boost/parameter/aux_/typed_tagged_argument.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/parameter/aux_/typed_tagged_argument.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,179 @@
+/*=================================---------------------------------------------
+ Copyright Daniel Wallin, David Abrahams 2005.
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST_PARAMETER_TYPED_TAGGED_ARGUMENT_050328_HPP
+# define BOOST_PARAMETER_TYPED_TAGGED_ARGUMENT_050328_HPP
+
+# include <boost/parameter/aux_/void.hpp>
+# include <boost/parameter/aux_/typed_arg_list.hpp>
+# include <boost/parameter/aux_/result_of0.hpp>
+# include <boost/parameter/aux_/tagged_argument.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/apply_wrap.hpp>
+# include <boost/mpl/and.hpp>
+# include <boost/mpl/not.hpp>
+# include <boost/type_traits/is_same.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+# include <boost/type_traits/is_reference.hpp>
+
+namespace boost { namespace parameter { namespace aux {
+
+// Holds a reference to an argument of type Keyword::value_type associated with
+// keyword Keyword
+
+template <class Keyword>
+struct typed_tagged_argument : tagged_argument_base
+{
+ typedef Keyword key_type;
+ typedef typename Keyword::value_type value_type;
+ typedef value_type& reference;
+
+ typed_tagged_argument(reference x) : value(x) {}
+
+ // A metafunction class that, given a keyword and a default
+ // type, returns the appropriate result type for a keyword
+ // lookup given that default
+ struct binding
+ {
+ template <class KW, class Default, class Reference>
+ struct apply
+ {
+ typedef typename mpl::eval_if<
+ boost::is_same<KW, key_type>
+ , mpl::if_<Reference, reference, value_type>
+ , mpl::identity<Default>
+ >::type type;
+ };
+ };
+
+ // Comma operator to compose argument list without using parameters<>.
+ // Useful for argument lists with undetermined length.
+ template <class Keyword2>
+ typed_arg_list<
+ typed_tagged_argument<Keyword>
+ , typed_arg_list<typed_tagged_argument<Keyword2> >
+ >
+ operator,(typed_tagged_argument<Keyword2> x) const
+ {
+ return typed_arg_list<
+ typed_tagged_argument<Keyword>
+ , typed_arg_list<typed_tagged_argument<Keyword2> >
+ >(
+ *this
+ , typed_arg_list<typed_tagged_argument<Keyword2> >(x, empty_typed_arg_list())
+ );
+ }
+
+ reference operator[](keyword<Keyword> const&) const
+ {
+ return value;
+ }
+
+# if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ template <class KW, class Default>
+ Default& get_with_default(default_<KW,Default> const& x, int) const
+ {
+ return x.value;
+ }
+
+ template <class Default>
+ reference get_with_default(default_<key_type,Default> const&, long) const
+ {
+ return value;
+ }
+
+ template <class KW, class Default>
+ typename mpl::apply_wrap3<binding, KW, Default&, mpl::true_>::type
+ operator[](default_<KW,Default> const& x) const
+ {
+ return get_with_default(x, 0L);
+ }
+
+ template <class KW, class F>
+ typename result_of0<F>::type
+ get_with_lazy_default(lazy_default<KW,F> const& x, int) const
+ {
+ return x.compute_default();
+ }
+
+ template <class F>
+ reference get_with_lazy_default(lazy_default<key_type,F> const&, long) const
+ {
+ return value;
+ }
+
+ template <class KW, class F>
+ typename mpl::apply_wrap3<
+ binding,KW
+ , typename result_of0<F>::type
+ , mpl::true_
+ >::type
+ operator[](lazy_default<KW,F> const& x) const
+ {
+ return get_with_lazy_default(x, 0L);
+ }
+# else
+ template <class Default>
+ reference operator[](default_<key_type,Default> const& x) const
+ {
+ return value;
+ }
+
+ template <class F>
+ reference operator[](lazy_default<key_type,F> const& x) const
+ {
+ return value;
+ }
+
+ template <class KW, class Default>
+ Default& operator[](default_<KW,Default> const& x) const
+ {
+ return x.value;
+ }
+
+ template <class KW, class F>
+ typename result_of0<F>::type operator[](lazy_default<KW,F> const& x) const
+ {
+ return x.compute_default();
+ }
+
+ template <class ParameterRequirements>
+ static typename ParameterRequirements::has_default
+ satisfies(ParameterRequirements*);
+
+ template <class HasDefault, class Predicate>
+ static typename mpl::apply1<Predicate, value_type>::type
+ satisfies(
+ parameter_requirements<key_type,Predicate,HasDefault>*
+ );
+# endif
+
+ reference value;
+# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
+ // warning suppression
+ private:
+ void operator=(tagged_argument const&);
+ public:
+# endif
+ // MPL sequence support
+ typedef typed_tagged_argument type; // Convenience for users
+ typedef empty_typed_arg_list tail_type; // For the benefit of iterators
+ typedef arg_list_tag tag; // For dispatching to sequence intrinsics
+
+ template<typename TypedTaggedArgument, typename Next>
+ operator const typed_arg_list<TypedTaggedArgument, Next> () const
+ {
+ return typed_arg_list<typed_tagged_argument>(*this, empty_typed_arg_list());
+ }
+};
+
+}}} // namespace boost::parameter::aux
+
+#endif // BOOST_PARAMETER_TYPED_TAGGED_ARGUMENT_050328_HPP
+

Added: sandbox/guigl/boost/parameter/typed_keyword.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/parameter/typed_keyword.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,81 @@
+/*=================================---------------------------------------------
+ Copyright Daniel Wallin, David Abrahams 2005.
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef TYPED_KEYWORD_050328_HPP
+#define TYPED_KEYWORD_050328_HPP
+
+#include <boost/parameter/aux_/unwrap_cv_reference.hpp>
+#include <boost/parameter/aux_/typed_tagged_argument.hpp>
+#include <boost/parameter/aux_/default.hpp>
+
+namespace boost { namespace parameter {
+
+// Instances of unique specializations of keyword<...> serve to
+// associate arguments with parameter names. For example:
+//
+// struct rate_; // parameter names
+// struct skew_;
+// namespace
+// {
+// keyword<rate_> rate; // keywords
+// keyword<skew_> skew;
+// }
+//
+// ...
+//
+// f(rate = 1, skew = 2.4);
+//
+template <class Tag>
+struct typed_keyword
+{
+ typedef aux::typed_tagged_argument<Tag> typed_tagged_argument_type;
+
+ typed_tagged_argument_type const
+ operator=(typename Tag::value_type& x) const
+ {
+ return typed_tagged_argument_type(x);
+ }
+
+ template <class Default>
+ aux::default_<Tag, Default>
+ operator|(Default& default_) const
+ {
+ return aux::default_<Tag, Default>(default_);
+ }
+
+ template <class Default>
+ aux::lazy_default<Tag, Default>
+ operator||(Default& default_) const
+ {
+ return aux::lazy_default<Tag, Default>(default_);
+ }
+
+ public: // Insurance against ODR violations
+
+ // People will need to define these keywords in header files. To
+ // prevent ODR violations, it's important that the keyword used in
+ // every instantiation of a function template is the same object.
+ // We provide a reference to a common instance of each keyword
+ // object and prevent construction by users.
+ static typed_keyword<Tag> const instance;
+
+ // This interface is deprecated
+ static typed_keyword<Tag>& get()
+ {
+ return const_cast<typed_keyword<Tag>&>(instance);
+ }
+};
+
+template <class Tag>
+typed_keyword<Tag> const typed_keyword<Tag>::instance = {};
+
+}} // namespace boost::parameter
+
+#endif // KEYWORD_050328_HPP
+

Added: sandbox/guigl/boost/parameter/typed_name.hpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/boost/parameter/typed_name.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,145 @@
+/*=================================---------------------------------------------
+ Copyright Daniel Wallin 2006.
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+#ifndef BOOST_PARAMETER_TYPED_NAME_060806_HPP
+# define BOOST_PARAMETER_TYPED_NAME_060806_HPP
+
+# include <boost/parameter/typed_keyword.hpp>
+# include <boost/parameter/name.hpp>
+# include <boost/detail/workaround.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/stringize.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/mpl/placeholders.hpp>
+
+# if !defined(BOOST_NO_SFINAE) \
+ && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
+
+# include <boost/utility/enable_if.hpp>
+# include <boost/mpl/lambda.hpp>
+
+namespace boost { namespace parameter { namespace aux {
+
+// Tag type passed to MPL lambda.
+struct lambda_tag;
+
+struct typed_name_tag_base
+{};
+
+template <class Tag>
+struct typed_name_tag
+{};
+
+template <class T>
+struct is_typed_name_tag
+ : mpl::false_
+{};
+
+}}} // namespace boost::parameter::aux
+
+namespace boost { namespace mpl {
+
+template <class T>
+struct lambda<
+ T
+ , typename enable_if<
+ parameter::aux::is_typed_name_tag<T>, parameter::aux::lambda_tag
+ >::type
+>
+{
+ typedef true_ is_le;
+ typedef bind3< quote3<parameter::value_type>, arg<2>, T, void> result_;
+ typedef result_ type;
+};
+
+}} // namespace boost::mpl
+
+# endif
+
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# define BOOST_PARAMETER_TYPED_NAME_OBJECT(tag, name) \
+ static ::boost::parameter::typed_keyword<tag> const& name \
+ = ::boost::parameter::typed_keyword<tag>::instance;
+# else
+# define BOOST_PARAMETER_TYPED_NAME_OBJECT(tag, name) \
+ namespace \
+ { \
+ ::boost::parameter::typed_keyword<tag> const& name \
+ = ::boost::parameter::typed_keyword<tag>::instance; \
+ }
+# endif
+
+# define BOOST_PARAMETER_BASIC_TYPED_NAME(tag_namespace, tag, name, type) \
+ namespace tag_namespace \
+ { \
+ struct tag \
+ { \
+ static char const* keyword_name() \
+ { \
+ return BOOST_PP_STRINGIZE(tag); \
+ } \
+ \
+ typedef boost::parameter::value_type< \
+ boost::mpl::_2, tag, boost::parameter::void_ \
+ > _; \
+ \
+ typedef boost::parameter::value_type< \
+ boost::mpl::_2, tag, boost::parameter::void_ \
+ > _1; \
+ \
+ typedef type value_type; \
+ }; \
+ } \
+ BOOST_PARAMETER_TYPED_NAME_OBJECT(tag_namespace::tag, name)
+
+# define BOOST_PARAMETER_BASIC_TYPED_NAME_WDEFAULT(tag_namespace, tag, name, type, default_v) \
+ namespace tag_namespace \
+ { \
+ struct tag \
+ { \
+ static char const* keyword_name() \
+ { \
+ return BOOST_PP_STRINGIZE(tag); \
+ } \
+ \
+ typedef boost::parameter::value_type< \
+ boost::mpl::_2, tag, boost::parameter::void_ \
+ > _; \
+ \
+ typedef boost::parameter::value_type< \
+ boost::mpl::_2, tag, boost::parameter::void_ \
+ > _1; \
+ \
+ typedef type value_type; \
+ \
+ static value_type &default_value() \
+ { \
+ static value_type value = default_v; \
+ return value; \
+ } \
+ \
+ }; \
+ } \
+ BOOST_PARAMETER_TYPED_NAME_OBJECT(tag_namespace::tag, name)
+
+
+# define BOOST_PARAMETER_TYPED_NAME(name,type) \
+ BOOST_PARAMETER_BASIC_TYPED_NAME(tag, name, BOOST_PP_CAT(_, name), type)
+
+# define BOOST_PARAMETER_TYPED_NAME_WDEFAULT(name,type,default_v) \
+ BOOST_PARAMETER_BASIC_TYPED_NAME_WDEFAULT(tag, name, BOOST_PP_CAT(_, name), type,default_v)
+
+/**/
+
+#endif // BOOST_PARAMETER_NAME_060806_HPP
+

Added: sandbox/guigl/libs/guigl/build/xcodeide/guigl.xcodeproj/project.pbxproj
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/build/xcodeide/guigl.xcodeproj/project.pbxproj 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,729 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXAggregateTarget section */
+ 080DD7670C1390D400EEB53D /* test */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 080DD7680C1390F300EEB53D /* Build configuration list for PBXAggregateTarget "test" */;
+ buildPhases = (
+ 080DD7660C1390D400EEB53D /* ShellScript */,
+ );
+ dependencies = (
+ );
+ name = test;
+ productName = test;
+ };
+ 08668C500C19A16F00ACB19A /* example */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 08668C520C19A16F00ACB19A /* Build configuration list for PBXAggregateTarget "example" */;
+ buildPhases = (
+ 08668C510C19A16F00ACB19A /* ShellScript */,
+ );
+ dependencies = (
+ );
+ name = example;
+ productName = test;
+ };
+ 08C675740C139E1300D85379 /* test clean */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 08C675750C139E3100D85379 /* Build configuration list for PBXAggregateTarget "test clean" */;
+ buildPhases = (
+ 08C675730C139E1300D85379 /* ShellScript */,
+ );
+ dependencies = (
+ );
+ name = "test clean";
+ productName = "clean test";
+ };
+ 08D560910E52968C005A2391 /* lib */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 08D560930E52968C005A2391 /* Build configuration list for PBXAggregateTarget "lib" */;
+ buildPhases = (
+ 08D560920E52968C005A2391 /* ShellScript */,
+ );
+ dependencies = (
+ );
+ name = lib;
+ productName = test;
+ };
+ 08F0836C0C1DF6DE00687E1B /* example clean */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 08F0836E0C1DF6DE00687E1B /* Build configuration list for PBXAggregateTarget "example clean" */;
+ buildPhases = (
+ 08F0836D0C1DF6DE00687E1B /* ShellScript */,
+ );
+ dependencies = (
+ );
+ name = "example clean";
+ productName = test;
+ };
+ 08F0FB080C19826400D0865B /* doc */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 08F0FB090C19828200D0865B /* Build configuration list for PBXAggregateTarget "doc" */;
+ buildPhases = (
+ 08F0FB070C19826400D0865B /* ShellScript */,
+ );
+ dependencies = (
+ );
+ name = doc;
+ productName = doc;
+ };
+ 08FD5E6D0C1BA8BC00F00877 /* doc clean */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 08FD5E6F0C1BA8BC00F00877 /* Build configuration list for PBXAggregateTarget "doc clean" */;
+ buildPhases = (
+ 08FD5E6E0C1BA8BC00F00877 /* ShellScript */,
+ );
+ dependencies = (
+ );
+ name = "doc clean";
+ productName = doc;
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXFileReference section */
+ 081B05C30E5FCCB600EF7F91 /* clickable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = clickable.hpp; sourceTree = "<group>"; };
+ 081B05CA0E5FCE1300EF7F91 /* clickable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = clickable.hpp; sourceTree = "<group>"; };
+ 081B06720E5FD90300EF7F91 /* labeled_button.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = labeled_button.cpp; sourceTree = "<group>"; };
+ 081B06E70E5FE50200EF7F91 /* grid.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = grid.hpp; sourceTree = "<group>"; };
+ 081B076E0E5FF2DC00EF7F91 /* slider.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = slider.hpp; sourceTree = "<group>"; };
+ 081B07890E5FF8D100EF7F91 /* slider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = slider.cpp; sourceTree = "<group>"; };
+ 081B078D0E5FF94A00EF7F91 /* draggable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = draggable.hpp; sourceTree = "<group>"; };
+ 081B07900E5FF9B000EF7F91 /* draggable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = draggable.hpp; sourceTree = "<group>"; };
+ 081B07930E5FFBEC00EF7F91 /* mouse_tracking.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = mouse_tracking.hpp; sourceTree = "<group>"; };
+ 0885D4290E539AF600DFFA5D /* test_field_map_compilation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_field_map_compilation.cpp; sourceTree = "<group>"; };
+ 0885D4300E539B5F00DFFA5D /* test_parameter_compilation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_parameter_compilation.cpp; sourceTree = "<group>"; };
+ 0885D46A0E539F7000DFFA5D /* test_parameter_dispatch_compilation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_parameter_dispatch_compilation.cpp; sourceTree = "<group>"; };
+ 0885D48F0E53A32300DFFA5D /* test_field_map_compilation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = test_field_map_compilation.hpp; sourceTree = "<group>"; };
+ 0885D4900E53A32300DFFA5D /* test_parameter_compilation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = test_parameter_compilation.hpp; sourceTree = "<group>"; };
+ 0885D4910E53A32300DFFA5D /* test_parameter_dispatch_compilation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = test_parameter_dispatch_compilation.hpp; sourceTree = "<group>"; };
+ 08978DC70E5D944B00C79062 /* positioned.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = positioned.hpp; sourceTree = "<group>"; };
+ 08978DCA0E5D94A500C79062 /* base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = base.hpp; sourceTree = "<group>"; };
+ 08978DD60E5D953000C79062 /* compound.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = compound.hpp; sourceTree = "<group>"; };
+ 08978DEC0E5D987900C79062 /* solid_background.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = solid_background.hpp; sourceTree = "<group>"; };
+ 08978DF20E5D995200C79062 /* window.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = window.hpp; sourceTree = "<group>"; };
+ 08978E0C0E5D9C2200C79062 /* window.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = window.hpp; sourceTree = "<group>"; };
+ 08978E1E0E5D9DE300C79062 /* button.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = button.cpp; sourceTree = "<group>"; };
+ 08978E1F0E5D9E1900C79062 /* window.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = window.cpp; sourceTree = "<group>"; };
+ 08978EC80E5DA4CD00C79062 /* positioned.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = positioned.hpp; sourceTree = "<group>"; };
+ 08978ECC0E5DA55800C79062 /* compound.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = compound.hpp; sourceTree = "<group>"; };
+ 08978ECF0E5DA5B100C79062 /* solid_background.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = solid_background.hpp; sourceTree = "<group>"; };
+ 08978ED00E5DA5BD00C79062 /* window.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = window.hpp; sourceTree = "<group>"; };
+ 08978F510E5DABCD00C79062 /* positioned.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = positioned.cpp; sourceTree = "<group>"; };
+ 08978F570E5DAC1800C79062 /* compound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = compound.cpp; sourceTree = "<group>"; };
+ 08978F580E5DAC2600C79062 /* solid_background.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = solid_background.cpp; sourceTree = "<group>"; };
+ 08978F590E5DAC3000C79062 /* window.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = window.cpp; sourceTree = "<group>"; };
+ 089790490E5DB3E800C79062 /* access.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = access.hpp; sourceTree = "<group>"; };
+ 0897911E0E5DB84F00C79062 /* labeled.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = labeled.hpp; sourceTree = "<group>"; };
+ 089791210E5DB8B000C79062 /* labeled.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = labeled.hpp; sourceTree = "<group>"; };
+ 089791240E5DB9DF00C79062 /* colored.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = colored.hpp; sourceTree = "<group>"; };
+ 089791250E5DB9EB00C79062 /* colored.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = colored.hpp; sourceTree = "<group>"; };
+ 0897912F0E5DBB0F00C79062 /* labeled_button.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = labeled_button.hpp; sourceTree = "<group>"; };
+ 0897913B0E5DBC1000C79062 /* glut.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = glut.hpp; sourceTree = "<group>"; };
+ 089791BA0E5DC06400C79062 /* event.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = event.hpp; sourceTree = "<group>"; };
+ 08998DDF0E528C1F00F583A2 /* window.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = window.hpp; sourceTree = "<group>"; };
+ 089B15050E5302870033B2D8 /* test_field_map.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_field_map.cpp; sourceTree = "<group>"; };
+ 089B15410E5304660033B2D8 /* types.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = types.hpp; sourceTree = "<group>"; };
+ 089D83740E5A35D800325868 /* parameters.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = parameters.hpp; sourceTree = "<group>"; };
+ 089D83780E5A3AA900325868 /* test_parameter_map_compilation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_parameter_map_compilation.cpp; sourceTree = "<group>"; };
+ 089D83800E5A3C0B00325868 /* test_parameter_map_compilation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = test_parameter_map_compilation.hpp; sourceTree = "<group>"; };
+ 089E06FB0E5D0F3500C425FE /* button.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = button.hpp; sourceTree = "<group>"; };
+ 089E34A60E5BB90900D9AD51 /* typed_keyword.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = typed_keyword.hpp; sourceTree = "<group>"; };
+ 089E34AB0E5C865400D9AD51 /* typed_name.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = typed_name.hpp; sourceTree = "<group>"; };
+ 089E86720E5A80E500DA4902 /* test_parameter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_parameter.cpp; sourceTree = "<group>"; };
+ 08A13C090E535040008C8A10 /* field_map.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = field_map.hpp; sourceTree = "<group>"; };
+ 08A77AB30E4F91AA00B8793E /* Jamroot */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Jamroot; path = ../../../../Jamroot; sourceTree = SOURCE_ROOT; };
+ 08A77AB40E4F91AB00B8793E /* LICENSE_1_0.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = LICENSE_1_0.txt; path = ../../../../LICENSE_1_0.txt; sourceTree = SOURCE_ROOT; };
+ 08A77B010E4FC51C00B8793E /* Jamfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.jam; path = Jamfile; sourceTree = "<group>"; };
+ 08AD8F620E5CD63400BFB2C8 /* opengl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = opengl.hpp; sourceTree = "<group>"; };
+ 08D0F2550E6712E90026C6DF /* active_colored.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = active_colored.hpp; sourceTree = "<group>"; };
+ 08D0F25D0E67139E0026C6DF /* active_colored.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = active_colored.hpp; sourceTree = "<group>"; };
+ 08D5606D0E52901F005A2391 /* window.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = window.cpp; sourceTree = "<group>"; };
+ 08D5608E0E529642005A2391 /* Jamfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.jam; path = Jamfile; sourceTree = "<group>"; };
+ 08D560D20E529971005A2391 /* Jamfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.jam; path = Jamfile; sourceTree = "<group>"; };
+ 08D560D70E5299E6005A2391 /* window_example.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = window_example.cpp; sourceTree = "<group>"; };
+ 08D5614B0E529DF1005A2391 /* application.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = application.hpp; sourceTree = "<group>"; };
+ 08D561500E529E3E005A2391 /* application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = application.cpp; sourceTree = "<group>"; };
+ 08E225F00E65D5C700C3319B /* mouse_tracking.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = mouse_tracking.hpp; sourceTree = "<group>"; };
+ 08F506AB0E5B41AD0020D95E /* typed_tagged_argument.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = typed_tagged_argument.hpp; sourceTree = "<group>"; };
+ 08F506AF0E5B42930020D95E /* typed_arg_list.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = typed_arg_list.hpp; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXGroup section */
+ 080DD7560C13908400EEB53D = {
+ isa = PBXGroup;
+ children = (
+ 08F5068A0E5B41900020D95E /* parameter */,
+ 08A13C080E535040008C8A10 /* field_map */,
+ 08A454D80E5243ED002C4151 /* guigl */,
+ 08D5606C0E528FF4005A2391 /* src */,
+ 08A77AB30E4F91AA00B8793E /* Jamroot */,
+ 08A77AB40E4F91AB00B8793E /* LICENSE_1_0.txt */,
+ 08A439340E295B35009845FD /* build */,
+ 08FD5DE40C1BA60700F00877 /* doc */,
+ 08668C4D0C19A16300ACB19A /* example */,
+ 08C675960C13A03E00D85379 /* test */,
+ );
+ sourceTree = "<group>";
+ };
+ 081B06DC0E5FE32A00EF7F91 /* layout */ = {
+ isa = PBXGroup;
+ children = (
+ 081B06E70E5FE50200EF7F91 /* grid.hpp */,
+ );
+ path = layout;
+ sourceTree = "<group>";
+ };
+ 08668C4D0C19A16300ACB19A /* example */ = {
+ isa = PBXGroup;
+ children = (
+ 08D560D20E529971005A2391 /* Jamfile */,
+ 08D560D70E5299E6005A2391 /* window_example.cpp */,
+ );
+ name = example;
+ path = ../../example;
+ sourceTree = SOURCE_ROOT;
+ };
+ 08978DC60E5D943200C79062 /* view */ = {
+ isa = PBXGroup;
+ children = (
+ 08978EC60E5DA49D00C79062 /* impl */,
+ 08978DC70E5D944B00C79062 /* positioned.hpp */,
+ 08978DCA0E5D94A500C79062 /* base.hpp */,
+ 08978DD60E5D953000C79062 /* compound.hpp */,
+ 08978DEC0E5D987900C79062 /* solid_background.hpp */,
+ 08978DF20E5D995200C79062 /* window.hpp */,
+ 0897911E0E5DB84F00C79062 /* labeled.hpp */,
+ 089791250E5DB9EB00C79062 /* colored.hpp */,
+ 081B05C30E5FCCB600EF7F91 /* clickable.hpp */,
+ 081B078D0E5FF94A00EF7F91 /* draggable.hpp */,
+ 081B07930E5FFBEC00EF7F91 /* mouse_tracking.hpp */,
+ 08D0F2550E6712E90026C6DF /* active_colored.hpp */,
+ );
+ path = view;
+ sourceTree = "<group>";
+ };
+ 08978E020E5D9B8100C79062 /* widget */ = {
+ isa = PBXGroup;
+ children = (
+ 08978E1E0E5D9DE300C79062 /* button.cpp */,
+ 08978E1F0E5D9E1900C79062 /* window.cpp */,
+ 081B06720E5FD90300EF7F91 /* labeled_button.cpp */,
+ 081B07890E5FF8D100EF7F91 /* slider.cpp */,
+ );
+ path = widget;
+ sourceTree = "<group>";
+ };
+ 08978EC60E5DA49D00C79062 /* impl */ = {
+ isa = PBXGroup;
+ children = (
+ 08978EC80E5DA4CD00C79062 /* positioned.hpp */,
+ 08978ECC0E5DA55800C79062 /* compound.hpp */,
+ 08978ECF0E5DA5B100C79062 /* solid_background.hpp */,
+ 08978ED00E5DA5BD00C79062 /* window.hpp */,
+ 089791210E5DB8B000C79062 /* labeled.hpp */,
+ 089791240E5DB9DF00C79062 /* colored.hpp */,
+ 081B05CA0E5FCE1300EF7F91 /* clickable.hpp */,
+ 081B07900E5FF9B000EF7F91 /* draggable.hpp */,
+ 08E225F00E65D5C700C3319B /* mouse_tracking.hpp */,
+ 08D0F25D0E67139E0026C6DF /* active_colored.hpp */,
+ );
+ path = impl;
+ sourceTree = "<group>";
+ };
+ 08978F500E5DABBE00C79062 /* view */ = {
+ isa = PBXGroup;
+ children = (
+ 08978F510E5DABCD00C79062 /* positioned.cpp */,
+ 08978F570E5DAC1800C79062 /* compound.cpp */,
+ 08978F580E5DAC2600C79062 /* solid_background.cpp */,
+ 08978F590E5DAC3000C79062 /* window.cpp */,
+ );
+ path = view;
+ sourceTree = "<group>";
+ };
+ 089E06FA0E5D0F2A00C425FE /* widget */ = {
+ isa = PBXGroup;
+ children = (
+ 089E06FB0E5D0F3500C425FE /* button.hpp */,
+ 08978E0C0E5D9C2200C79062 /* window.hpp */,
+ 0897912F0E5DBB0F00C79062 /* labeled_button.hpp */,
+ 081B076E0E5FF2DC00EF7F91 /* slider.hpp */,
+ );
+ path = widget;
+ sourceTree = "<group>";
+ };
+ 08A13C080E535040008C8A10 /* field_map */ = {
+ isa = PBXGroup;
+ children = (
+ 08A13C090E535040008C8A10 /* field_map.hpp */,
+ );
+ name = field_map;
+ path = ../../../../boost/field_map;
+ sourceTree = SOURCE_ROOT;
+ };
+ 08A439340E295B35009845FD /* build */ = {
+ isa = PBXGroup;
+ children = (
+ 08D5608E0E529642005A2391 /* Jamfile */,
+ );
+ name = build;
+ path = ..;
+ sourceTree = SOURCE_ROOT;
+ };
+ 08A454D80E5243ED002C4151 /* guigl */ = {
+ isa = PBXGroup;
+ children = (
+ 081B06DC0E5FE32A00EF7F91 /* layout */,
+ 08978DC60E5D943200C79062 /* view */,
+ 089E06FA0E5D0F2A00C425FE /* widget */,
+ 08AD8F610E5CD62600BFB2C8 /* platform */,
+ 08998DDF0E528C1F00F583A2 /* window.hpp */,
+ 08D5614B0E529DF1005A2391 /* application.hpp */,
+ 089B15410E5304660033B2D8 /* types.hpp */,
+ 089D83740E5A35D800325868 /* parameters.hpp */,
+ 089790490E5DB3E800C79062 /* access.hpp */,
+ 089791BA0E5DC06400C79062 /* event.hpp */,
+ );
+ name = guigl;
+ path = ../../../../boost/guigl;
+ sourceTree = SOURCE_ROOT;
+ };
+ 08AD8F610E5CD62600BFB2C8 /* platform */ = {
+ isa = PBXGroup;
+ children = (
+ 08AD8F620E5CD63400BFB2C8 /* opengl.hpp */,
+ 0897913B0E5DBC1000C79062 /* glut.hpp */,
+ );
+ path = platform;
+ sourceTree = "<group>";
+ };
+ 08C675960C13A03E00D85379 /* test */ = {
+ isa = PBXGroup;
+ children = (
+ 0885D48F0E53A32300DFFA5D /* test_field_map_compilation.hpp */,
+ 089D83800E5A3C0B00325868 /* test_parameter_map_compilation.hpp */,
+ 0885D4900E53A32300DFFA5D /* test_parameter_compilation.hpp */,
+ 0885D4910E53A32300DFFA5D /* test_parameter_dispatch_compilation.hpp */,
+ 08A77B010E4FC51C00B8793E /* Jamfile */,
+ 089B15050E5302870033B2D8 /* test_field_map.cpp */,
+ 0885D4290E539AF600DFFA5D /* test_field_map_compilation.cpp */,
+ 0885D4300E539B5F00DFFA5D /* test_parameter_compilation.cpp */,
+ 089D83780E5A3AA900325868 /* test_parameter_map_compilation.cpp */,
+ 0885D46A0E539F7000DFFA5D /* test_parameter_dispatch_compilation.cpp */,
+ 089E86720E5A80E500DA4902 /* test_parameter.cpp */,
+ );
+ name = test;
+ path = ../../test;
+ sourceTree = SOURCE_ROOT;
+ };
+ 08D5606C0E528FF4005A2391 /* src */ = {
+ isa = PBXGroup;
+ children = (
+ 08978F500E5DABBE00C79062 /* view */,
+ 08978E020E5D9B8100C79062 /* widget */,
+ 08D5606D0E52901F005A2391 /* window.cpp */,
+ 08D561500E529E3E005A2391 /* application.cpp */,
+ );
+ name = src;
+ path = ../../src;
+ sourceTree = SOURCE_ROOT;
+ };
+ 08F5068A0E5B41900020D95E /* parameter */ = {
+ isa = PBXGroup;
+ children = (
+ 08F5068B0E5B41900020D95E /* aux_ */,
+ 089E34A60E5BB90900D9AD51 /* typed_keyword.hpp */,
+ 089E34AB0E5C865400D9AD51 /* typed_name.hpp */,
+ );
+ name = parameter;
+ path = ../../../../boost/parameter;
+ sourceTree = SOURCE_ROOT;
+ };
+ 08F5068B0E5B41900020D95E /* aux_ */ = {
+ isa = PBXGroup;
+ children = (
+ 08F506AF0E5B42930020D95E /* typed_arg_list.hpp */,
+ 08F506AB0E5B41AD0020D95E /* typed_tagged_argument.hpp */,
+ );
+ path = aux_;
+ sourceTree = "<group>";
+ };
+ 08FD5DE40C1BA60700F00877 /* doc */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = doc;
+ path = ../../doc;
+ sourceTree = SOURCE_ROOT;
+ };
+/* End PBXGroup section */
+
+/* Begin PBXProject section */
+ 080DD7580C13908400EEB53D /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 080DD7590C13908400EEB53D /* Build configuration list for PBXProject "guigl" */;
+ compatibilityVersion = "Xcode 2.4";
+ hasScannedForEncodings = 0;
+ mainGroup = 080DD7560C13908400EEB53D;
+ projectDirPath = "";
+ projectRoot = ../../../..;
+ targets = (
+ 080DD7670C1390D400EEB53D /* test */,
+ 08C675740C139E1300D85379 /* test clean */,
+ 08F0FB080C19826400D0865B /* doc */,
+ 08FD5E6D0C1BA8BC00F00877 /* doc clean */,
+ 08668C500C19A16F00ACB19A /* example */,
+ 08F0836C0C1DF6DE00687E1B /* example clean */,
+ 08D560910E52968C005A2391 /* lib */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 080DD7660C1390D400EEB53D /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# shell script goes here\nstyle=`echo $BUILD_STYLE | sed 'y/DR/dr/'` \nbjam ../../test $style";
+ };
+ 08668C510C19A16F00ACB19A /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# shell script goes here\nstyle=`echo $BUILD_STYLE | sed 'y/DR/dr/'` \nbjam --v2 ../../example $style";
+ };
+ 08C675730C139E1300D85379 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# shell script goes here\nstyle=`echo $BUILD_STYLE | sed 'y/DR/dr/'` \nbjam --v2 --clean ../../test $style";
+ };
+ 08D560920E52968C005A2391 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# shell script goes here\nstyle=`echo $BUILD_STYLE | sed 'y/DR/dr/'` \nbjam ../../build $style";
+ };
+ 08F0836D0C1DF6DE00687E1B /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# shell script goes here\nstyle=`echo $BUILD_STYLE | sed 'y/DR/dr/'` \nbjam --v2 --toolset=darwin ../../example clean $style";
+ };
+ 08F0FB070C19826400D0865B /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "style=`echo $BUILD_STYLE | sed 'y/DR/dr/'` \ncd ../../doc\nbjam --v2 --toolset=darwin $style";
+ };
+ 08FD5E6E0C1BA8BC00F00877 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "cd ../../doc\nbjam --v2 --clean --toolset=darwin release";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 080DD75A0C13908400EEB53D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ };
+ name = Debug;
+ };
+ 080DD75B0C13908400EEB53D /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ };
+ name = Release;
+ };
+ 080DD7690C1390F300EEB53D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ PRODUCT_NAME = test;
+ };
+ name = Debug;
+ };
+ 080DD76A0C1390F300EEB53D /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ PRODUCT_NAME = test;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 08668C530C19A16F00ACB19A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ PRODUCT_NAME = test;
+ };
+ name = Debug;
+ };
+ 08668C540C19A16F00ACB19A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ PRODUCT_NAME = test;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 08C675760C139E3100D85379 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ PRODUCT_NAME = "clean test";
+ };
+ name = Debug;
+ };
+ 08C675770C139E3100D85379 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ PRODUCT_NAME = "clean test";
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 08D560940E52968C005A2391 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ PRODUCT_NAME = test;
+ };
+ name = Debug;
+ };
+ 08D560950E52968C005A2391 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ PRODUCT_NAME = test;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 08F0836F0C1DF6DE00687E1B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ PRODUCT_NAME = test;
+ };
+ name = Debug;
+ };
+ 08F083700C1DF6DE00687E1B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ PRODUCT_NAME = test;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 08F0FB0A0C19828200D0865B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ PRODUCT_NAME = doc;
+ };
+ name = Debug;
+ };
+ 08F0FB0B0C19828200D0865B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ PRODUCT_NAME = doc;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 08FD5E700C1BA8BC00F00877 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ PRODUCT_NAME = doc;
+ };
+ name = Debug;
+ };
+ 08FD5E710C1BA8BC00F00877 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ PRODUCT_NAME = doc;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 080DD7590C13908400EEB53D /* Build configuration list for PBXProject "guigl" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 080DD75A0C13908400EEB53D /* Debug */,
+ 080DD75B0C13908400EEB53D /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 080DD7680C1390F300EEB53D /* Build configuration list for PBXAggregateTarget "test" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 080DD7690C1390F300EEB53D /* Debug */,
+ 080DD76A0C1390F300EEB53D /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 08668C520C19A16F00ACB19A /* Build configuration list for PBXAggregateTarget "example" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 08668C530C19A16F00ACB19A /* Debug */,
+ 08668C540C19A16F00ACB19A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 08C675750C139E3100D85379 /* Build configuration list for PBXAggregateTarget "test clean" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 08C675760C139E3100D85379 /* Debug */,
+ 08C675770C139E3100D85379 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 08D560930E52968C005A2391 /* Build configuration list for PBXAggregateTarget "lib" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 08D560940E52968C005A2391 /* Debug */,
+ 08D560950E52968C005A2391 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 08F0836E0C1DF6DE00687E1B /* Build configuration list for PBXAggregateTarget "example clean" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 08F0836F0C1DF6DE00687E1B /* Debug */,
+ 08F083700C1DF6DE00687E1B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 08F0FB090C19828200D0865B /* Build configuration list for PBXAggregateTarget "doc" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 08F0FB0A0C19828200D0865B /* Debug */,
+ 08F0FB0B0C19828200D0865B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 08FD5E6F0C1BA8BC00F00877 /* Build configuration list for PBXAggregateTarget "doc clean" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 08FD5E700C1BA8BC00F00877 /* Debug */,
+ 08FD5E710C1BA8BC00F00877 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 080DD7580C13908400EEB53D /* Project object */;
+}

Added: sandbox/guigl/libs/guigl/example/Jamfile
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/example/Jamfile 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,14 @@
+#==================================---------------------------------------------
+# Copyright 2008 Stjepan Rajko
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+#----------------------------------------------===============================*/
+
+project boost/guigl/test
+ : requirements
+ <library>$(TOP)/libs/guigl/build//boost_guigl/<link>static
+ ;
+
+exe window_example : window_example.cpp ;
\ No newline at end of file

Added: sandbox/guigl/libs/guigl/example/window_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/example/window_example.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,68 @@
+/*=================================---------------------------------------------
+ Copyright 2007,2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+
+#include <boost/guigl/application.hpp>
+#include <boost/guigl/layout/grid.hpp>
+#include <boost/guigl/window.hpp>
+#include <boost/guigl/widget/button.hpp>
+#include <boost/guigl/widget/labeled_button.hpp>
+#include <boost/guigl/widget/slider.hpp>
+
+#include <boost/bind.hpp>
+#include <boost/bind/placeholders.hpp>
+
+using namespace boost::guigl;
+
+color_type make_grey(double value)
+{
+ return color_type(value, value, value);
+}
+
+int main()
+{
+ window test_window1(( _label = "window example 1", _size=size_type(300,300) ));
+ window test_window2(( _size=size_type(300,100), _label = "window example 2" ));
+ window test_window3(( _label = "window example 3" ));
+
+ widget::labeled_button *b1 = new widget::labeled_button((
+ _size=size_type(100,30),
+ _position=position_type(50, 50),
+ _background=color_type(1,1,1),
+ _active_color=color_type(1,0,0),
+ _color=color_type(0,0,0),
+ _label="Button 1"));
+
+ test_window1 << b1;
+ widget::slider *s = new widget::slider((
+ _size=size_type(100,30),
+ _position=position_type(50,80),
+ _background=color_type(0.5,0.5,0.5),
+ _active_color=color_type(0,1,0) ));
+ test_window1 << s;
+
+ // clicking the button changes the slider value to 0.5
+ b1->on_click.connect(boost::bind(&widget::slider::set_value, s, 0.5));
+ // moving the slider changes the label color of the button
+ s->on_value_change.connect(boost::bind(&widget::labeled_button::set_color, b1, boost::bind(make_grey, _1)));
+
+ test_window2
+ << new widget::labeled_button((
+ _size=size_type(100,30),
+ _position=position_type(50, 5),
+ _background=color_type(0.5,0.5,0.5),
+ _active_color=color_type(0,1,0),
+ _color=color_type(1,1,1),
+ _label="Button 2"));
+
+ layout::grid grid_layout(( _grid_size=test_window3.size(), _horizontal=3, _vertical=3 ));
+ for(int i=1; i<=9; i++)
+ test_window3 << grid_layout.create<widget::button>(( _background=color_type(1.0/i,1.0/i,1.0/i) ));
+
+ application::run();
+}
\ No newline at end of file

Added: sandbox/guigl/libs/guigl/src/application.cpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/src/application.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,19 @@
+/*=================================---------------------------------------------
+ Copyright 2007,2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+
+#include <boost/guigl/application.hpp>
+
+namespace boost { namespace guigl {
+
+void application::run()
+{
+ glutMainLoop();
+}
+
+}}
\ No newline at end of file

Added: sandbox/guigl/libs/guigl/src/view/compound.cpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/src/view/compound.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,17 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+
+#include <boost/guigl/view/impl/compound.hpp>
+
+
+namespace boost { namespace guigl { namespace view {
+
+BOOST_GUIGL_DRAW_IMPL(compound)
+
+}}}

Added: sandbox/guigl/libs/guigl/src/view/positioned.cpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/src/view/positioned.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,17 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+
+#include <boost/guigl/view/impl/positioned.hpp>
+
+
+namespace boost { namespace guigl { namespace view {
+
+BOOST_GUIGL_DRAW_IMPL(positioned)
+
+}}}

Added: sandbox/guigl/libs/guigl/src/view/solid_background.cpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/src/view/solid_background.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,17 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+
+#include <boost/guigl/view/impl/solid_background.hpp>
+
+
+namespace boost { namespace guigl { namespace view {
+
+BOOST_GUIGL_DRAW_IMPL(solid_background)
+
+}}}

Added: sandbox/guigl/libs/guigl/src/view/window.cpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/src/view/window.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,17 @@
+/*=================================---------------------------------------------
+ Copyright 2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+
+#include <boost/guigl/view/impl/window.hpp>
+
+
+namespace boost { namespace guigl { namespace view {
+
+BOOST_GUIGL_DRAW_IMPL(window)
+
+}}}

Added: sandbox/guigl/libs/guigl/src/widget/button.cpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/src/widget/button.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,41 @@
+/*=================================---------------------------------------------
+ Copyright 2007,2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+
+#include <boost/guigl/window.hpp>
+#include <boost/guigl/widget/button.hpp>
+#include <boost/guigl/view/impl/active_colored.hpp>
+#include <boost/guigl/view/impl/clickable.hpp>
+#include <boost/guigl/view/impl/positioned.hpp>
+#include <boost/guigl/view/impl/solid_background.hpp>
+
+namespace boost { namespace guigl { namespace widget {
+
+BOOST_GUIGL_WIDGET_DRAW_IMPL(button)
+
+inline void button::draw_prologue()
+{
+ base_type::draw_prologue();
+ if(button_down())
+ {
+ use_active_color();
+ glRectd(0,0,size().x, size().y);
+ }
+}
+
+inline void button::draw_epilogue()
+{
+ base_type::draw_epilogue();
+}
+
+void button::clickable_button_down(bool state)
+{
+ guigl::window::redraw(*this);
+}
+
+}}}
\ No newline at end of file

Added: sandbox/guigl/libs/guigl/src/widget/labeled_button.cpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/src/widget/labeled_button.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,28 @@
+/*=================================---------------------------------------------
+ Copyright 2007,2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+
+#include <boost/guigl/widget/labeled_button.hpp>
+#include <boost/guigl/view/impl/colored.hpp>
+#include <boost/guigl/view/impl/labeled.hpp>
+
+namespace boost { namespace guigl { namespace widget {
+
+BOOST_GUIGL_WIDGET_DRAW_IMPL(labeled_button)
+
+inline void labeled_button::draw_prologue()
+{
+ base_type::draw_prologue();
+}
+
+inline void labeled_button::draw_epilogue()
+{
+ base_type::draw_epilogue();
+}
+
+}}}
\ No newline at end of file

Added: sandbox/guigl/libs/guigl/src/widget/slider.cpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/src/widget/slider.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,42 @@
+/*=================================---------------------------------------------
+ Copyright 2007,2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+
+#include <boost/guigl/window.hpp>
+#include <boost/guigl/widget/slider.hpp>
+#include <boost/guigl/view/impl/active_colored.hpp>
+#include <boost/guigl/view/impl/positioned.hpp>
+#include <boost/guigl/view/impl/solid_background.hpp>
+#include <boost/guigl/view/impl/draggable.hpp>
+#include <iostream>
+
+namespace boost { namespace guigl { namespace widget {
+
+BOOST_GUIGL_WIDGET_DRAW_IMPL(slider)
+
+inline void slider::draw_prologue()
+{
+ base_type::draw_prologue();
+
+ use_active_color();
+ glRectd(0,0,m_value * size().x, size().y);
+}
+
+inline void slider::draw_epilogue()
+{
+ base_type::draw_epilogue();
+}
+
+void slider::draggable_on_drag(const position_type &position)
+{
+ m_value = position.x / size().x;
+ guigl::window::redraw(*this);
+ on_value_change(m_value);
+}
+
+}}}
\ No newline at end of file

Added: sandbox/guigl/libs/guigl/src/widget/window.cpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/src/widget/window.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,31 @@
+/*=================================---------------------------------------------
+ Copyright 2007,2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+
+#include <boost/guigl/widget/window.hpp>
+#include <boost/guigl/view/impl/compound.hpp>
+#include <boost/guigl/view/impl/mouse_tracking.hpp>
+#include <boost/guigl/view/impl/window.hpp>
+
+
+namespace boost { namespace guigl { namespace widget {
+
+BOOST_GUIGL_WIDGET_DRAW_IMPL(window)
+
+inline void window::draw_prologue()
+{
+ base_type::draw_prologue();
+}
+
+inline void window::draw_epilogue()
+{
+ base_type::draw_epilogue();
+}
+
+
+}}}
\ No newline at end of file

Added: sandbox/guigl/libs/guigl/src/window.cpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/src/window.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,170 @@
+/*=================================---------------------------------------------
+ Copyright 2007,2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+
+#include <boost/guigl/window.hpp>
+#include <boost/config.hpp>
+
+#include <map>
+
+#include <boost/guigl/platform/glut.hpp>
+#include <iostream>
+
+namespace boost { namespace guigl {
+
+class glut
+{
+public:
+ glut()
+ {
+ int argc = 0;
+ glutInit(&argc,0);
+ }
+
+ int create_window(const size_type &size, const std::string &label, window::impl *impl)
+ {
+ glutInitWindowSize(size.x, size.y);
+ glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA );
+ int id = glutCreateWindow(label.c_str());
+ s_windows[id] = impl;
+
+ glutDisplayFunc(display);
+ glutMouseFunc(mouse);
+ glutPassiveMotionFunc(movement);
+ glutMotionFunc(movement);
+ glutEntryFunc(entry);
+
+ return id;
+ }
+
+ void destroy_window(int id)
+ {
+ glutDestroyWindow(id);
+ }
+private:
+ static void display();
+ static void mouse(int button, int state, int x, int y);
+ static void movement(int x, int y);
+ static void entry(int state);
+ static std::map<int, window::impl *> s_windows;
+};
+
+std::map<int, window::impl *> glut::s_windows;
+
+
+class window::impl
+{
+public:
+ impl(const window::argument_pack_type &map, window *ptr)
+ : m_window(ptr)
+ {
+ if(!s_glut)
+ s_glut = new glut();
+ m_label = map[_label];
+ m_id = s_glut->create_window(map[_size], m_label, this);
+ }
+ void display()
+ {
+ m_window->draw();
+ }
+ void mouse(int button, int state, int x, int y)
+ {
+ if (!m_window->mouse_state())
+ return;
+
+ button_event event_info;
+ switch(button)
+ {
+ case GLUT_LEFT_BUTTON:
+ event_info.button = button::left; break;
+ case GLUT_MIDDLE_BUTTON:
+ event_info.button = button::middle; break;
+ case GLUT_RIGHT_BUTTON:
+ event_info.button = button::right;
+ }
+ switch(state)
+ {
+ case GLUT_UP:
+ event_info.direction = direction::up; break;
+ case GLUT_DOWN:
+ event_info.direction = direction::down; break;
+ }
+ event_info.position = position_type(x, y);
+ m_window->on_event(event_info);
+ }
+ void movement(int x, int y)
+ {
+ if (!m_window->mouse_state())
+ return;
+ movement_event event_info;
+ event_info.position = position_type(x, y);
+ m_window->on_event(event_info);
+ }
+ void entry_exit(int state)
+ {
+ entry_exit_event event_info;
+ event_info.region = state == GLUT_ENTERED ? region::entry : region::exit;
+ m_window->on_event(event_info);
+ }
+ ~impl()
+ {
+ s_glut->destroy_window(m_id);
+ }
+ int id() const
+ { return m_id; }
+private:
+ int m_id;
+ static glut *s_glut;
+ window *m_window;
+ std::string m_label;
+};
+
+glut *window::impl::s_glut = 0;
+
+window::window(const argument_pack_type &args)
+ : widget::window(args)
+ , m_impl(new impl(args, this))
+{}
+
+window::~window()
+{}
+
+void window::redraw(const view::positioned<> &v)
+{
+ const window *window_ptr = dynamic_cast<const window *>(v.root());
+ if(window_ptr)
+ glutPostWindowRedisplay(window_ptr->m_impl->id());
+}
+
+void glut::display()
+{
+ int id = glutGetWindow();
+ s_windows[id]->display();
+ glutSwapBuffers();
+}
+
+void glut::mouse(int button, int state, int x, int y)
+{
+ int id = glutGetWindow();
+ s_windows[id]->mouse(button, state, x, y);
+}
+
+void glut::movement(int x, int y)
+{
+ int id = glutGetWindow();
+ s_windows[id]->movement(x, y);
+}
+
+void glut::entry(int state)
+{
+ int id = glutGetWindow();
+ s_windows[id]->entry_exit(state);
+}
+
+
+} }
\ No newline at end of file

Modified: sandbox/guigl/libs/guigl/test/Jamfile
==============================================================================
--- sandbox/guigl/libs/guigl/test/Jamfile (original)
+++ sandbox/guigl/libs/guigl/test/Jamfile 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -15,14 +15,4 @@
       <library>/boost/test//boost_unit_test_framework/<link>static
     ;
 
-run test_field_map.cpp ;
-run test_field_map_compilation.cpp ;
-run test_parameter_compilation.cpp ;
-run test_parameter_dispatch_compilation.cpp ;
-
-#obj test_field_map_compilation : test_field_map_compilation.cpp ;
-#time time-test_field_map_compilation : test_field_map_compilation ;
-#obj test_parameter_compilation : test_parameter_compilation.cpp ;
-#time time-test_parameter_compilation : test_parameter_compilation ;
-#obj test_parameter_dispatch_compilation : test_parameter_dispatch_compilation.cpp ;
-#time time-test_parameter_dispatch_compilation : test_parameter_dispatch_compilation ;
\ No newline at end of file
+run test_parameter.cpp ;

Added: sandbox/guigl/libs/guigl/test/test_parameter.cpp
==============================================================================
--- (empty file)
+++ sandbox/guigl/libs/guigl/test/test_parameter.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -0,0 +1,39 @@
+/*=================================---------------------------------------------
+ Copyright 2007,2008 Stjepan Rajko
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+-----------------------------------------------===============================*/
+
+
+#include <boost/guigl/parameters.hpp>
+
+#define BOOST_TEST_MAIN
+#include <boost/test/unit_test.hpp>
+
+using namespace boost::guigl;
+
+struct size_and_label
+{
+ typedef argument_pack<tag::label, tag::size>::type argument_pack_type;
+
+ size_and_label(const argument_pack_type &args)
+ {
+ label = args[_label];
+ size = args[_size];
+ }
+ std::string label;
+ size_type size;
+};
+
+BOOST_AUTO_TEST_CASE( test_parameter)
+{
+ size_and_label one(( _label = "name 1", _size = size_type(1, 2) ));
+ size_and_label two(( _label = "name 2" ));
+
+ BOOST_CHECK_EQUAL(one.size.x, 1);
+ BOOST_CHECK_EQUAL(tag::size::default_value().x, 200);
+ BOOST_CHECK_EQUAL(two.size.x, 200);
+
+}
\ No newline at end of file

Modified: sandbox/guigl/libs/guigl/test/test_parameter_compilation.cpp
==============================================================================
--- sandbox/guigl/libs/guigl/test/test_parameter_compilation.cpp (original)
+++ sandbox/guigl/libs/guigl/test/test_parameter_compilation.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -1,5 +1,7 @@
 #include <boost/parameter/keyword.hpp>
 #include <boost/parameter/name.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/make_vector.hpp>
 
 #define BOOST_TEST_MAIN
 #include <boost/test/unit_test.hpp>
@@ -9,5 +11,5 @@
 
 using namespace boost;
 
-#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 20, <libs/guigl/test/test_parameter_compilation.hpp>))
+#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 50, <libs/guigl/test/test_parameter_compilation.hpp>))
     #include BOOST_PP_ITERATE()

Modified: sandbox/guigl/libs/guigl/test/test_parameter_compilation.hpp
==============================================================================
--- sandbox/guigl/libs/guigl/test/test_parameter_compilation.hpp (original)
+++ sandbox/guigl/libs/guigl/test/test_parameter_compilation.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -16,12 +16,16 @@
 class named_constructableN
 {
 public:
- template<typename FM0, typename FM1, typename FM2>
- named_constructableN(const FM0 &a0, const FM1 &a1, const FM2 &a2)
+
+ template<typename ArgumentPack>
+ named_constructableN(const ArgumentPack &args)
     {
- label = (a0, a1, a2)[_labelN];
- size = (a0, a1, a2)[_sizeN];
- volume = (a0, a1, a2)[_volumeN];
+ label = args[_labelN];
+ size = args[_sizeN];
+ volume = args[_volumeN];
+
+ fusion::vector<fusion::vector<fusion::vector<int> >, fusion::vector<float>, fusion::vector<int> > v3;
+ v3 = fusion::make_vector(fusion::make_vector(fusion::make_vector(1)), fusion::make_vector(1.5), fusion::make_vector(true));
     }
     std::string label;
     int size;
@@ -31,9 +35,14 @@
 
 BOOST_AUTO_TEST_CASE( BOOST_PP_CAT(test_multi_param_construction,N) )
 {
- named_constructableN constructed(_labelN = "hello", _sizeN = 1, _volumeN = 1.0);
+ named_constructableN constructed((_labelN = "hello", _sizeN = 1, _volumeN = 1.0));
+ named_constructableN constructed2((_sizeN = 1, _volumeN = 1.0, _labelN = "hello"));
+ named_constructableN constructed3((_labelN = "hello", _volumeN = 1.0, _sizeN = 1));
+ named_constructableN constructed4((_volumeN = 1.0, _sizeN = 1, _labelN = "hello"));
     BOOST_CHECK_EQUAL(constructed.label, "hello");
     BOOST_CHECK_EQUAL(constructed.size, 1);
     BOOST_CHECK_EQUAL(constructed.volume, 1.0);
-
+ BOOST_CHECK_EQUAL(constructed2.label, "hello");
+ BOOST_CHECK_EQUAL(constructed2.size, 1);
+ BOOST_CHECK_EQUAL(constructed2.volume, 1.0);
 }
\ No newline at end of file

Modified: sandbox/guigl/libs/guigl/test/test_parameter_dispatch_compilation.cpp
==============================================================================
--- sandbox/guigl/libs/guigl/test/test_parameter_dispatch_compilation.cpp (original)
+++ sandbox/guigl/libs/guigl/test/test_parameter_dispatch_compilation.cpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -10,6 +10,6 @@
 
 using namespace boost;
 
-#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 20, <libs/guigl/test/test_parameter_dispatch_compilation.hpp>))
+#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 50, <libs/guigl/test/test_parameter_dispatch_compilation.hpp>))
     #include BOOST_PP_ITERATE()
 

Modified: sandbox/guigl/libs/guigl/test/test_parameter_dispatch_compilation.hpp
==============================================================================
--- sandbox/guigl/libs/guigl/test/test_parameter_dispatch_compilation.hpp (original)
+++ sandbox/guigl/libs/guigl/test/test_parameter_dispatch_compilation.hpp 2008-08-28 14:08:30 EDT (Thu, 28 Aug 2008)
@@ -41,8 +41,13 @@
 BOOST_AUTO_TEST_CASE( BOOST_PP_CAT(test_multi_param_construction,N) )
 {
     named_constructableN constructed(_labelN = "hello", _sizeN = 1, _volumeN = 1.0);
+ named_constructableN constructed2(_sizeN = 1, _volumeN = 1.0, _labelN = "hello");
+ named_constructableN constructed3(_labelN = "hello", _volumeN = 1.0, _sizeN = 1);
+ named_constructableN constructed4(_volumeN = 1.0, _sizeN = 1, _labelN = "hello");
     BOOST_CHECK_EQUAL(constructed.label, "hello");
     BOOST_CHECK_EQUAL(constructed.size, 1);
     BOOST_CHECK_EQUAL(constructed.volume, 1.0);
-
+ BOOST_CHECK_EQUAL(constructed2.label, "hello");
+ BOOST_CHECK_EQUAL(constructed2.size, 1);
+ BOOST_CHECK_EQUAL(constructed2.volume, 1.0);
 }
\ No newline at end of file


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk