Proof-of-concept usage of the tree view widget.

This code is used to test the new widget, also to be used on the FOSDEM,
the code is hidden under --new-widgets. It's not planned to keep this
change for the campaign dialog.
This commit is contained in:
Mark de Wever 2010-02-04 20:39:38 +00:00
parent 9ec2566ee8
commit 7215ffa390
2 changed files with 230 additions and 36 deletions

View file

@ -27,6 +27,11 @@
fixed_width = "true"
[/linked_group]
[linked_group]
id = "tree_name"
fixed_width = "true"
[/linked_group]
[grid]
[row]
@ -189,6 +194,122 @@
[/column]
[column]
grow_factor = 0
border = "all"
border_size = 5
horizontal_alignment = "left"
[tree_view]
id = "campaign_tree"
definition = "default"
horizontal_scrollbar_mode = "never"
vertical_scrollbar_mode = "always"
indention_step_size = "40"
debug_border_mode = 1
[node]
id = "campaign_group"
[node_definition]
[row]
[column]
[toggle_button]
id = "tree_view_node_icon"
definition = "tree_view_node"
[/toggle_button]
[/column]
[column]
horizontal_grow = "true"
vertical_grow = "true"
[label]
id = "tree_view_node_label" # ID NEEDED???
label = "group"
[/label]
[/column]
[/row]
[/node_definition]
[/node]
[node]
id = "campaign"
[node_definition]
vertical_grow = "true"
return_value_id = "ok"
[row]
[column]
[toggle_panel]
id = "tree_view_node_label" # ID NEEDED???
definition = "default"
horizontal_grow = "true"
vertical_grow = "true"
return_value_id = "ok"
[grid]
[row]
[column]
grow_factor = 1
horizontal_grow = "true"
border = "all"
border_size = 5
vertical_alignment = "top"
[image]
id = "icon"
definition = "default"
[/image]
[/column]
[column]
grow_factor = 1
horizontal_grow = "true"
border = "right"
border_size = 8
[label]
id = "name"
definition = "default"
linked_group = "tree_name"
[/label]
[/column]
[/row]
[/grid]
[/toggle_panel]
[/column]
[/row]
[/node_definition]
[/node]
[/tree_view]
[/column]
[column]
grow_factor = 1
horizontal_grow = "true"

View file

