Campaign Dialog: reimplement Mods section as an always-visible dropdown w/ checkboxes
This commit is contained in:
parent
d3c53e4f0d
commit
66b590b732
3 changed files with 199 additions and 199 deletions
|
@ -3,6 +3,129 @@
|
|||
### Definition of the window select the campaign to play
|
||||
###
|
||||
|
||||
#define _GUI_CAMPAIGN_TREE
|
||||
[tree_view]
|
||||
id = "campaign_tree"
|
||||
definition = "default"
|
||||
|
||||
horizontal_scrollbar_mode = "never"
|
||||
vertical_scrollbar_mode = "always"
|
||||
|
||||
indentation_step_size = 20
|
||||
|
||||
[node]
|
||||
id = "campaign"
|
||||
|
||||
[node_definition]
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
horizontal_grow = "true"
|
||||
|
||||
[toggle_panel]
|
||||
id = "tree_view_node_label"
|
||||
definition = "default"
|
||||
|
||||
#horizontal_grow = "true"
|
||||
return_value_id = "ok"
|
||||
[grid]
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
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/blank-hex.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]
|
||||
|
||||
[/node_definition]
|
||||
|
||||
[/node]
|
||||
|
||||
[/tree_view]
|
||||
#enddef
|
||||
|
||||
[window]
|
||||
id = "campaign_selection"
|
||||
description = "Campaign selection dialog."
|
||||
|
@ -66,193 +189,63 @@
|
|||
[grid]
|
||||
|
||||
[row]
|
||||
grow_factor = 1
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_alignment = "left"
|
||||
[grid]
|
||||
|
||||
[tree_view]
|
||||
id = "campaign_tree"
|
||||
definition = "default"
|
||||
[row]
|
||||
grow_factor = 1
|
||||
|
||||
horizontal_scrollbar_mode = "never"
|
||||
vertical_scrollbar_mode = "always"
|
||||
[column]
|
||||
grow_factor = 0
|
||||
|
||||
indentation_step_size = 20
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_grow = true
|
||||
|
||||
[node]
|
||||
id = "campaign_group"
|
||||
unfolded = true
|
||||
|
||||
[node_definition]
|
||||
{_GUI_CAMPAIGN_TREE}
|
||||
|
||||
[row]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
[/row]
|
||||
|
||||
[toggle_button]
|
||||
id = "tree_view_node_icon"
|
||||
definition = "tree_view_node"
|
||||
[/toggle_button]
|
||||
[row]
|
||||
|
||||
[/column]
|
||||
[column]
|
||||
grow_factor = 1
|
||||
horizontal_grow = true
|
||||
border = "all"
|
||||
border_size = 5
|
||||
|
||||
[column]
|
||||
grow_factor = 1
|
||||
horizontal_grow = "true"
|
||||
[label]
|
||||
definition = "default"
|
||||
label = _ "Modifications"
|
||||
[/label]
|
||||
|
||||
[label]
|
||||
id = "tree_view_node_label"
|
||||
label = "group"
|
||||
[/label]
|
||||
[/column]
|
||||
|
||||
[/column]
|
||||
[/row]
|
||||
|
||||
[/row]
|
||||
[row]
|
||||
|
||||
[/node_definition]
|
||||
[column]
|
||||
grow_factor = 1
|
||||
horizontal_grow = true
|
||||
border = "all"
|
||||
border_size = 5
|
||||
|
||||
[/node]
|
||||
[menu_button]
|
||||
id = "mods_menu"
|
||||
definition = "default"
|
||||
[/menu_button]
|
||||
|
||||
[node]
|
||||
id = "modification"
|
||||
[/column]
|
||||
|
||||
[node_definition]
|
||||
[/row]
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_grow = "true"
|
||||
|
||||
[toggle_button]
|
||||
id = "checkb"
|
||||
definition = "default"
|
||||
[/toggle_button]
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[/node_definition]
|
||||
|
||||
[/node]
|
||||
|
||||
[node]
|
||||
id = "campaign"
|
||||
|
||||
[node_definition]
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
horizontal_grow = "true"
|
||||
|
||||
[toggle_panel]
|
||||
id = "tree_view_node_label"
|
||||
definition = "default"
|
||||
|
||||
# horizontal_grow = "true"
|
||||
return_value_id = "ok"
|
||||
[grid]
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
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/blank-hex.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]
|
||||
|
||||
[/node_definition]
|
||||
|
||||
[/node]
|
||||
|
||||
[/tree_view]
|
||||
[/grid]
|
||||
|
||||
[/column]
|
||||
|
||||
|
@ -410,3 +403,5 @@
|
|||
[/resolution]
|
||||
|
||||
[/window]
|
||||
|
||||
#undef _GUI_CAMPAIGN_TREE
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "gui/dialogs/campaign_selection.hpp"
|
||||
|
||||
#include "config_assign.hpp"
|
||||
#include "game_preferences.hpp"
|
||||
#include "gui/auxiliary/find_widget.hpp"
|
||||
#include "gui/dialogs/helper.hpp"
|
||||
|
@ -27,6 +28,7 @@
|
|||
#else
|
||||
#include "gui/widgets/listbox.hpp"
|
||||
#endif
|
||||
#include "gui/widgets/menu_button.hpp"
|
||||
#include "gui/widgets/multi_page.hpp"
|
||||
#include "gui/widgets/scroll_label.hpp"
|
||||
#include "gui/widgets/settings.hpp"
|
||||
|
@ -40,6 +42,8 @@
|
|||
#include "utils/functional.hpp"
|
||||
#include "video.hpp"
|
||||
|
||||
#include <boost/dynamic_bitset.hpp>
|
||||
|
||||
namespace gui2
|
||||
{
|
||||
namespace dialogs
|
||||
|
@ -160,38 +164,26 @@ void campaign_selection::pre_show(window& window)
|
|||
pages.add_page(data);
|
||||
}
|
||||
|
||||
//
|
||||
// Set up Mods selection dropdown
|
||||
//
|
||||
menu_button& mods_menu = find_widget<menu_button>(&window, "mods_menu", false);
|
||||
|
||||
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<config> mod_menu_values;
|
||||
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();
|
||||
const bool active = std::find(enabled.begin(), enabled.end(), mod->id) != enabled.end();
|
||||
|
||||
bool active = std::find(enabled.begin(), enabled.end(), mod->id) != enabled.end();
|
||||
|
||||
/*** Add tree item ***/
|
||||
item["label"] = mod->name;
|
||||
data.emplace("checkb", item);
|
||||
|
||||
tree_view_node& node = mods_node.add_child("modification", data);
|
||||
|
||||
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;
|
||||
mod_menu_values.push_back(config_of("label", mod->name)("checkbox", active));
|
||||
}
|
||||
|
||||
mods_menu.set_values(mod_menu_values);
|
||||
} else {
|
||||
mods_menu.set_active(false);
|
||||
mods_menu.set_label(_("None"));
|
||||
}
|
||||
|
||||
campaign_selected(window);
|
||||
|
@ -220,10 +212,24 @@ void campaign_selection::post_show(window& window)
|
|||
|
||||
deterministic_ = find_widget<toggle_button>(&window, "checkbox_deterministic", false).get_value_bool();
|
||||
|
||||
/* NOTE: it might be worth adding an ability to specify callback functions for drop down menu
|
||||
* checkboxes but for now this works. I'm leaving mod_toggled() as its own function for now in
|
||||
* case I want to implement such a thing later.
|
||||
*
|
||||
* Also, this needs to be done before calling preferences::set_modifications.
|
||||
* - vultraz 2/14/2017
|
||||
*/
|
||||
boost::dynamic_bitset<> toggled_mods = find_widget<menu_button>(&window, "mods_menu", false).get_toggle_states();
|
||||
for(unsigned i = 0; i < toggled_mods.size(); i++) {
|
||||
if(toggled_mods[i]) {
|
||||
mod_toggled(i);
|
||||
}
|
||||
}
|
||||
|
||||
preferences::set_modifications(engine_.active_mods(), false);
|
||||
}
|
||||
|
||||
void campaign_selection::mod_toggled(int id, widget &)
|
||||
void campaign_selection::mod_toggled(int id /*, widget &*/)
|
||||
{
|
||||
engine_.set_current_mod_index(id);
|
||||
engine_.toggle_current_mod();
|
||||
|
|
|
@ -27,10 +27,10 @@ namespace dialogs
|
|||
class campaign_selection : public modal_dialog
|
||||
{
|
||||
public:
|
||||
explicit campaign_selection(ng::create_engine& eng) :
|
||||
engine_(eng),
|
||||
choice_(-1),
|
||||
deterministic_(false)
|
||||
explicit campaign_selection(ng::create_engine& eng)
|
||||
: engine_(eng)
|
||||
, choice_(-1)
|
||||
, deterministic_(false)
|
||||
{
|
||||
set_restore(true);
|
||||
}
|
||||
|
@ -62,8 +62,7 @@ private:
|
|||
/** Inherited from modal_dialog. */
|
||||
void post_show(window& window);
|
||||
|
||||
|
||||
void mod_toggled(int id, widget &);
|
||||
void mod_toggled(int id /*, widget&*/);
|
||||
|
||||
ng::create_engine& engine_;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue