Author: mordante
Date: Sat Sep 20 11:13:49 2008
New Revision: 29568

URL: http://svn.gna.org/viewcvs/wesnoth?rev=29568&view=rev
Log:
Some refactoring and minor cleanups.

Modified:
    trunk/src/gui/widgets/window_builder.cpp

Modified: trunk/src/gui/widgets/window_builder.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/gui/widgets/window_builder.cpp?rev=29568&r1=29567&r2=29568&view=diff
==============================================================================
--- trunk/src/gui/widgets/window_builder.cpp (original)
+++ trunk/src/gui/widgets/window_builder.cpp Sat Sep 20 11:13:49 2008
@@ -57,12 +57,155 @@
 
 namespace gui2 {
 
-static unsigned get_v_align(const std::string& v_align);
-static unsigned get_h_align(const std::string& h_align);
-static unsigned get_border(const std::vector<std::string>& border);
-static unsigned read_flags(const config& cfg);
-static tvertical_scrollbar_container_::tscrollbar_mode 
-       get_scrollbar_mode(const std::string& scrollbar_mode);
+namespace {
+
+unsigned get_v_align(const std::string& v_align)
+{
+       if(v_align == "top") {
+               return tgrid::VERTICAL_ALIGN_TOP;
+       } else if(v_align == "bottom") {
+               return tgrid::VERTICAL_ALIGN_BOTTOM;
+       } else {
+               if(!v_align.empty() && v_align != "center") {
+                       ERR_G_E << "Invalid vertical alignment '" 
+                               << v_align << "' falling back to 'center'.\n";
+               }
+               return tgrid::VERTICAL_ALIGN_CENTER;
+       }
+}
+
+unsigned get_h_align(const std::string& h_align)
+{
+       if(h_align == "left") {
+               return tgrid::HORIZONTAL_ALIGN_LEFT;
+       } else if(h_align == "right") {
+               return tgrid::HORIZONTAL_ALIGN_RIGHT;
+       } else {
+               if(!h_align.empty() && h_align != "center") {
+                       ERR_G_E << "Invalid horizontal alignment '" 
+                               << h_align << "' falling back to 'center'.\n";
+               }
+               return tgrid::HORIZONTAL_ALIGN_CENTER;
+       }
+}
+
+unsigned get_border(const std::vector<std::string>& border)
+{
+       if(std::find(border.begin(), border.end(), "all") != border.end()) {
+               return tgrid::BORDER_TOP 
+                       | tgrid::BORDER_BOTTOM | tgrid::BORDER_LEFT | 
tgrid::BORDER_RIGHT;
+       } else {
+               if(std::find(border.begin(), border.end(), "top") != 
border.end()) {
+                       return tgrid::BORDER_TOP;
+               }
+               if(std::find(border.begin(), border.end(), "bottom") != 
border.end()) {
+                       return tgrid::BORDER_BOTTOM;
+               }
+               if(std::find(border.begin(), border.end(), "left") != 
border.end()) {
+                       return tgrid::BORDER_LEFT;
+               }
+               if(std::find(border.begin(), border.end(), "right") != 
border.end()) {
+                       return tgrid::BORDER_RIGHT;
+               }
+       }
+
+       return 0;
+}
+
+unsigned read_flags(const config& cfg)
+{
+       unsigned flags = 0;
+
+       // Read the flags. FIXME document.
+       flags |= get_v_align(cfg["vertical_alignment"]);
+       flags |= get_h_align(cfg["horizontal_alignment"]);
+       flags |= get_border( utils::split(cfg["border"]));
+
+       if(utils::string_bool(cfg["vertical_grow"])) {
+               flags |= tgrid::VERTICAL_GROW_SEND_TO_CLIENT;
+       }
+
+       if(utils::string_bool(cfg["horizontal_grow"])) {
+               flags |= tgrid::HORIZONTAL_GROW_SEND_TO_CLIENT;
+       }
+
+       return flags;
+}
+
+tmenubar::tdirection read_direction(const std::string& direction)
+{
+       if(direction == "vertical") {
+               return tmenubar::VERTICAL;
+       } else if(direction == "horizontal") {
+               return tmenubar::HORIZONTAL;
+       } else {
+               ERR_G_E << "Invalid direction " 
+                               << direction << "' falling back to 
'horizontal'.\n";
+               return tmenubar::HORIZONTAL;
+       }
+}
+
+tvertical_scrollbar_container_::tscrollbar_mode  
+               get_scrollbar_mode(const std::string& scrollbar_mode)
+{
+       if(scrollbar_mode == "always") {
+               return tvertical_scrollbar_container_::SHOW;
+       } else if(scrollbar_mode == "never") {
+               return tvertical_scrollbar_container_::HIDE;
+       } else {
+               if(!scrollbar_mode.empty() && scrollbar_mode != "auto") {
+                       ERR_G_E << "Invalid scrollbar mode '" 
+                               << scrollbar_mode << "' falling back to 
'auto'.\n";
+               }
+               return tvertical_scrollbar_container_::SHOW_WHEN_NEEDED;
+       }
+}
+
+tbuilder_widget_ptr create_builder_widget(const config& cfg)
+{
+       if(cfg.all_children().size() != 1) {
+               ERR_G_P << "Grid cell has " << cfg.all_children().size()
+                       << " children instead of 1, aborting. Config :\n"
+                       << cfg;
+               assert(false);
+       }
+
+       if(cfg.child("button")) {
+               return new tbuilder_button(*(cfg.child("button")));
+       } else if(cfg.child("label")) {
+               return new tbuilder_label(*(cfg.child("label")));
+       } else if(cfg.child("listbox")) {
+               return new tbuilder_listbox(*(cfg.child("listbox")));
+       } else if(cfg.child("menubar")) {
+               return new tbuilder_menubar(*(cfg.child("menubar")));
+       } else if(cfg.child("minimap")) {
+               return new tbuilder_minimap(*(cfg.child("minimap")));
+       } else if(cfg.child("panel")) {
+               return new tbuilder_panel(*(cfg.child("panel")));
+       } else if(cfg.child("scroll_label")) {
+               return new tbuilder_scroll_label(*(cfg.child("scroll_label")));
+       } else if(cfg.child("slider")) {
+               return new tbuilder_slider(*(cfg.child("slider")));
+       } else if(cfg.child("spacer")) {
+               return new tbuilder_spacer(*(cfg.child("spacer")));
+       } else if(cfg.child("text_box")) {
+               return new tbuilder_text_box(*(cfg.child("text_box")));
+       } else if(cfg.child("toggle_button")) {
+               return new 
tbuilder_toggle_button(*(cfg.child("toggle_button")));
+       } else if(cfg.child("toggle_panel")) {
+               return new tbuilder_toggle_panel(*(cfg.child("toggle_panel")));
+       } else if(cfg.child("vertical_scrollbar")) {
+               return 
+                       new 
tbuilder_vertical_scrollbar(*(cfg.child("vertical_scrollbar")));
+       } else if(cfg.child("grid")) {
+               return new tbuilder_grid(*(cfg.child("grid")));
+       } else {
+               std::cerr << cfg;
+               assert(false);
+       }
+}
+
+} // namespace
 
 twindow build(CVideo& video, const std::string& type)
 {
@@ -220,79 +363,6 @@
                definition = "default";
        }
        
-}
-
-static unsigned get_v_align(const std::string& v_align)
-{
-       if(v_align == "top") {
-               return tgrid::VERTICAL_ALIGN_TOP;
-       } else if(v_align == "bottom") {
-               return tgrid::VERTICAL_ALIGN_BOTTOM;
-       } else {
-               if(!v_align.empty() && v_align != "center") {
-                       ERR_G_E << "Invalid vertical alignment '" 
-                               << v_align << "' falling back to 'center'.\n";
-               }
-               return tgrid::VERTICAL_ALIGN_CENTER;
-       }
-}
-
-static unsigned get_h_align(const std::string& h_align)
-{
-       if(h_align == "left") {
-               return tgrid::HORIZONTAL_ALIGN_LEFT;
-       } else if(h_align == "right") {
-               return tgrid::HORIZONTAL_ALIGN_RIGHT;
-       } else {
-               if(!h_align.empty() && h_align != "center") {
-                       ERR_G_E << "Invalid horizontal alignment '" 
-                               << h_align << "' falling back to 'center'.\n";
-               }
-               return tgrid::HORIZONTAL_ALIGN_CENTER;
-       }
-}
-
-static unsigned get_border(const std::vector<std::string>& border)
-{
-       if(std::find(border.begin(), border.end(), "all") != border.end()) {
-               return tgrid::BORDER_TOP 
-                       | tgrid::BORDER_BOTTOM | tgrid::BORDER_LEFT | 
tgrid::BORDER_RIGHT;
-       } else {
-               if(std::find(border.begin(), border.end(), "top") != 
border.end()) {
-                       return tgrid::BORDER_TOP;
-               }
-               if(std::find(border.begin(), border.end(), "bottom") != 
border.end()) {
-                       return tgrid::BORDER_BOTTOM;
-               }
-               if(std::find(border.begin(), border.end(), "left") != 
border.end()) {
-                       return tgrid::BORDER_LEFT;
-               }
-               if(std::find(border.begin(), border.end(), "right") != 
border.end()) {
-                       return tgrid::BORDER_RIGHT;
-               }
-       }
-
-       return 0;
-}
-
-static unsigned read_flags(const config& cfg)
-{
-       unsigned flags = 0;
-
-       // Read the flags. FIXME document.
-       flags |= get_v_align(cfg["vertical_alignment"]);
-       flags |= get_h_align(cfg["horizontal_alignment"]);
-       flags |= get_border( utils::split(cfg["border"]));
-
-       if(utils::string_bool(cfg["vertical_grow"])) {
-               flags |= tgrid::VERTICAL_GROW_SEND_TO_CLIENT;
-       }
-
-       if(utils::string_bool(cfg["horizontal_grow"])) {
-               flags |= tgrid::HORIZONTAL_GROW_SEND_TO_CLIENT;
-       }
-
-       return flags;
 }
 
 tbuilder_grid::tbuilder_grid(const config& cfg) : 
