Skip to content

Commit

Permalink
GUI2: convert uses of 'state changed' callbacks to NOTIFY_MODIFIED si…
Browse files Browse the repository at this point in the history
…gnal handlers
  • Loading branch information
Vultraz committed Aug 23, 2017
1 parent 8050a63 commit 342ef8a
Show file tree
Hide file tree
Showing 14 changed files with 63 additions and 35 deletions.
2 changes: 1 addition & 1 deletion src/gui/auxiliary/field.hpp
Expand Up @@ -579,7 +579,7 @@ class field_bool : public field<bool, selectable_item>
callback_change_(*widget);
}

dynamic_cast<selectable_item*>(widget)->set_callback_state_change(callback_change_);
connect_signal_notify_modified(*widget, std::bind(callback_change_, _1));
}
}
}
Expand Down
8 changes: 6 additions & 2 deletions src/gui/dialogs/campaign_selection.cpp
Expand Up @@ -191,8 +191,12 @@ void campaign_selection::pre_show(window& window)

toggle_button& sort_name = find_widget<toggle_button>(&window, "sort_name", false);
toggle_button& sort_time = find_widget<toggle_button>(&window, "sort_time", false);
sort_name.set_callback_state_change(std::bind(&campaign_selection::toggle_sorting_selection, this, std::ref(window), NAME));
sort_time.set_callback_state_change(std::bind(&campaign_selection::toggle_sorting_selection, this, std::ref(window), DATE));

connect_signal_notify_modified(sort_name,
std::bind(&campaign_selection::toggle_sorting_selection, this, std::ref(window), NAME));

connect_signal_notify_modified(sort_time,
std::bind(&campaign_selection::toggle_sorting_selection, this, std::ref(window), DATE));

window.keyboard_capture(&tree);

Expand Down
2 changes: 1 addition & 1 deletion src/gui/dialogs/drop_down_menu.cpp
Expand Up @@ -154,7 +154,7 @@ void drop_down_menu::pre_show(window& window)
checkbox->set_value_bool(entry["checkbox"].to_bool(false));

if(callback_toggle_state_change_ != nullptr) {
checkbox->set_callback_state_change(std::bind(callback_toggle_state_change_));
connect_signal_notify_modified(*checkbox, std::bind(callback_toggle_state_change_));
}

grid* mi_grid = dynamic_cast<grid*>(new_row.find("menu_item", false));
Expand Down
5 changes: 2 additions & 3 deletions src/gui/dialogs/editor/resize_map.cpp
Expand Up @@ -128,9 +128,8 @@ void editor_resize_map::pre_show(window& window)
direction_buttons_[i]
= find_widget<toggle_button>(&window, name, false, true);

