# HG changeset patch # User zuu # Date 2013-09-13 12:45:25 # Node ID e079a68ef17912c936a40cf85c558b35b20236c0 # Parent b148e5c6c40647ff7c745afd85fc1154bef1da84 (svn r25761) -Change: Disable story/goal buttons when there is no content to show instead of when there is zero companies diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -34,6 +34,8 @@ #include "vehicle_func.h" #include "smallmap_gui.h" #include "game/game.hpp" +#include "goal_base.h" +#include "story_base.h" #include "table/strings.h" @@ -934,6 +936,8 @@ CommandCost CmdCompanyCtrl(TileIndex til AI::BroadcastNewEvent(new ScriptEventCompanyBankrupt(c_index)); Game::NewEvent(new ScriptEventCompanyBankrupt(c_index)); CompanyAdminRemove(c_index, (CompanyRemoveReason)reason); + + if (StoryPage::GetNumItems() == 0 || Goal::GetNumItems() == 0) InvalidateWindowData(WC_MAIN_TOOLBAR, 0); break; } diff --git a/src/goal.cpp b/src/goal.cpp --- a/src/goal.cpp +++ b/src/goal.cpp @@ -85,6 +85,7 @@ CommandCost CmdCreateGoal(TileIndex tile g->completed = false; InvalidateWindowData(WC_GOALS_LIST, 0); + if (Goal::GetNumItems() == 1) InvalidateWindowData(WC_MAIN_TOOLBAR, 0); _new_goal_id = g->index; } @@ -111,6 +112,7 @@ CommandCost CmdRemoveGoal(TileIndex tile delete g; InvalidateWindowData(WC_GOALS_LIST, 0); + if (Goal::GetNumItems() == 0) InvalidateWindowData(WC_MAIN_TOOLBAR, 0); } return CommandCost(); diff --git a/src/lang/english.txt b/src/lang/english.txt --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2042,6 +2042,7 @@ STR_NETWORK_CLIENT STR_NETWORK_SPECTATORS :Spectators STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give +STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Spectator # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Do not save the entered password diff --git a/src/story.cpp b/src/story.cpp --- a/src/story.cpp +++ b/src/story.cpp @@ -128,6 +128,7 @@ CommandCost CmdCreateStoryPage(TileIndex } InvalidateWindowClassesData(WC_STORY_BOOK, -1); + if (StoryPage::GetNumItems() == 1) InvalidateWindowData(WC_MAIN_TOOLBAR, 0); _new_story_page_id = s->index; _story_page_next_sort_value++; @@ -300,6 +301,7 @@ CommandCost CmdRemoveStoryPage(TileIndex delete p; InvalidateWindowClassesData(WC_STORY_BOOK, -1); + if (StoryPage::GetNumItems() == 0) InvalidateWindowData(WC_MAIN_TOOLBAR, 0); } return CommandCost(); diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -44,6 +44,8 @@ #include "engine_base.h" #include "highscore.h" #include "game/game.hpp" +#include "goal_base.h" +#include "story_base.h" #include "widgets/toolbar_widget.h" @@ -192,23 +194,36 @@ static void PopupMainToolbMenu(Window *w static const int CTMN_CLIENT_LIST = -1; ///< Show the client list static const int CTMN_NEW_COMPANY = -2; ///< Create a new company static const int CTMN_SPECTATE = -3; ///< Become spectator +static const int CTMN_SPECTATOR = -4; ///< Show a company window as spectator /** * Pop up a generic company list menu. + * @param w The toolbar window. + * @param widget The button widget id. + * @param grey A bitbask of which items to mark as disabled. + * @param include_spectator If true, a spectator option is included in the list. */ -static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0) +static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0, bool include_spectator = false) { DropDownList *list = new DropDownList(); #ifdef ENABLE_NETWORK - if (widget == WID_TN_COMPANIES && _networking) { - /* Add the client list button for the companies menu */ - list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST, false)); + if (_networking) { + if (widget == WID_TN_COMPANIES) { + /* Add the client list button for the companies menu */ + list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST, false)); + } - if (_local_company == COMPANY_SPECTATOR) { - list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_NEW_COMPANY, CTMN_NEW_COMPANY, NetworkMaxCompaniesReached())); - } else { - list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, NetworkMaxSpectatorsReached())); + if (include_spectator) { + if (widget == WID_TN_COMPANIES) { + if (_local_company == COMPANY_SPECTATOR) { + list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_NEW_COMPANY, CTMN_NEW_COMPANY, NetworkMaxCompaniesReached())); + } else { + list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, NetworkMaxSpectatorsReached())); + } + } else { + list->push_back(new DropDownListStringItem(STR_NETWORK_TOOLBAR_LIST_SPECTATOR, CTMN_SPECTATOR, false)); + } } } #endif /* ENABLE_NETWORK */ @@ -565,7 +580,7 @@ static CallBackFunction MenuClickFinance static CallBackFunction ToolbarCompaniesClick(Window *w) { - PopupMainCompanyToolbMenu(w, WID_TN_COMPANIES); + PopupMainCompanyToolbMenu(w, WID_TN_COMPANIES, 0, true); return CBF_NONE; } @@ -611,7 +626,7 @@ static CallBackFunction MenuClickCompany static CallBackFunction ToolbarStoryClick(Window *w) { - PopupMainCompanyToolbMenu(w, WID_TN_STORY); + PopupMainCompanyToolbMenu(w, WID_TN_STORY, 0, true); return CBF_NONE; } @@ -623,7 +638,7 @@ static CallBackFunction ToolbarStoryClic */ static CallBackFunction MenuClickStory(int index) { - ShowStoryBook((CompanyID)index); + ShowStoryBook(index == CTMN_SPECTATOR ? INVALID_COMPANY : (CompanyID)index); return CBF_NONE; } @@ -631,7 +646,7 @@ static CallBackFunction MenuClickStory(i static CallBackFunction ToolbarGoalClick(Window *w) { - PopupMainCompanyToolbMenu(w, WID_TN_GOAL); + PopupMainCompanyToolbMenu(w, WID_TN_GOAL, 0, true); return CBF_NONE; } @@ -643,7 +658,7 @@ static CallBackFunction ToolbarGoalClick */ static CallBackFunction MenuClickGoal(int index) { - ShowGoalsList((CompanyID)index); + ShowGoalsList(index == CTMN_SPECTATOR ? INVALID_COMPANY : (CompanyID)index); return CBF_NONE; } @@ -1641,7 +1656,10 @@ struct MainToolbarWindow : Window { * Since enabled state is the default, just disable when needed */ this->SetWidgetsDisabledState(_local_company == COMPANY_SPECTATOR, WID_TN_RAILS, WID_TN_ROADS, WID_TN_WATER, WID_TN_AIR, WID_TN_LANDSCAPE, WIDGET_LIST_END); /* disable company list drop downs, if there are no companies */ - this->SetWidgetsDisabledState(Company::GetNumItems() == 0, WID_TN_STATIONS, WID_TN_FINANCES, WID_TN_TRAINS, WID_TN_ROADVEHS, WID_TN_SHIPS, WID_TN_AIRCRAFTS, WID_TN_STORY, WID_TN_GOAL, WIDGET_LIST_END); + this->SetWidgetsDisabledState(Company::GetNumItems() == 0, WID_TN_STATIONS, WID_TN_FINANCES, WID_TN_TRAINS, WID_TN_ROADVEHS, WID_TN_SHIPS, WID_TN_AIRCRAFTS, WIDGET_LIST_END); + + this->SetWidgetDisabledState(WID_TN_GOAL, Goal::GetNumItems() == 0); + this->SetWidgetDisabledState(WID_TN_STORY, StoryPage::GetNumItems() == 0); this->SetWidgetDisabledState(WID_TN_RAILS, !CanBuildVehicleInfrastructure(VEH_TRAIN)); this->SetWidgetDisabledState(WID_TN_AIR, !CanBuildVehicleInfrastructure(VEH_AIRCRAFT));