Campaign Dialog: code cleanup, including the removal of the old listbox code
This commit is contained in:
parent
dc2b40fd2f
commit
b95be124e0
2 changed files with 142 additions and 352 deletions
|
@ -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
|
||||
|
|
|
@ -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 &)
|
||||
|
|
Loading…
Add table
Reference in a new issue