direction_buttons_[i]->set_callback_state_change(
dialog_callback<editor_resize_map,
&editor_resize_map::update_expand_direction>);
connect_signal_notify_modified(*direction_buttons_[i],
std::bind(&editor_resize_map::update_expand_direction, this, std::ref(window)));
}
direction_buttons_[0]->set_value(true);
update_expand_direction(window);
Expand Down
3 changes: 2 additions & 1 deletion src/gui/dialogs/label_settings.cpp
Expand Up @@ -103,7 +103,8 @@ void label_settings::pre_show(window& window) {

toggle_button& status = find_widget<toggle_button>(grid, "cat_status", false);
status.set_value(visible);
status.set_callback_state_change(std::bind(&label_settings::toggle_category, this, _1, category));

connect_signal_notify_modified(status, std::bind(&label_settings::toggle_category, this, _1, category));

if(category.substr(0,5) == "side:") {
label& cat_name = find_widget<label>(grid, "cat_name", false);
Expand Down
33 changes: 19 additions & 14 deletions src/gui/dialogs/lobby/lobby.cpp
Expand Up @@ -684,10 +684,11 @@ void mp_lobby::pre_show(window& window)
player_list_.sort_by_relation->set_value(preferences::playerlist_sort_relation());
player_list_.update_sort_icons();

player_list_.sort_by_name->set_callback_state_change(
std::bind(&mp_lobby::player_filter_callback, this, _1));
player_list_.sort_by_relation->set_callback_state_change(
std::bind(&mp_lobby::player_filter_callback, this, _1));
connect_signal_notify_modified(*player_list_.sort_by_name,
std::bind(&mp_lobby::player_filter_callback, this));

connect_signal_notify_modified(*player_list_.sort_by_relation,
std::bind(&mp_lobby::player_filter_callback, this));

window.set_enter_disabled(true);

Expand Down Expand Up @@ -742,14 +743,18 @@ void mp_lobby::pre_show(window& window)
filter_invert_ = find_widget<toggle_button>(&window, "filter_invert", false, true);
filter_text_ = find_widget<text_box>(&window, "filter_text", false, true);

filter_friends_->set_callback_state_change(
std::bind(&mp_lobby::game_filter_change_callback, this, _1));
filter_ignored_->set_callback_state_change(
std::bind(&mp_lobby::game_filter_change_callback, this, _1));
filter_slots_->set_callback_state_change(
std::bind(&mp_lobby::game_filter_change_callback, this, _1));
filter_invert_->set_callback_state_change(
std::bind(&mp_lobby::game_filter_change_callback, this, _1));
connect_signal_notify_modified(*filter_friends_,
std::bind(&mp_lobby::game_filter_change_callback, this));

connect_signal_notify_modified(*filter_ignored_,
std::bind(&mp_lobby::game_filter_change_callback, this));

connect_signal_notify_modified(*filter_slots_,
std::bind(&mp_lobby::game_filter_change_callback, this));

connect_signal_notify_modified(*filter_invert_,
std::bind(&mp_lobby::game_filter_change_callback, this));

connect_signal_pre_key_press(
*filter_text_,
std::bind(&mp_lobby::game_filter_keypress_callback, this, _5));
Expand Down Expand Up @@ -1062,7 +1067,7 @@ void mp_lobby::game_filter_keypress_callback(const SDL_Keycode key)
}
}

void mp_lobby::game_filter_change_callback(gui2::widget& /*widget*/)
void mp_lobby::game_filter_change_callback()
{
game_filter_reload();
update_gamelist_filter();
Expand All @@ -1073,7 +1078,7 @@ void mp_lobby::gamelist_change_callback(window& /*window*/)
update_selected_game();
}

void mp_lobby::player_filter_callback(gui2::widget& /*widget*/)
void mp_lobby::player_filter_callback()
{
player_list_.update_sort_icons();

Expand Down
4 changes: 2 additions & 2 deletions src/gui/dialogs/lobby/lobby.hpp
Expand Up @@ -138,13 +138,13 @@ class mp_lobby : public modal_dialog, public quit_confirmation, private plugin_e

void game_filter_reload();

void game_filter_change_callback(widget& widget);
void game_filter_change_callback();

void game_filter_keypress_callback(const SDL_Keycode key);

void gamelist_change_callback(window& window);

void player_filter_callback(widget& widget);
void player_filter_callback();

void user_dialog_callback(mp::user_info* info);

Expand Down
2 changes: 1 addition & 1 deletion src/gui/dialogs/multiplayer/mp_create_game.cpp
Expand Up @@ -247,7 +247,7 @@ void mp_create_game::pre_show(window& win)
mog_toggle.set_value_bool(true);
}

mog_toggle.set_callback_state_change(std::bind(&mp_create_game::on_mod_toggle, this, i));
connect_signal_notify_modified(mog_toggle, std::bind(&mp_create_game::on_mod_toggle, this, i));
}