@@ -390,46 +460,7 @@
                                
col_grow_factor.push_back(lexical_cast_default<unsigned>((**col_itor)["grow_factor"]));
                        }
 
-                       if((**col_itor).all_children().size() != 1) {
-                               ERR_G_P << "Grid cell has " << 
(**col_itor).all_children().size()
-                                       << " children instead of 1, aborting. 
Config :\n"
-                                       << **col_itor;
-                               assert(false);
-                       }
-
-                       if((**col_itor).child("button")) {
-                               widgets.push_back(new 
tbuilder_button(*((**col_itor).child("button"))));
-                       } else if((**col_itor).child("label")) {
-                               widgets.push_back(new 
tbuilder_label(*((**col_itor).child("label"))));
-                       } else if((**col_itor).child("listbox")) {
-                               widgets.push_back(new 
tbuilder_listbox(*((**col_itor).child("listbox"))));
-                       } else if((**col_itor).child("menubar")) {
-                               widgets.push_back(new 
tbuilder_menubar(*((**col_itor).child("menubar"))));
-                       } else if((**col_itor).child("minimap")) {
-                               widgets.push_back(new 
tbuilder_minimap(*((**col_itor).child("minimap"))));
-                       } else if((**col_itor).child("panel")) {
-                               widgets.push_back(new 
tbuilder_panel(*((**col_itor).child("panel"))));
-                       } else if((**col_itor).child("scroll_label")) {
-                               widgets.push_back(new 
tbuilder_scroll_label(*((**col_itor).child("scroll_label"))));
-                       } else if((**col_itor).child("slider")) {
-                               widgets.push_back(new 
tbuilder_slider(*((**col_itor).child("slider"))));
-                       } else if((**col_itor).child("spacer")) {
-                               widgets.push_back(new 
tbuilder_spacer(*((**col_itor).child("spacer"))));
-                       } else if((**col_itor).child("text_box")) {
-                               widgets.push_back(new 
tbuilder_text_box(*((**col_itor).child("text_box"))));
-                       } else if((**col_itor).child("toggle_button")) {
-                               widgets.push_back(new 
tbuilder_toggle_button(*((**col_itor).child("toggle_button"))));
-                       } else if((**col_itor).child("toggle_panel")) {
-                               widgets.push_back(new 
tbuilder_toggle_panel(*((**col_itor).child("toggle_panel"))));
-                       } else if((**col_itor).child("vertical_scrollbar")) {
-                               widgets.push_back(
-                                       new 
tbuilder_vertical_scrollbar(*((**col_itor).child("vertical_scrollbar"))));
-                       } else if((**col_itor).child("grid")) {
-                               widgets.push_back(new 
tbuilder_grid(*((**col_itor).child("grid"))));
-                       } else {
-                               std::cerr << (**col_itor);
-                               assert(false);
-                       }
+                       widgets.push_back(create_builder_widget(**col_itor));
 
                        ++col;
                }
