Campaign Dialog: code cleanup, including the removal of the old listbox code

This commit is contained in:
Charles Dang 2016-11-23 19:23:14 +11:00
parent dc2b40fd2f
commit b95be124e0
2 changed files with 142 additions and 352 deletions

View file

@ -68,126 +68,6 @@
[row]
grow_factor = 1
[column]
grow_factor = 0
horizontal_grow = "true"
[listbox]
id = "campaign_list"
definition = "default"
horizontal_scrollbar_mode = "never"
[list_definition]
[row]
[column]
grow_factor = 1
horizontal_grow = "true"
[toggle_panel]
id = "_toggle"
definition = "default"
return_value_id = "ok"
[grid]
[row]
[column]
grow_factor = 1
horizontal_grow = "true"
border = "all"
border_size = 5
vertical_alignment = "top"
[stacked_widget]
definition = "default"
linked_group = "icon_area"
[layer]
[row]
[column]
grow_factor = 1
horizontal_grow = "true"
border = "left"
border_size = 3
[image]
id = "victory"
definition = "default"
label = "misc/laurel.png"
[/image]
[/column]
[/row]
[/layer]
[layer]
[row]
[column]
grow_factor = 1
horizontal_grow = "true"
border = "left"
border_size = 3
[image]
id = "icon"
definition = "default"
label = "misc/laurel.png"
[/image]
[/column]
[/row]
[/layer]
[/stacked_widget]
[/column]
[column]
grow_factor = 1
horizontal_grow = "true"
border = "right"
border_size = 8
[label]
id = "name"
definition = "default"
linked_group = "name"
[/label]
[/column]
[/row]
[/grid]
[/toggle_panel]
[/column]
[/row]
[/list_definition]
[/listbox]
[/column]
[column]
grow_factor = 0
@ -207,6 +87,7 @@
[node]
id = "campaign_group"
unfolded = true
[node_definition]
[row]
@ -236,33 +117,27 @@
[/node_definition]
[/node]
[node]
id = "modification"
[node_definition]
[row]
[column]
[spacer]
width = 0
[/spacer]
[/column]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_grow = "true"
[toggle_button]
id = "checkb"
definition = "default"
[/toggle_button]
[/column]
[column]
grow_factor = 1
horizontal_grow = "true"
border = "right"
[spacer]
## width = 6
[/spacer]
[/column]
[/row]
[/node_definition]
[/node]
@ -292,60 +167,59 @@
border_size = 5
vertical_alignment = "top"
[stacked_widget]
definition = "default"
linked_group = "icon_area"
[stacked_widget]
definition = "default"
linked_group = "icon_area"
[layer]
[layer]
[row]
[row]
[column]
grow_factor = 1
horizontal_grow = "true"
[column]
grow_factor = 1
horizontal_grow = "true"
border = "left"
border_size = 3
border = "left"
border_size = 3
[image]
id = "victory"
definition = "default"
[image]
id = "victory"
definition = "default"
label = "misc/blank-hex.png"
[/image]
label = "misc/blank-hex.png"
[/image]
[/column]
[/column]
[/row]
[/row]
[/layer]
[/layer]
[layer]
[layer]
[row]
[row]
[column]
grow_factor = 1
horizontal_grow = "true"
[column]
grow_factor = 1
horizontal_grow = "true"
border = "left"
border_size = 3
border = "left"
border_size = 3
[image]
id = "icon"
definition = "default"
[image]
id = "icon"
definition = "default"
label = "misc/laurel.png"
[/image]
label = "misc/laurel.png"
[/image]
[/column]
[/column]
[/row]
[/row]
[/layer]
[/layer]
[/stacked_widget]
[/stacked_widget]
[/column]
@ -493,7 +367,7 @@
[/toggle_button]
[/column]
[column]
border = "all"
border_size = 5

View file

