Move the widget register code to its own file.

Part of cleaning up and polishing the existing widget code.
This commit is contained in:
Mark de Wever 2013-03-09 08:28:08 +00:00
parent 60f8d3213f
commit 5ad5a523e0
26 changed files with 93 additions and 49 deletions

View file

@ -20,6 +20,7 @@
#include "gui/auxiliary/log.hpp"
#include "gui/auxiliary/widget_definition/button.hpp"
#include "gui/auxiliary/window_builder/button.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/window.hpp"
#include "sound.hpp"

View file

@ -0,0 +1,69 @@
/* $Id$ */
/*
Copyright (C) 2007 - 2013 by Mark de Wever <koraq@xs4all.nl>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY.
See the COPYING file for more details.
*/
#ifndef GUI_WIDGETS_DETAIL_REGISTER_TPP_INCLUDED
#define GUI_WIDGETS_DETAIL_REGISTER_TPP_INCLUDED
/**
* Registers a widget.
*
* Call this function to register a widget. Use this macro in the
* implementation, inside the gui2 namespace.
*
* @see @ref gui2::load_widget_definitions for more information.
*
* @note When the type is tfoo_definition, the id "foo" and no special key best
* use RESISTER_WIDGET(foo) instead.
*
* @param type Class type of the window to register.
* @param id Id of the widget
* @param key The id to load if differs from id.
*/
#define REGISTER_WIDGET3( \
type \
, id \
, key) \
namespace { \
\
namespace ns_##type { \
\
struct tregister_helper { \
tregister_helper() \
{ \
register_widget(#id, boost::bind( \
load_widget_definitions<type> \
, _1 \
, _2 \
, _3 \
, key)); \
\
register_builder_widget(#id, boost::bind( \
build_widget<implementation::tbuilder_##id> \
, _1)); \
} \
}; \
\
static tregister_helper register_helper; \
} \
}
/**
* Wrapper for REGISTER_WIDGET3.
*
* "Calls" REGISTER_WIDGET3(tid_definition, id, _4)
*/
#define REGISTER_WIDGET(id) REGISTER_WIDGET3(t##id##_definition, id, _4)
#endif

View file

@ -19,6 +19,7 @@
#include "gui/auxiliary/widget_definition/drawing.hpp"
#include "gui/auxiliary/window_builder/drawing.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include <boost/bind.hpp>

View file

@ -17,6 +17,7 @@
#include "gui/widgets/horizontal_scrollbar.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "gui/auxiliary/widget_definition/horizontal_scrollbar.hpp"
#include "gui/auxiliary/window_builder/horizontal_scrollbar.hpp"

View file

@ -21,6 +21,7 @@
#include "gui/auxiliary/widget_definition/image.hpp"
#include "gui/auxiliary/window_builder/image.hpp"
#include "gui/auxiliary/log.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include <boost/bind.hpp>

View file

@ -19,6 +19,7 @@
#include "gui/auxiliary/widget_definition/label.hpp"
#include "gui/auxiliary/window_builder/label.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include <boost/bind.hpp>

View file

@ -24,6 +24,7 @@
#include "gui/auxiliary/widget_definition/listbox.hpp"
#include "gui/auxiliary/window_builder/listbox.hpp"
#include "gui/auxiliary/window_builder/horizontal_listbox.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/window.hpp"

View file

@ -20,6 +20,7 @@
#include "gui/auxiliary/log.hpp"
#include "gui/auxiliary/widget_definition/matrix.hpp"
#include "gui/auxiliary/window_builder/matrix.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include <boost/bind.hpp>

View file

@ -20,6 +20,7 @@
#include "gui/auxiliary/log.hpp"
#include "gui/auxiliary/widget_definition/minimap.hpp"
#include "gui/auxiliary/window_builder/minimap.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "map.hpp"
#include "map_exception.hpp"

View file

@ -19,6 +19,7 @@
#include "gui/auxiliary/widget_definition/multi_page.hpp"
#include "gui/auxiliary/window_builder/multi_page.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/generator.hpp"

View file

@ -20,6 +20,7 @@
#include "gui/auxiliary/log.hpp"
#include "gui/auxiliary/widget_definition/panel.hpp"
#include "gui/auxiliary/window_builder/panel.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include <boost/bind.hpp>

View file

@ -21,6 +21,7 @@
#include "gui/auxiliary/log.hpp"
#include "gui/auxiliary/widget_definition/text_box.hpp"
#include "gui/auxiliary/window_builder/password_box.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "serialization/string_utils.hpp"

View file

@ -20,6 +20,7 @@
#include "gui/auxiliary/widget_definition/progress_bar.hpp"
#include "gui/auxiliary/window_builder/progress_bar.hpp"
#include "gui/auxiliary/log.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "utils/foreach.tpp"

