diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index da60bb9f98..c93358828e 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -194,7 +194,7 @@ struct AIConfigWindow : public Window { case WID_AIC_LIST: { // Select a slot this->selected_slot = (CompanyID)this->vscroll->GetScrolledRowFromWidget(pt.y, this, widget); this->InvalidateData(); - if (click_count > 1 && this->selected_slot != INVALID_COMPANY) ShowScriptListWindow((CompanyID)this->selected_slot); + if (click_count > 1 && this->selected_slot != INVALID_COMPANY) ShowScriptListWindow((CompanyID)this->selected_slot, _ctrl_pressed); break; } @@ -217,7 +217,7 @@ struct AIConfigWindow : public Window { break; case WID_AIC_CHANGE: // choose other AI - ShowScriptListWindow((CompanyID)this->selected_slot); + ShowScriptListWindow((CompanyID)this->selected_slot, _ctrl_pressed); break; case WID_AIC_CONFIGURE: // change the settings for an AI diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index 566a219b20..cdac18e94c 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -249,12 +249,12 @@ struct GSConfigWindow : public Window { switch (widget) { case WID_GSC_GSLIST: { this->InvalidateData(); - if (click_count > 1 && _game_mode != GM_NORMAL) ShowScriptListWindow((CompanyID)OWNER_DEITY); + if (click_count > 1 && _game_mode != GM_NORMAL) ShowScriptListWindow((CompanyID)OWNER_DEITY, _ctrl_pressed); break; } case WID_GSC_CHANGE: // choose other Game Script - ShowScriptListWindow((CompanyID)OWNER_DEITY); + ShowScriptListWindow((CompanyID)OWNER_DEITY, _ctrl_pressed); break; case WID_GSC_CONTENT_DOWNLOAD: diff --git a/src/lang/english.txt b/src/lang/english.txt index 80c9dd9e3f..a0aec4db7b 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4584,6 +4584,7 @@ STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}The AIs STR_AI_CONFIG_HUMAN_PLAYER :Human player STR_AI_CONFIG_RANDOM_AI :Random AI STR_AI_CONFIG_NONE :(none) +STR_AI_CONFIG_NAME_VERSION :{RAW_STRING} {YELLOW}v{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Maximum no. competitors: {ORANGE}{COMMA} STR_AI_CONFIG_MOVE_UP :{BLACK}Move Up @@ -4597,7 +4598,7 @@ STR_AI_CONFIG_AI :{SILVER}AIs STR_AI_CONFIG_CHANGE_AI :{BLACK}Select AI STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Select Game Script -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Load another script +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Load another script. Ctrl+Click to show all available versions STR_AI_CONFIG_CONFIGURE :{BLACK}Configure STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configure the parameters of the Script diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 1a1bca2822..78f34f7646 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -54,19 +54,21 @@ struct ScriptListWindow : public Window { CompanyID slot; ///< The company we're selecting a new Script for. int line_height; ///< Height of a row in the matrix widget. Scrollbar *vscroll; ///< Cache of the vertical scrollbar. + bool show_all; ///< Whether to show all available versions. /** * Constructor for the window. * @param desc The description of the window. * @param slot The company we're changing the Script for. + * @param show_all Whether to show all available versions. */ - ScriptListWindow(WindowDesc *desc, CompanyID slot) : Window(desc), - slot(slot) + ScriptListWindow(WindowDesc *desc, CompanyID slot, bool show_all) : Window(desc), + slot(slot), show_all(show_all) { if (slot == OWNER_DEITY) { - this->info_list = Game::GetUniqueInfoList(); + this->info_list = this->show_all ? Game::GetInfoList() : Game::GetUniqueInfoList(); } else { - this->info_list = AI::GetUniqueInfoList(); + this->info_list = this->show_all ? AI::GetInfoList() : AI::GetUniqueInfoList(); } this->CreateNestedTree(); @@ -120,11 +122,14 @@ struct ScriptListWindow : public Window { DrawString(tr, this->slot == OWNER_DEITY ? STR_AI_CONFIG_NONE : STR_AI_CONFIG_RANDOM_AI, this->selected == -1 ? TC_WHITE : TC_ORANGE); tr.top += this->line_height; } + StringID str = this->show_all ? STR_AI_CONFIG_NAME_VERSION : STR_JUST_RAW_STRING; int i = 0; for (const auto &item : *this->info_list) { i++; if (this->vscroll->IsVisible(i)) { - DrawString(tr, item.second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE); + SetDParamStr(0, item.second->GetName()); + SetDParam(1, item.second->GetVersion()); + DrawString(tr, str, (this->selected == i - 1) ? TC_WHITE : TC_ORANGE); tr.top += this->line_height; } } @@ -262,13 +267,14 @@ static WindowDesc _script_list_desc( ); /** - * Open the AI list window to chose an AI for the given company slot. - * @param slot The slot to change the AI of. + * Open the Script list window to chose a script for the given company slot. + * @param slot The slot to change the script of. + * @param show_all Whether to show all available versions. */ -void ShowScriptListWindow(CompanyID slot) +void ShowScriptListWindow(CompanyID slot, bool show_all) { CloseWindowByClass(WC_SCRIPT_LIST); - new ScriptListWindow(&_script_list_desc, slot); + new ScriptListWindow(&_script_list_desc, slot, show_all); } diff --git a/src/script/script_gui.h b/src/script/script_gui.h index d892feef3a..1775d52489 100644 --- a/src/script/script_gui.h +++ b/src/script/script_gui.h @@ -13,7 +13,7 @@ #include "../company_type.h" #include "../textfile_type.h" -void ShowScriptListWindow(CompanyID slot); +void ShowScriptListWindow(CompanyID slot, bool show_all); Window *ShowScriptDebugWindow(CompanyID show_company = INVALID_COMPANY); void ShowScriptSettingsWindow(CompanyID slot); void ShowScriptTextfileWindow(TextfileType file_type, CompanyID slot);