void controller_base::execute_command(int command, const std::string& sparam) { if (!can_execute_command(command, sparam)) { return; } return execute_command2(command, sparam); }
void command_executor::show_menu(const std::vector<std::string>& items_arg, int xloc, int yloc, bool context_menu, display& gui) { std::vector<std::string> items = items_arg; if (items.empty()) return; if (can_execute_command(hotkey::get_hotkey(items.front()).get_id(), 0)){ //if just one item is passed in, that means we should execute that item if(!context_menu && items.size() == 1 && items_arg.size() == 1) { hotkey::execute_command(gui,hotkey::get_hotkey(items.front()).get_id(),this); return; } std::vector<std::string> menu = get_menu_images(gui, items); int res = 0; { gui::dialog mmenu = gui::dialog(gui,"","", gui::MESSAGE, gui::dialog::hotkeys_style); #ifdef USE_TINY_GUI mmenu.set_menu_bigger(menu); #else mmenu.set_menu(menu); #endif res = mmenu.show(xloc, yloc); } // this will kill the dialog if (res < 0 || size_t(res) >= items.size()) return; const hotkey::HOTKEY_COMMAND cmd = hotkey::get_hotkey(items[res]).get_id(); hotkey::execute_command(gui,cmd,this,res); } }
void play_controller::hotkey_handler::show_menu(const std::vector<std::string>& items_arg, int xloc, int yloc, bool context_menu, display& disp) { if (context_menu) { last_context_menu_x_ = xloc; last_context_menu_y_ = yloc; } std::vector<std::string> items = items_arg; const hotkey::hotkey_command* cmd; std::vector<std::string>::iterator i = items.begin(); while(i != items.end()) { if (*i == "AUTOSAVES") { // Autosave visibility is similar to LOAD_GAME hotkey cmd = &hotkey::hotkey_command::get_command_by_command(hotkey::HOTKEY_LOAD_GAME); } else { cmd = &hotkey::get_hotkey_command(*i); } // Remove commands that can't be executed or don't belong in this type of menu if(*i != "wml" && (!can_execute_command(*cmd) || (context_menu && !in_context_menu(cmd->id)))) { i = items.erase(i); continue; } ++i; } // Add special non-hotkey items to the menu and remember their indices expand_autosaves(items); expand_wml_commands(items); if(items.empty()) return; command_executor::show_menu(items, xloc, yloc, context_menu, disp); }
void controller_base::execute_action(const std::vector<std::string>& items_arg, int xloc, int yloc, bool context_menu) { std::vector<std::string> items; BOOST_FOREACH(const std::string& item, items_arg) { const hotkey::hotkey_command& command = hotkey::get_hotkey_command(item); if(can_execute_command(command)) items.push_back(item); } if(items.empty()) return; command_executor::execute_action(items, xloc, yloc, context_menu, get_display()); }
void command_executor::execute_action(const std::vector<std::string>& items_arg, int /*xloc*/, int /*yloc*/, bool /*context_menu*/, display&) { std::vector<std::string> items = items_arg; if (items.empty()) { return; } std::vector<std::string>::iterator i = items.begin(); while(i != items.end()) { const hotkey_command &command = hotkey::get_hotkey_command(*i); if (can_execute_command(command)) { hotkey::execute_command(command, this); set_button_state(); } ++i; } }
void controller_base::show_menu(const std::vector<std::string>& items_arg, int xloc, int yloc, bool context_menu, display& disp) { std::vector<std::string> items = items_arg; std::vector<std::string>::iterator i = items.begin(); while(i != items.end()) { const hotkey::hotkey_command& command = hotkey::get_hotkey_command(*i); if(!can_execute_command(command) || (context_menu && !in_context_menu(command.id))) { i = items.erase(i); continue; } ++i; } if(items.empty()) return; command_executor::show_menu(items, xloc, yloc, context_menu, disp); }
void play_controller::hotkey_handler::show_menu(const std::vector<std::string>& items_arg, int xloc, int yloc, bool context_menu, display& disp) { if (context_menu) { last_context_menu_x_ = xloc; last_context_menu_y_ = yloc; } std::vector<std::string> items = items_arg; const hotkey::hotkey_command* cmd; std::vector<std::string>::iterator i = items.begin(); while(i != items.end()) { if (*i == "AUTOSAVES") { // Autosave visibility is similar to LOAD_GAME hotkey cmd = &hotkey::hotkey_command::get_command_by_command(hotkey::HOTKEY_LOAD_GAME); } else { cmd = &hotkey::get_hotkey_command(*i); } // Remove WML commands if they would not be allowed here if(*i == "wml") { if(!context_menu || !viewing_team_is_playing() || events::commands_disabled || !viewing_team().is_local_human() || (linger() && !game_config::debug)){ i = items.erase(i); continue; } // Remove commands that can't be executed or don't belong in this type of menu } else if(!can_execute_command(*cmd) || (context_menu && !in_context_menu(cmd->id))) { i = items.erase(i); continue; } ++i; } // Add special non-hotkey items to the menu and remember their indices expand_autosaves(items); expand_wml_commands(items); if(items.empty()) return; command_executor::show_menu(items, xloc, yloc, context_menu, disp); }
void command_executor_default::set_button_state() { display& disp = get_display(); for (const theme::menu& menu : disp.get_theme().menus()) { std::shared_ptr<gui::button> button = disp.find_menu_button(menu.get_id()); if (!button) continue; bool enabled = false; for (const std::string& command : menu.items()) { const hotkey::hotkey_command& command_obj = hotkey::get_hotkey_command(command); bool can_execute = can_execute_command(command_obj); if (can_execute) { enabled = true; break; } } button->enable(enabled); } for (const theme::action& action : disp.get_theme().actions()) { std::shared_ptr<gui::button> button = disp.find_action_button(action.get_id()); if (!button) continue; bool enabled = false; int i = 0; for (const std::string& command : action.items()) { const hotkey::hotkey_command& command_obj = hotkey::get_hotkey_command(command); std::string tooltip = action.tooltip(i); if (filesystem::file_exists(game_config::path + "/images/icons/action/" + command + "_25.png" )) button->set_overlay("icons/action/" + command); if (!tooltip.empty()) button->set_tooltip_string(tooltip); bool can_execute = can_execute_command(command_obj); i++; if (!can_execute) continue; enabled = true; ACTION_STATE state = get_action_state(command_obj.id, -1); switch (state) { case ACTION_SELECTED: case ACTION_ON: button->set_check(true); break; case ACTION_OFF: case ACTION_DESELECTED: button->set_check(false); break; case ACTION_STATELESS: break; default: break; } break; } button->enable(enabled); } }