@ -55,8 +55,8 @@ namespace dialogs
*
* @begin{table}{dialog_widgets}
*
* campaign_list & & listbox & m &
* A listbox that contains all available campaigns. $
* campaign_tree & & tree_view & m &
* A tree_view that contains all available campaigns. $
*
* -icon & & image & o &
* The icon for the campaign. $
@ -86,35 +86,21 @@ REGISTER_DIALOG(campaign_selection)
void campaign_selection::campaign_selected(window& window)
{
if(new_widgets || true) {
tree_view& tree
= find_widget<tree_view>(&window, "campaign_tree", false);
tree_view& tree = find_widget<tree_view>(&window, "campaign_tree", false);
if(tree.empty()) {
return;
}
assert(tree.selected_item());
if(tree.selected_item()->id() != "") {
const unsigned choice
= lexical_cast<unsigned>(tree.selected_item()->id());
multi_page& pages
= find_widget<multi_page>(&window, "campaign_details", false);
pages.select_page(choice);
engine_.set_current_level(choice);
}
} else {
const int selected_row
= find_widget<listbox>(&window, "campaign_list", false)
.get_selected_row();
multi_page& pages
= find_widget<multi_page>(&window, "campaign_details", false);
pages.select_page(selected_row);
engine_.set_current_level(selected_row);
if(tree.empty()) {
return;
}
assert(tree.selected_item());
if(tree.selected_item()->id() != "") {
const unsigned choice = lexical_cast<unsigned>(tree.selected_item()->id());
multi_page& pages = find_widget<multi_page>(&window, "campaign_details", false);
pages.select_page(choice);
engine_.set_current_level(choice);
}
}
void campaign_selection::show_settings(CVideo& video) {
@ -124,149 +110,89 @@ void campaign_selection::show_settings(CVideo& video) {
void campaign_selection::pre_show(window& window)
{
if(new_widgets || true) {
/***** Setup campaign tree. *****/
tree_view& tree
= find_widget<tree_view>(&window, "campaign_tree", false);
/***** Setup campaign tree. *****/
tree_view& tree = find_widget<tree_view>(&window, "campaign_tree", false);
tree.set_selection_change_callback(
std::bind(&campaign_selection::campaign_selected,
this,
std::ref(window)));
tree.set_selection_change_callback(
std::bind(&campaign_selection::campaign_selected, this, std::ref(window)));
window.keyboard_capture(&tree);
window.keyboard_capture(&tree);
string_map tree_group_field;
std::map<std::string, string_map> tree_group_item;
/***** Setup campaign details. *****/
multi_page& pages
= find_widget<multi_page>(&window, "campaign_details", false);
/***** Setup campaign details. *****/
multi_page& pages = find_widget<multi_page>(&window, "campaign_details", false);
unsigned id = 0;
for(const auto & level : engine_.get_levels_by_type_unfiltered(ng::level::TYPE::SP_CAMPAIGN))
{
const config& campaign = level->data();
unsigned id = 0;
for(const auto & level : engine_.get_levels_by_type_unfiltered(ng::level::TYPE::SP_CAMPAIGN)) {
const config& campaign = level->data();
/*** Add tree item ***/
std::map<std::string, string_map> data;
string_map item;
item["label"] = campaign["icon"];
data.emplace("icon", item);
item["label"] = campaign["name"];
data.emplace("name", item);
item["label"] = campaign["completed"].to_bool() ? "misc/laurel.png" : "misc/blank-hex.png";
data.emplace("victory", item);
tree.add_node("campaign", data).set_id(std::to_string(id++));
/*** Add detail item ***/
item.clear();
data.clear();
item["label"] = campaign["description"];
item["use_markup"] = "true";
if(!campaign["description_alignment"].empty()) {
item["text_alignment"] = campaign["description_alignment"];
}
data.emplace("description", item);
item["label"] = campaign["image"];
data.emplace("image", item);
pages.add_page(data);
}
if(!engine_.get_const_extras_by_type(ng::create_engine::MOD).empty()) {
std::map<std::string, string_map> data;
string_map item;
item["label"] = "Modifications";
data.emplace("tree_view_node_label", item);
tree_view_node& mods_node = tree.add_node("campaign_group", data);
std::vector<std::string> enabled = engine_.active_mods();
id = 0;
for(const auto& mod : engine_.get_const_extras_by_type(ng::create_engine::MOD)) {
data.clear();
item.clear();
bool active = std::find(enabled.begin(), enabled.end(), mod->id) != enabled.end();
/*** Add tree item ***/
tree_group_field["label"] = campaign["icon"];
tree_group_item["icon"] = tree_group_field;
item["label"] = mod->name;
data.emplace("checkb", item);
tree_group_field["label"] = campaign["name"];
tree_group_item["name"] = tree_group_field;
tree_view_node& node = mods_node.add_child("modification", data);
tree_group_field["label"] = campaign["completed"].to_bool() ? "misc/laurel.png" : "misc/blank-hex.png";
tree_group_item["victory"] = tree_group_field;
toggle_button* checkbox = dynamic_cast<toggle_button*>(node.find("checkb", true));
VALIDATE(checkbox, missing_widget("checkb"));
tree.add_node("campaign", tree_group_item).set_id(std::to_string(id++));
checkbox->set_value(active);
checkbox->set_label(mod->name);
checkbox->set_callback_state_change(std::bind(&campaign_selection::mod_toggled, this, id, _1));
/*** 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";
if(!campaign["description_alignment"].empty()) {
detail_item["text_alignment"] = campaign["description_alignment"];
}
detail_page.emplace("description", detail_item);
detail_item["label"] = campaign["image"];
detail_page.emplace("image", detail_item);
pages.add_page(detail_page);
}
if (!engine_.get_const_extras_by_type(ng::create_engine::MOD).empty()) {
tree_group_field["label"] = "Modifications";
tree_group_item["tree_view_node_label"] = tree_group_field;
//tree_group_item["tree_view_node_label"] = tree_group_field;
tree_view_node& mods_node = tree.add_node("campaign_group", tree_group_item);
std::vector<std::string> enabled = engine_.active_mods();
id = 0;
tree_group_item.clear();
for(const auto& mod : engine_.get_const_extras_by_type(ng::create_engine::MOD))
{
bool active = std::find(enabled.begin(), enabled.end(), mod->id) != enabled.end();
/*** Add tree item ***/
tree_group_field["label"] = mod->name;
tree_group_item["checkb"] = tree_group_field;
tree_view_node & node = mods_node.add_child("modification", tree_group_item);
toggle_button* checkbox = dynamic_cast<toggle_button*>(node.find("checkb", true));
VALIDATE(checkbox, missing_widget("checkb"));
checkbox->set_value(active);
checkbox->set_label(mod->name);
checkbox->set_callback_state_change(std::bind(&campaign_selection::mod_toggled, this, id, _1));
++id;
}
}
} else {
/***** Hide the tree view. *****/
if(tree_view* tree
= find_widget<tree_view>(&window, "campaign_tree", false, false)) {
tree->set_visible(widget::visibility::invisible);
}
/***** Setup campaign list. *****/
listbox& list = find_widget<listbox>(&window, "campaign_list", false);
#ifdef GUI2_EXPERIMENTAL_LISTBOX
connect_signal_notify_modified(
list,
std::bind(&campaign_selection::campaign_selected,
this,
std::ref(window)));
#else
list.set_callback_value_change(
dialog_callback<campaign_selection,
&campaign_selection::campaign_selected>);
#endif
window.keyboard_capture(&list);
/***** Setup campaign details. *****/
multi_page& pages
= find_widget<multi_page>(&window, "campaign_details", false);
for(const auto & level : engine_.get_levels_by_type_unfiltered(ng::level::TYPE::SP_CAMPAIGN))
{
const config& campaign = level->data();
/*** Add list item ***/
string_map list_item;
std::map<std::string, string_map> list_item_item;
list_item["label"] = campaign["icon"];
list_item_item.emplace("icon", list_item);
list_item["label"] = campaign["name"];
list_item_item.emplace("name", list_item);
grid* grid = &list.add_row(list_item_item);
assert(grid);
widget* widget = grid->find("victory", false);
if(widget && !campaign["completed"].to_bool()) {
widget->set_visible(widget::visibility::hidden);
}
/*** Add detail item ***/
string_map detail_item;
std::map<std::string, string_map> detail_page;
detail_item["use_markup"] = "true";
detail_item["label"] = campaign["description"];
detail_page.emplace("description", detail_item);
detail_item["label"] = campaign["image"];
detail_page.emplace("image", detail_item);
pages.add_page(detail_page);
++id;
}
}
campaign_selected(window);
/***** Setup advanced settings button *****/
@ -280,30 +206,20 @@ void campaign_selection::pre_show(window& window)
void campaign_selection::post_show(window& window)
{
if(new_widgets || true) {
tree_view& tree
= find_widget<tree_view>(&window, "campaign_tree", false);
tree_view& tree = find_widget<tree_view>(&window, "campaign_tree", false);
if(tree.empty()) {
return;
}
assert(tree.selected_item());
if(tree.selected_item()->id() != "") {
choice_ = lexical_cast<unsigned>(tree.selected_item()->id());
}
deterministic_ = find_widget<toggle_button>(&window,
"checkbox_deterministic",
false).get_value_bool();
preferences::set_modifications(engine_.active_mods(), false);
} else {
choice_ = find_widget<listbox>(&window, "campaign_list", false)
.get_selected_row();
deterministic_ = find_widget<toggle_button>(&window,
"checkbox_deterministic",
false).get_value_bool();
if(tree.empty()) {
return;
}
assert(tree.selected_item());
if(tree.selected_item()->id() != "") {
choice_ = lexical_cast<unsigned>(tree.selected_item()->id());
}
deterministic_ = find_widget<toggle_button>(&window, "checkbox_deterministic", false).get_value_bool();
preferences::set_modifications(engine_.active_mods(), false);
}
void campaign_selection::mod_toggled(int id, widget &)