Move a deeply nested structure out of its parent.

This also allows data not interesting for the outside to be defined in
the .cpp instead of the .hpp.
This commit is contained in:
Mark de Wever 2008-03-26 18:14:12 +00:00
parent 0dff223ddd
commit 302536a937
2 changed files with 49 additions and 48 deletions

View File

@ -48,6 +48,31 @@
namespace gui2 {
struct tbuilder_button : public tbuilder_widget
{
private:
tbuilder_button();
public:
tbuilder_button(const config& cfg) : tbuilder_widget(cfg) {}
twidget* build () const;
};
struct tbuilder_text_box : public tbuilder_widget
{
private:
tbuilder_text_box();
public:
tbuilder_text_box(const config& cfg) : tbuilder_widget(cfg) {}
twidget* build () const;
};
twindow build(CVideo& video, const std::string& type)
{
std::vector<twindow_builder::tresolution>::const_iterator
@ -190,7 +215,7 @@ twindow_builder::tresolution::tgrid::tgrid(const config* cfg) :
<< rows << " rows and " << cols << " columns.\n";
}
twindow_builder::tresolution::tgrid::tbuilder_widget::tbuilder_widget(const config& cfg) :
tbuilder_widget::tbuilder_widget(const config& cfg) :
id(cfg["id"]),
definition(cfg["button_definition"]),
label(cfg["label"])
@ -205,7 +230,7 @@ twindow_builder::tresolution::tgrid::tbuilder_widget::tbuilder_widget(const conf
}
twidget* twindow_builder::tresolution::tgrid::tbuilder_button::build() const
twidget* tbuilder_button::build() const
{
tbutton *button = new tbutton();
@ -219,7 +244,7 @@ twidget* twindow_builder::tresolution::tgrid::tbuilder_button::build() const
return button;
}
twidget* twindow_builder::tresolution::tgrid::tbuilder_text_box::build() const
twidget* tbuilder_text_box::build() const
{
ttext_box *text_box = new ttext_box();
@ -233,6 +258,5 @@ twidget* twindow_builder::tresolution::tgrid::tbuilder_text_box::build() const
return text_box;
}
} // namespace gui2

View File

@ -31,6 +31,27 @@ class twindow;
twindow build(CVideo& video, const std::string& type);
//! Contains the info needed to instantiate a widget.
struct tbuilder_widget : public reference_counted_object
{
private:
tbuilder_widget();
public:
tbuilder_widget(const config& cfg);
std::string id;
std::string definition;
t_string label;
virtual twidget* build() const = 0;
virtual ~tbuilder_widget() {}
};
typedef boost::intrusive_ptr<tbuilder_widget> tbuilder_widget_ptr;
typedef boost::intrusive_ptr<const tbuilder_widget> const_tbuilder_widget_ptr;
class twindow_builder
{
public:
@ -65,50 +86,6 @@ public:
unsigned rows;
unsigned cols;
struct tbuilder_widget : public reference_counted_object
{
// NOTE a widget is always a button atm.
private:
tbuilder_widget();
public:
tbuilder_widget(const config& cfg);
std::string id;
std::string definition;
t_string label;
virtual twidget* build() const = 0;
virtual ~tbuilder_widget() {}
};
struct tbuilder_button : public tbuilder_widget
{
private:
tbuilder_button();
public:
tbuilder_button(const config& cfg) : tbuilder_widget(cfg) {}
twidget* build () const;
};
struct tbuilder_text_box : public tbuilder_widget
{
private:
tbuilder_text_box();
public:
tbuilder_text_box(const config& cfg) : tbuilder_widget(cfg) {}
twidget* build () const;
};
typedef boost::intrusive_ptr<tbuilder_widget> tbuilder_widget_ptr;
typedef boost::intrusive_ptr<const tbuilder_widget> const_tbuilder_widget_ptr;
std::vector<tbuilder_widget_ptr> widgets;
};