connect_signal_notify_modified(mod_list, std::bind(&mp_create_game::on_mod_select, this, std::ref(win)));
Expand Down
3 changes: 2 additions & 1 deletion src/gui/dialogs/multiplayer/mp_options_helper.cpp
Expand Up @@ -238,7 +238,8 @@ void mp_options_helper::display_custom_options(const std::string& type, int node
std::tie(checkbox, val) = add_node_and_get_widget<toggle_button>(option_node, "option_checkbox", data, option_cfg);

checkbox->set_value(val.to_bool());
checkbox->set_callback_state_change(

connect_signal_notify_modified(*checkbox,
std::bind(&mp_options_helper::update_options_data_map<toggle_button>, this, checkbox, visible_options_.back()));

} else if(opt.key == "spacer") {
Expand Down
8 changes: 5 additions & 3 deletions src/gui/dialogs/preferences_dialog.cpp
Expand Up @@ -652,9 +652,11 @@ void preferences_dialog::post_build(window& window)

menu.set_use_markup(true);
menu.set_values(menu_data, selected);
menu.set_callback_state_change([=](widget& w) {
set(pref_name, option_ids[dynamic_cast<menu_button&>(w).get_value()]);
});

// We need to bind a lambda here since preferences::set is overloaded.
// A lambda alone would be more verbose because it'd need to specify all the parameters.
connect_signal_notify_modified(menu,
std::bind([=](widget& w) { set(pref_name, option_ids[dynamic_cast<menu_button&>(w).get_value()]); }, _1));

gui2::bind_status_label<menu_button>(main_grid, "setter", [](menu_button& m)->std::string {
return m.get_value_string();
Expand Down
6 changes: 4 additions & 2 deletions src/gui/widgets/generator.cpp
Expand Up @@ -1074,7 +1074,8 @@ selection::init(grid* g,
toggle_panel* panel = dynamic_cast<toggle_panel*>(widget);

if(btn) {
btn->set_callback_state_change(callback);
connect_signal_notify_modified(*btn, std::bind(callback, _1));

std::map<std::string, string_map>::const_iterator itor
= data.find(btn->id());

Expand All @@ -1085,7 +1086,8 @@ selection::init(grid* g,
btn->set_members(itor->second);
}
} else if(panel) {
panel->set_callback_state_change(callback);
connect_signal_notify_modified(*panel, std::bind(callback, _1));

panel->set_child_members(data);
} else if(child_grid) {
init(child_grid, data, callback);
Expand Down
2 changes: 1 addition & 1 deletion src/gui/widgets/group.hpp
Expand Up @@ -127,7 +127,7 @@ class group
};

for(auto& member : members_) {
member.second->set_callback_state_change(callback);
event::connect_signal_notify_modified(dynamic_cast<widget&>(*member.second), std::bind(callback, _1));
}
}

Expand Down
17 changes: 15 additions & 2 deletions src/gui/widgets/listbox.cpp
Expand Up @@ -532,16 +532,29 @@ void listbox::finalize(builder_grid_const_ptr header,
if(header) {
swap_grid(&get_grid(), content_grid(), header->build(), "_header_grid");
}

grid& p = find_widget<grid>(this, "_header_grid", false);

for(unsigned i = 0, max = std::max(p.get_cols(), p.get_rows()); i < max; ++i) {
if(selectable_item* selectable = find_widget<selectable_item>(&p, "sort_" + std::to_string(i), false, false)) {
selectable->set_callback_state_change(std::bind(&listbox::order_by_column, this, i, _1));
//
// TODO: I had to change this to case to a toggle_button in order to use a signal handler.
// Should probably look into a way to make it more general like it was before (used to be
// cast to selectable_item).
//
// vultraz - 8/23/2017
//
if(toggle_button* selectable = find_widget<toggle_button>(&p, "sort_" + std::to_string(i), false, false)) {
// Register callback to sort the list.
connect_signal_notify_modified(*selectable, std::bind(&listbox::order_by_column, this, i, _1));

if(orders_.size() < max ) {
orders_.resize(max);
}

orders_[i].first = selectable;
}
}

if(footer) {
swap_grid(&get_grid(), content_grid(), footer->build(), "_footer_grid");
}
Expand Down
3 changes: 2 additions & 1 deletion src/scripting/lua_gui2.cpp
Expand Up @@ -780,7 +780,8 @@ int intf_set_dialog_callback(lua_State* L)
static dialog_callback_wrapper wrapper;
c->connect_click_handler(std::bind(&dialog_callback_wrapper::forward, wrapper, w));
} else if(gui2::selectable_item* s = dynamic_cast<gui2::selectable_item*>(w)) {
s->set_callback_state_change(&dialog_callback);
// TODO: is this the correct way to do this?
connect_signal_notify_modified(dynamic_cast<gui2::widget&>(*s), std::bind(dialog_callback, _1));
}
#ifdef GUI2_EXPERIMENTAL_LISTBOX
else if(gui2::list_view* l = dynamic_cast<gui2::list_view*>(w)) {
Expand Down

0 comments on commit 342ef8a

Please sign in to comment.