@@ -575,46 +606,12 @@
        return button;
 }
 
-
 tbuilder_gridcell::tbuilder_gridcell(const config& cfg) :
        tbuilder_widget(cfg),
        flags(read_flags(cfg)),
        border_size(lexical_cast_default<unsigned>((cfg)["border_size"])),
-       widget(NULL)
-{
-       if((cfg).child("button")) {
-               widget=new tbuilder_button(*((cfg).child("button")));
-       } else if((cfg).child("label")) {
-               widget=new tbuilder_label(*((cfg).child("label")));
-       } else if((cfg).child("listbox")) {
-               widget=new tbuilder_listbox(*((cfg).child("listbox")));
-       } else if((cfg).child("menubar")) {
-               widget=new tbuilder_menubar(*((cfg).child("menubar")));
-       } else if((cfg).child("minimap")) {
-               widget=new tbuilder_minimap(*((cfg).child("minimap")));
-       } else if((cfg).child("panel")) {
-               widget=new tbuilder_panel(*((cfg).child("panel")));
-       } else if((cfg).child("scroll_label")) {
-               widget=new 
tbuilder_scroll_label(*((cfg).child("scroll_label")));
-       } else if((cfg).child("slider")) {
-               widget=new tbuilder_slider(*((cfg).child("slider")));
-       } else if((cfg).child("spacer")) {
-               widget=new tbuilder_spacer(*((cfg).child("spacer")));
-       } else if((cfg).child("text_box")) {
-               widget=new tbuilder_text_box(*((cfg).child("text_box")));
-       } else if((cfg).child("toggle_button")) {
-               widget=new 
tbuilder_toggle_button(*((cfg).child("toggle_button")));
-       } else if((cfg).child("toggle_panel")) {
-               widget=new 
tbuilder_toggle_panel(*((cfg).child("toggle_panel")));
-       } else if((cfg).child("vertical_scrollbar")) {
-               widget=
-                       new 
tbuilder_vertical_scrollbar(*((cfg).child("vertical_scrollbar")));
-       } else if((cfg).child("grid")) {
-               widget=new tbuilder_grid(*((cfg).child("grid")));
-       } else {
-               std::cerr << cfg;
-               assert(false);
-       }
+       widget(create_builder_widget(cfg))
+{
 }
 
 twidget* tbuilder_label::build() const
@@ -627,22 +624,6 @@
                << definition << "'.\n";
 
        return tmp_label;
-}
-
-static tvertical_scrollbar_container_::tscrollbar_mode  
-               get_scrollbar_mode(const std::string& scrollbar_mode)
-{
-       if(scrollbar_mode == "always") {
-               return tvertical_scrollbar_container_::SHOW;
-       } else if(scrollbar_mode == "never") {
-               return tvertical_scrollbar_container_::HIDE;
-       } else {
-               if(!scrollbar_mode.empty() && scrollbar_mode != "auto") {
-                       ERR_G_E << "Invalid scrollbar mode '" 
-                               << scrollbar_mode << "' falling back to 
'auto'.\n";
-               }
-               return tvertical_scrollbar_container_::SHOW_WHEN_NEEDED;
-       }
 }
 
 tbuilder_listbox::tbuilder_listbox(const config& cfg) :
@@ -826,19 +807,6 @@
        listbox->finalize_setup();
 
        return listbox;
-}
-
-static tmenubar::tdirection read_direction(const std::string& direction)
-{
-       if(direction == "vertical") {
-               return tmenubar::VERTICAL;
-       } else if(direction == "horizontal") {
-               return tmenubar::HORIZONTAL;
-       } else {
-               ERR_G_E << "Invalid direction " 
-                               << direction << "' falling back to 
'horizontal'.\n";
-               return tmenubar::HORIZONTAL;
-       }
 }
 
 tbuilder_menubar::tbuilder_menubar(const config& cfg) :


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to