(svn r25761) -Change: Disable story/goal buttons when there is no content to show instead of when there is zero companies

This commit is contained in:
zuu 2013-09-13 12:45:25 +00:00
parent 6516afae50
commit 4e74a4c5cc
5 changed files with 41 additions and 14 deletions

View File

@ -34,6 +34,8 @@
#include "vehicle_func.h" #include "vehicle_func.h"
#include "smallmap_gui.h" #include "smallmap_gui.h"
#include "game/game.hpp" #include "game/game.hpp"
#include "goal_base.h"
#include "story_base.h"
#include "table/strings.h" #include "table/strings.h"
@ -934,6 +936,8 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
AI::BroadcastNewEvent(new ScriptEventCompanyBankrupt(c_index)); AI::BroadcastNewEvent(new ScriptEventCompanyBankrupt(c_index));
Game::NewEvent(new ScriptEventCompanyBankrupt(c_index)); Game::NewEvent(new ScriptEventCompanyBankrupt(c_index));
CompanyAdminRemove(c_index, (CompanyRemoveReason)reason); CompanyAdminRemove(c_index, (CompanyRemoveReason)reason);
if (StoryPage::GetNumItems() == 0 || Goal::GetNumItems() == 0) InvalidateWindowData(WC_MAIN_TOOLBAR, 0);
break; break;
} }

View File

@ -85,6 +85,7 @@ CommandCost CmdCreateGoal(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
g->completed = false; g->completed = false;
InvalidateWindowData(WC_GOALS_LIST, 0); InvalidateWindowData(WC_GOALS_LIST, 0);
if (Goal::GetNumItems() == 1) InvalidateWindowData(WC_MAIN_TOOLBAR, 0);
_new_goal_id = g->index; _new_goal_id = g->index;
} }
@ -111,6 +112,7 @@ CommandCost CmdRemoveGoal(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
delete g; delete g;
InvalidateWindowData(WC_GOALS_LIST, 0); InvalidateWindowData(WC_GOALS_LIST, 0);
if (Goal::GetNumItems() == 0) InvalidateWindowData(WC_MAIN_TOOLBAR, 0);
} }
return CommandCost(); return CommandCost();

View File

@ -2042,6 +2042,7 @@ STR_NETWORK_CLIENT :Client
STR_NETWORK_SPECTATORS :Spectators STR_NETWORK_SPECTATORS :Spectators
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give 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 # Network set password
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Do not save the entered password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Do not save the entered password

View File

@ -128,6 +128,7 @@ CommandCost CmdCreateStoryPage(TileIndex tile, DoCommandFlag flags, uint32 p1, u
} }
InvalidateWindowClassesData(WC_STORY_BOOK, -1); InvalidateWindowClassesData(WC_STORY_BOOK, -1);
if (StoryPage::GetNumItems() == 1) InvalidateWindowData(WC_MAIN_TOOLBAR, 0);
_new_story_page_id = s->index; _new_story_page_id = s->index;
_story_page_next_sort_value++; _story_page_next_sort_value++;
@ -300,6 +301,7 @@ CommandCost CmdRemoveStoryPage(TileIndex tile, DoCommandFlag flags, uint32 p1, u
delete p; delete p;
InvalidateWindowClassesData(WC_STORY_BOOK, -1); InvalidateWindowClassesData(WC_STORY_BOOK, -1);
if (StoryPage::GetNumItems() == 0) InvalidateWindowData(WC_MAIN_TOOLBAR, 0);
} }
return CommandCost(); return CommandCost();

View File

@ -44,6 +44,8 @@
#include "engine_base.h" #include "engine_base.h"
#include "highscore.h" #include "highscore.h"
#include "game/game.hpp" #include "game/game.hpp"
#include "goal_base.h"
#include "story_base.h"
#include "widgets/toolbar_widget.h" #include "widgets/toolbar_widget.h"
@ -192,23 +194,36 @@ static void PopupMainToolbMenu(Window *w, int widget, StringID string, int count
static const int CTMN_CLIENT_LIST = -1; ///< Show the client list 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_NEW_COMPANY = -2; ///< Create a new company
static const int CTMN_SPECTATE = -3; ///< Become spectator 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. * 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(); DropDownList *list = new DropDownList();
#ifdef ENABLE_NETWORK #ifdef ENABLE_NETWORK
if (widget == WID_TN_COMPANIES && _networking) { if (_networking) {
/* Add the client list button for the companies menu */ if (widget == WID_TN_COMPANIES) {
list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST, false)); /* 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) { if (include_spectator) {
list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_NEW_COMPANY, CTMN_NEW_COMPANY, NetworkMaxCompaniesReached())); if (widget == WID_TN_COMPANIES) {
} else { if (_local_company == COMPANY_SPECTATOR) {
list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, NetworkMaxSpectatorsReached())); 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 */ #endif /* ENABLE_NETWORK */
@ -565,7 +580,7 @@ static CallBackFunction MenuClickFinances(int index)
static CallBackFunction ToolbarCompaniesClick(Window *w) static CallBackFunction ToolbarCompaniesClick(Window *w)
{ {
PopupMainCompanyToolbMenu(w, WID_TN_COMPANIES); PopupMainCompanyToolbMenu(w, WID_TN_COMPANIES, 0, true);
return CBF_NONE; return CBF_NONE;
} }
@ -611,7 +626,7 @@ static CallBackFunction MenuClickCompany(int index)
static CallBackFunction ToolbarStoryClick(Window *w) static CallBackFunction ToolbarStoryClick(Window *w)
{ {
PopupMainCompanyToolbMenu(w, WID_TN_STORY); PopupMainCompanyToolbMenu(w, WID_TN_STORY, 0, true);
return CBF_NONE; return CBF_NONE;
} }
@ -623,7 +638,7 @@ static CallBackFunction ToolbarStoryClick(Window *w)
*/ */
static CallBackFunction MenuClickStory(int index) static CallBackFunction MenuClickStory(int index)
{ {
ShowStoryBook((CompanyID)index); ShowStoryBook(index == CTMN_SPECTATOR ? INVALID_COMPANY : (CompanyID)index);
return CBF_NONE; return CBF_NONE;
} }
@ -631,7 +646,7 @@ static CallBackFunction MenuClickStory(int index)
static CallBackFunction ToolbarGoalClick(Window *w) static CallBackFunction ToolbarGoalClick(Window *w)
{ {
PopupMainCompanyToolbMenu(w, WID_TN_GOAL); PopupMainCompanyToolbMenu(w, WID_TN_GOAL, 0, true);
return CBF_NONE; return CBF_NONE;
} }
@ -643,7 +658,7 @@ static CallBackFunction ToolbarGoalClick(Window *w)
*/ */
static CallBackFunction MenuClickGoal(int index) static CallBackFunction MenuClickGoal(int index)
{ {
ShowGoalsList((CompanyID)index); ShowGoalsList(index == CTMN_SPECTATOR ? INVALID_COMPANY : (CompanyID)index);
return CBF_NONE; return CBF_NONE;
} }
@ -1641,7 +1656,10 @@ struct MainToolbarWindow : Window {
* Since enabled state is the default, just disable when needed */ * 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); 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 */ /* 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_RAILS, !CanBuildVehicleInfrastructure(VEH_TRAIN));
this->SetWidgetDisabledState(WID_TN_AIR, !CanBuildVehicleInfrastructure(VEH_AIRCRAFT)); this->SetWidgetDisabledState(WID_TN_AIR, !CanBuildVehicleInfrastructure(VEH_AIRCRAFT));