View file

@ -21,6 +21,7 @@
#include "gui/auxiliary/timer.hpp"
#include "gui/auxiliary/widget_definition/repeating_button.hpp"
#include "gui/auxiliary/window_builder/repeating_button.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/window.hpp"
#include "sound.hpp"

View file

@ -21,6 +21,7 @@
#include "gui/auxiliary/log.hpp"
#include "gui/auxiliary/widget_definition/scroll_label.hpp"
#include "gui/auxiliary/window_builder/scroll_label.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/scrollbar.hpp"
#include "gui/widgets/spacer.hpp"

View file

@ -19,6 +19,7 @@
#include "gui/auxiliary/widget_definition/scrollbar_panel.hpp"
#include "gui/auxiliary/window_builder/scrollbar_panel.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include <boost/bind.hpp>

View file

@ -22,6 +22,7 @@
#include "gui/auxiliary/widget_definition/slider.hpp"
#include "gui/auxiliary/window_builder/slider.hpp"
#include "gui/widgets/window.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "sound.hpp"
#include "utils/foreach.tpp"

View file

@ -19,6 +19,7 @@
#include "gui/auxiliary/widget_definition/spacer.hpp"
#include "gui/auxiliary/window_builder/spacer.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include <boost/bind.hpp>

View file

@ -19,6 +19,7 @@
#include "gui/auxiliary/widget_definition/stacked_widget.hpp"
#include "gui/auxiliary/window_builder/stacked_widget.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/generator.hpp"
#include "utils/foreach.tpp"

View file

@ -21,6 +21,7 @@
#include "gui/auxiliary/log.hpp"
#include "gui/auxiliary/widget_definition/text_box.hpp"
#include "gui/auxiliary/window_builder/text_box.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/window.hpp"
#include "game_preferences.hpp"

View file

@ -20,6 +20,7 @@
#include "gui/auxiliary/log.hpp"
#include "gui/auxiliary/widget_definition/toggle_button.hpp"
#include "gui/auxiliary/window_builder/toggle_button.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/window.hpp"
#include "sound.hpp"

View file

@ -20,6 +20,7 @@
#include "gui/auxiliary/log.hpp"
#include "gui/auxiliary/widget_definition/toggle_panel.hpp"
#include "gui/auxiliary/window_builder/toggle_panel.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/window.hpp"
#include "sound.hpp"

View file

@ -20,6 +20,7 @@
#include "gui/auxiliary/log.hpp"
#include "gui/auxiliary/widget_definition/tree_view.hpp"
#include "gui/auxiliary/window_builder/tree_view.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/tree_view_node.hpp"
#include "gui/widgets/window.hpp"

View file

@ -19,6 +19,7 @@
#include "gui/auxiliary/widget_definition/vertical_scrollbar.hpp"
#include "gui/auxiliary/window_builder/vertical_scrollbar.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#include <boost/bind.hpp>

View file

@ -817,55 +817,6 @@ T& find_widget(typename utils::tconst_clone<twidget, T>::pointer widget
} // namespace gui2
/**
* Registers a widget.
*
* Call this function to register a widget. Use this macro in the
* implementation, inside the gui2 namespace.
*
* @see @ref gui2::load_widget_definitions for more information.
*
* @note When the type is tfoo_definition, the id "foo" and no special key best
* use RESISTER_WIDGET(foo) instead.
*
* @param type Class type of the window to register.
* @param id Id of the widget
* @param key The id to load if differs from id.
*/
#define REGISTER_WIDGET3( \
type \
, id \
, key) \
namespace { \
\
namespace ns_##type { \
\
struct tregister_helper { \
tregister_helper() \
{ \
register_widget(#id, boost::bind( \
load_widget_definitions<type> \
, _1 \
, _2 \
, _3 \
, key)); \
\
register_builder_widget(#id, boost::bind( \
build_widget<implementation::tbuilder_##id> \
, _1)); \
} \
}; \
\
static tregister_helper register_helper; \
} \
}
/**
* Wrapper for REGISTER_WIDGET3.
*
* "Calls" REGISTER_WIDGET3(tid_definition, id, _4)
*/
#define REGISTER_WIDGET(id) REGISTER_WIDGET3(t##id##_definition, id, _4)
#endif

View file

@ -34,6 +34,7 @@
#include "gui/dialogs/title_screen.hpp"
#include "gui/dialogs/tip.hpp"
#include "gui/widgets/button.hpp"
#include "gui/widgets/detail/register.tpp"
#include "gui/widgets/settings.hpp"
#ifdef DEBUG_WINDOW_LAYOUT_GRAPHS
#include "gui/widgets/debug.hpp"