@ -23,6 +23,7 @@
#include "gui/widgets/multi_page.hpp"
#include "gui/widgets/scroll_label.hpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/tree_view.hpp"
#include "gui/widgets/window.hpp"
#include "serialization/string_utils.hpp"
@ -58,12 +59,15 @@ namespace gui2 {
void tcampaign_selection::campaign_selected(twindow& window)
{
tlistbox& list = find_widget<tlistbox>(&window, "campaign_list", false);
if(new_widgets) {
} else {
tlistbox& list = find_widget<tlistbox>(&window, "campaign_list", false);
tmulti_page& multi_page = find_widget<tmulti_page>(
&window, "campaign_details", false);
tmulti_page& multi_page = find_widget<tmulti_page>(
&window, "campaign_details", false);
multi_page.select_page(list.get_selected_row());
multi_page.select_page(list.get_selected_row());
}
}
twindow* tcampaign_selection::build_window(CVideo& video)
@ -73,61 +77,130 @@ twindow* tcampaign_selection::build_window(CVideo& video)
void tcampaign_selection::pre_show(CVideo& /*video*/, twindow& window)
{
/***** Setup campaign list. *****/
tlistbox& list = find_widget<tlistbox>(&window, "campaign_list", false);
if(new_widgets) {
/***** Setup campaign tree. *****/
ttree_view& tree = find_widget<ttree_view>(&window, "campaign_tree", false);
list.set_callback_value_change(dialog_callback
<tcampaign_selection, &tcampaign_selection::campaign_selected>);
// list.set_callback_value_change(dialog_callback
// <tcampaign_selection, &tcampaign_selection::campaign_selected>);
window.keyboard_capture(&list);
window.keyboard_capture(&tree);
/***** Setup campaign details. *****/
tmulti_page& multi_page = find_widget<tmulti_page>(
&window, "campaign_details", false);
string_map tree_group_field;
std::map<std::string, string_map> tree_group_item;
foreach (const config &c, campaigns_) {
tree_group_field["label"] = "Campaigns won";
tree_group_item["tree_view_node_label"] = tree_group_field;
ttree_view::tnode& completed =
tree.add_node("campaign_group", tree_group_item);
/*** Add list item ***/
string_map list_item;
std::map<std::string, string_map> list_item_item;
tree_group_field["label"] = "Campaigns to conquer";
tree_group_item["tree_view_node_label"] = tree_group_field;
ttree_view::tnode& not_completed =
tree.add_node("campaign_group", tree_group_item);
list_item["label"] = c["icon"];
list_item_item.insert(std::make_pair("icon", list_item));
/***** Setup campaign details. *****/
tmulti_page& multi_page = find_widget<tmulti_page>(
&window, "campaign_details", false);
list_item["label"] = c["name"];
list_item_item.insert(std::make_pair("name", list_item));
foreach(const config &campaign, campaigns_) {
list.add_row(list_item_item);
/*** Add tree item ***/
tree_group_field["label"] = campaign["icon"];
tree_group_item["icon"] = tree_group_field;
tgrid* grid = list.get_row_grid(list.get_item_count() - 1);
assert(grid);
tree_group_field["label"] = campaign["name"];
tree_group_item["name"] = tree_group_field;
twidget* widget = grid->find("victory", false);
if(widget && !utils::string_bool(c["completed"], false)) {
widget->set_visible(twidget::HIDDEN);
if(utils::string_bool(campaign["completed"], false)) {
completed.add_child("campaign", tree_group_item);
} else {
not_completed.add_child("campaign", tree_group_item);
}
/*** Add detail item ***/
string_map detail_item;
std::map<std::string, string_map> detail_page;
detail_item["label"] = campaign["description"];
detail_item["use_markup"] = "true";
detail_page.insert(std::make_pair("description", detail_item));
detail_item["label"] = campaign["image"];
detail_page.insert(std::make_pair("image", detail_item));
multi_page.add_page(detail_page);
break; // FIXME remove
}
/*** Add detail item ***/
string_map detail_item;
std::map<std::string, string_map> detail_page;
// if(completed.empty()) {
completed.set_visible(twidget::INVISIBLE);
// }
detail_item["label"] = c["description"];
detail_item["use_markup"] = "true";
detail_page.insert(std::make_pair("description", detail_item));
if(not_completed.empty()) {
not_completed.set_visible(twidget::INVISIBLE);
}
detail_item["label"] = c["image"];
detail_page.insert(std::make_pair("image", detail_item));
} else {
/***** Setup campaign list. *****/
tlistbox& list = find_widget<tlistbox>(&window, "campaign_list", false);
multi_page.add_page(detail_page);
list.set_callback_value_change(dialog_callback
<tcampaign_selection, &tcampaign_selection::campaign_selected>);
window.keyboard_capture(&list);
/***** Setup campaign details. *****/
tmulti_page& multi_page = find_widget<tmulti_page>(
&window, "campaign_details", false);
foreach (const config &c, campaigns_) {
/*** Add list item ***/
string_map list_item;
std::map<std::string, string_map> list_item_item;
list_item["label"] = c["icon"];
list_item_item.insert(std::make_pair("icon", list_item));
list_item["label"] = c["name"];
list_item_item.insert(std::make_pair("name", list_item));
list.add_row(list_item_item);
tgrid* grid = list.get_row_grid(list.get_item_count() - 1);
assert(grid);
twidget* widget = grid->find("victory", false);
if(widget && !utils::string_bool(c["completed"], false)) {
widget->set_visible(twidget::HIDDEN);
}
/*** Add detail item ***/
string_map detail_item;
std::map<std::string, string_map> detail_page;
detail_item["label"] = c["description"];
detail_item["use_markup"] = "true";
detail_page.insert(std::make_pair("description", detail_item));
detail_item["label"] = c["image"];
detail_page.insert(std::make_pair("image", detail_item));
multi_page.add_page(detail_page);
}
}
campaign_selected(window);
}
void tcampaign_selection::post_show(twindow& window)
{
if(new_widgets) {
} else {
choice_ = find_widget<tlistbox>(
&window, "campaign_list", false).get_selected_row();
}
}
} // namespace gui2